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