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/extension_apitest.h"
6
7#include "chrome/browser/prefs/pref_service.h"
8#include "chrome/browser/profiles/profile.h"
9#include "chrome/browser/ui/browser.h"
10#include "chrome/browser/ui/browser_window.h"
11#include "chrome/common/pref_names.h"
12#include "net/base/mock_host_resolver.h"
13
14// Possible race in ChromeURLDataManager. http://crbug.com/59198
15#if defined(OS_MACOSX) || defined(OS_LINUX)
16#define MAYBE_TabOnRemoved DISABLED_TabOnRemoved
17#else
18#define MAYBE_TabOnRemoved TabOnRemoved
19#endif
20
21// Crashes on linux views. http://crbug.com/61592
22#if defined(OS_LINUX) && defined(TOOLKIT_VIEWS)
23#define MAYBE_Tabs DISABLED_Tabs
24#else
25#define MAYBE_Tabs Tabs
26#endif
27
28// Window resizes are not completed by the time the callback happens,
29// so these tests fail on linux. http://crbug.com/72369
30#if defined(OS_LINUX)
31#define MAYBE_FocusWindowDoesNotExitFullscreen \
32  DISABLED_FocusWindowDoesNotExitFullscreen
33#define MAYBE_UpdateWindowSizeExitsFullscreen \
34  DISABLED_UpdateWindowSizeExitsFullscreen
35#else
36#define MAYBE_FocusWindowDoesNotExitFullscreen FocusWindowDoesNotExitFullscreen
37#define MAYBE_UpdateWindowSizeExitsFullscreen UpdateWindowSizeExitsFullscreen
38#endif
39
40IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_Tabs) {
41  ASSERT_TRUE(StartTestServer());
42
43  // The test creates a tab and checks that the URL of the new tab
44  // is that of the new tab page.  Make sure the pref that controls
45  // this is set.
46  browser()->profile()->GetPrefs()->SetBoolean(
47      prefs::kHomePageIsNewTabPage, true);
48
49  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "crud.html")) << message_;
50}
51
52IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabPinned) {
53  ASSERT_TRUE(StartTestServer());
54  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "pinned.html")) << message_;
55}
56
57IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabMove) {
58  ASSERT_TRUE(StartTestServer());
59  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "move.html")) << message_;
60}
61
62IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabEvents) {
63  ASSERT_TRUE(StartTestServer());
64  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "events.html")) << message_;
65}
66
67IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabRelativeURLs) {
68  ASSERT_TRUE(StartTestServer());
69  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "relative_urls.html"))
70      << message_;
71}
72
73IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabCrashBrowser) {
74  ASSERT_TRUE(StartTestServer());
75  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "crash.html")) << message_;
76}
77
78IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabGetCurrent) {
79  ASSERT_TRUE(StartTestServer());
80  ASSERT_TRUE(RunExtensionTest("tabs/get_current")) << message_;
81}
82
83IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabConnect) {
84  ASSERT_TRUE(StartTestServer());
85  ASSERT_TRUE(RunExtensionTest("tabs/connect")) << message_;
86}
87
88IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_TabOnRemoved) {
89  ASSERT_TRUE(StartTestServer());
90  ASSERT_TRUE(RunExtensionTest("tabs/on_removed")) << message_;
91}
92
93IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CaptureVisibleTabJpeg) {
94  host_resolver()->AddRule("a.com", "127.0.0.1");
95  host_resolver()->AddRule("b.com", "127.0.0.1");
96  ASSERT_TRUE(StartTestServer());
97  ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab",
98                                  "test_jpeg.html")) << message_;
99}
100
101IN_PROC_BROWSER_TEST_F(ExtensionApiTest, CaptureVisibleTabPng) {
102  host_resolver()->AddRule("a.com", "127.0.0.1");
103  host_resolver()->AddRule("b.com", "127.0.0.1");
104  ASSERT_TRUE(StartTestServer());
105  ASSERT_TRUE(RunExtensionSubtest("tabs/capture_visible_tab",
106                                  "test_png.html")) << message_;
107}
108
109IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabsOnUpdated) {
110  ASSERT_TRUE(StartTestServer());
111  ASSERT_TRUE(RunExtensionTest("tabs/on_updated")) << message_;
112}
113
114IN_PROC_BROWSER_TEST_F(ExtensionApiTest,
115                       MAYBE_FocusWindowDoesNotExitFullscreen) {
116  browser()->window()->SetFullscreen(true);
117  bool is_fullscreen = browser()->window()->IsFullscreen();
118  ASSERT_TRUE(RunExtensionTest("window_update/focus")) << message_;
119  ASSERT_EQ(is_fullscreen, browser()->window()->IsFullscreen());
120}
121
122IN_PROC_BROWSER_TEST_F(ExtensionApiTest,
123                       MAYBE_UpdateWindowSizeExitsFullscreen) {
124  browser()->window()->SetFullscreen(true);
125  ASSERT_TRUE(RunExtensionTest("window_update/sizing")) << message_;
126  ASSERT_FALSE(browser()->window()->IsFullscreen());
127}
128
129#if defined(OS_WIN)
130IN_PROC_BROWSER_TEST_F(ExtensionApiTest, FocusWindowDoesNotUnmaximize) {
131  gfx::NativeWindow window = browser()->window()->GetNativeHandle();
132  ::SendMessage(window, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
133  ASSERT_TRUE(RunExtensionTest("window_update/focus")) << message_;
134  ASSERT_TRUE(::IsZoomed(window));
135}
136#endif  // OS_WIN
137
138IN_PROC_BROWSER_TEST_F(ExtensionApiTest, IncognitoDisabledByPref) {
139  ASSERT_TRUE(StartTestServer());
140
141  browser()->profile()->GetPrefs()->SetBoolean(prefs::kIncognitoEnabled, false);
142
143  // This makes sure that creating an incognito window fails due to pref
144  // (policy) being set.
145  ASSERT_TRUE(RunExtensionTest("tabs/incognito_disabled")) << message_;
146}
147
148IN_PROC_BROWSER_TEST_F(ExtensionApiTest, GetViewsOfCreatedPopup) {
149  ASSERT_TRUE(StartTestServer());
150  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "get_views_popup.html"))
151      << message_;
152}
153IN_PROC_BROWSER_TEST_F(ExtensionApiTest, GetViewsOfCreatedWindow) {
154  ASSERT_TRUE(StartTestServer());
155  ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "get_views_window.html"))
156      << message_;
157}
158