OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 #include "chrome/browser/extensions/api/tabs/tabs.h" |
5 | 6 |
6 #include <string> | 7 #include <string> |
7 | 8 |
8 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
9 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/stringprintf.h" |
10 #include "base/string_util.h" | 12 #include "base/string_util.h" |
11 #include "base/stringprintf.h" | |
12 #include "base/values.h" | 13 #include "base/values.h" |
13 #include "chrome/browser/extensions/api/tabs/tabs_api.h" | |
14 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" | 14 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" |
15 #include "chrome/browser/extensions/extension_function_test_utils.h" | 15 #include "chrome/browser/extensions/extension_function_test_utils.h" |
16 #include "chrome/browser/extensions/extension_tab_util.h" | 16 #include "chrome/browser/extensions/extension_tab_util.h" |
17 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 17 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
18 #include "chrome/browser/prefs/pref_service.h" | 18 #include "chrome/browser/prefs/pref_service.h" |
19 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
20 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
21 #include "chrome/browser/ui/browser_commands.h" | 21 #include "chrome/browser/ui/browser_commands.h" |
22 #include "chrome/browser/ui/browser_window.h" | 22 #include "chrome/browser/ui/browser_window.h" |
23 #include "chrome/test/base/in_process_browser_test.h" | 23 #include "chrome/test/base/in_process_browser_test.h" |
24 #include "chrome/test/base/ui_test_utils.h" | 24 #include "chrome/test/base/ui_test_utils.h" |
25 #include "ui/gfx/rect.h" | 25 #include "ui/gfx/rect.h" |
26 | 26 |
27 namespace keys = extensions::tabs_constants; | 27 namespace keys = extensions::tabs_constants; |
28 namespace utils = extension_function_test_utils; | 28 namespace utils = extension_function_test_utils; |
29 | 29 |
30 namespace { | 30 namespace { |
31 | 31 |
32 class ExtensionTabsTest : public InProcessBrowserTest { | 32 class ExtensionTabsTest : public InProcessBrowserTest { |
33 }; | 33 }; |
34 | 34 |
35 } | 35 } |
36 | 36 |
37 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetWindow) { | 37 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetWindow) { |
38 int window_id = ExtensionTabUtil::GetWindowId(browser()); | 38 int window_id = ExtensionTabUtil::GetWindowId(browser()); |
39 | 39 |
40 // Invalid window ID error. | 40 // Invalid window ID error. |
41 scoped_refptr<WindowsGetFunction> function = new WindowsGetFunction(); | 41 scoped_refptr<GetWindowFunction> function = new GetWindowFunction(); |
42 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 42 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
43 function->set_extension(extension.get()); | 43 function->set_extension(extension.get()); |
44 EXPECT_TRUE(MatchPattern( | 44 EXPECT_TRUE(MatchPattern( |
45 utils::RunFunctionAndReturnError( | 45 utils::RunFunctionAndReturnError( |
46 function.get(), | 46 function.get(), |
47 base::StringPrintf("[%u]", window_id + 1), | 47 base::StringPrintf("[%u]", window_id + 1), |
48 browser()), | 48 browser()), |
49 keys::kWindowNotFoundError)); | 49 keys::kWindowNotFoundError)); |
50 | 50 |
51 // Basic window details. | 51 // Basic window details. |
52 gfx::Rect bounds; | 52 gfx::Rect bounds; |
53 if (browser()->window()->IsMinimized()) | 53 if (browser()->window()->IsMinimized()) |
54 bounds = browser()->window()->GetRestoredBounds(); | 54 bounds = browser()->window()->GetRestoredBounds(); |
55 else | 55 else |
56 bounds = browser()->window()->GetBounds(); | 56 bounds = browser()->window()->GetBounds(); |
57 | 57 |
58 function = new WindowsGetFunction(); | 58 function = new GetWindowFunction(); |
59 function->set_extension(extension.get()); | 59 function->set_extension(extension.get()); |
60 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 60 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
61 utils::RunFunctionAndReturnSingleResult( | 61 utils::RunFunctionAndReturnSingleResult( |
62 function.get(), | 62 function.get(), |
63 base::StringPrintf("[%u]", window_id), | 63 base::StringPrintf("[%u]", window_id), |
64 browser()))); | 64 browser()))); |
65 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); | 65 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); |
66 EXPECT_FALSE(utils::GetBoolean(result.get(), "incognito")); | 66 EXPECT_FALSE(utils::GetBoolean(result.get(), "incognito")); |
67 EXPECT_EQ("normal", utils::GetString(result.get(), "type")); | 67 EXPECT_EQ("normal", utils::GetString(result.get(), "type")); |
68 EXPECT_EQ(bounds.x(), utils::GetInteger(result.get(), "left")); | 68 EXPECT_EQ(bounds.x(), utils::GetInteger(result.get(), "left")); |
69 EXPECT_EQ(bounds.y(), utils::GetInteger(result.get(), "top")); | 69 EXPECT_EQ(bounds.y(), utils::GetInteger(result.get(), "top")); |
70 EXPECT_EQ(bounds.width(), utils::GetInteger(result.get(), "width")); | 70 EXPECT_EQ(bounds.width(), utils::GetInteger(result.get(), "width")); |
71 EXPECT_EQ(bounds.height(), utils::GetInteger(result.get(), "height")); | 71 EXPECT_EQ(bounds.height(), utils::GetInteger(result.get(), "height")); |
72 | 72 |
73 // With "populate" enabled. | 73 // With "populate" enabled. |
74 function = new WindowsGetFunction(); | 74 function = new GetWindowFunction(); |
75 function->set_extension(extension.get()); | 75 function->set_extension(extension.get()); |
76 result.reset(utils::ToDictionary( | 76 result.reset(utils::ToDictionary( |
77 utils::RunFunctionAndReturnSingleResult( | 77 utils::RunFunctionAndReturnSingleResult( |
78 function.get(), | 78 function.get(), |
79 base::StringPrintf("[%u, {\"populate\": true}]", window_id), | 79 base::StringPrintf("[%u, {\"populate\": true}]", window_id), |
80 browser()))); | 80 browser()))); |
81 | 81 |
82 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); | 82 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); |
83 // "populate" was enabled so tabs should be populated. | 83 // "populate" was enabled so tabs should be populated. |
84 ListValue* tabs = NULL; | 84 ListValue* tabs = NULL; |
85 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); | 85 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); |
86 | 86 |
87 // TODO(aa): Can't assume window is focused. On mac, calling Activate() from a | 87 // TODO(aa): Can't assume window is focused. On mac, calling Activate() from a |
88 // browser test doesn't seem to do anything, so can't test the opposite | 88 // browser test doesn't seem to do anything, so can't test the opposite |
89 // either. | 89 // either. |
90 EXPECT_EQ(browser()->window()->IsActive(), | 90 EXPECT_EQ(browser()->window()->IsActive(), |
91 utils::GetBoolean(result.get(), "focused")); | 91 utils::GetBoolean(result.get(), "focused")); |
92 | 92 |
93 // TODO(aa): Minimized and maximized dimensions. Is there a way to set | 93 // TODO(aa): Minimized and maximized dimensions. Is there a way to set |
94 // minimize/maximize programmatically? | 94 // minimize/maximize programmatically? |
95 | 95 |
96 // Popup. | 96 // Popup. |
97 Browser* popup_browser = new Browser( | 97 Browser* popup_browser = new Browser( |
98 Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); | 98 Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); |
99 function = new WindowsGetFunction(); | 99 function = new GetWindowFunction(); |
100 function->set_extension(extension.get()); | 100 function->set_extension(extension.get()); |
101 result.reset(utils::ToDictionary( | 101 result.reset(utils::ToDictionary( |
102 utils::RunFunctionAndReturnSingleResult( | 102 utils::RunFunctionAndReturnSingleResult( |
103 function.get(), | 103 function.get(), |
104 base::StringPrintf( | 104 base::StringPrintf( |
105 "[%u]", ExtensionTabUtil::GetWindowId(popup_browser)), | 105 "[%u]", ExtensionTabUtil::GetWindowId(popup_browser)), |
106 browser()))); | 106 browser()))); |
107 EXPECT_EQ("popup", utils::GetString(result.get(), "type")); | 107 EXPECT_EQ("popup", utils::GetString(result.get(), "type")); |
108 | 108 |
109 // Panel. | 109 // Panel. |
110 Browser* panel_browser = new Browser( | 110 Browser* panel_browser = new Browser( |
111 Browser::CreateParams(Browser::TYPE_PANEL, browser()->profile())); | 111 Browser::CreateParams(Browser::TYPE_PANEL, browser()->profile())); |
112 function = new WindowsGetFunction(); | 112 function = new GetWindowFunction(); |
113 function->set_extension(extension.get()); | 113 function->set_extension(extension.get()); |
114 result.reset(utils::ToDictionary( | 114 result.reset(utils::ToDictionary( |
115 utils::RunFunctionAndReturnSingleResult( | 115 utils::RunFunctionAndReturnSingleResult( |
116 function.get(), | 116 function.get(), |
117 base::StringPrintf( | 117 base::StringPrintf( |
118 "[%u]", ExtensionTabUtil::GetWindowId(panel_browser)), | 118 "[%u]", ExtensionTabUtil::GetWindowId(panel_browser)), |
119 browser()))); | 119 browser()))); |
120 EXPECT_EQ("panel", utils::GetString(result.get(), "type")); | 120 EXPECT_EQ("panel", utils::GetString(result.get(), "type")); |
121 | 121 |
122 // Incognito. | 122 // Incognito. |
123 Browser* incognito_browser = CreateIncognitoBrowser(); | 123 Browser* incognito_browser = CreateIncognitoBrowser(); |
124 int incognito_window_id = ExtensionTabUtil::GetWindowId(incognito_browser); | 124 int incognito_window_id = ExtensionTabUtil::GetWindowId(incognito_browser); |
125 | 125 |
126 // Without "include_incognito". | 126 // Without "include_incognito". |
127 function = new WindowsGetFunction(); | 127 function = new GetWindowFunction(); |
128 function->set_extension(extension.get()); | 128 function->set_extension(extension.get()); |
129 EXPECT_TRUE(MatchPattern( | 129 EXPECT_TRUE(MatchPattern( |
130 utils::RunFunctionAndReturnError( | 130 utils::RunFunctionAndReturnError( |
131 function.get(), | 131 function.get(), |
132 base::StringPrintf("[%u]", incognito_window_id), | 132 base::StringPrintf("[%u]", incognito_window_id), |
133 browser()), | 133 browser()), |
134 keys::kWindowNotFoundError)); | 134 keys::kWindowNotFoundError)); |
135 | 135 |
136 // With "include_incognito". | 136 // With "include_incognito". |
137 function = new WindowsGetFunction(); | 137 function = new GetWindowFunction(); |
138 function->set_extension(extension.get()); | 138 function->set_extension(extension.get()); |
139 result.reset(utils::ToDictionary( | 139 result.reset(utils::ToDictionary( |
140 utils::RunFunctionAndReturnSingleResult( | 140 utils::RunFunctionAndReturnSingleResult( |
141 function.get(), | 141 function.get(), |
142 base::StringPrintf("[%u]", incognito_window_id), | 142 base::StringPrintf("[%u]", incognito_window_id), |
143 browser(), | 143 browser(), |
144 utils::INCLUDE_INCOGNITO))); | 144 utils::INCLUDE_INCOGNITO))); |
145 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 145 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
146 } | 146 } |
147 | 147 |
148 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetCurrentWindow) { | 148 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetCurrentWindow) { |
149 int window_id = ExtensionTabUtil::GetWindowId(browser()); | 149 int window_id = ExtensionTabUtil::GetWindowId(browser()); |
150 Browser* new_browser = CreateBrowser(browser()->profile()); | 150 Browser* new_browser = CreateBrowser(browser()->profile()); |
151 int new_id = ExtensionTabUtil::GetWindowId(new_browser); | 151 int new_id = ExtensionTabUtil::GetWindowId(new_browser); |
152 | 152 |
153 // Get the current window using new_browser. | 153 // Get the current window using new_browser. |
154 scoped_refptr<WindowsGetCurrentFunction> function = | 154 scoped_refptr<GetCurrentWindowFunction> function = |
155 new WindowsGetCurrentFunction(); | 155 new GetCurrentWindowFunction(); |
156 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 156 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
157 function->set_extension(extension.get()); | 157 function->set_extension(extension.get()); |
158 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 158 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
159 utils::RunFunctionAndReturnSingleResult(function.get(), | 159 utils::RunFunctionAndReturnSingleResult(function.get(), |
160 "[]", | 160 "[]", |
161 new_browser))); | 161 new_browser))); |
162 | 162 |
163 // The id should match the window id of the browser instance that was passed | 163 // The id should match the window id of the browser instance that was passed |
164 // to RunFunctionAndReturnSingleResult. | 164 // to RunFunctionAndReturnSingleResult. |
165 EXPECT_EQ(new_id, utils::GetInteger(result.get(), "id")); | 165 EXPECT_EQ(new_id, utils::GetInteger(result.get(), "id")); |
166 ListValue* tabs = NULL; | 166 ListValue* tabs = NULL; |
167 EXPECT_FALSE(result.get()->GetList(keys::kTabsKey, &tabs)); | 167 EXPECT_FALSE(result.get()->GetList(keys::kTabsKey, &tabs)); |
168 | 168 |
169 // Get the current window using the old window and make the tabs populated. | 169 // Get the current window using the old window and make the tabs populated. |
170 function = new WindowsGetCurrentFunction(); | 170 function = new GetCurrentWindowFunction(); |
171 function->set_extension(extension.get()); | 171 function->set_extension(extension.get()); |
172 result.reset(utils::ToDictionary( | 172 result.reset(utils::ToDictionary( |
173 utils::RunFunctionAndReturnSingleResult(function.get(), | 173 utils::RunFunctionAndReturnSingleResult(function.get(), |
174 "[{\"populate\": true}]", | 174 "[{\"populate\": true}]", |
175 browser()))); | 175 browser()))); |
176 | 176 |
177 // The id should match the window id of the browser instance that was passed | 177 // The id should match the window id of the browser instance that was passed |
178 // to RunFunctionAndReturnSingleResult. | 178 // to RunFunctionAndReturnSingleResult. |
179 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); | 179 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); |
180 // "populate" was enabled so tabs should be populated. | 180 // "populate" was enabled so tabs should be populated. |
181 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); | 181 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); |
182 } | 182 } |
183 | 183 |
184 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) { | 184 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) { |
185 const size_t NUM_WINDOWS = 5; | 185 const size_t NUM_WINDOWS = 5; |
186 std::set<int> window_ids; | 186 std::set<int> window_ids; |
187 std::set<int> result_ids; | 187 std::set<int> result_ids; |
188 window_ids.insert(ExtensionTabUtil::GetWindowId(browser())); | 188 window_ids.insert(ExtensionTabUtil::GetWindowId(browser())); |
189 | 189 |
190 for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) { | 190 for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) { |
191 Browser* new_browser = CreateBrowser(browser()->profile()); | 191 Browser* new_browser = CreateBrowser(browser()->profile()); |
192 window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser)); | 192 window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser)); |
193 } | 193 } |
194 | 194 |
195 scoped_refptr<WindowsGetAllFunction> function = new WindowsGetAllFunction(); | 195 scoped_refptr<GetAllWindowsFunction> function = new GetAllWindowsFunction(); |
196 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 196 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
197 function->set_extension(extension.get()); | 197 function->set_extension(extension.get()); |
198 scoped_ptr<base::ListValue> result(utils::ToList( | 198 scoped_ptr<base::ListValue> result(utils::ToList( |
199 utils::RunFunctionAndReturnSingleResult(function.get(), | 199 utils::RunFunctionAndReturnSingleResult(function.get(), |
200 "[]", | 200 "[]", |
201 browser()))); | 201 browser()))); |
202 | 202 |
203 ListValue* windows = result.get(); | 203 ListValue* windows = result.get(); |
204 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); | 204 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); |
205 for (size_t i = 0; i < NUM_WINDOWS; ++i) { | 205 for (size_t i = 0; i < NUM_WINDOWS; ++i) { |
206 DictionaryValue* result_window = NULL; | 206 DictionaryValue* result_window = NULL; |
207 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); | 207 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); |
208 result_ids.insert(utils::GetInteger(result_window, "id")); | 208 result_ids.insert(utils::GetInteger(result_window, "id")); |
209 | 209 |
210 // "populate" was not passed in so tabs are not populated. | 210 // "populate" was not passed in so tabs are not populated. |
211 ListValue* tabs = NULL; | 211 ListValue* tabs = NULL; |
212 EXPECT_FALSE(result_window->GetList(keys::kTabsKey, &tabs)); | 212 EXPECT_FALSE(result_window->GetList(keys::kTabsKey, &tabs)); |
213 } | 213 } |
214 // The returned ids should contain all the current browser instance ids. | 214 // The returned ids should contain all the current browser instance ids. |
215 EXPECT_EQ(window_ids, result_ids); | 215 EXPECT_EQ(window_ids, result_ids); |
216 | 216 |
217 result_ids.clear(); | 217 result_ids.clear(); |
218 function = new WindowsGetAllFunction(); | 218 function = new GetAllWindowsFunction(); |
219 function->set_extension(extension.get()); | 219 function->set_extension(extension.get()); |
220 result.reset(utils::ToList( | 220 result.reset(utils::ToList( |
221 utils::RunFunctionAndReturnSingleResult(function.get(), | 221 utils::RunFunctionAndReturnSingleResult(function.get(), |
222 "[{\"populate\": true}]", | 222 "[{\"populate\": true}]", |
223 browser()))); | 223 browser()))); |
224 | 224 |
225 windows = result.get(); | 225 windows = result.get(); |
226 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); | 226 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); |
227 for (size_t i = 0; i < windows->GetSize(); ++i) { | 227 for (size_t i = 0; i < windows->GetSize(); ++i) { |
228 DictionaryValue* result_window = NULL; | 228 DictionaryValue* result_window = NULL; |
229 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); | 229 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); |
230 result_ids.insert(utils::GetInteger(result_window, "id")); | 230 result_ids.insert(utils::GetInteger(result_window, "id")); |
231 | 231 |
232 // "populate" was enabled so tabs should be populated. | 232 // "populate" was enabled so tabs should be populated. |
233 ListValue* tabs = NULL; | 233 ListValue* tabs = NULL; |
234 EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs)); | 234 EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs)); |
235 } | 235 } |
236 // The returned ids should contain all the current browser instance ids. | 236 // The returned ids should contain all the current browser instance ids. |
237 EXPECT_EQ(window_ids, result_ids); | 237 EXPECT_EQ(window_ids, result_ids); |
238 } | 238 } |
239 | 239 |
240 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) { | 240 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) { |
241 // The test empty extension has no permissions, therefore it should not get | 241 // The test empty extension has no permissions, therefore it should not get |
242 // tab data in the function result. | 242 // tab data in the function result. |
243 scoped_refptr<TabsUpdateFunction> update_tab_function( | 243 scoped_refptr<UpdateTabFunction> update_tab_function(new UpdateTabFunction()); |
244 new TabsUpdateFunction()); | |
245 scoped_refptr<extensions::Extension> empty_extension( | 244 scoped_refptr<extensions::Extension> empty_extension( |
246 utils::CreateEmptyExtension()); | 245 utils::CreateEmptyExtension()); |
247 update_tab_function->set_extension(empty_extension.get()); | 246 update_tab_function->set_extension(empty_extension.get()); |
248 // Without a callback the function will not generate a result. | 247 // Without a callback the function will not generate a result. |
249 update_tab_function->set_has_callback(true); | 248 update_tab_function->set_has_callback(true); |
250 | 249 |
251 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 250 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
252 utils::RunFunctionAndReturnSingleResult( | 251 utils::RunFunctionAndReturnSingleResult( |
253 update_tab_function.get(), | 252 update_tab_function.get(), |
254 "[null, {\"url\": \"about:blank\", \"pinned\": true}]", | 253 "[null, {\"url\": \"about:blank\", \"pinned\": true}]", |
255 browser()))); | 254 browser()))); |
256 // The url is stripped since the extension does not have tab permissions. | 255 // The url is stripped since the extension does not have tab permissions. |
257 EXPECT_FALSE(result->HasKey("url")); | 256 EXPECT_FALSE(result->HasKey("url")); |
258 EXPECT_TRUE(utils::GetBoolean(result.get(), "pinned")); | 257 EXPECT_TRUE(utils::GetBoolean(result.get(), "pinned")); |
259 } | 258 } |
260 | 259 |
261 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, | 260 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, |
262 DefaultToIncognitoWhenItIsForced) { | 261 DefaultToIncognitoWhenItIsForced) { |
263 static const char kArgsWithoutExplicitIncognitoParam[] = | 262 static const char kArgsWithoutExplicitIncognitoParam[] = |
264 "[{\"url\": \"about:blank\"}]"; | 263 "[{\"url\": \"about:blank\"}]"; |
265 // Force Incognito mode. | 264 // Force Incognito mode. |
266 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), | 265 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), |
267 IncognitoModePrefs::FORCED); | 266 IncognitoModePrefs::FORCED); |
268 // Run without an explicit "incognito" param. | 267 // Run without an explicit "incognito" param. |
269 scoped_refptr<WindowsCreateFunction> function(new WindowsCreateFunction()); | 268 scoped_refptr<CreateWindowFunction> function(new CreateWindowFunction()); |
270 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 269 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
271 function->set_extension(extension.get()); | 270 function->set_extension(extension.get()); |
272 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 271 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
273 utils::RunFunctionAndReturnSingleResult( | 272 utils::RunFunctionAndReturnSingleResult( |
274 function.get(), | 273 function.get(), |
275 kArgsWithoutExplicitIncognitoParam, | 274 kArgsWithoutExplicitIncognitoParam, |
276 browser(), | 275 browser(), |
277 utils::INCLUDE_INCOGNITO))); | 276 utils::INCLUDE_INCOGNITO))); |
278 | 277 |
279 // Make sure it is a new(different) window. | 278 // Make sure it is a new(different) window. |
280 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), | 279 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), |
281 utils::GetInteger(result.get(), "id")); | 280 utils::GetInteger(result.get(), "id")); |
282 // ... and it is incognito. | 281 // ... and it is incognito. |
283 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 282 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
284 | 283 |
285 // Now try creating a window from incognito window. | 284 // Now try creating a window from incognito window. |
286 Browser* incognito_browser = CreateIncognitoBrowser(); | 285 Browser* incognito_browser = CreateIncognitoBrowser(); |
287 // Run without an explicit "incognito" param. | 286 // Run without an explicit "incognito" param. |
288 function = new WindowsCreateFunction(); | 287 function = new CreateWindowFunction(); |
289 function->set_extension(extension.get()); | 288 function->set_extension(extension.get()); |
290 result.reset(utils::ToDictionary( | 289 result.reset(utils::ToDictionary( |
291 utils::RunFunctionAndReturnSingleResult( | 290 utils::RunFunctionAndReturnSingleResult( |
292 function.get(), | 291 function.get(), |
293 kArgsWithoutExplicitIncognitoParam, | 292 kArgsWithoutExplicitIncognitoParam, |
294 incognito_browser, | 293 incognito_browser, |
295 utils::INCLUDE_INCOGNITO))); | 294 utils::INCLUDE_INCOGNITO))); |
296 // Make sure it is a new(different) window. | 295 // Make sure it is a new(different) window. |
297 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), | 296 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), |
298 utils::GetInteger(result.get(), "id")); | 297 utils::GetInteger(result.get(), "id")); |
299 // ... and it is incognito. | 298 // ... and it is incognito. |
300 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 299 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
301 } | 300 } |
302 | 301 |
303 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, | 302 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, |
304 DefaultToIncognitoWhenItIsForcedAndNoArgs) { | 303 DefaultToIncognitoWhenItIsForcedAndNoArgs) { |
305 static const char kEmptyArgs[] = "[]"; | 304 static const char kEmptyArgs[] = "[]"; |
306 // Force Incognito mode. | 305 // Force Incognito mode. |
307 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), | 306 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), |
308 IncognitoModePrefs::FORCED); | 307 IncognitoModePrefs::FORCED); |
309 // Run without an explicit "incognito" param. | 308 // Run without an explicit "incognito" param. |
310 scoped_refptr<WindowsCreateFunction> function = new WindowsCreateFunction(); | 309 scoped_refptr<CreateWindowFunction> function = new CreateWindowFunction(); |
311 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 310 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
312 function->set_extension(extension.get()); | 311 function->set_extension(extension.get()); |
313 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 312 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
314 utils::RunFunctionAndReturnSingleResult(function.get(), | 313 utils::RunFunctionAndReturnSingleResult(function.get(), |
315 kEmptyArgs, | 314 kEmptyArgs, |
316 browser(), | 315 browser(), |
317 utils::INCLUDE_INCOGNITO))); | 316 utils::INCLUDE_INCOGNITO))); |
318 | 317 |
319 // Make sure it is a new(different) window. | 318 // Make sure it is a new(different) window. |
320 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), | 319 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), |
321 utils::GetInteger(result.get(), "id")); | 320 utils::GetInteger(result.get(), "id")); |
322 // ... and it is incognito. | 321 // ... and it is incognito. |
323 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 322 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
324 | 323 |
325 // Now try creating a window from incognito window. | 324 // Now try creating a window from incognito window. |
326 Browser* incognito_browser = CreateIncognitoBrowser(); | 325 Browser* incognito_browser = CreateIncognitoBrowser(); |
327 // Run without an explicit "incognito" param. | 326 // Run without an explicit "incognito" param. |
328 function = new WindowsCreateFunction(); | 327 function = new CreateWindowFunction(); |
329 function->set_extension(extension.get()); | 328 function->set_extension(extension.get()); |
330 result.reset(utils::ToDictionary( | 329 result.reset(utils::ToDictionary( |
331 utils::RunFunctionAndReturnSingleResult(function.get(), | 330 utils::RunFunctionAndReturnSingleResult(function.get(), |
332 kEmptyArgs, | 331 kEmptyArgs, |
333 incognito_browser, | 332 incognito_browser, |
334 utils::INCLUDE_INCOGNITO))); | 333 utils::INCLUDE_INCOGNITO))); |
335 // Make sure it is a new(different) window. | 334 // Make sure it is a new(different) window. |
336 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), | 335 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), |
337 utils::GetInteger(result.get(), "id")); | 336 utils::GetInteger(result.get(), "id")); |
338 // ... and it is incognito. | 337 // ... and it is incognito. |
339 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 338 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
340 } | 339 } |
341 | 340 |
342 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, | 341 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, |
343 DontCreateNormalWindowWhenIncognitoForced) { | 342 DontCreateNormalWindowWhenIncognitoForced) { |
344 static const char kArgsWithExplicitIncognitoParam[] = | 343 static const char kArgsWithExplicitIncognitoParam[] = |
345 "[{\"url\": \"about:blank\", \"incognito\": false }]"; | 344 "[{\"url\": \"about:blank\", \"incognito\": false }]"; |
346 // Force Incognito mode. | 345 // Force Incognito mode. |
347 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), | 346 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), |
348 IncognitoModePrefs::FORCED); | 347 IncognitoModePrefs::FORCED); |
349 | 348 |
350 // Run with an explicit "incognito" param. | 349 // Run with an explicit "incognito" param. |
351 scoped_refptr<WindowsCreateFunction> function = new WindowsCreateFunction(); | 350 scoped_refptr<CreateWindowFunction> function = new CreateWindowFunction(); |
352 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 351 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
353 function->set_extension(extension.get()); | 352 function->set_extension(extension.get()); |
354 EXPECT_TRUE(MatchPattern( | 353 EXPECT_TRUE(MatchPattern( |
355 utils::RunFunctionAndReturnError(function.get(), | 354 utils::RunFunctionAndReturnError(function.get(), |
356 kArgsWithExplicitIncognitoParam, | 355 kArgsWithExplicitIncognitoParam, |
357 browser()), | 356 browser()), |
358 keys::kIncognitoModeIsForced)); | 357 keys::kIncognitoModeIsForced)); |
359 | 358 |
360 // Now try opening a normal window from incognito window. | 359 // Now try opening a normal window from incognito window. |
361 Browser* incognito_browser = CreateIncognitoBrowser(); | 360 Browser* incognito_browser = CreateIncognitoBrowser(); |
362 // Run with an explicit "incognito" param. | 361 // Run with an explicit "incognito" param. |
363 function = new WindowsCreateFunction(); | 362 function = new CreateWindowFunction(); |
364 function->set_extension(extension.get()); | 363 function->set_extension(extension.get()); |
365 EXPECT_TRUE(MatchPattern( | 364 EXPECT_TRUE(MatchPattern( |
366 utils::RunFunctionAndReturnError(function.get(), | 365 utils::RunFunctionAndReturnError(function.get(), |
367 kArgsWithExplicitIncognitoParam, | 366 kArgsWithExplicitIncognitoParam, |
368 incognito_browser), | 367 incognito_browser), |
369 keys::kIncognitoModeIsForced)); | 368 keys::kIncognitoModeIsForced)); |
370 } | 369 } |
371 | 370 |
372 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, | 371 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, |
373 DontCreateIncognitoWindowWhenIncognitoDisabled) { | 372 DontCreateIncognitoWindowWhenIncognitoDisabled) { |
374 static const char kArgs[] = | 373 static const char kArgs[] = |
375 "[{\"url\": \"about:blank\", \"incognito\": true }]"; | 374 "[{\"url\": \"about:blank\", \"incognito\": true }]"; |
376 | 375 |
377 Browser* incognito_browser = CreateIncognitoBrowser(); | 376 Browser* incognito_browser = CreateIncognitoBrowser(); |
378 // Disable Incognito mode. | 377 // Disable Incognito mode. |
379 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), | 378 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), |
380 IncognitoModePrefs::DISABLED); | 379 IncognitoModePrefs::DISABLED); |
381 // Run in normal window. | 380 // Run in normal window. |
382 scoped_refptr<WindowsCreateFunction> function = new WindowsCreateFunction(); | 381 scoped_refptr<CreateWindowFunction> function = new CreateWindowFunction(); |
383 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 382 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
384 function->set_extension(extension.get()); | 383 function->set_extension(extension.get()); |
385 EXPECT_TRUE(MatchPattern( | 384 EXPECT_TRUE(MatchPattern( |
386 utils::RunFunctionAndReturnError(function.get(), | 385 utils::RunFunctionAndReturnError(function.get(), |
387 kArgs, | 386 kArgs, |
388 browser()), | 387 browser()), |
389 keys::kIncognitoModeIsDisabled)); | 388 keys::kIncognitoModeIsDisabled)); |
390 | 389 |
391 // Run in incognito window. | 390 // Run in incognito window. |
392 function = new WindowsCreateFunction(); | 391 function = new CreateWindowFunction(); |
393 function->set_extension(extension.get()); | 392 function->set_extension(extension.get()); |
394 EXPECT_TRUE(MatchPattern( | 393 EXPECT_TRUE(MatchPattern( |
395 utils::RunFunctionAndReturnError(function.get(), | 394 utils::RunFunctionAndReturnError(function.get(), |
396 kArgs, | 395 kArgs, |
397 incognito_browser), | 396 incognito_browser), |
398 keys::kIncognitoModeIsDisabled)); | 397 keys::kIncognitoModeIsDisabled)); |
399 } | 398 } |
400 | 399 |
401 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, QueryCurrentWindowTabs) { | 400 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, QueryCurrentWindowTabs) { |
402 const size_t kExtraWindows = 3; | 401 const size_t kExtraWindows = 3; |
403 for (size_t i = 0; i < kExtraWindows; ++i) | 402 for (size_t i = 0; i < kExtraWindows; ++i) |
404 CreateBrowser(browser()->profile()); | 403 CreateBrowser(browser()->profile()); |
405 | 404 |
406 GURL url; | 405 GURL url; |
407 AddTabAtIndexToBrowser(browser(), 0, url, content::PAGE_TRANSITION_LINK); | 406 AddTabAtIndexToBrowser(browser(), 0, url, content::PAGE_TRANSITION_LINK); |
408 int window_id = ExtensionTabUtil::GetWindowId(browser()); | 407 int window_id = ExtensionTabUtil::GetWindowId(browser()); |
409 | 408 |
410 // Get tabs in the 'current' window called from non-focused browser. | 409 // Get tabs in the 'current' window called from non-focused browser. |
411 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | 410 scoped_refptr<QueryTabsFunction> function = new QueryTabsFunction(); |
412 function->set_extension(utils::CreateEmptyExtension().get()); | 411 function->set_extension(utils::CreateEmptyExtension().get()); |
413 scoped_ptr<base::ListValue> result(utils::ToList( | 412 scoped_ptr<base::ListValue> result(utils::ToList( |
414 utils::RunFunctionAndReturnSingleResult(function.get(), | 413 utils::RunFunctionAndReturnSingleResult(function.get(), |
415 "[{\"currentWindow\":true}]", | 414 "[{\"currentWindow\":true}]", |
416 browser()))); | 415 browser()))); |
417 | 416 |
418 ListValue* result_tabs = result.get(); | 417 ListValue* result_tabs = result.get(); |
419 // We should have one initial tab and one added tab. | 418 // We should have one initial tab and one added tab. |
420 EXPECT_EQ(2u, result_tabs->GetSize()); | 419 EXPECT_EQ(2u, result_tabs->GetSize()); |
421 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { | 420 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { |
422 DictionaryValue* result_tab = NULL; | 421 DictionaryValue* result_tab = NULL; |
423 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); | 422 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); |
424 EXPECT_EQ(window_id, utils::GetInteger(result_tab, keys::kWindowIdKey)); | 423 EXPECT_EQ(window_id, utils::GetInteger(result_tab, keys::kWindowIdKey)); |
425 } | 424 } |
426 | 425 |
427 // Get tabs NOT in the 'current' window called from non-focused browser. | 426 // Get tabs NOT in the 'current' window called from non-focused browser. |
428 function = new TabsQueryFunction(); | 427 function = new QueryTabsFunction(); |
429 function->set_extension(utils::CreateEmptyExtension().get()); | 428 function->set_extension(utils::CreateEmptyExtension().get()); |
430 result.reset(utils::ToList( | 429 result.reset(utils::ToList( |
431 utils::RunFunctionAndReturnSingleResult(function.get(), | 430 utils::RunFunctionAndReturnSingleResult(function.get(), |
432 "[{\"currentWindow\":false}]", | 431 "[{\"currentWindow\":false}]", |
433 browser()))); | 432 browser()))); |
434 | 433 |
435 result_tabs = result.get(); | 434 result_tabs = result.get(); |
436 // We should have one tab for each extra window. | 435 // We should have one tab for each extra window. |
437 EXPECT_EQ(kExtraWindows, result_tabs->GetSize()); | 436 EXPECT_EQ(kExtraWindows, result_tabs->GetSize()); |
438 for (size_t i = 0; i < kExtraWindows; ++i) { | 437 for (size_t i = 0; i < kExtraWindows; ++i) { |
439 DictionaryValue* result_tab = NULL; | 438 DictionaryValue* result_tab = NULL; |
440 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); | 439 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); |
441 EXPECT_NE(window_id, utils::GetInteger(result_tab, keys::kWindowIdKey)); | 440 EXPECT_NE(window_id, utils::GetInteger(result_tab, keys::kWindowIdKey)); |
442 } | 441 } |
443 } | 442 } |
444 | 443 |
445 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DontCreateTabInClosingPopupWindow) { | 444 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DontCreateTabInClosingPopupWindow) { |
446 // Test creates new popup window, closes it right away and then tries to open | 445 // Test creates new popup window, closes it right away and then tries to open |
447 // a new tab in it. Tab should not be opened in the popup window, but in a | 446 // a new tab in it. Tab should not be opened in the popup window, but in a |
448 // tabbed browser window. | 447 // tabbed browser window. |
449 Browser* popup_browser = new Browser( | 448 Browser* popup_browser = new Browser( |
450 Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); | 449 Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); |
451 int window_id = ExtensionTabUtil::GetWindowId(popup_browser); | 450 int window_id = ExtensionTabUtil::GetWindowId(popup_browser); |
452 chrome::CloseWindow(popup_browser); | 451 chrome::CloseWindow(popup_browser); |
453 | 452 |
454 scoped_refptr<TabsCreateFunction> create_tab_function( | 453 scoped_refptr<CreateTabFunction> create_tab_function(new CreateTabFunction()); |
455 new TabsCreateFunction()); | |
456 create_tab_function->set_extension(utils::CreateEmptyExtension().get()); | 454 create_tab_function->set_extension(utils::CreateEmptyExtension().get()); |
457 // Without a callback the function will not generate a result. | 455 // Without a callback the function will not generate a result. |
458 create_tab_function->set_has_callback(true); | 456 create_tab_function->set_has_callback(true); |
459 | 457 |
460 static const char kNewBlankTabArgs[] = | 458 static const char kNewBlankTabArgs[] = |
461 "[{\"url\": \"about:blank\", \"windowId\": %u}]"; | 459 "[{\"url\": \"about:blank\", \"windowId\": %u}]"; |
462 | 460 |
463 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 461 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
464 utils::RunFunctionAndReturnSingleResult( | 462 utils::RunFunctionAndReturnSingleResult( |
465 create_tab_function.get(), | 463 create_tab_function.get(), |
466 base::StringPrintf(kNewBlankTabArgs, window_id), | 464 base::StringPrintf(kNewBlankTabArgs, window_id), |
467 browser()))); | 465 browser()))); |
468 | 466 |
469 EXPECT_NE(window_id, utils::GetInteger(result.get(), "windowId")); | 467 EXPECT_NE(window_id, utils::GetInteger(result.get(), "windowId")); |
470 } | 468 } |
471 | 469 |
472 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, InvalidUpdateWindowState) { | 470 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, InvalidUpdateWindowState) { |
473 int window_id = ExtensionTabUtil::GetWindowId(browser()); | 471 int window_id = ExtensionTabUtil::GetWindowId(browser()); |
474 | 472 |
475 static const char kArgsMinimizedWithFocus[] = | 473 static const char kArgsMinimizedWithFocus[] = |
476 "[%u, {\"state\": \"minimized\", \"focused\": true}]"; | 474 "[%u, {\"state\": \"minimized\", \"focused\": true}]"; |
477 scoped_refptr<WindowsUpdateFunction> function = new WindowsUpdateFunction(); | 475 scoped_refptr<UpdateWindowFunction> function = new UpdateWindowFunction(); |
478 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); | 476 scoped_refptr<extensions::Extension> extension(utils::CreateEmptyExtension()); |
479 function->set_extension(extension.get()); | 477 function->set_extension(extension.get()); |
480 EXPECT_TRUE(MatchPattern( | 478 EXPECT_TRUE(MatchPattern( |
481 utils::RunFunctionAndReturnError( | 479 utils::RunFunctionAndReturnError( |
482 function.get(), | 480 function.get(), |
483 base::StringPrintf(kArgsMinimizedWithFocus, window_id), | 481 base::StringPrintf(kArgsMinimizedWithFocus, window_id), |
484 browser()), | 482 browser()), |
485 keys::kInvalidWindowStateError)); | 483 keys::kInvalidWindowStateError)); |
486 | 484 |
487 static const char kArgsMaximizedWithoutFocus[] = | 485 static const char kArgsMaximizedWithoutFocus[] = |
488 "[%u, {\"state\": \"maximized\", \"focused\": false}]"; | 486 "[%u, {\"state\": \"maximized\", \"focused\": false}]"; |
489 function = new WindowsUpdateFunction(); | 487 function = new UpdateWindowFunction(); |
490 function->set_extension(extension.get()); | 488 function->set_extension(extension.get()); |
491 EXPECT_TRUE(MatchPattern( | 489 EXPECT_TRUE(MatchPattern( |
492 utils::RunFunctionAndReturnError( | 490 utils::RunFunctionAndReturnError( |
493 function.get(), | 491 function.get(), |
494 base::StringPrintf(kArgsMaximizedWithoutFocus, window_id), | 492 base::StringPrintf(kArgsMaximizedWithoutFocus, window_id), |
495 browser()), | 493 browser()), |
496 keys::kInvalidWindowStateError)); | 494 keys::kInvalidWindowStateError)); |
497 | 495 |
498 static const char kArgsMinimizedWithBounds[] = | 496 static const char kArgsMinimizedWithBounds[] = |
499 "[%u, {\"state\": \"minimized\", \"width\": 500}]"; | 497 "[%u, {\"state\": \"minimized\", \"width\": 500}]"; |
500 function = new WindowsUpdateFunction(); | 498 function = new UpdateWindowFunction(); |
501 function->set_extension(extension.get()); | 499 function->set_extension(extension.get()); |
502 EXPECT_TRUE(MatchPattern( | 500 EXPECT_TRUE(MatchPattern( |
503 utils::RunFunctionAndReturnError( | 501 utils::RunFunctionAndReturnError( |
504 function.get(), | 502 function.get(), |
505 base::StringPrintf(kArgsMinimizedWithBounds, window_id), | 503 base::StringPrintf(kArgsMinimizedWithBounds, window_id), |
506 browser()), | 504 browser()), |
507 keys::kInvalidWindowStateError)); | 505 keys::kInvalidWindowStateError)); |
508 | 506 |
509 static const char kArgsMaximizedWithBounds[] = | 507 static const char kArgsMaximizedWithBounds[] = |
510 "[%u, {\"state\": \"maximized\", \"width\": 500}]"; | 508 "[%u, {\"state\": \"maximized\", \"width\": 500}]"; |
511 function = new WindowsUpdateFunction(); | 509 function = new UpdateWindowFunction(); |
512 function->set_extension(extension.get()); | 510 function->set_extension(extension.get()); |
513 EXPECT_TRUE(MatchPattern( | 511 EXPECT_TRUE(MatchPattern( |
514 utils::RunFunctionAndReturnError( | 512 utils::RunFunctionAndReturnError( |
515 function.get(), | 513 function.get(), |
516 base::StringPrintf(kArgsMaximizedWithBounds, window_id), | 514 base::StringPrintf(kArgsMaximizedWithBounds, window_id), |
517 browser()), | 515 browser()), |
518 keys::kInvalidWindowStateError)); | 516 keys::kInvalidWindowStateError)); |
519 } | 517 } |
520 | 518 |
521 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DuplicateTab) { | 519 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DuplicateTab) { |
522 static const char kNewBlankTabArgs[] ="about:blank"; | 520 static const char kNewBlankTabArgs[] ="about:blank"; |
523 | 521 |
524 content::OpenURLParams params(GURL(kNewBlankTabArgs), content::Referrer(), | 522 content::OpenURLParams params(GURL(kNewBlankTabArgs), content::Referrer(), |
525 NEW_FOREGROUND_TAB, | 523 NEW_FOREGROUND_TAB, |
526 content::PAGE_TRANSITION_LINK, false); | 524 content::PAGE_TRANSITION_LINK, false); |
527 content::WebContents* web_contents = browser()->OpenURL(params); | 525 content::WebContents* web_contents = browser()->OpenURL(params); |
528 int tab_id = ExtensionTabUtil::GetTabId(web_contents); | 526 int tab_id = ExtensionTabUtil::GetTabId(web_contents); |
529 int window_id = ExtensionTabUtil::GetWindowIdOfTab(web_contents); | 527 int window_id = ExtensionTabUtil::GetWindowIdOfTab(web_contents); |
530 int tab_index = -1; | 528 int tab_index = -1; |
531 TabStripModel* tab_strip; | 529 TabStripModel* tab_strip; |
532 ExtensionTabUtil::GetTabStripModel(web_contents, &tab_strip, &tab_index); | 530 ExtensionTabUtil::GetTabStripModel(web_contents, &tab_strip, &tab_index); |
533 | 531 |
534 scoped_refptr<TabsDuplicateFunction> duplicate_tab_function( | 532 scoped_refptr<DuplicateTabFunction> duplicate_tab_function( |
535 new TabsDuplicateFunction()); | 533 new DuplicateTabFunction()); |
536 scoped_ptr<base::DictionaryValue> test_extension_value( | 534 scoped_ptr<base::DictionaryValue> test_extension_value( |
537 utils::ParseDictionary( | 535 utils::ParseDictionary( |
538 "{\"name\": \"Test\", \"version\": \"1.0\", \"permissions\": [\"tabs\"]}" | 536 "{\"name\": \"Test\", \"version\": \"1.0\", \"permissions\": [\"tabs\"]}" |
539 )); | 537 )); |
540 scoped_refptr<extensions::Extension> empty_tab_extension( | 538 scoped_refptr<extensions::Extension> empty_tab_extension( |
541 utils::CreateExtension(test_extension_value.get())); | 539 utils::CreateExtension(test_extension_value.get())); |
542 duplicate_tab_function->set_extension(empty_tab_extension.get()); | 540 duplicate_tab_function->set_extension(empty_tab_extension.get()); |
543 duplicate_tab_function->set_has_callback(true); | 541 duplicate_tab_function->set_has_callback(true); |
544 | 542 |
545 scoped_ptr<base::DictionaryValue> duplicate_result(utils::ToDictionary( | 543 scoped_ptr<base::DictionaryValue> duplicate_result(utils::ToDictionary( |
(...skipping 22 matching lines...) Expand all Loading... |
568 content::OpenURLParams params(GURL(kNewBlankTabArgs), content::Referrer(), | 566 content::OpenURLParams params(GURL(kNewBlankTabArgs), content::Referrer(), |
569 NEW_FOREGROUND_TAB, | 567 NEW_FOREGROUND_TAB, |
570 content::PAGE_TRANSITION_LINK, false); | 568 content::PAGE_TRANSITION_LINK, false); |
571 content::WebContents* web_contents = browser()->OpenURL(params); | 569 content::WebContents* web_contents = browser()->OpenURL(params); |
572 int tab_id = ExtensionTabUtil::GetTabId(web_contents); | 570 int tab_id = ExtensionTabUtil::GetTabId(web_contents); |
573 int window_id = ExtensionTabUtil::GetWindowIdOfTab(web_contents); | 571 int window_id = ExtensionTabUtil::GetWindowIdOfTab(web_contents); |
574 int tab_index = -1; | 572 int tab_index = -1; |
575 TabStripModel* tab_strip; | 573 TabStripModel* tab_strip; |
576 ExtensionTabUtil::GetTabStripModel(web_contents, &tab_strip, &tab_index); | 574 ExtensionTabUtil::GetTabStripModel(web_contents, &tab_strip, &tab_index); |
577 | 575 |
578 scoped_refptr<TabsDuplicateFunction> duplicate_tab_function( | 576 scoped_refptr<DuplicateTabFunction> duplicate_tab_function( |
579 new TabsDuplicateFunction()); | 577 new DuplicateTabFunction()); |
580 scoped_refptr<extensions::Extension> empty_extension( | 578 scoped_refptr<extensions::Extension> empty_extension( |
581 utils::CreateEmptyExtension()); | 579 utils::CreateEmptyExtension()); |
582 duplicate_tab_function->set_extension(empty_extension.get()); | 580 duplicate_tab_function->set_extension(empty_extension.get()); |
583 duplicate_tab_function->set_has_callback(true); | 581 duplicate_tab_function->set_has_callback(true); |
584 | 582 |
585 scoped_ptr<base::DictionaryValue> duplicate_result(utils::ToDictionary( | 583 scoped_ptr<base::DictionaryValue> duplicate_result(utils::ToDictionary( |
586 utils::RunFunctionAndReturnSingleResult( | 584 utils::RunFunctionAndReturnSingleResult( |
587 duplicate_tab_function.get(), base::StringPrintf("[%u]", tab_id), | 585 duplicate_tab_function.get(), base::StringPrintf("[%u]", tab_id), |
588 browser()))); | 586 browser()))); |
589 | 587 |
590 int duplicate_tab_id = utils::GetInteger(duplicate_result.get(), "id"); | 588 int duplicate_tab_id = utils::GetInteger(duplicate_result.get(), "id"); |
591 int duplicate_tab_window_id = utils::GetInteger(duplicate_result.get(), | 589 int duplicate_tab_window_id = utils::GetInteger(duplicate_result.get(), |
592 "windowId"); | 590 "windowId"); |
593 int duplicate_tab_index = utils::GetInteger(duplicate_result.get(), "index"); | 591 int duplicate_tab_index = utils::GetInteger(duplicate_result.get(), "index"); |
594 EXPECT_EQ(base::Value::TYPE_DICTIONARY, duplicate_result->GetType()); | 592 EXPECT_EQ(base::Value::TYPE_DICTIONARY, duplicate_result->GetType()); |
595 // Duplicate tab id should be different from the original tab id. | 593 // Duplicate tab id should be different from the original tab id. |
596 EXPECT_NE(tab_id, duplicate_tab_id); | 594 EXPECT_NE(tab_id, duplicate_tab_id); |
597 EXPECT_EQ(window_id, duplicate_tab_window_id); | 595 EXPECT_EQ(window_id, duplicate_tab_window_id); |
598 EXPECT_EQ(tab_index + 1, duplicate_tab_index); | 596 EXPECT_EQ(tab_index + 1, duplicate_tab_index); |
599 // The test empty extension has no permissions, therefore |duplicate_result| | 597 // The test empty extension has no permissions, therefore |duplicate_result| |
600 // should not contain url, title, and faviconUrl in the function result. | 598 // should not contain url, title, and faviconUrl in the function result. |
601 EXPECT_FALSE(utils::HasPrivacySensitiveFields(duplicate_result.get())); | 599 EXPECT_FALSE(utils::HasPrivacySensitiveFields(duplicate_result.get())); |
602 } | 600 } |
OLD | NEW |