Move IncognitoSplitMode out of Extension Class

[email protected], [email protected], [email protected], [email protected]
(ben - gypis, chrome_content*client; thestig - c/b/media_galleries/; isherman - c/b/u/cocoa/location_bar/; dbeam - c/b/u/webui/)
BUG=159265


Review URL: https://chromiumcodereview.appspot.com/11882030

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@190297 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
index fc212a4..4f38bc28 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
@@ -30,6 +30,7 @@
 #include "chrome/common/extensions/api/icons/icons_handler.h"
 #include "chrome/common/extensions/background_info.h"
 #include "chrome/common/extensions/extension_icon_set.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_process_host.h"
@@ -321,7 +322,7 @@
   // Repeat for the incognito process, if applicable. Don't try to get
   // shell windows for incognito process.
   if (service->profile()->HasOffTheRecordProfile() &&
-      extension->incognito_split_mode()) {
+      IncognitoInfo::IsSplitMode(extension)) {
     process_manager = ExtensionSystem::Get(
         service->profile()->GetOffTheRecordProfile())->process_manager();
     GetInspectablePagesForExtensionProcess(
diff --git a/chrome/browser/extensions/api/messaging/message_service.cc b/chrome/browser/extensions/api/messaging/message_service.cc
index 6b9c1ab..be369e57 100644
--- a/chrome/browser/extensions/api/messaging/message_service.cc
+++ b/chrome/browser/extensions/api/messaging/message_service.cc
@@ -25,6 +25,7 @@
 #include "chrome/common/extensions/background_info.h"
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_messages.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/view_type.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
@@ -486,7 +487,7 @@
     // If the extension uses spanning incognito mode, make sure we're always
     // using the original profile since that is what the extension process
     // will use.
-    if (!extension->incognito_split_mode())
+    if (!IncognitoInfo::IsSplitMode(extension))
       profile = profile->GetOriginalProfile();
 
     if (lazy_background_task_queue_->ShouldEnqueueTask(profile, extension)) {
diff --git a/chrome/browser/extensions/api/preference/preference_helpers.cc b/chrome/browser/extensions/api/preference/preference_helpers.cc
index 739f401..55297dd 100644
--- a/chrome/browser/extensions/api/preference/preference_helpers.cc
+++ b/chrome/browser/extensions/api/preference/preference_helpers.cc
@@ -12,6 +12,7 @@
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_system.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/incognito_handler.h"
 
 namespace extensions {
 namespace preference_helpers {
@@ -98,7 +99,7 @@
     // TODO(bauerb): Only iterate over registered event listeners.
     if (router->ExtensionHasEventListener(extension_id, event_name) &&
         (*it)->HasAPIPermission(permission) &&
-        (!incognito || (*it)->incognito_split_mode() ||
+        (!incognito || IncognitoInfo::IsSplitMode(*it) ||
          extension_service->CanCrossIncognito(*it))) {
       // Inject level of control key-value.
       DictionaryValue* dict;
@@ -114,7 +115,7 @@
       //    incognito pref has not alredy been set
       Profile* restrict_to_profile = NULL;
       bool from_incognito = false;
-      if ((*it)->incognito_split_mode()) {
+      if (IncognitoInfo::IsSplitMode(*it)) {
         if (incognito && extension_service->IsIncognitoEnabled(extension_id)) {
           restrict_to_profile = profile->GetOffTheRecordProfile();
         } else if (!incognito &&
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index 7e9a659..3201c96 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -58,6 +58,7 @@
 #include "chrome/common/extensions/extension_l10n_util.h"
 #include "chrome/common/extensions/extension_manifest_constants.h"
 #include "chrome/common/extensions/extension_messages.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/extensions/message_bundle.h"
 #include "chrome/common/extensions/user_script.h"
 #include "chrome/common/pref_names.h"
@@ -1097,7 +1098,7 @@
   // We can't load extension URLs into incognito windows unless the extension
   // uses split mode. Special case to fall back to a tabbed window.
   if (url.SchemeIs(extensions::kExtensionScheme) &&
-      !GetExtension()->incognito_split_mode() &&
+      !extensions::IncognitoInfo::IsSplitMode(GetExtension()) &&
       browser->profile()->IsOffTheRecord()) {
     Profile* profile = browser->profile()->GetOriginalProfile();
     chrome::HostDesktopType desktop_type = browser->host_desktop_type();
diff --git a/chrome/browser/extensions/component_loader_unittest.cc b/chrome/browser/extensions/component_loader_unittest.cc
index 8923c5a..9b2b980 100644
--- a/chrome/browser/extensions/component_loader_unittest.cc
+++ b/chrome/browser/extensions/component_loader_unittest.cc
@@ -14,13 +14,15 @@
 #include "chrome/common/extensions/background_info.h"
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_set.h"
+#include "chrome/common/extensions/incognito_handler.h"
+#include "chrome/common/extensions/manifest_handler.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_pref_service_syncable.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "extensions/common/constants.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using extensions::Extension;
+namespace extensions {
 
 namespace {
 
@@ -72,8 +74,6 @@
 
 }  // namespace
 
-namespace extensions {
-
 class ComponentLoaderTest : public testing::Test {
  public:
   ComponentLoaderTest() :
@@ -82,8 +82,9 @@
       component_loader_(&extension_service_, &prefs_, &local_state_) {
   }
 
-  virtual void SetUp() {
+  virtual void SetUp() OVERRIDE {
     (new BackgroundManifestHandler)->Register();
+    (new IncognitoHandler)->Register();
 
     extension_path_ =
         GetBasePath().AppendASCII("good")
@@ -113,6 +114,11 @@
 #endif
   }
 
+  virtual void TearDown() OVERRIDE {
+    ManifestHandler::ClearRegistryForTesting();
+    testing::Test::TearDown();
+  }
+
  protected:
   MockExtensionService extension_service_;
   TestingPrefServiceSyncable prefs_;
diff --git a/chrome/browser/extensions/event_router.cc b/chrome/browser/extensions/event_router.cc
index 337f4f9..c21c4a36 100644
--- a/chrome/browser/extensions/event_router.cc
+++ b/chrome/browser/extensions/event_router.cc
@@ -32,6 +32,7 @@
 #include "chrome/common/extensions/background_info.h"
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_messages.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/view_type.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_process_host.h"
@@ -451,7 +452,7 @@
     }
 
     if (profile_->HasOffTheRecordProfile() &&
-        extension->incognito_split_mode()) {
+        IncognitoInfo::IsSplitMode(extension)) {
       if (MaybeLoadLazyBackgroundPageToDispatchEvent(
           profile_->GetOffTheRecordProfile(), extension, event)) {
         already_dispatched->insert(
diff --git a/chrome/browser/extensions/extension_fullscreen_apitest.cc b/chrome/browser/extensions/extension_fullscreen_apitest.cc
index 9bb9baa..87786789 100644
--- a/chrome/browser/extensions/extension_fullscreen_apitest.cc
+++ b/chrome/browser/extensions/extension_fullscreen_apitest.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/test/base/ui_test_utils.h"
 
-
 IN_PROC_BROWSER_TEST_F(ExtensionApiTest,
                        ExtensionFullscreenAccessFail) {
   // Test that fullscreen can be accessed from an extension without permission.
diff --git a/chrome/browser/extensions/extension_info_map.cc b/chrome/browser/extensions/extension_info_map.cc
index d3b3d42..0139fd9 100644
--- a/chrome/browser/extensions/extension_info_map.cc
+++ b/chrome/browser/extensions/extension_info_map.cc
@@ -6,6 +6,7 @@
 
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_set.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/common/constants.h"
@@ -97,7 +98,7 @@
 bool ExtensionInfoMap::CanCrossIncognito(const Extension* extension) const {
   // This is duplicated from ExtensionService :(.
   return IsIncognitoEnabled(extension->id()) &&
-      !extension->incognito_split_mode();
+      !extensions::IncognitoInfo::IsSplitMode(extension);
 }
 
 void ExtensionInfoMap::RegisterExtensionProcess(const std::string& extension_id,
diff --git a/chrome/browser/extensions/extension_pointer_lock_apitest.cc b/chrome/browser/extensions/extension_pointer_lock_apitest.cc
index 2762723..3bfeaf43 100644
--- a/chrome/browser/extensions/extension_pointer_lock_apitest.cc
+++ b/chrome/browser/extensions/extension_pointer_lock_apitest.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/test/base/ui_test_utils.h"
 
-
 IN_PROC_BROWSER_TEST_F(ExtensionApiTest,
                        ExtensionPointerLockAccessFail) {
   // Test that pointer lock cannot be accessed from an extension without
diff --git a/chrome/browser/extensions/extension_process_manager.cc b/chrome/browser/extensions/extension_process_manager.cc
index 0bb03f93..f529bed 100644
--- a/chrome/browser/extensions/extension_process_manager.cc
+++ b/chrome/browser/extensions/extension_process_manager.cc
@@ -28,6 +28,7 @@
 #include "chrome/common/extensions/background_info.h"
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_messages.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/extensions/manifest_handler.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
 #include "chrome/common/url_constants.h"
@@ -181,6 +182,7 @@
   }
 
   (new BackgroundManifestHandler())->Register();
+  (new extensions::IncognitoHandler())->Register();
 }
 
 ExtensionProcessManager::~ExtensionProcessManager() {
@@ -837,7 +839,7 @@
     const GURL& url,
     Browser* browser,
     chrome::ViewType view_type) {
-  if (extension->incognito_split_mode()) {
+  if (extensions::IncognitoInfo::IsSplitMode(extension)) {
     if (IsIncognitoEnabled(extension)) {
       return ExtensionProcessManager::CreateViewHost(extension, url,
                                                      browser, view_type);
@@ -855,7 +857,7 @@
 
 void IncognitoExtensionProcessManager::CreateBackgroundHost(
     const Extension* extension, const GURL& url) {
-  if (extension->incognito_split_mode()) {
+  if (extensions::IncognitoInfo::IsSplitMode(extension)) {
     if (IsIncognitoEnabled(extension))
       ExtensionProcessManager::CreateBackgroundHost(extension, url);
   } else {
@@ -870,8 +872,10 @@
   if (service) {
     const Extension* extension = service->extensions()->GetExtensionOrAppByURL(
         ExtensionURLInfo(url));
-    if (extension && !extension->incognito_split_mode())
+    if (extension &&
+        !extensions::IncognitoInfo::IsSplitMode(extension)) {
       return original_manager_->GetSiteInstanceForURL(url);
+    }
   }
   return ExtensionProcessManager::GetSiteInstanceForURL(url);
 }
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc
index 3423088..69ef52b 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -24,6 +24,7 @@
 #include "chrome/common/extensions/background_info.h"
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_file_util.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/extensions/web_accessible_resources_handler.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/resource_request_info.h"
@@ -257,7 +258,7 @@
   if (info->GetResourceType() == ResourceType::MAIN_FRAME) {
     const Extension* extension =
         extension_info_map->extensions().GetByID(extension_id);
-    return extension && extension->incognito_split_mode();
+    return extension && extensions::IncognitoInfo::IsSplitMode(extension);
   }
 
   return true;
diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc
index 48fffb6..e909031 100644
--- a/chrome/browser/extensions/extension_protocols_unittest.cc
+++ b/chrome/browser/extensions/extension_protocols_unittest.cc
@@ -6,12 +6,17 @@
 
 #include "base/file_util.h"
 #include "base/message_loop.h"
+#include "base/values.h"
 #include "chrome/browser/extensions/extension_info_map.h"
 #include "chrome/browser/extensions/extension_protocols.h"
 #include "chrome/common/extensions/api/icons/icons_handler.h"
 #include "chrome/common/extensions/extension_manifest_constants.h"
 #include "chrome/common/extensions/manifest_handler.h"
 #include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
+#include "chrome/common/extensions/incognito_handler.h"
+#include "chrome/common/extensions/manifest_handler.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/resource_request_info.h"
 #include "content/public/test/mock_resource_context.h"
@@ -70,12 +75,13 @@
         file_thread_(BrowserThread::FILE, &message_loop_),
         io_thread_(BrowserThread::IO, &message_loop_) {}
 
-  virtual void SetUp() {
+  virtual void SetUp() OVERRIDE {
+    testing::Test::SetUp();
     extension_info_map_ = new ExtensionInfoMap();
     net::URLRequestContext* request_context =
         resource_context_.GetRequestContext();
     old_factory_ = request_context->job_factory();
-
+    (new IncognitoHandler)->Register();
     (new IconsHandler)->Register();
   }
 
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 5098729..e6f28b7 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -85,6 +85,7 @@
 #include "chrome/common/extensions/extension_messages.h"
 #include "chrome/common/extensions/feature_switch.h"
 #include "chrome/common/extensions/features/feature.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/extensions/manifest.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
 #include "chrome/common/pref_names.h"
@@ -1638,7 +1639,7 @@
   // extensions only see events for a matching profile.
   CHECK(extension);
   return IsIncognitoEnabled(extension->id()) &&
-      !extension->incognito_split_mode();
+         !extensions::IncognitoInfo::IsSplitMode(extension);
 }
 
 bool ExtensionService::CanLoadInIncognito(const Extension* extension) const {
@@ -1646,7 +1647,7 @@
     return true;
   // Packaged apps and regular extensions need to be enabled specifically for
   // incognito (and split mode should be set).
-  return extension->incognito_split_mode() &&
+  return extensions::IncognitoInfo::IsSplitMode(extension) &&
          IsIncognitoEnabled(extension->id());
 }
 
diff --git a/chrome/browser/extensions/extension_web_ui.cc b/chrome/browser/extensions/extension_web_ui.cc
index 2ebaab0..d37df1d 100644
--- a/chrome/browser/extensions/extension_web_ui.cc
+++ b/chrome/browser/extensions/extension_web_ui.cc
@@ -23,6 +23,7 @@
 #include "chrome/common/extensions/extension.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/extension_icon_set.h"
+#include "chrome/common/extensions/incognito_handler.h"
 #include "chrome/common/url_constants.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/navigation_controller.h"
@@ -241,7 +242,7 @@
     // We can't handle chrome-extension URLs in incognito mode unless the
     // extension uses split mode.
     bool incognito_override_allowed =
-        extension->incognito_split_mode() &&
+        extensions::IncognitoInfo::IsSplitMode(extension) &&
         service->IsIncognitoEnabled(extension->id());
     if (profile->IsOffTheRecord() && !incognito_override_allowed) {
       ++i;