1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/extensions/extension_process_manager.h" 6 #include "chrome/browser/extensions/extension_error_reporter.h" 7 #include "chrome/test/testing_profile.h" 8 #include "content/browser/site_instance.h" 9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/platform_test.h" 11 12 namespace { 13 14 // make the test a PlatformTest to setup autorelease pools properly on mac 15 class ExtensionProcessManagerTest : public testing::Test { 16 public: SetUpTestCase()17 static void SetUpTestCase() { 18 ExtensionErrorReporter::Init(false); // no noisy errors 19 } 20 SetUp()21 virtual void SetUp() { 22 ExtensionErrorReporter::GetInstance()->ClearErrors(); 23 } 24 }; 25 26 } // namespace 27 28 // Test that extensions get grouped in the right SiteInstance (and therefore 29 // process) based on their URLs. TEST_F(ExtensionProcessManagerTest,ProcessGrouping)30TEST_F(ExtensionProcessManagerTest, ProcessGrouping) { 31 // Extensions in different profiles should always be different SiteInstances. 32 // Note: we don't initialize these, since we're not testing that 33 // functionality. This means we can get away with a NULL UserScriptMaster. 34 TestingProfile profile1; 35 scoped_ptr<ExtensionProcessManager> manager1( 36 ExtensionProcessManager::Create(&profile1)); 37 38 TestingProfile profile2; 39 scoped_ptr<ExtensionProcessManager> manager2( 40 ExtensionProcessManager::Create(&profile2)); 41 42 // Extensions with common origins ("scheme://id/") should be grouped in the 43 // same SiteInstance. 44 GURL ext1_url1("chrome-extension://ext1_id/index.html"); 45 GURL ext1_url2("chrome-extension://ext1_id/toolstrips/toolstrip.html"); 46 GURL ext2_url1("chrome-extension://ext2_id/index.html"); 47 48 scoped_refptr<SiteInstance> site11 = 49 manager1->GetSiteInstanceForURL(ext1_url1); 50 scoped_refptr<SiteInstance> site12 = 51 manager1->GetSiteInstanceForURL(ext1_url2); 52 EXPECT_EQ(site11, site12); 53 54 scoped_refptr<SiteInstance> site21 = 55 manager1->GetSiteInstanceForURL(ext2_url1); 56 EXPECT_NE(site11, site21); 57 58 scoped_refptr<SiteInstance> other_profile_site = 59 manager2->GetSiteInstanceForURL(ext1_url1); 60 EXPECT_NE(site11, other_profile_site); 61 } 62