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 // Implements the Chrome Extensions WebNavigation API. | 5 // Implements the Chrome Extensions WebNavigation API. |
6 | 6 |
7 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" | 7 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" |
8 | 8 |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/memory/ptr_util.h" |
10 #include "chrome/browser/chrome_notification_types.h" | 11 #include "chrome/browser/chrome_notification_types.h" |
11 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_consta
nts.h" | 12 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_consta
nts.h" |
12 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper
s.h" | 13 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper
s.h" |
13 #include "chrome/browser/extensions/extension_tab_util.h" | 14 #include "chrome/browser/extensions/extension_tab_util.h" |
14 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
15 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
16 #include "chrome/browser/ui/browser_list.h" | 17 #include "chrome/browser/ui/browser_list.h" |
17 #include "chrome/common/extensions/api/web_navigation.h" | 18 #include "chrome/common/extensions/api/web_navigation.h" |
18 #include "content/public/browser/navigation_details.h" | 19 #include "content/public/browser/navigation_details.h" |
19 #include "content/public/browser/navigation_handle.h" | 20 #include "content/public/browser/navigation_handle.h" |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 std::unique_ptr<GetFrame::Params> params(GetFrame::Params::Create(*args_)); | 470 std::unique_ptr<GetFrame::Params> params(GetFrame::Params::Create(*args_)); |
470 EXTENSION_FUNCTION_VALIDATE(params.get()); | 471 EXTENSION_FUNCTION_VALIDATE(params.get()); |
471 int tab_id = params->details.tab_id; | 472 int tab_id = params->details.tab_id; |
472 int frame_id = params->details.frame_id; | 473 int frame_id = params->details.frame_id; |
473 | 474 |
474 content::WebContents* web_contents; | 475 content::WebContents* web_contents; |
475 if (!ExtensionTabUtil::GetTabById(tab_id, browser_context(), | 476 if (!ExtensionTabUtil::GetTabById(tab_id, browser_context(), |
476 include_incognito(), nullptr, nullptr, | 477 include_incognito(), nullptr, nullptr, |
477 &web_contents, nullptr) || | 478 &web_contents, nullptr) || |
478 !web_contents) { | 479 !web_contents) { |
479 return RespondNow(OneArgument(base::Value::CreateNullValue())); | 480 return RespondNow(OneArgument(base::MakeUnique<base::Value>())); |
480 } | 481 } |
481 | 482 |
482 WebNavigationTabObserver* observer = | 483 WebNavigationTabObserver* observer = |
483 WebNavigationTabObserver::Get(web_contents); | 484 WebNavigationTabObserver::Get(web_contents); |
484 DCHECK(observer); | 485 DCHECK(observer); |
485 | 486 |
486 const FrameNavigationState& frame_navigation_state = | 487 const FrameNavigationState& frame_navigation_state = |
487 observer->frame_navigation_state(); | 488 observer->frame_navigation_state(); |
488 | 489 |
489 content::RenderFrameHost* render_frame_host = | 490 content::RenderFrameHost* render_frame_host = |
490 ExtensionApiFrameIdMap::Get()->GetRenderFrameHostById(web_contents, | 491 ExtensionApiFrameIdMap::Get()->GetRenderFrameHostById(web_contents, |
491 frame_id); | 492 frame_id); |
492 if (!frame_navigation_state.IsValidFrame(render_frame_host)) | 493 if (!frame_navigation_state.IsValidFrame(render_frame_host)) |
493 return RespondNow(OneArgument(base::Value::CreateNullValue())); | 494 return RespondNow(OneArgument(base::MakeUnique<base::Value>())); |
494 | 495 |
495 GURL frame_url = frame_navigation_state.GetUrl(render_frame_host); | 496 GURL frame_url = frame_navigation_state.GetUrl(render_frame_host); |
496 if (!frame_navigation_state.IsValidUrl(frame_url)) | 497 if (!frame_navigation_state.IsValidUrl(frame_url)) |
497 return RespondNow(OneArgument(base::Value::CreateNullValue())); | 498 return RespondNow(OneArgument(base::MakeUnique<base::Value>())); |
498 | 499 |
499 GetFrame::Results::Details frame_details; | 500 GetFrame::Results::Details frame_details; |
500 frame_details.url = frame_url.spec(); | 501 frame_details.url = frame_url.spec(); |
501 frame_details.error_occurred = | 502 frame_details.error_occurred = |
502 frame_navigation_state.GetErrorOccurredInFrame(render_frame_host); | 503 frame_navigation_state.GetErrorOccurredInFrame(render_frame_host); |
503 frame_details.parent_frame_id = | 504 frame_details.parent_frame_id = |
504 ExtensionApiFrameIdMap::GetFrameId(render_frame_host->GetParent()); | 505 ExtensionApiFrameIdMap::GetFrameId(render_frame_host->GetParent()); |
505 return RespondNow(ArgumentList(GetFrame::Results::Create(frame_details))); | 506 return RespondNow(ArgumentList(GetFrame::Results::Create(frame_details))); |
506 } | 507 } |
507 | 508 |
508 ExtensionFunction::ResponseAction WebNavigationGetAllFramesFunction::Run() { | 509 ExtensionFunction::ResponseAction WebNavigationGetAllFramesFunction::Run() { |
509 std::unique_ptr<GetAllFrames::Params> params( | 510 std::unique_ptr<GetAllFrames::Params> params( |
510 GetAllFrames::Params::Create(*args_)); | 511 GetAllFrames::Params::Create(*args_)); |
511 EXTENSION_FUNCTION_VALIDATE(params.get()); | 512 EXTENSION_FUNCTION_VALIDATE(params.get()); |
512 int tab_id = params->details.tab_id; | 513 int tab_id = params->details.tab_id; |
513 | 514 |
514 content::WebContents* web_contents; | 515 content::WebContents* web_contents; |
515 if (!ExtensionTabUtil::GetTabById(tab_id, browser_context(), | 516 if (!ExtensionTabUtil::GetTabById(tab_id, browser_context(), |
516 include_incognito(), nullptr, nullptr, | 517 include_incognito(), nullptr, nullptr, |
517 &web_contents, nullptr) || | 518 &web_contents, nullptr) || |
518 !web_contents) { | 519 !web_contents) { |
519 return RespondNow(OneArgument(base::Value::CreateNullValue())); | 520 return RespondNow(OneArgument(base::MakeUnique<base::Value>())); |
520 } | 521 } |
521 | 522 |
522 WebNavigationTabObserver* observer = | 523 WebNavigationTabObserver* observer = |
523 WebNavigationTabObserver::Get(web_contents); | 524 WebNavigationTabObserver::Get(web_contents); |
524 DCHECK(observer); | 525 DCHECK(observer); |
525 | 526 |
526 const FrameNavigationState& navigation_state = | 527 const FrameNavigationState& navigation_state = |
527 observer->frame_navigation_state(); | 528 observer->frame_navigation_state(); |
528 | 529 |
529 std::vector<GetAllFrames::Results::DetailsType> result_list; | 530 std::vector<GetAllFrames::Results::DetailsType> result_list; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 return g_factory.Pointer(); | 582 return g_factory.Pointer(); |
582 } | 583 } |
583 | 584 |
584 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { | 585 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { |
585 web_navigation_event_router_.reset(new WebNavigationEventRouter( | 586 web_navigation_event_router_.reset(new WebNavigationEventRouter( |
586 Profile::FromBrowserContext(browser_context_))); | 587 Profile::FromBrowserContext(browser_context_))); |
587 EventRouter::Get(browser_context_)->UnregisterObserver(this); | 588 EventRouter::Get(browser_context_)->UnregisterObserver(this); |
588 } | 589 } |
589 | 590 |
590 } // namespace extensions | 591 } // namespace extensions |
OLD | NEW |