• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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/browser_action_test_util.h"
6 #include "chrome/browser/extensions/extension_apitest.h"
7 #include "chrome/browser/extensions/extension_service.h"
8 #include "chrome/browser/extensions/extension_test_message_listener.h"
9 #include "chrome/browser/extensions/user_script_master.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/browser_list.h"
13 #include "chrome/browser/ui/browser_window.h"
14 #include "chrome/common/url_constants.h"
15 #include "chrome/test/ui_test_utils.h"
16 #include "content/browser/tab_contents/tab_contents.h"
17 #include "net/base/mock_host_resolver.h"
18 
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,IncognitoNoScript)19 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, IncognitoNoScript) {
20   ASSERT_TRUE(StartTestServer());
21 
22   // Loads a simple extension which attempts to change the title of every page
23   // that loads to "modified".
24   ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("incognito")
25       .AppendASCII("content_scripts")));
26 
27   // Open incognito window and navigate to test page.
28   ui_test_utils::OpenURLOffTheRecord(
29       browser()->profile(),
30       test_server()->GetURL("files/extensions/test_file.html"));
31 
32   Browser* otr_browser = BrowserList::FindBrowserWithType(
33       browser()->profile()->GetOffTheRecordProfile(), Browser::TYPE_NORMAL,
34       false);
35   TabContents* tab = otr_browser->GetSelectedTabContents();
36 
37   // Verify the script didn't run.
38   bool result = false;
39   ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
40       tab->render_view_host(), L"",
41       L"window.domAutomationController.send(document.title == 'Unmodified')",
42       &result));
43   EXPECT_TRUE(result);
44 }
45 
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,IncognitoYesScript)46 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, IncognitoYesScript) {
47   host_resolver()->AddRule("*", "127.0.0.1");
48   ASSERT_TRUE(StartTestServer());
49 
50   // Load a dummy extension. This just tests that we don't regress a
51   // crash fix when multiple incognito- and non-incognito-enabled extensions
52   // are mixed.
53   ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("content_scripts")
54       .AppendASCII("all_frames")));
55 
56   // Loads a simple extension which attempts to change the title of every page
57   // that loads to "modified".
58   ASSERT_TRUE(LoadExtensionIncognito(test_data_dir_
59       .AppendASCII("incognito").AppendASCII("content_scripts")));
60 
61   // Dummy extension #2.
62   ASSERT_TRUE(LoadExtension(test_data_dir_
63       .AppendASCII("content_scripts").AppendASCII("isolated_world1")));
64 
65   // Open incognito window and navigate to test page.
66   ui_test_utils::OpenURLOffTheRecord(
67       browser()->profile(),
68       test_server()->GetURL("files/extensions/test_file.html"));
69 
70   Browser* otr_browser = BrowserList::FindBrowserWithType(
71       browser()->profile()->GetOffTheRecordProfile(), Browser::TYPE_NORMAL,
72       false);
73   TabContents* tab = otr_browser->GetSelectedTabContents();
74 
75   // Verify the script ran.
76   bool result = false;
77   ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
78       tab->render_view_host(), L"",
79       L"window.domAutomationController.send(document.title == 'modified')",
80       &result));
81   EXPECT_TRUE(result);
82 }
83 
84 // Tests that an extension which is enabled for incognito mode doesn't
85 // accidentially create and incognito profile.
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,DontCreateIncognitoProfile)86 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DontCreateIncognitoProfile) {
87   ASSERT_FALSE(browser()->profile()->HasOffTheRecordProfile());
88   ASSERT_TRUE(RunExtensionTestIncognito(
89       "incognito/dont_create_profile")) << message_;
90   ASSERT_FALSE(browser()->profile()->HasOffTheRecordProfile());
91 }
92 
93 // Tests that the APIs in an incognito-enabled extension work properly.
94 // Flaky - see crbug.com/77951.
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,FLAKY_Incognito)95 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, FLAKY_Incognito) {
96   host_resolver()->AddRule("*", "127.0.0.1");
97   ASSERT_TRUE(StartTestServer());
98 
99   ResultCatcher catcher;
100 
101   // Open incognito window and navigate to test page.
102   ui_test_utils::OpenURLOffTheRecord(
103       browser()->profile(),
104       test_server()->GetURL("files/extensions/test_file.html"));
105 
106   ASSERT_TRUE(LoadExtensionIncognito(test_data_dir_
107       .AppendASCII("incognito").AppendASCII("apis")));
108 
109   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
110 }
111 
112 // Tests that the APIs in an incognito-enabled split-mode extension work
113 // properly.
114 // Hangs flakily on mac, linux, win: http://crbug.com/53991
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,DISABLED_IncognitoSplitMode)115 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_IncognitoSplitMode) {
116   host_resolver()->AddRule("*", "127.0.0.1");
117   ASSERT_TRUE(StartTestServer());
118 
119   // We need 2 ResultCatchers because we'll be running the same test in both
120   // regular and incognito mode.
121   ResultCatcher catcher;
122   catcher.RestrictToProfile(browser()->profile());
123   ResultCatcher catcher_incognito;
124   catcher_incognito.RestrictToProfile(
125       browser()->profile()->GetOffTheRecordProfile());
126 
127   // Open incognito window and navigate to test page.
128   ui_test_utils::OpenURLOffTheRecord(
129       browser()->profile(),
130       test_server()->GetURL("files/extensions/test_file.html"));
131 
132   ASSERT_TRUE(LoadExtensionIncognito(test_data_dir_
133       .AppendASCII("incognito").AppendASCII("split")));
134 
135   // Wait for both extensions to be ready before telling them to proceed.
136   ExtensionTestMessageListener listener("waiting", true);
137   EXPECT_TRUE(listener.WaitUntilSatisfied());
138   ExtensionTestMessageListener listener_incognito("waiting", true);
139   EXPECT_TRUE(listener_incognito.WaitUntilSatisfied());
140   listener.Reply("go");
141   listener_incognito.Reply("go");
142 
143   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
144   EXPECT_TRUE(catcher_incognito.GetNextResult()) << catcher.message();
145 }
146 
147 // Tests that the APIs in an incognito-disabled extension don't see incognito
148 // events or callbacks.
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,IncognitoDisabled)149 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, IncognitoDisabled) {
150   host_resolver()->AddRule("*", "127.0.0.1");
151   ASSERT_TRUE(StartTestServer());
152 
153   ResultCatcher catcher;
154 
155   // Open incognito window and navigate to test page.
156   ui_test_utils::OpenURLOffTheRecord(
157       browser()->profile(),
158       test_server()->GetURL("files/extensions/test_file.html"));
159 
160   ASSERT_TRUE(LoadExtension(test_data_dir_
161       .AppendASCII("incognito").AppendASCII("apis_disabled")));
162 
163   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
164 }
165 
166 // Test that opening a popup from an incognito browser window works properly.
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,IncognitoPopup)167 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, IncognitoPopup) {
168   host_resolver()->AddRule("*", "127.0.0.1");
169   ASSERT_TRUE(StartTestServer());
170 
171   ResultCatcher catcher;
172 
173   ASSERT_TRUE(LoadExtensionIncognito(test_data_dir_
174       .AppendASCII("incognito").AppendASCII("popup")));
175 
176   // Open incognito window and navigate to test page.
177   ui_test_utils::OpenURLOffTheRecord(
178       browser()->profile(),
179       test_server()->GetURL("files/extensions/test_file.html"));
180 
181   Browser* incognito_browser = BrowserList::FindBrowserWithType(
182       browser()->profile()->GetOffTheRecordProfile(), Browser::TYPE_NORMAL,
183       false);
184 
185   // Simulate the incognito's browser action being clicked.
186   BrowserActionTestUtil(incognito_browser).Press(0);
187 
188   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
189 }
190