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