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/extension_tab_util.h" | 5 #include "chrome/browser/extensions/extension_tab_util.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 | 326 |
327 int ExtensionTabUtil::GetWindowIdOfTab(const WebContents* web_contents) { | 327 int ExtensionTabUtil::GetWindowIdOfTab(const WebContents* web_contents) { |
328 return SessionTabHelper::IdForWindowContainingTab(web_contents); | 328 return SessionTabHelper::IdForWindowContainingTab(web_contents); |
329 } | 329 } |
330 | 330 |
331 // static | 331 // static |
332 std::unique_ptr<api::tabs::Tab> ExtensionTabUtil::CreateTabObject( | 332 std::unique_ptr<api::tabs::Tab> ExtensionTabUtil::CreateTabObject( |
333 WebContents* contents, | 333 WebContents* contents, |
334 TabStripModel* tab_strip, | 334 TabStripModel* tab_strip, |
335 int tab_index, | 335 int tab_index, |
336 const Extension* extension) { | 336 const Extension* extension, |
| 337 UrlType url_type) { |
337 // If we have a matching AppWindow with a controller, get the tab value | 338 // If we have a matching AppWindow with a controller, get the tab value |
338 // from its controller instead. | 339 // from its controller instead. |
339 WindowController* controller = GetAppWindowController(contents); | 340 WindowController* controller = GetAppWindowController(contents); |
340 if (controller && | 341 if (controller && |
341 (!extension || controller->IsVisibleToExtension(extension))) { | 342 (!extension || controller->IsVisibleToExtension(extension))) { |
342 return controller->CreateTabObject(extension, tab_index); | 343 return controller->CreateTabObject(extension, tab_index); |
343 } | 344 } |
344 std::unique_ptr<api::tabs::Tab> result = | 345 std::unique_ptr<api::tabs::Tab> result = |
345 CreateTabObject(contents, tab_strip, tab_index); | 346 CreateTabObject(contents, tab_strip, tab_index, url_type); |
346 ScrubTabForExtension(extension, contents, result.get()); | 347 ScrubTabForExtension(extension, contents, result.get()); |
347 return result; | 348 return result; |
348 } | 349 } |
349 | 350 |
350 std::unique_ptr<base::ListValue> ExtensionTabUtil::CreateTabList( | 351 std::unique_ptr<base::ListValue> ExtensionTabUtil::CreateTabList( |
351 const Browser* browser, | 352 const Browser* browser, |
352 const Extension* extension) { | 353 const Extension* extension) { |
353 std::unique_ptr<base::ListValue> tab_list(new base::ListValue()); | 354 std::unique_ptr<base::ListValue> tab_list(new base::ListValue()); |
354 TabStripModel* tab_strip = browser->tab_strip_model(); | 355 TabStripModel* tab_strip = browser->tab_strip_model(); |
355 for (int i = 0; i < tab_strip->count(); ++i) { | 356 for (int i = 0; i < tab_strip->count(); ++i) { |
356 tab_list->Append( | 357 tab_list->Append( |
357 CreateTabObject(tab_strip->GetWebContentsAt(i), tab_strip, i, extension) | 358 CreateTabObject(tab_strip->GetWebContentsAt(i), tab_strip, i, extension) |
358 ->ToValue()); | 359 ->ToValue()); |
359 } | 360 } |
360 | 361 |
361 return tab_list; | 362 return tab_list; |
362 } | 363 } |
363 | 364 |
364 // static | 365 // static |
365 std::unique_ptr<api::tabs::Tab> ExtensionTabUtil::CreateTabObject( | 366 std::unique_ptr<api::tabs::Tab> ExtensionTabUtil::CreateTabObject( |
366 content::WebContents* contents, | 367 content::WebContents* contents, |
367 TabStripModel* tab_strip, | 368 TabStripModel* tab_strip, |
368 int tab_index) { | 369 int tab_index, |
| 370 UrlType url_type) { |
369 // If we have a matching AppWindow with a controller, get the tab value | 371 // If we have a matching AppWindow with a controller, get the tab value |
370 // from its controller instead. | 372 // from its controller instead. |
371 WindowController* controller = GetAppWindowController(contents); | 373 WindowController* controller = GetAppWindowController(contents); |
372 if (controller) | 374 if (controller) |
373 return controller->CreateTabObject(nullptr, tab_index); | 375 return controller->CreateTabObject(nullptr, tab_index); |
374 | 376 |
375 if (!tab_strip) | 377 if (!tab_strip) |
376 ExtensionTabUtil::GetTabStripModel(contents, &tab_strip, &tab_index); | 378 ExtensionTabUtil::GetTabStripModel(contents, &tab_strip, &tab_index); |
377 bool is_loading = contents->IsLoading(); | 379 bool is_loading = contents->IsLoading(); |
378 std::unique_ptr<api::tabs::Tab> tab_object(new api::tabs::Tab); | 380 std::unique_ptr<api::tabs::Tab> tab_object(new api::tabs::Tab); |
(...skipping 10 matching lines...) Expand all Loading... |
389 g_browser_process->GetTabManager()->IsTabDiscarded(contents); | 391 g_browser_process->GetTabManager()->IsTabDiscarded(contents); |
390 tab_object->auto_discardable = | 392 tab_object->auto_discardable = |
391 g_browser_process->GetTabManager()->IsTabAutoDiscardable(contents); | 393 g_browser_process->GetTabManager()->IsTabAutoDiscardable(contents); |
392 tab_object->muted_info = CreateMutedInfo(contents); | 394 tab_object->muted_info = CreateMutedInfo(contents); |
393 tab_object->incognito = contents->GetBrowserContext()->IsOffTheRecord(); | 395 tab_object->incognito = contents->GetBrowserContext()->IsOffTheRecord(); |
394 tab_object->width.reset( | 396 tab_object->width.reset( |
395 new int(contents->GetContainerBounds().size().width())); | 397 new int(contents->GetContainerBounds().size().width())); |
396 tab_object->height.reset( | 398 tab_object->height.reset( |
397 new int(contents->GetContainerBounds().size().height())); | 399 new int(contents->GetContainerBounds().size().height())); |
398 | 400 |
399 tab_object->url.reset(new std::string(contents->GetURL().spec())); | 401 GURL url; |
| 402 switch (url_type) { |
| 403 case LastCommitted: |
| 404 url = contents->GetLastCommittedURL(); |
| 405 case Visible: |
| 406 url = contents->GetVisibleURL(); |
| 407 } |
| 408 tab_object->url.reset(new std::string(url.spec())); |
400 tab_object->title.reset( | 409 tab_object->title.reset( |
401 new std::string(base::UTF16ToUTF8(contents->GetTitle()))); | 410 new std::string(base::UTF16ToUTF8(contents->GetTitle()))); |
402 NavigationEntry* entry = contents->GetController().GetVisibleEntry(); | 411 NavigationEntry* entry = contents->GetController().GetVisibleEntry(); |
403 if (entry && entry->GetFavicon().valid) | 412 if (entry && entry->GetFavicon().valid) |
404 tab_object->fav_icon_url.reset( | 413 tab_object->fav_icon_url.reset( |
405 new std::string(entry->GetFavicon().url.spec())); | 414 new std::string(entry->GetFavicon().url.spec())); |
406 if (tab_strip) { | 415 if (tab_strip) { |
407 WebContents* opener = tab_strip->GetOpenerOfWebContentsAt(tab_index); | 416 WebContents* opener = tab_strip->GetOpenerOfWebContentsAt(tab_index); |
408 if (opener) | 417 if (opener) |
409 tab_object->opener_tab_id.reset(new int(GetTabIdForExtensions(opener))); | 418 tab_object->opener_tab_id.reset(new int(GetTabIdForExtensions(opener))); |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 chrome::ShowSingletonTabOverwritingNTP(browser, params); | 675 chrome::ShowSingletonTabOverwritingNTP(browser, params); |
667 return true; | 676 return true; |
668 } | 677 } |
669 | 678 |
670 // static | 679 // static |
671 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) { | 680 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) { |
672 return browser && browser->tab_strip_model() && !browser->is_devtools(); | 681 return browser && browser->tab_strip_model() && !browser->is_devtools(); |
673 } | 682 } |
674 | 683 |
675 } // namespace extensions | 684 } // namespace extensions |
OLD | NEW |