Make default apps cache multiprofile friendly
[chromium-blink-merge.git] / chrome / browser / extensions / page_action_controller_unittest.cc
blobed35108c566de310162b568a999aa550559891f1
1 // Copyright (c) 2012 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.
5 #include <string>
7 #include "base/command_line.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "chrome/browser/extensions/extension_action.h"
11 #include "chrome/browser/extensions/extension_action_manager.h"
12 #include "chrome/browser/extensions/extension_service.h"
13 #include "chrome/browser/extensions/page_action_controller.h"
14 #include "chrome/browser/extensions/tab_helper.h"
15 #include "chrome/browser/extensions/test_extension_system.h"
16 #include "chrome/browser/sessions/session_id.h"
17 #include "chrome/common/extensions/extension.h"
18 #include "chrome/common/extensions/extension_builder.h"
19 #include "chrome/common/extensions/value_builder.h"
20 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
21 #include "chrome/test/base/testing_profile.h"
22 #include "content/public/browser/browser_thread.h"
23 #include "content/public/test/test_browser_thread.h"
25 #if defined(OS_CHROMEOS)
26 #include "chrome/browser/chromeos/login/user_manager.h"
27 #include "chrome/browser/chromeos/settings/cros_settings.h"
28 #include "chrome/browser/chromeos/settings/device_settings_service.h"
29 #endif
31 namespace extensions {
32 namespace {
34 class PageActionControllerTest : public ChromeRenderViewHostTestHarness {
35 protected:
36 virtual void SetUp() OVERRIDE {
37 ChromeRenderViewHostTestHarness::SetUp();
38 #if defined OS_CHROMEOS
39 test_user_manager_.reset(new chromeos::ScopedTestUserManager());
40 #endif
41 TabHelper::CreateForWebContents(web_contents());
42 // Create an ExtensionService so the PageActionController can find its
43 // extensions.
44 CommandLine command_line(CommandLine::NO_PROGRAM);
45 Profile* profile =
46 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
47 extension_service_ = static_cast<TestExtensionSystem*>(
48 ExtensionSystem::Get(profile))->CreateExtensionService(
49 &command_line, base::FilePath(), false);
52 virtual void TearDown() OVERRIDE {
53 #if defined OS_CHROMEOS
54 test_user_manager_.reset();
55 #endif
56 ChromeRenderViewHostTestHarness::TearDown();
59 int tab_id() {
60 return SessionID::IdForTab(web_contents());
63 ExtensionService* extension_service_;
65 private:
66 #if defined OS_CHROMEOS
67 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
68 chromeos::ScopedTestCrosSettings test_cros_settings_;
69 scoped_ptr<chromeos::ScopedTestUserManager> test_user_manager_;
70 #endif
73 TEST_F(PageActionControllerTest, NavigationClearsState) {
74 scoped_refptr<const Extension> extension =
75 ExtensionBuilder()
76 .SetManifest(DictionaryBuilder()
77 .Set("name", "Extension with page action")
78 .Set("version", "1.0.0")
79 .Set("manifest_version", 2)
80 .Set("permissions", ListBuilder()
81 .Append("tabs"))
82 .Set("page_action", DictionaryBuilder()
83 .Set("default_title", "Hello")))
84 .Build();
85 extension_service_->AddExtension(extension.get());
87 NavigateAndCommit(GURL("http://www.google.com"));
89 ExtensionAction& page_action =
90 *ExtensionActionManager::Get(profile())->GetPageAction(*extension.get());
91 page_action.SetTitle(tab_id(), "Goodbye");
92 page_action.SetPopupUrl(
93 tab_id(), extension->GetResourceURL("popup.html"));
95 EXPECT_EQ("Goodbye", page_action.GetTitle(tab_id()));
96 EXPECT_EQ(extension->GetResourceURL("popup.html"),
97 page_action.GetPopupUrl(tab_id()));
99 // Within-page navigation should keep the settings.
100 NavigateAndCommit(GURL("http://www.google.com/#hash"));
102 EXPECT_EQ("Goodbye", page_action.GetTitle(tab_id()));
103 EXPECT_EQ(extension->GetResourceURL("popup.html"),
104 page_action.GetPopupUrl(tab_id()));
106 // Should discard the settings, and go back to the defaults.
107 NavigateAndCommit(GURL("http://www.yahoo.com"));
109 EXPECT_EQ("Hello", page_action.GetTitle(tab_id()));
110 EXPECT_EQ(GURL(), page_action.GetPopupUrl(tab_id()));
113 } // namespace
114 } // namespace extensions