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. 4 5 #include "chrome/browser/extensions/extension_apitest.h" 6 7 #include "base/prefs/pref_service.h" 8 #include "chrome/browser/prefs/incognito_mode_prefs.h" 9 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser_window.h" 12 #include "chrome/common/chrome_switches.h" 13 #include "chrome/common/pref_names.h" 14 #include "chrome/common/url_constants.h" 15 #include "net/dns/mock_host_resolver.h" 16 17 18 // Window resizes are not completed by the time the callback happens, 19 // so these tests fail on linux/gtk. http://crbug.com/72369 20 #if defined(OS_LINUX) && !defined(USE_AURA) 21 #define MAYBE_UpdateWindowResize DISABLED_UpdateWindowResize 22 #define MAYBE_UpdateWindowShowState DISABLED_UpdateWindowShowState 23 #else 24 25 #if defined(USE_AURA) || defined(OS_MACOSX) 26 // Maximizing/fullscreen popup window doesn't work on aura's managed mode. 27 // See bug crbug.com/116305. 28 // Mac: http://crbug.com/103912 29 #define MAYBE_UpdateWindowShowState DISABLED_UpdateWindowShowState 30 #else 31 #define MAYBE_UpdateWindowShowState UpdateWindowShowState 32 #endif // defined(USE_AURA) || defined(OS_MACOSX) 33 34 #define MAYBE_UpdateWindowResize UpdateWindowResize 35 #endif // defined(OS_LINUX) && !defined(USE_AURA) 36 37 // http://crbug.com/145639 38 #if defined(OS_CHROMEOS) || defined(OS_WIN) 39 #define MAYBE_TabEvents DISABLED_TabEvents 40 #else 41 #define MAYBE_TabEvents TabEvents 42 #endif 43 44 class ExtensionApiNewTabTest : public ExtensionApiTest { 45 public: 46 ExtensionApiNewTabTest() {} 47 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 48 ExtensionApiTest::SetUpCommandLine(command_line); 49 // Override the default which InProcessBrowserTest adds if it doesn't see a 50 // homepage. 51 command_line->AppendSwitchASCII( 52 switches::kHomePage, chrome::kChromeUINewTabURL); 53 } 54 }; 55 56 IN_PROC_BROWSER_TEST_F(ExtensionApiNewTabTest, Tabs) { 57 // The test creates a tab and checks that the URL of the new tab 58 // is that of the new tab page. Make sure the pref that controls 59 // this is set. 60 browser()->profile()->GetPrefs()->SetBoolean( 61 prefs::kHomePageIsNewTabPage, true); 62 63 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "crud.html")) << message_; 64 } 65 66 // Flaky on windows: http://crbug.com/238667 67 #if defined(OS_WIN) 68 #define MAYBE_Tabs2 DISABLED_Tabs2 69 #else 70 #define MAYBE_Tabs2 Tabs2 71 #endif 72 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_Tabs2) { 73 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "crud2.html")) << message_; 74 } 75 76 // crbug.com/149924 77 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_TabDuplicate) { 78 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "duplicate.html")) << message_; 79 } 80 81 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabUpdate) { 82 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "update.html")) << message_; 83 } 84 85 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabPinned) { 86 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "pinned.html")) << message_; 87 } 88 89 // Flaky on windows: http://crbug.com/238667 90 #if defined(OS_WIN) 91 #define MAYBE_TabMove DISABLED_TabMove 92 #else 93 #define MAYBE_TabMove TabMove 94 #endif 95 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_TabMove) { 96 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "move.html")) << message_; 97 } 98 99 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_TabEvents) { 100 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "events.html")) << message_; 101 } 102 103 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_TabRelativeURLs) { 104 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "relative_urls.html")) 105 << message_; 106 } 107 108 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabQuery) { 109 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "query.html")) << message_; 110 } 111 112 // Flaky on windows: http://crbug.com/239022 113 #if defined(OS_WIN) 114 #define MAYBE_TabHighlight DISABLED_TabHighlight 115 #else 116 #define MAYBE_TabHighlight TabHighlight 117 #endif 118 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_TabHighlight) { 119 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "highlight.html")) << message_; 120 } 121 122 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabCrashBrowser) { 123 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "crash.html")) << message_; 124 } 125 126 // Flaky on windows: http://crbug.com/238667 127 #if defined(OS_WIN) 128 #define MAYBE_TabOpener DISABLED_TabOpener 129 #else 130 #define MAYBE_TabOpener TabOpener 131 #endif 132 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_TabOpener) { 133 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "opener.html")) << message_; 134 } 135 136 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_TabGetCurrent) { 137 ASSERT_TRUE(RunExtensionTest("tabs/get_current")) << message_; 138 } 139 140 // Flaky on the trybots. See http://crbug.com/96725. 141 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_TabConnect) { 142 ASSERT_TRUE(StartEmbeddedTestServer()); 143 ASSERT_TRUE(RunExtensionTest("tabs/connect")) << message_; 144 } 145 146 // Possible race in ChromeURLDataManager. http://crbug.com/59198 147 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_TabOnRemoved) { 148 ASSERT_TRUE(RunExtensionTest("tabs/on_removed")) << message_; 149 } 150 151 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_TabReload) { 152 ASSERT_TRUE(RunExtensionTest("tabs/reload")) << message_; 153 } 154 155 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_CaptureVisibleTabJpeg) { 156 host_resolver()->AddRule("a.com", "127.0.0.1"); 157 host_resolver()->AddRule("b.com", "127.0.0.1"); 158 ASSERT_TRUE(StartEmbeddedTestServer()); 159 ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab", 160 "test_jpeg.html")) << message_; 161 } 162 163 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_CaptureVisibleTabPng) { 164 host_resolver()->AddRule("a.com", "127.0.0.1"); 165 host_resolver()->AddRule("b.com", "127.0.0.1"); 166 ASSERT_TRUE(StartEmbeddedTestServer()); 167 ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab", 168 "test_png.html")) << message_; 169 } 170 171 // Times out on non-Windows. 172 // See http://crbug.com/80212 173 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_CaptureVisibleTabRace) { 174 ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab", 175 "test_race.html")) << message_; 176 } 177 178 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CaptureVisibleFile) { 179 ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab", 180 "test_file.html")) << message_; 181 } 182 183 // Flaky on windows: http://crbug.com/238667 184 #if defined(OS_WIN) 185 #define MAYBE_CaptureVisibleNoFile DISABLED_CaptureVisibleNoFile 186 #else 187 #define MAYBE_CaptureVisibleNoFile CaptureVisibleNoFile 188 #endif 189 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_CaptureVisibleNoFile) { 190 ASSERT_TRUE(RunExtensionSubtest( 191 "tabs/capture_visible_tab", "test_nofile.html", 192 ExtensionApiTest::kFlagNone)) << message_; 193 } 194 195 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CaptureVisibleDisabled) { 196 browser()->profile()->GetPrefs()->SetBoolean(prefs::kDisableScreenshots, 197 true); 198 ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab", 199 "test_disabled.html")) << message_; 200 } 201 202 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabsOnUpdated) { 203 ASSERT_TRUE(RunExtensionTest("tabs/on_updated")) << message_; 204 } 205 206 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabsNoPermissions) { 207 ASSERT_TRUE(RunExtensionTest("tabs/no_permissions")) << message_; 208 } 209 210 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, 211 MAYBE_UpdateWindowResize) { 212 ASSERT_TRUE(RunExtensionTest("window_update/resize")) << message_; 213 } 214 215 #if defined(OS_WIN) && !defined(USE_AURA) 216 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, FocusWindowDoesNotUnmaximize) { 217 gfx::NativeWindow window = browser()->window()->GetNativeWindow(); 218 ::SendMessage(window, WM_SYSCOMMAND, SC_MAXIMIZE, 0); 219 ASSERT_TRUE(RunExtensionTest("window_update/focus")) << message_; 220 ASSERT_TRUE(::IsZoomed(window)); 221 } 222 #endif // OS_WIN 223 224 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_UpdateWindowShowState) { 225 ASSERT_TRUE(RunExtensionTest("window_update/show_state")) << message_; 226 } 227 228 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, IncognitoDisabledByPref) { 229 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), 230 IncognitoModePrefs::DISABLED); 231 232 // This makes sure that creating an incognito window fails due to pref 233 // (policy) being set. 234 ASSERT_TRUE(RunExtensionTest("tabs/incognito_disabled")) << message_; 235 } 236 237 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_GetViewsOfCreatedPopup) { 238 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "get_views_popup.html")) 239 << message_; 240 } 241 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_GetViewsOfCreatedWindow) { 242 ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "get_views_window.html")) 243 << message_; 244 } 245 246 // Adding a new test? Awesome. But API tests are the old hotness. The 247 // new hotness is extension_test_utils. See tabs_test.cc for an example. 248 // We are trying to phase out many uses of API tests as they tend to be flaky. 249