| 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 #include "chrome/browser/extensions/api/tabs/tabs.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 keys::kWindowNotFoundError)); | 44 keys::kWindowNotFoundError)); |
| 45 | 45 |
| 46 // Basic window details. | 46 // Basic window details. |
| 47 gfx::Rect bounds; | 47 gfx::Rect bounds; |
| 48 if (browser()->window()->IsMinimized()) | 48 if (browser()->window()->IsMinimized()) |
| 49 bounds = browser()->window()->GetRestoredBounds(); | 49 bounds = browser()->window()->GetRestoredBounds(); |
| 50 else | 50 else |
| 51 bounds = browser()->window()->GetBounds(); | 51 bounds = browser()->window()->GetBounds(); |
| 52 | 52 |
| 53 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 53 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
| 54 utils::RunFunctionAndReturnResult( | 54 utils::RunFunctionAndReturnSingleResult( |
| 55 new GetWindowFunction(), | 55 new GetWindowFunction(), |
| 56 base::StringPrintf("[%u]", window_id), | 56 base::StringPrintf("[%u]", window_id), |
| 57 browser()))); | 57 browser()))); |
| 58 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); | 58 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); |
| 59 EXPECT_FALSE(utils::GetBoolean(result.get(), "incognito")); | 59 EXPECT_FALSE(utils::GetBoolean(result.get(), "incognito")); |
| 60 EXPECT_EQ("normal", utils::GetString(result.get(), "type")); | 60 EXPECT_EQ("normal", utils::GetString(result.get(), "type")); |
| 61 EXPECT_EQ(bounds.x(), utils::GetInteger(result.get(), "left")); | 61 EXPECT_EQ(bounds.x(), utils::GetInteger(result.get(), "left")); |
| 62 EXPECT_EQ(bounds.y(), utils::GetInteger(result.get(), "top")); | 62 EXPECT_EQ(bounds.y(), utils::GetInteger(result.get(), "top")); |
| 63 EXPECT_EQ(bounds.width(), utils::GetInteger(result.get(), "width")); | 63 EXPECT_EQ(bounds.width(), utils::GetInteger(result.get(), "width")); |
| 64 EXPECT_EQ(bounds.height(), utils::GetInteger(result.get(), "height")); | 64 EXPECT_EQ(bounds.height(), utils::GetInteger(result.get(), "height")); |
| 65 | 65 |
| 66 // With "populate" enabled. | 66 // With "populate" enabled. |
| 67 result.reset(utils::ToDictionary( | 67 result.reset(utils::ToDictionary( |
| 68 utils::RunFunctionAndReturnResult( | 68 utils::RunFunctionAndReturnSingleResult( |
| 69 new GetWindowFunction(), | 69 new GetWindowFunction(), |
| 70 base::StringPrintf("[%u, {\"populate\": true}]", window_id), | 70 base::StringPrintf("[%u, {\"populate\": true}]", window_id), |
| 71 browser()))); | 71 browser()))); |
| 72 | 72 |
| 73 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); | 73 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); |
| 74 // "populate" was enabled so tabs should be populated. | 74 // "populate" was enabled so tabs should be populated. |
| 75 ListValue* tabs = NULL; | 75 ListValue* tabs = NULL; |
| 76 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); | 76 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); |
| 77 | 77 |
| 78 // TODO(aa): Can't assume window is focused. On mac, calling Activate() from a | 78 // TODO(aa): Can't assume window is focused. On mac, calling Activate() from a |
| 79 // browser test doesn't seem to do anything, so can't test the opposite | 79 // browser test doesn't seem to do anything, so can't test the opposite |
| 80 // either. | 80 // either. |
| 81 EXPECT_EQ(browser()->window()->IsActive(), | 81 EXPECT_EQ(browser()->window()->IsActive(), |
| 82 utils::GetBoolean(result.get(), "focused")); | 82 utils::GetBoolean(result.get(), "focused")); |
| 83 | 83 |
| 84 // TODO(aa): Minimized and maximized dimensions. Is there a way to set | 84 // TODO(aa): Minimized and maximized dimensions. Is there a way to set |
| 85 // minimize/maximize programmatically? | 85 // minimize/maximize programmatically? |
| 86 | 86 |
| 87 // Popup. | 87 // Popup. |
| 88 Browser* popup_browser = Browser::CreateWithParams( | 88 Browser* popup_browser = Browser::CreateWithParams( |
| 89 Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); | 89 Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile())); |
| 90 result.reset(utils::ToDictionary( | 90 result.reset(utils::ToDictionary( |
| 91 utils::RunFunctionAndReturnResult( | 91 utils::RunFunctionAndReturnSingleResult( |
| 92 new GetWindowFunction(), | 92 new GetWindowFunction(), |
| 93 base::StringPrintf( | 93 base::StringPrintf( |
| 94 "[%u]", ExtensionTabUtil::GetWindowId(popup_browser)), | 94 "[%u]", ExtensionTabUtil::GetWindowId(popup_browser)), |
| 95 browser()))); | 95 browser()))); |
| 96 EXPECT_EQ("popup", utils::GetString(result.get(), "type")); | 96 EXPECT_EQ("popup", utils::GetString(result.get(), "type")); |
| 97 | 97 |
| 98 // Panel. | 98 // Panel. |
| 99 Browser* panel_browser = Browser::CreateWithParams( | 99 Browser* panel_browser = Browser::CreateWithParams( |
| 100 Browser::CreateParams(Browser::TYPE_PANEL, browser()->profile())); | 100 Browser::CreateParams(Browser::TYPE_PANEL, browser()->profile())); |
| 101 result.reset(utils::ToDictionary( | 101 result.reset(utils::ToDictionary( |
| 102 utils::RunFunctionAndReturnResult( | 102 utils::RunFunctionAndReturnSingleResult( |
| 103 new GetWindowFunction(), | 103 new GetWindowFunction(), |
| 104 base::StringPrintf( | 104 base::StringPrintf( |
| 105 "[%u]", ExtensionTabUtil::GetWindowId(panel_browser)), | 105 "[%u]", ExtensionTabUtil::GetWindowId(panel_browser)), |
| 106 browser()))); | 106 browser()))); |
| 107 EXPECT_EQ("panel", utils::GetString(result.get(), "type")); | 107 EXPECT_EQ("panel", utils::GetString(result.get(), "type")); |
| 108 | 108 |
| 109 // Incognito. | 109 // Incognito. |
| 110 Browser* incognito_browser = CreateIncognitoBrowser(); | 110 Browser* incognito_browser = CreateIncognitoBrowser(); |
| 111 int incognito_window_id = ExtensionTabUtil::GetWindowId(incognito_browser); | 111 int incognito_window_id = ExtensionTabUtil::GetWindowId(incognito_browser); |
| 112 | 112 |
| 113 // Without "include_incognito". | 113 // Without "include_incognito". |
| 114 EXPECT_TRUE(MatchPattern( | 114 EXPECT_TRUE(MatchPattern( |
| 115 utils::RunFunctionAndReturnError( | 115 utils::RunFunctionAndReturnError( |
| 116 new GetWindowFunction(), | 116 new GetWindowFunction(), |
| 117 base::StringPrintf("[%u]", incognito_window_id), | 117 base::StringPrintf("[%u]", incognito_window_id), |
| 118 browser()), | 118 browser()), |
| 119 keys::kWindowNotFoundError)); | 119 keys::kWindowNotFoundError)); |
| 120 | 120 |
| 121 // With "include_incognito". | 121 // With "include_incognito". |
| 122 result.reset(utils::ToDictionary( | 122 result.reset(utils::ToDictionary( |
| 123 utils::RunFunctionAndReturnResult( | 123 utils::RunFunctionAndReturnSingleResult( |
| 124 new GetWindowFunction(), | 124 new GetWindowFunction(), |
| 125 base::StringPrintf("[%u]", incognito_window_id), | 125 base::StringPrintf("[%u]", incognito_window_id), |
| 126 browser(), | 126 browser(), |
| 127 utils::INCLUDE_INCOGNITO))); | 127 utils::INCLUDE_INCOGNITO))); |
| 128 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 128 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
| 129 } | 129 } |
| 130 | 130 |
| 131 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetCurrentWindow) { | 131 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetCurrentWindow) { |
| 132 int window_id = ExtensionTabUtil::GetWindowId(browser()); | 132 int window_id = ExtensionTabUtil::GetWindowId(browser()); |
| 133 Browser* new_browser = CreateBrowser(browser()->profile()); | 133 Browser* new_browser = CreateBrowser(browser()->profile()); |
| 134 int new_id = ExtensionTabUtil::GetWindowId(new_browser); | 134 int new_id = ExtensionTabUtil::GetWindowId(new_browser); |
| 135 | 135 |
| 136 // Get the current window using new_browser. | 136 // Get the current window using new_browser. |
| 137 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 137 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
| 138 utils::RunFunctionAndReturnResult( | 138 utils::RunFunctionAndReturnSingleResult( |
| 139 new GetCurrentWindowFunction(), | 139 new GetCurrentWindowFunction(), |
| 140 "[]", | 140 "[]", |
| 141 new_browser))); | 141 new_browser))); |
| 142 | 142 |
| 143 // The id should match the window id of the browser instance that was passed | 143 // The id should match the window id of the browser instance that was passed |
| 144 // to RunFunctionAndReturnResult. | 144 // to RunFunctionAndReturnSingleResult. |
| 145 EXPECT_EQ(new_id, utils::GetInteger(result.get(), "id")); | 145 EXPECT_EQ(new_id, utils::GetInteger(result.get(), "id")); |
| 146 ListValue* tabs = NULL; | 146 ListValue* tabs = NULL; |
| 147 EXPECT_FALSE(result.get()->GetList(keys::kTabsKey, &tabs)); | 147 EXPECT_FALSE(result.get()->GetList(keys::kTabsKey, &tabs)); |
| 148 | 148 |
| 149 // Get the current window using the old window and make the tabs populated. | 149 // Get the current window using the old window and make the tabs populated. |
| 150 result.reset(utils::ToDictionary( | 150 result.reset(utils::ToDictionary( |
| 151 utils::RunFunctionAndReturnResult( | 151 utils::RunFunctionAndReturnSingleResult( |
| 152 new GetCurrentWindowFunction(), | 152 new GetCurrentWindowFunction(), |
| 153 "[{\"populate\": true}]", | 153 "[{\"populate\": true}]", |
| 154 browser()))); | 154 browser()))); |
| 155 | 155 |
| 156 // The id should match the window id of the browser instance that was passed | 156 // The id should match the window id of the browser instance that was passed |
| 157 // to RunFunctionAndReturnResult. | 157 // to RunFunctionAndReturnSingleResult. |
| 158 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); | 158 EXPECT_EQ(window_id, utils::GetInteger(result.get(), "id")); |
| 159 // "populate" was enabled so tabs should be populated. | 159 // "populate" was enabled so tabs should be populated. |
| 160 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); | 160 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); |
| 161 } | 161 } |
| 162 | 162 |
| 163 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetLastFocusedWindow) { | 163 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetLastFocusedWindow) { |
| 164 // Create a new window which making it the "last focused" window. | 164 // Create a new window which making it the "last focused" window. |
| 165 // Note that "last focused" means the "top" most window. | 165 // Note that "last focused" means the "top" most window. |
| 166 Browser* new_browser = CreateBrowser(browser()->profile()); | 166 Browser* new_browser = CreateBrowser(browser()->profile()); |
| 167 int focused_window_id = ExtensionTabUtil::GetWindowId(new_browser); | 167 int focused_window_id = ExtensionTabUtil::GetWindowId(new_browser); |
| 168 | 168 |
| 169 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 169 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
| 170 utils::RunFunctionAndReturnResult( | 170 utils::RunFunctionAndReturnSingleResult( |
| 171 new GetLastFocusedWindowFunction(), | 171 new GetLastFocusedWindowFunction(), |
| 172 "[]", | 172 "[]", |
| 173 new_browser))); | 173 new_browser))); |
| 174 | 174 |
| 175 // The id should always match the last focused window and does not depend | 175 // The id should always match the last focused window and does not depend |
| 176 // on what was passed to RunFunctionAndReturnResult. | 176 // on what was passed to RunFunctionAndReturnSingleResult. |
| 177 EXPECT_EQ(focused_window_id, utils::GetInteger(result.get(), "id")); | 177 EXPECT_EQ(focused_window_id, utils::GetInteger(result.get(), "id")); |
| 178 ListValue* tabs = NULL; | 178 ListValue* tabs = NULL; |
| 179 EXPECT_FALSE(result.get()->GetList(keys::kTabsKey, &tabs)); | 179 EXPECT_FALSE(result.get()->GetList(keys::kTabsKey, &tabs)); |
| 180 | 180 |
| 181 result.reset(utils::ToDictionary( | 181 result.reset(utils::ToDictionary( |
| 182 utils::RunFunctionAndReturnResult( | 182 utils::RunFunctionAndReturnSingleResult( |
| 183 new GetLastFocusedWindowFunction(), | 183 new GetLastFocusedWindowFunction(), |
| 184 "[{\"populate\": true}]", | 184 "[{\"populate\": true}]", |
| 185 browser()))); | 185 browser()))); |
| 186 | 186 |
| 187 // The id should always match the last focused window and does not depend | 187 // The id should always match the last focused window and does not depend |
| 188 // on what was passed to RunFunctionAndReturnResult. | 188 // on what was passed to RunFunctionAndReturnSingleResult. |
| 189 EXPECT_EQ(focused_window_id, utils::GetInteger(result.get(), "id")); | 189 EXPECT_EQ(focused_window_id, utils::GetInteger(result.get(), "id")); |
| 190 // "populate" was enabled so tabs should be populated. | 190 // "populate" was enabled so tabs should be populated. |
| 191 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); | 191 EXPECT_TRUE(result.get()->GetList(keys::kTabsKey, &tabs)); |
| 192 } | 192 } |
| 193 | 193 |
| 194 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) { | 194 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, GetAllWindows) { |
| 195 const size_t NUM_WINDOWS = 5; | 195 const size_t NUM_WINDOWS = 5; |
| 196 std::set<int> window_ids; | 196 std::set<int> window_ids; |
| 197 std::set<int> result_ids; | 197 std::set<int> result_ids; |
| 198 window_ids.insert(ExtensionTabUtil::GetWindowId(browser())); | 198 window_ids.insert(ExtensionTabUtil::GetWindowId(browser())); |
| 199 | 199 |
| 200 for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) { | 200 for (size_t i = 0; i < NUM_WINDOWS - 1; ++i) { |
| 201 Browser* new_browser = CreateBrowser(browser()->profile()); | 201 Browser* new_browser = CreateBrowser(browser()->profile()); |
| 202 window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser)); | 202 window_ids.insert(ExtensionTabUtil::GetWindowId(new_browser)); |
| 203 } | 203 } |
| 204 | 204 |
| 205 scoped_ptr<base::ListValue> result(utils::ToList( | 205 scoped_ptr<base::ListValue> result(utils::ToList( |
| 206 utils::RunFunctionAndReturnResult( | 206 utils::RunFunctionAndReturnSingleResult( |
| 207 new GetAllWindowsFunction(), | 207 new GetAllWindowsFunction(), |
| 208 "[]", | 208 "[]", |
| 209 browser()))); | 209 browser()))); |
| 210 | 210 |
| 211 ListValue* windows = result.get(); | 211 ListValue* windows = result.get(); |
| 212 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); | 212 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); |
| 213 for (size_t i = 0; i < NUM_WINDOWS; ++i) { | 213 for (size_t i = 0; i < NUM_WINDOWS; ++i) { |
| 214 DictionaryValue* result_window = NULL; | 214 DictionaryValue* result_window = NULL; |
| 215 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); | 215 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); |
| 216 result_ids.insert(utils::GetInteger(result_window, "id")); | 216 result_ids.insert(utils::GetInteger(result_window, "id")); |
| 217 | 217 |
| 218 // "populate" was not passed in so tabs are not populated. | 218 // "populate" was not passed in so tabs are not populated. |
| 219 ListValue* tabs = NULL; | 219 ListValue* tabs = NULL; |
| 220 EXPECT_FALSE(result_window->GetList(keys::kTabsKey, &tabs)); | 220 EXPECT_FALSE(result_window->GetList(keys::kTabsKey, &tabs)); |
| 221 } | 221 } |
| 222 // The returned ids should contain all the current browser instance ids. | 222 // The returned ids should contain all the current browser instance ids. |
| 223 EXPECT_EQ(window_ids, result_ids); | 223 EXPECT_EQ(window_ids, result_ids); |
| 224 | 224 |
| 225 result_ids.clear(); | 225 result_ids.clear(); |
| 226 result.reset(utils::ToList( | 226 result.reset(utils::ToList( |
| 227 utils::RunFunctionAndReturnResult( | 227 utils::RunFunctionAndReturnSingleResult( |
| 228 new GetAllWindowsFunction(), | 228 new GetAllWindowsFunction(), |
| 229 "[{\"populate\": true}]", | 229 "[{\"populate\": true}]", |
| 230 browser()))); | 230 browser()))); |
| 231 | 231 |
| 232 windows = result.get(); | 232 windows = result.get(); |
| 233 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); | 233 EXPECT_EQ(NUM_WINDOWS, windows->GetSize()); |
| 234 for (size_t i = 0; i < windows->GetSize(); ++i) { | 234 for (size_t i = 0; i < windows->GetSize(); ++i) { |
| 235 DictionaryValue* result_window = NULL; | 235 DictionaryValue* result_window = NULL; |
| 236 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); | 236 EXPECT_TRUE(windows->GetDictionary(i, &result_window)); |
| 237 result_ids.insert(utils::GetInteger(result_window, "id")); | 237 result_ids.insert(utils::GetInteger(result_window, "id")); |
| 238 | 238 |
| 239 // "populate" was enabled so tabs should be populated. | 239 // "populate" was enabled so tabs should be populated. |
| 240 ListValue* tabs = NULL; | 240 ListValue* tabs = NULL; |
| 241 EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs)); | 241 EXPECT_TRUE(result_window->GetList(keys::kTabsKey, &tabs)); |
| 242 } | 242 } |
| 243 // The returned ids should contain all the current browser instance ids. | 243 // The returned ids should contain all the current browser instance ids. |
| 244 EXPECT_EQ(window_ids, result_ids); | 244 EXPECT_EQ(window_ids, result_ids); |
| 245 } | 245 } |
| 246 | 246 |
| 247 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) { | 247 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, UpdateNoPermissions) { |
| 248 // The test empty extension has no permissions, therefore it should not get | 248 // The test empty extension has no permissions, therefore it should not get |
| 249 // tab data in the function result. | 249 // tab data in the function result. |
| 250 scoped_refptr<UpdateTabFunction> update_tab_function(new UpdateTabFunction()); | 250 scoped_refptr<UpdateTabFunction> update_tab_function(new UpdateTabFunction()); |
| 251 scoped_refptr<extensions::Extension> empty_extension( | 251 scoped_refptr<extensions::Extension> empty_extension( |
| 252 utils::CreateEmptyExtension()); | 252 utils::CreateEmptyExtension()); |
| 253 update_tab_function->set_extension(empty_extension.get()); | 253 update_tab_function->set_extension(empty_extension.get()); |
| 254 // Without a callback the function will not generate a result. | 254 // Without a callback the function will not generate a result. |
| 255 update_tab_function->set_has_callback(true); | 255 update_tab_function->set_has_callback(true); |
| 256 | 256 |
| 257 scoped_ptr<base::Value> result(utils::RunFunctionAndReturnResult( | 257 scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( |
| 258 update_tab_function.get(), | 258 update_tab_function.get(), |
| 259 "[null, {\"url\": \"neutrinos\"}]", | 259 "[null, {\"url\": \"neutrinos\"}]", |
| 260 browser())); | 260 browser())); |
| 261 EXPECT_EQ(base::Value::TYPE_NULL, result->GetType()); | 261 EXPECT_EQ(base::Value::TYPE_NULL, result->GetType()); |
| 262 } | 262 } |
| 263 | 263 |
| 264 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, | 264 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, |
| 265 DefaultToIncognitoWhenItIsForced) { | 265 DefaultToIncognitoWhenItIsForced) { |
| 266 static const char kArgsWithoutExplicitIncognitoParam[] = | 266 static const char kArgsWithoutExplicitIncognitoParam[] = |
| 267 "[{\"url\": \"about:blank\"}]"; | 267 "[{\"url\": \"about:blank\"}]"; |
| 268 // Force Incognito mode. | 268 // Force Incognito mode. |
| 269 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), | 269 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), |
| 270 IncognitoModePrefs::FORCED); | 270 IncognitoModePrefs::FORCED); |
| 271 // Run without an explicit "incognito" param. | 271 // Run without an explicit "incognito" param. |
| 272 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 272 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
| 273 utils::RunFunctionAndReturnResult( | 273 utils::RunFunctionAndReturnSingleResult( |
| 274 new CreateWindowFunction(), | 274 new CreateWindowFunction(), |
| 275 kArgsWithoutExplicitIncognitoParam, | 275 kArgsWithoutExplicitIncognitoParam, |
| 276 browser(), | 276 browser(), |
| 277 utils::INCLUDE_INCOGNITO))); | 277 utils::INCLUDE_INCOGNITO))); |
| 278 | 278 |
| 279 // Make sure it is a new(different) window. | 279 // Make sure it is a new(different) window. |
| 280 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), | 280 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), |
| 281 utils::GetInteger(result.get(), "id")); | 281 utils::GetInteger(result.get(), "id")); |
| 282 // ... and it is incognito. | 282 // ... and it is incognito. |
| 283 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 283 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
| 284 | 284 |
| 285 // Now try creating a window from incognito window. | 285 // Now try creating a window from incognito window. |
| 286 Browser* incognito_browser = CreateIncognitoBrowser(); | 286 Browser* incognito_browser = CreateIncognitoBrowser(); |
| 287 // Run without an explicit "incognito" param. | 287 // Run without an explicit "incognito" param. |
| 288 result.reset(utils::ToDictionary( | 288 result.reset(utils::ToDictionary( |
| 289 utils::RunFunctionAndReturnResult( | 289 utils::RunFunctionAndReturnSingleResult( |
| 290 new CreateWindowFunction(), | 290 new CreateWindowFunction(), |
| 291 kArgsWithoutExplicitIncognitoParam, | 291 kArgsWithoutExplicitIncognitoParam, |
| 292 incognito_browser, | 292 incognito_browser, |
| 293 utils::INCLUDE_INCOGNITO))); | 293 utils::INCLUDE_INCOGNITO))); |
| 294 // Make sure it is a new(different) window. | 294 // Make sure it is a new(different) window. |
| 295 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), | 295 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), |
| 296 utils::GetInteger(result.get(), "id")); | 296 utils::GetInteger(result.get(), "id")); |
| 297 // ... and it is incognito. | 297 // ... and it is incognito. |
| 298 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 298 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
| 299 } | 299 } |
| 300 | 300 |
| 301 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, | 301 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, |
| 302 DefaultToIncognitoWhenItIsForcedAndNoArgs) { | 302 DefaultToIncognitoWhenItIsForcedAndNoArgs) { |
| 303 static const char kEmptyArgs[] = "[]"; | 303 static const char kEmptyArgs[] = "[]"; |
| 304 // Force Incognito mode. | 304 // Force Incognito mode. |
| 305 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), | 305 IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(), |
| 306 IncognitoModePrefs::FORCED); | 306 IncognitoModePrefs::FORCED); |
| 307 // Run without an explicit "incognito" param. | 307 // Run without an explicit "incognito" param. |
| 308 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 308 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
| 309 utils::RunFunctionAndReturnResult( | 309 utils::RunFunctionAndReturnSingleResult( |
| 310 new CreateWindowFunction(), | 310 new CreateWindowFunction(), |
| 311 kEmptyArgs, | 311 kEmptyArgs, |
| 312 browser(), | 312 browser(), |
| 313 utils::INCLUDE_INCOGNITO))); | 313 utils::INCLUDE_INCOGNITO))); |
| 314 | 314 |
| 315 // Make sure it is a new(different) window. | 315 // Make sure it is a new(different) window. |
| 316 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), | 316 EXPECT_NE(ExtensionTabUtil::GetWindowId(browser()), |
| 317 utils::GetInteger(result.get(), "id")); | 317 utils::GetInteger(result.get(), "id")); |
| 318 // ... and it is incognito. | 318 // ... and it is incognito. |
| 319 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 319 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
| 320 | 320 |
| 321 // Now try creating a window from incognito window. | 321 // Now try creating a window from incognito window. |
| 322 Browser* incognito_browser = CreateIncognitoBrowser(); | 322 Browser* incognito_browser = CreateIncognitoBrowser(); |
| 323 // Run without an explicit "incognito" param. | 323 // Run without an explicit "incognito" param. |
| 324 result.reset(utils::ToDictionary( | 324 result.reset(utils::ToDictionary( |
| 325 utils::RunFunctionAndReturnResult( | 325 utils::RunFunctionAndReturnSingleResult( |
| 326 new CreateWindowFunction(), | 326 new CreateWindowFunction(), |
| 327 kEmptyArgs, | 327 kEmptyArgs, |
| 328 incognito_browser, | 328 incognito_browser, |
| 329 utils::INCLUDE_INCOGNITO))); | 329 utils::INCLUDE_INCOGNITO))); |
| 330 // Make sure it is a new(different) window. | 330 // Make sure it is a new(different) window. |
| 331 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), | 331 EXPECT_NE(ExtensionTabUtil::GetWindowId(incognito_browser), |
| 332 utils::GetInteger(result.get(), "id")); | 332 utils::GetInteger(result.get(), "id")); |
| 333 // ... and it is incognito. | 333 // ... and it is incognito. |
| 334 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); | 334 EXPECT_TRUE(utils::GetBoolean(result.get(), "incognito")); |
| 335 } | 335 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 const size_t kExtraWindows = 3; | 391 const size_t kExtraWindows = 3; |
| 392 for (size_t i = 0; i < kExtraWindows; ++i) | 392 for (size_t i = 0; i < kExtraWindows; ++i) |
| 393 CreateBrowser(browser()->profile()); | 393 CreateBrowser(browser()->profile()); |
| 394 | 394 |
| 395 GURL url; | 395 GURL url; |
| 396 AddTabAtIndexToBrowser(browser(), 0, url, content::PAGE_TRANSITION_LINK); | 396 AddTabAtIndexToBrowser(browser(), 0, url, content::PAGE_TRANSITION_LINK); |
| 397 int window_id = ExtensionTabUtil::GetWindowId(browser()); | 397 int window_id = ExtensionTabUtil::GetWindowId(browser()); |
| 398 | 398 |
| 399 // Get tabs in the 'current' window called from non-focused browser. | 399 // Get tabs in the 'current' window called from non-focused browser. |
| 400 scoped_ptr<base::ListValue> result(utils::ToList( | 400 scoped_ptr<base::ListValue> result(utils::ToList( |
| 401 utils::RunFunctionAndReturnResult( | 401 utils::RunFunctionAndReturnSingleResult( |
| 402 new QueryTabsFunction(), | 402 new QueryTabsFunction(), |
| 403 "[{\"currentWindow\":true}]", | 403 "[{\"currentWindow\":true}]", |
| 404 browser()))); | 404 browser()))); |
| 405 | 405 |
| 406 ListValue* result_tabs = result.get(); | 406 ListValue* result_tabs = result.get(); |
| 407 // We should have one initial tab and one added tab. | 407 // We should have one initial tab and one added tab. |
| 408 EXPECT_EQ(2u, result_tabs->GetSize()); | 408 EXPECT_EQ(2u, result_tabs->GetSize()); |
| 409 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { | 409 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { |
| 410 DictionaryValue* result_tab = NULL; | 410 DictionaryValue* result_tab = NULL; |
| 411 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); | 411 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); |
| 412 EXPECT_EQ(window_id, utils::GetInteger(result_tab, keys::kWindowIdKey)); | 412 EXPECT_EQ(window_id, utils::GetInteger(result_tab, keys::kWindowIdKey)); |
| 413 } | 413 } |
| 414 | 414 |
| 415 // Get tabs NOT in the 'current' window called from non-focused browser. | 415 // Get tabs NOT in the 'current' window called from non-focused browser. |
| 416 result.reset(utils::ToList( | 416 result.reset(utils::ToList( |
| 417 utils::RunFunctionAndReturnResult( | 417 utils::RunFunctionAndReturnSingleResult( |
| 418 new QueryTabsFunction(), | 418 new QueryTabsFunction(), |
| 419 "[{\"currentWindow\":false}]", | 419 "[{\"currentWindow\":false}]", |
| 420 browser()))); | 420 browser()))); |
| 421 | 421 |
| 422 result_tabs = result.get(); | 422 result_tabs = result.get(); |
| 423 // We should have one tab for each extra window. | 423 // We should have one tab for each extra window. |
| 424 EXPECT_EQ(kExtraWindows, result_tabs->GetSize()); | 424 EXPECT_EQ(kExtraWindows, result_tabs->GetSize()); |
| 425 for (size_t i = 0; i < kExtraWindows; ++i) { | 425 for (size_t i = 0; i < kExtraWindows; ++i) { |
| 426 DictionaryValue* result_tab = NULL; | 426 DictionaryValue* result_tab = NULL; |
| 427 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); | 427 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 445 | 445 |
| 446 // Needed on Mac and Linux so that the BrowserWindow::IsActive calls work. | 446 // Needed on Mac and Linux so that the BrowserWindow::IsActive calls work. |
| 447 ui_test_utils::RunAllPendingInMessageLoop(); | 447 ui_test_utils::RunAllPendingInMessageLoop(); |
| 448 | 448 |
| 449 GURL url; | 449 GURL url; |
| 450 AddTabAtIndexToBrowser(focused_window, 0, url, content::PAGE_TRANSITION_LINK); | 450 AddTabAtIndexToBrowser(focused_window, 0, url, content::PAGE_TRANSITION_LINK); |
| 451 int focused_window_id = ExtensionTabUtil::GetWindowId(focused_window); | 451 int focused_window_id = ExtensionTabUtil::GetWindowId(focused_window); |
| 452 | 452 |
| 453 // Get tabs in the 'last focused' window called from non-focused browser. | 453 // Get tabs in the 'last focused' window called from non-focused browser. |
| 454 scoped_ptr<base::ListValue> result(utils::ToList( | 454 scoped_ptr<base::ListValue> result(utils::ToList( |
| 455 utils::RunFunctionAndReturnResult( | 455 utils::RunFunctionAndReturnSingleResult( |
| 456 new QueryTabsFunction(), | 456 new QueryTabsFunction(), |
| 457 "[{\"lastFocusedWindow\":true}]", | 457 "[{\"lastFocusedWindow\":true}]", |
| 458 browser()))); | 458 browser()))); |
| 459 | 459 |
| 460 ListValue* result_tabs = result.get(); | 460 ListValue* result_tabs = result.get(); |
| 461 // We should have one initial tab and one added tab. | 461 // We should have one initial tab and one added tab. |
| 462 EXPECT_EQ(2u, result_tabs->GetSize()); | 462 EXPECT_EQ(2u, result_tabs->GetSize()); |
| 463 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { | 463 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { |
| 464 DictionaryValue* result_tab = NULL; | 464 DictionaryValue* result_tab = NULL; |
| 465 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); | 465 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); |
| 466 EXPECT_EQ(focused_window_id, utils::GetInteger(result_tab, | 466 EXPECT_EQ(focused_window_id, utils::GetInteger(result_tab, |
| 467 keys::kWindowIdKey)); | 467 keys::kWindowIdKey)); |
| 468 } | 468 } |
| 469 | 469 |
| 470 // Get tabs NOT in the 'last focused' window called from the focused browser. | 470 // Get tabs NOT in the 'last focused' window called from the focused browser. |
| 471 result.reset(utils::ToList( | 471 result.reset(utils::ToList( |
| 472 utils::RunFunctionAndReturnResult( | 472 utils::RunFunctionAndReturnSingleResult( |
| 473 new QueryTabsFunction(), | 473 new QueryTabsFunction(), |
| 474 "[{\"lastFocusedWindow\":false}]", | 474 "[{\"lastFocusedWindow\":false}]", |
| 475 browser()))); | 475 browser()))); |
| 476 | 476 |
| 477 result_tabs = result.get(); | 477 result_tabs = result.get(); |
| 478 // We should get one tab for each extra window and one for the initial window. | 478 // We should get one tab for each extra window and one for the initial window. |
| 479 EXPECT_EQ(kExtraWindows + 1, result_tabs->GetSize()); | 479 EXPECT_EQ(kExtraWindows + 1, result_tabs->GetSize()); |
| 480 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { | 480 for (size_t i = 0; i < result_tabs->GetSize(); ++i) { |
| 481 DictionaryValue* result_tab = NULL; | 481 DictionaryValue* result_tab = NULL; |
| 482 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); | 482 EXPECT_TRUE(result_tabs->GetDictionary(i, &result_tab)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 495 chrome::CloseWindow(popup_browser); | 495 chrome::CloseWindow(popup_browser); |
| 496 | 496 |
| 497 scoped_refptr<CreateTabFunction> create_tab_function(new CreateTabFunction()); | 497 scoped_refptr<CreateTabFunction> create_tab_function(new CreateTabFunction()); |
| 498 // Without a callback the function will not generate a result. | 498 // Without a callback the function will not generate a result. |
| 499 create_tab_function->set_has_callback(true); | 499 create_tab_function->set_has_callback(true); |
| 500 | 500 |
| 501 static const char kNewBlankTabArgs[] = | 501 static const char kNewBlankTabArgs[] = |
| 502 "[{\"url\": \"about:blank\", \"windowId\": %u}]"; | 502 "[{\"url\": \"about:blank\", \"windowId\": %u}]"; |
| 503 | 503 |
| 504 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( | 504 scoped_ptr<base::DictionaryValue> result(utils::ToDictionary( |
| 505 utils::RunFunctionAndReturnResult( | 505 utils::RunFunctionAndReturnSingleResult( |
| 506 create_tab_function.get(), | 506 create_tab_function.get(), |
| 507 base::StringPrintf(kNewBlankTabArgs, window_id), | 507 base::StringPrintf(kNewBlankTabArgs, window_id), |
| 508 browser()))); | 508 browser()))); |
| 509 | 509 |
| 510 EXPECT_NE(window_id, utils::GetInteger(result.get(), "windowId")); | 510 EXPECT_NE(window_id, utils::GetInteger(result.get(), "windowId")); |
| 511 } | 511 } |
| 512 | 512 |
| 513 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, InvalidUpdateWindowState) { | 513 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, InvalidUpdateWindowState) { |
| 514 int window_id = ExtensionTabUtil::GetWindowId(browser()); | 514 int window_id = ExtensionTabUtil::GetWindowId(browser()); |
| 515 | 515 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 542 | 542 |
| 543 static const char kArgsMaximizedWithBounds[] = | 543 static const char kArgsMaximizedWithBounds[] = |
| 544 "[%u, {\"state\": \"maximized\", \"width\": 500}]"; | 544 "[%u, {\"state\": \"maximized\", \"width\": 500}]"; |
| 545 EXPECT_TRUE(MatchPattern( | 545 EXPECT_TRUE(MatchPattern( |
| 546 utils::RunFunctionAndReturnError( | 546 utils::RunFunctionAndReturnError( |
| 547 new UpdateWindowFunction(), | 547 new UpdateWindowFunction(), |
| 548 base::StringPrintf(kArgsMaximizedWithBounds, window_id), | 548 base::StringPrintf(kArgsMaximizedWithBounds, window_id), |
| 549 browser()), | 549 browser()), |
| 550 keys::kInvalidWindowStateError)); | 550 keys::kInvalidWindowStateError)); |
| 551 } | 551 } |
| OLD | NEW |