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