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.
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/test/base/chrome_render_view_host_test_harness.h"
18 #include "chrome/test/base/testing_profile.h"
19 #include "extensions/common/extension.h"
20 #include "extensions/common/extension_builder.h"
21 #include "extensions/common/value_builder.h"
23 #if defined(OS_CHROMEOS)
24 #include "chrome/browser/chromeos/login/user_manager.h"
25 #include "chrome/browser/chromeos/settings/cros_settings.h"
26 #include "chrome/browser/chromeos/settings/device_settings_service.h"
29 namespace extensions
{
32 class PageActionControllerTest
: public ChromeRenderViewHostTestHarness
{
34 virtual void SetUp() OVERRIDE
{
35 ChromeRenderViewHostTestHarness::SetUp();
36 #if defined OS_CHROMEOS
37 test_user_manager_
.reset(new chromeos::ScopedTestUserManager());
39 TabHelper::CreateForWebContents(web_contents());
40 // Create an ExtensionService so the PageActionController can find its
42 CommandLine
command_line(CommandLine::NO_PROGRAM
);
44 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
45 extension_service_
= static_cast<TestExtensionSystem
*>(
46 ExtensionSystem::Get(profile
))->CreateExtensionService(
47 &command_line
, base::FilePath(), false);
50 virtual void TearDown() OVERRIDE
{
51 #if defined OS_CHROMEOS
52 test_user_manager_
.reset();
54 ChromeRenderViewHostTestHarness::TearDown();
58 return SessionID::IdForTab(web_contents());
61 ExtensionService
* extension_service_
;
64 #if defined OS_CHROMEOS
65 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_
;
66 chromeos::ScopedTestCrosSettings test_cros_settings_
;
67 scoped_ptr
<chromeos::ScopedTestUserManager
> test_user_manager_
;
71 TEST_F(PageActionControllerTest
, NavigationClearsState
) {
72 scoped_refptr
<const Extension
> extension
=
74 .SetManifest(DictionaryBuilder()
75 .Set("name", "Extension with page action")
76 .Set("version", "1.0.0")
77 .Set("manifest_version", 2)
78 .Set("permissions", ListBuilder()
80 .Set("page_action", DictionaryBuilder()
81 .Set("default_title", "Hello")))
83 extension_service_
->AddExtension(extension
.get());
85 NavigateAndCommit(GURL("http://www.google.com"));
87 ExtensionAction
& page_action
=
88 *ExtensionActionManager::Get(profile())->GetPageAction(*extension
.get());
89 page_action
.SetTitle(tab_id(), "Goodbye");
90 page_action
.SetPopupUrl(
91 tab_id(), extension
->GetResourceURL("popup.html"));
93 EXPECT_EQ("Goodbye", page_action
.GetTitle(tab_id()));
94 EXPECT_EQ(extension
->GetResourceURL("popup.html"),
95 page_action
.GetPopupUrl(tab_id()));
97 // Within-page navigation should keep the settings.
98 NavigateAndCommit(GURL("http://www.google.com/#hash"));
100 EXPECT_EQ("Goodbye", page_action
.GetTitle(tab_id()));
101 EXPECT_EQ(extension
->GetResourceURL("popup.html"),
102 page_action
.GetPopupUrl(tab_id()));
104 // Should discard the settings, and go back to the defaults.
105 NavigateAndCommit(GURL("http://www.yahoo.com"));
107 EXPECT_EQ("Hello", page_action
.GetTitle(tab_id()));
108 EXPECT_EQ(GURL(), page_action
.GetPopupUrl(tab_id()));
112 } // namespace extensions