| 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 |