Bookmark manager: Open in incognito window.
Make IsIncognitoEnabled take an Extension* as an argument as well and use that where possible.
BUG=4890
TEST=Select one more bookmarks and right click/tools and select "Open in incognito". The bookmarks should open in an incognito window.
Review URL: http://codereview.chromium.org/750001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41193 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/cocoa/extensions/browser_actions_controller.mm b/chrome/browser/cocoa/extensions/browser_actions_controller.mm
index 2294c19e..2da1554a 100644
--- a/chrome/browser/cocoa/extensions/browser_actions_controller.mm
+++ b/chrome/browser/cocoa/extensions/browser_actions_controller.mm
@@ -413,8 +413,7 @@
- (bool)shouldDisplayBrowserAction:(Extension*)extension {
return (!profile_->IsOffTheRecord() ||
- profile_->GetExtensionsService()->
- IsIncognitoEnabled(extension->id()));
+ profile_->GetExtensionsService()->IsIncognitoEnabled(extension));
}
- (CGFloat)savedWidth {
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index 5261a34a..9f7cdcf 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -74,7 +74,7 @@
// the defaults.
Extension* extension = service->extensions()->at(num_after - 1);
service->extension_prefs()->OnExtensionInstalled(extension);
- service->SetIsIncognitoEnabled(extension->id(), true);
+ service->SetIsIncognitoEnabled(extension, true);
}
return WaitForExtensionHostsToLoad();
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc
index 36f8651..fb380a1 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.cc
+++ b/chrome/browser/extensions/extension_function_dispatcher.cc
@@ -285,7 +285,7 @@
render_view_host->process()->id());
bool incognito_enabled =
- profile()->GetExtensionsService()->IsIncognitoEnabled(extension->id());
+ profile()->GetExtensionsService()->IsIncognitoEnabled(extension);
// Update the extension permissions. Doing this each time we create an EFD
// ensures that new processes are informed of permissions for newly installed
@@ -357,11 +357,12 @@
function->SetArgs(args);
function->set_request_id(request_id);
function->set_has_callback(has_callback);
- function->set_include_incognito(
- profile()->GetExtensionsService()->IsIncognitoEnabled(extension_id()));
-
ExtensionsService* service = profile()->GetExtensionsService();
DCHECK(service);
+ Extension* extension = service->GetExtensionById(extension_id(), false);
+ DCHECK(extension);
+ function->set_include_incognito(service->IsIncognitoEnabled(extension));
+
ExtensionsQuotaService* quota = service->quota_service();
if (quota->Assess(extension_id(), function, args, base::TimeTicks::Now())) {
function->Run();
diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc
index f243949..2dd23d47 100644
--- a/chrome/browser/extensions/extension_toolbar_model.cc
+++ b/chrome/browser/extensions/extension_toolbar_model.cc
@@ -192,7 +192,7 @@
int original_index = 0, i = 0;
for (ExtensionList::iterator iter = begin(); iter != end();
++iter, ++original_index) {
- if (service_->IsIncognitoEnabled((*iter)->id())) {
+ if (service_->IsIncognitoEnabled(*iter)) {
if (incognito_index == i)
break;
++i;
@@ -207,7 +207,7 @@
++iter, ++i) {
if (original_index == i)
break;
- if (service_->IsIncognitoEnabled((*iter)->id()))
+ if (service_->IsIncognitoEnabled(*iter))
++incognito_index;
}
return incognito_index;
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index b4373ec0..4e9cb548 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -580,16 +580,19 @@
return extension_prefs_->LastPingDay(extension_id);
}
-bool ExtensionsService::IsIncognitoEnabled(const std::string& extension_id) {
- return extension_prefs_->IsIncognitoEnabled(extension_id);
+bool ExtensionsService::IsIncognitoEnabled(const Extension* extension) {
+ // If this is a component extension we always allow it to work in incognito
+ // mode.
+ if (extension->location() == Extension::COMPONENT)
+ return true;
+
+ // Check the prefs.
+ return extension_prefs_->IsIncognitoEnabled(extension->id());
}
-void ExtensionsService::SetIsIncognitoEnabled(const std::string& extension_id,
+void ExtensionsService::SetIsIncognitoEnabled(Extension* extension,
bool enabled) {
- extension_prefs_->SetIsIncognitoEnabled(extension_id, enabled);
-
- Extension* extension = GetExtensionByIdInternal(extension_id, true, true);
- DCHECK(extension);
+ extension_prefs_->SetIsIncognitoEnabled(extension->id(), enabled);
// Broadcast unloaded and loaded events to update browser state.
NotifyExtensionUnloaded(extension);
diff --git a/chrome/browser/extensions/extensions_service.h b/chrome/browser/extensions/extensions_service.h
index ef7678f..3ab9d34 100644
--- a/chrome/browser/extensions/extensions_service.h
+++ b/chrome/browser/extensions/extensions_service.h
@@ -128,8 +128,8 @@
virtual base::Time LastPingDay(const std::string& extension_id);
// Whether this extension can run in an incognito window.
- bool IsIncognitoEnabled(const std::string& extension_id);
- void SetIsIncognitoEnabled(const std::string& extension_id, bool enabled);
+ bool IsIncognitoEnabled(const Extension* extension);
+ void SetIsIncognitoEnabled(Extension* extension, bool enabled);
const FilePath& install_directory() const { return install_directory_; }
diff --git a/chrome/browser/extensions/extensions_ui.cc b/chrome/browser/extensions/extensions_ui.cc
index 6f23280..00b658e 100644
--- a/chrome/browser/extensions/extensions_ui.cc
+++ b/chrome/browser/extensions/extensions_ui.cc
@@ -446,8 +446,10 @@
std::string extension_id, enable_str;
CHECK(list->GetString(0, &extension_id));
CHECK(list->GetString(1, &enable_str));
- extensions_service_->SetIsIncognitoEnabled(extension_id,
- (enable_str == "true"));
+ Extension* extension = extensions_service_->GetExtensionById(extension_id,
+ true);
+ DCHECK(extension);
+ extensions_service_->SetIsIncognitoEnabled(extension, (enable_str == "true"));
}
void ExtensionsDOMHandler::HandleUninstallMessage(const Value* value) {
@@ -715,7 +717,7 @@
extension_data->SetString(L"version", extension->version()->GetString());
extension_data->SetBoolean(L"enabled", enabled);
extension_data->SetBoolean(L"enabledIncognito",
- service ? service->IsIncognitoEnabled(extension->id()) : false);
+ service ? service->IsIncognitoEnabled(extension) : false);
extension_data->SetBoolean(L"allow_reload",
extension->location() == Extension::LOAD);
diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc
index db84280..36e0ff6 100644
--- a/chrome/browser/extensions/user_script_master.cc
+++ b/chrome/browser/extensions/user_script_master.cc
@@ -337,7 +337,7 @@
// Add any content scripts inside the extension.
Extension* extension = Details<Extension>(details).ptr();
bool incognito_enabled = profile_->GetExtensionsService()->
- IsIncognitoEnabled(extension->id());
+ IsIncognitoEnabled(extension);
const UserScriptList& scripts = extension->content_scripts();
for (UserScriptList::const_iterator iter = scripts.begin();
iter != scripts.end(); ++iter) {
diff --git a/chrome/browser/gtk/browser_actions_toolbar_gtk.cc b/chrome/browser/gtk/browser_actions_toolbar_gtk.cc
index dcea49d..78da006 100644
--- a/chrome/browser/gtk/browser_actions_toolbar_gtk.cc
+++ b/chrome/browser/gtk/browser_actions_toolbar_gtk.cc
@@ -375,8 +375,7 @@
Extension* extension) {
// Only display incognito-enabled extensions while in incognito mode.
return (!profile_->IsOffTheRecord() ||
- profile_->GetExtensionsService()->
- IsIncognitoEnabled(extension->id()));
+ profile_->GetExtensionsService()->IsIncognitoEnabled(extension));
}
void BrowserActionsToolbarGtk::HidePopup() {
diff --git a/chrome/browser/resources/bookmark_manager/main.html b/chrome/browser/resources/bookmark_manager/main.html
index b36b6c037..46d3251 100644
--- a/chrome/browser/resources/bookmark_manager/main.html
+++ b/chrome/browser/resources/bookmark_manager/main.html
@@ -1339,13 +1339,19 @@
return url[0] == '#' ? base + url : url;
});
- // Incognito mode is not yet supported by the extensions APIs.
- // http://code.google.com/p/chromium/issues/detail?id=12658
- if (kind == 'window') {
- chrome.windows.create({url: urls[0]}, function(window) {
+ var incognito = kind == 'incognito';
+ if (kind == 'window' || incognito) {
+ chrome.windows.create({
+ url: urls[0],
+ incognito: incognito
+ }, function(window) {
urls.forEach(function(url, i) {
if (i > 0)
- chrome.tabs.create({url: url, windowId: window.id, selected: false});
+ chrome.tabs.create({
+ url: url,
+ windowId: window.id,
+ selected: false
+ });
});
});
} else if (kind == 'tab') {
@@ -1497,7 +1503,7 @@
case 'open-in-new-window-command':
openBookmarks('window');
break;
- case 'open-in-new-incognito-command':
+ case 'open-incognito-window-command':
openBookmarks('incognito');
break;
case 'delete-command':
diff --git a/chrome/browser/views/browser_actions_container.cc b/chrome/browser/views/browser_actions_container.cc
index 7d14eae..3029c5d5 100644
--- a/chrome/browser/views/browser_actions_container.cc
+++ b/chrome/browser/views/browser_actions_container.cc
@@ -1161,6 +1161,5 @@
bool BrowserActionsContainer::ShouldDisplayBrowserAction(Extension* extension) {
// Only display incognito-enabled extensions while in incognito mode.
return (!profile_->IsOffTheRecord() ||
- profile_->GetExtensionsService()->
- IsIncognitoEnabled(extension->id()));
+ profile_->GetExtensionsService()->IsIncognitoEnabled(extension));
}