Prevent browser creation in non-browsing profiles - extension APIs
Adds new browser factory function Browser::CreateIfAllowed, which checks
whether browser windows are allowed in the target context before
creating a browser instance. It will return nullptr if creating a
browser window is not allowed, for example when attempting to create a
browser in Chrome OS sign-in profile, or system profile.
The cl utilizes the new function in extensions tabs, windows and
runtime API.
Bug: 916859
Change-Id: I1a55025f51b83e9b512f9314ad77741ef80e1473
Reviewed-on: https://chromium-review.googlesource.com/c/1459521
Commit-Queue: Toni Baržić <[email protected]>
Reviewed-by: Scott Violet <[email protected]>
Reviewed-by: Devlin <[email protected]>
Reviewed-by: Michael Wasserman <[email protected]>
Cr-Commit-Position: refs/heads/master@{#635277}
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc
index b6fdacf3..5d5e34f 100644
--- a/chrome/browser/extensions/extension_tab_util.cc
+++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -91,7 +91,11 @@
bool user_gesture,
std::string* error) {
Browser::CreateParams params(Browser::TYPE_TABBED, profile, user_gesture);
- Browser* browser = new Browser(params);
+ Browser* browser = Browser::Create(params);
+ if (!browser) {
+ *error = tabs_constants::kBrowserWindowNotAllowed;
+ return nullptr;
+ }
browser->window()->Show();
return browser;
}
@@ -226,7 +230,11 @@
if (!browser) {
Browser::CreateParams params =
Browser::CreateParams(Browser::TYPE_TABBED, profile, user_gesture);
- browser = new Browser(params);
+ browser = Browser::Create(params);
+ if (!browser) {
+ *error = tabs_constants::kBrowserWindowNotAllowed;
+ return nullptr;
+ }
browser->window()->Show();
}
}
@@ -653,8 +661,12 @@
const bool browser_created = !browser;
if (!browser) {
Browser::CreateParams params = Browser::CreateParams(profile, user_gesture);
- browser = new Browser(params);
+ browser = Browser::Create(params);
}
+
+ if (!browser)
+ return;
+
NavigateParams params(browser, std::move(web_contents));
// The extension_app_id parameter ends up as app_name in the Browser
@@ -706,7 +718,9 @@
DCHECK(!profile->IsOffTheRecord() || IncognitoInfo::IsSplitMode(extension));
Browser* browser = chrome::FindBrowserWithProfile(profile);
if (!browser)
- browser = new Browser(Browser::CreateParams(profile, true));
+ browser = Browser::Create(Browser::CreateParams(profile, true));
+ if (!browser)
+ return false;
return extensions::ExtensionTabUtil::OpenOptionsPage(extension, browser);
}