mirror of
https://github.com/bitwarden/browser
synced 2026-02-20 03:13:55 +00:00
[PM-19814] Phishing Detection Warning Popup UI (#16064)
* Add PhishingDetectionService
* Add a tab listener.
* Get the known phishing domain from the server
* Get the known phishing domain from the server
* Add phishing detection content script.
* Revert "Add phishing detection content script."
This reverts commit ce64d3435a.
* Fix conflicts
* Add build configs.
* Decouple the phishing detection content script logic from the rest of the app.
* move the call to background
* Add communication between the content script and background service.
* Update code to use Log service.
* Resolve conflict
* Add changes for phishing domain report
* Fix initializer order issue.
* Fix domain error.
* Account for no responses.
* Add exit functionality for onclick.
* Wrapped phishing detection feature behind feature flag (#13915)
* push changes for alert
* Removed browser logic for checking feature flag
* move the alert as dialog
* Add functionality to navigate back in history.
* [PM-19814] Add redirect to warning page when a phishing domain is detected.
* [PM-19814] Add the phishing warning page to the Angular popup.
* [PM-19814] Add functionality to display phishing host.
* [PM-19814] Add exit button and learn more link.
* [PM-19814] Add phishing detection feature flag.
* [PM-19814] Move phishing service to phishing directory
* [PM-19814] Add UI to display phishing URL.
* [PM-19814] Disable the URL input and populate it with the phishing URL.
* [PM-19814] Add phishing icon
* [PM-19814] Temporarily remove phishing reporting feature. It can be released separately in another ticket.
* [PM-19814] Clean up
* [PM-19814] Add types to the handlers.
* [PM-19814] Remove logic for handling authentication since the endpoint will be unauthenticated.
* [PM-19814] Fixed as many type issues as possible; added @ts-strict-ignore to the remaining ones.
* [PM-19814] Fix race condition in feature flag check.
* [PM-19814] Update wording for the marketing request.
* [PM-19814] Move phishing detection check from content script to webRequest.onCompleted listener.
* [PM-19814] Use webNavigation.onCompleted for redirect to ensure that the redirect only happens when they land on the page.
* [PM-19814] Remove unused code.
* [PM-19814] Fix merge conflict and update text based on product owner’s request
* [PM-19814] Fix merge conflict
* [PM-19814] Update text
* Resolve the message catalog entries
* Update file for consistent import and exports
* Update imports
* Update another import for BrowserPopupUtils
* Update the rest of the imports for BrowserPopupUtils
* Updates messages
* Rename files
* Current phishing block changes
* Use globalthis for chrome
* Add types file
* Update browser api to include tab navigation and close tab functions
* Update phishing detection to track multiple tabs and not trust info from content script
* Change chrome to browser.
* Fixed phishing detection checking previous url instead of current on navigation. Updated def flag for testing urls.
* Move phishing icon
* Fix chrome specific issues. Add comments to where BrowserApi should be used
* Fix command errors. Typecheck messages. Added guard for phishing detection messages
* Use concat map instead of merge map
* Unformat webfonts.scss file
* Fix lint and import errors
* Move phishing blocker files to dirt folder
* Rename background folder to services
* Add code ownership for phishing blocker
* Update text to use locales on phishing blocker learn more page
* Change navigation from using webapi to browser on updated event for safari support
* Update icon usage
* Fix type issues and add test file
* Fix linting error in test
---------
Co-authored-by: Jimmy Vo <huynhmaivo82@gmail.com>
Co-authored-by: Cy Okeke <cokeke@bitwarden.com>
Co-authored-by: Conner Turnbull <133619638+cturnbull-bitwarden@users.noreply.github.com>
Co-authored-by: Conner Turnbull <cturnbull@bitwarden.com>
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Co-authored-by: Tom <144813356+ttalty@users.noreply.github.com>
This commit is contained in:
@@ -212,6 +212,47 @@ export class BrowserApi {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes a browser tab with the given id
|
||||
*
|
||||
* @param tabId The id of the tab to close
|
||||
*/
|
||||
static async closeTab(tabId: number): Promise<void> {
|
||||
if (tabId) {
|
||||
if (BrowserApi.isWebExtensionsApi) {
|
||||
browser.tabs.remove(tabId).catch((error) => {
|
||||
throw new Error("[BrowserApi] Failed to remove current tab: " + error.message);
|
||||
});
|
||||
} else if (BrowserApi.isChromeApi) {
|
||||
chrome.tabs.remove(tabId).catch((error) => {
|
||||
throw new Error("[BrowserApi] Failed to remove current tab: " + error.message);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates a browser tab to the given URL
|
||||
*
|
||||
* @param tabId The id of the tab to navigate
|
||||
* @param url The URL to navigate to
|
||||
*/
|
||||
static async navigateTabToUrl(tabId: number, url: URL): Promise<void> {
|
||||
if (tabId) {
|
||||
if (BrowserApi.isWebExtensionsApi) {
|
||||
browser.tabs.update(tabId, { url: url.href }).catch((error) => {
|
||||
throw new Error("Failed to navigate tab to URL: " + error.message);
|
||||
});
|
||||
} else if (BrowserApi.isChromeApi) {
|
||||
chrome.tabs.update(tabId, { url: url.href }, () => {
|
||||
if (chrome.runtime.lastError) {
|
||||
throw new Error("Failed to navigate tab to URL: " + chrome.runtime.lastError.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static async tabsQuery(options: chrome.tabs.QueryInfo): Promise<chrome.tabs.Tab[]> {
|
||||
return new Promise((resolve) => {
|
||||
chrome.tabs.query(options, (tabs) => {
|
||||
@@ -233,7 +274,7 @@ export class BrowserApi {
|
||||
* Drop-in replacement for {@link BrowserApi.tabsQueryFirst}.
|
||||
*
|
||||
* Safari sometimes returns >1 tabs unexpectedly even when
|
||||
* specificing a `windowId` or `currentWindow: true` query option.
|
||||
* specifying a `windowId` or `currentWindow: true` query option.
|
||||
*
|
||||
* For all of these calls,
|
||||
* ```
|
||||
@@ -320,6 +361,14 @@ export class BrowserApi {
|
||||
chrome.tabs.sendMessage<TabMessage, T>(tabId, message, options, responseCallback);
|
||||
}
|
||||
|
||||
static getRuntimeURL(path: string): string {
|
||||
if (BrowserApi.isWebExtensionsApi) {
|
||||
return browser.runtime.getURL(path);
|
||||
} else if (BrowserApi.isChromeApi) {
|
||||
return chrome.runtime.getURL(path);
|
||||
}
|
||||
}
|
||||
|
||||
static async onWindowCreated(callback: (win: chrome.windows.Window) => any) {
|
||||
// FIXME: Make sure that is does not cause a memory leak in Safari or use BrowserApi.AddListener
|
||||
// and test that it doesn't break.
|
||||
|
||||
@@ -17,7 +17,7 @@ export const PopupWidthOptions = Object.freeze({
|
||||
type PopupWidthOptions = typeof PopupWidthOptions;
|
||||
export type PopupWidthOption = keyof PopupWidthOptions;
|
||||
|
||||
class BrowserPopupUtils {
|
||||
export default class BrowserPopupUtils {
|
||||
/**
|
||||
* Identifies if the popup is within the sidebar.
|
||||
*
|
||||
@@ -288,5 +288,3 @@ class BrowserPopupUtils {
|
||||
return parsedUrl.toString();
|
||||
}
|
||||
}
|
||||
|
||||
export default BrowserPopupUtils;
|
||||
|
||||
Reference in New Issue
Block a user