| 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 "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 GURL existing_url = navigation_state_.GetUrl(render_frame_host); | 439 GURL existing_url = navigation_state_.GetUrl(render_frame_host); |
| 440 if (existing_url == url) | 440 if (existing_url == url) |
| 441 return false; | 441 return false; |
| 442 | 442 |
| 443 url::Replacements<char> replacements; | 443 url::Replacements<char> replacements; |
| 444 replacements.ClearRef(); | 444 replacements.ClearRef(); |
| 445 return existing_url.ReplaceComponents(replacements) == | 445 return existing_url.ReplaceComponents(replacements) == |
| 446 url.ReplaceComponents(replacements); | 446 url.ReplaceComponents(replacements); |
| 447 } | 447 } |
| 448 | 448 |
| 449 bool WebNavigationGetFrameFunction::RunSync() { | 449 ExtensionFunction::ResponseAction WebNavigationGetFrameFunction::Run() { |
| 450 std::unique_ptr<GetFrame::Params> params(GetFrame::Params::Create(*args_)); | 450 std::unique_ptr<GetFrame::Params> params(GetFrame::Params::Create(*args_)); |
| 451 EXTENSION_FUNCTION_VALIDATE(params.get()); | 451 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 452 int tab_id = params->details.tab_id; | 452 int tab_id = params->details.tab_id; |
| 453 int frame_id = params->details.frame_id; | 453 int frame_id = params->details.frame_id; |
| 454 | 454 |
| 455 SetResult(base::Value::CreateNullValue()); | |
| 456 | |
| 457 content::WebContents* web_contents; | 455 content::WebContents* web_contents; |
| 458 if (!ExtensionTabUtil::GetTabById(tab_id, | 456 if (!ExtensionTabUtil::GetTabById(tab_id, browser_context(), |
| 459 GetProfile(), | 457 include_incognito(), nullptr, nullptr, |
| 460 include_incognito(), | 458 &web_contents, nullptr) || |
| 461 NULL, | |
| 462 NULL, | |
| 463 &web_contents, | |
| 464 NULL) || | |
| 465 !web_contents) { | 459 !web_contents) { |
| 466 return true; | 460 return RespondNow(OneArgument(base::Value::CreateNullValue())); |
| 467 } | 461 } |
| 468 | 462 |
| 469 WebNavigationTabObserver* observer = | 463 WebNavigationTabObserver* observer = |
| 470 WebNavigationTabObserver::Get(web_contents); | 464 WebNavigationTabObserver::Get(web_contents); |
| 471 DCHECK(observer); | 465 DCHECK(observer); |
| 472 | 466 |
| 473 const FrameNavigationState& frame_navigation_state = | 467 const FrameNavigationState& frame_navigation_state = |
| 474 observer->frame_navigation_state(); | 468 observer->frame_navigation_state(); |
| 475 | 469 |
| 476 content::RenderFrameHost* render_frame_host = | 470 content::RenderFrameHost* render_frame_host = |
| 477 ExtensionApiFrameIdMap::Get()->GetRenderFrameHostById(web_contents, | 471 ExtensionApiFrameIdMap::Get()->GetRenderFrameHostById(web_contents, |
| 478 frame_id); | 472 frame_id); |
| 479 if (!frame_navigation_state.IsValidFrame(render_frame_host)) | 473 if (!frame_navigation_state.IsValidFrame(render_frame_host)) |
| 480 return true; | 474 return RespondNow(OneArgument(base::Value::CreateNullValue())); |
| 481 | 475 |
| 482 GURL frame_url = frame_navigation_state.GetUrl(render_frame_host); | 476 GURL frame_url = frame_navigation_state.GetUrl(render_frame_host); |
| 483 if (!frame_navigation_state.IsValidUrl(frame_url)) | 477 if (!frame_navigation_state.IsValidUrl(frame_url)) |
| 484 return true; | 478 return RespondNow(OneArgument(base::Value::CreateNullValue())); |
| 485 | 479 |
| 486 GetFrame::Results::Details frame_details; | 480 GetFrame::Results::Details frame_details; |
| 487 frame_details.url = frame_url.spec(); | 481 frame_details.url = frame_url.spec(); |
| 488 frame_details.error_occurred = | 482 frame_details.error_occurred = |
| 489 frame_navigation_state.GetErrorOccurredInFrame(render_frame_host); | 483 frame_navigation_state.GetErrorOccurredInFrame(render_frame_host); |
| 490 frame_details.parent_frame_id = | 484 frame_details.parent_frame_id = |
| 491 ExtensionApiFrameIdMap::GetFrameId(render_frame_host->GetParent()); | 485 ExtensionApiFrameIdMap::GetFrameId(render_frame_host->GetParent()); |
| 492 results_ = GetFrame::Results::Create(frame_details); | 486 return RespondNow(ArgumentList(GetFrame::Results::Create(frame_details))); |
| 493 return true; | |
| 494 } | 487 } |
| 495 | 488 |
| 496 bool WebNavigationGetAllFramesFunction::RunSync() { | 489 ExtensionFunction::ResponseAction WebNavigationGetAllFramesFunction::Run() { |
| 497 std::unique_ptr<GetAllFrames::Params> params( | 490 std::unique_ptr<GetAllFrames::Params> params( |
| 498 GetAllFrames::Params::Create(*args_)); | 491 GetAllFrames::Params::Create(*args_)); |
| 499 EXTENSION_FUNCTION_VALIDATE(params.get()); | 492 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 500 int tab_id = params->details.tab_id; | 493 int tab_id = params->details.tab_id; |
| 501 | 494 |
| 502 SetResult(base::Value::CreateNullValue()); | |
| 503 | |
| 504 content::WebContents* web_contents; | 495 content::WebContents* web_contents; |
| 505 if (!ExtensionTabUtil::GetTabById(tab_id, | 496 if (!ExtensionTabUtil::GetTabById(tab_id, browser_context(), |
| 506 GetProfile(), | 497 include_incognito(), nullptr, nullptr, |
| 507 include_incognito(), | 498 &web_contents, nullptr) || |
| 508 NULL, | |
| 509 NULL, | |
| 510 &web_contents, | |
| 511 NULL) || | |
| 512 !web_contents) { | 499 !web_contents) { |
| 513 return true; | 500 return RespondNow(OneArgument(base::Value::CreateNullValue())); |
| 514 } | 501 } |
| 515 | 502 |
| 516 WebNavigationTabObserver* observer = | 503 WebNavigationTabObserver* observer = |
| 517 WebNavigationTabObserver::Get(web_contents); | 504 WebNavigationTabObserver::Get(web_contents); |
| 518 DCHECK(observer); | 505 DCHECK(observer); |
| 519 | 506 |
| 520 const FrameNavigationState& navigation_state = | 507 const FrameNavigationState& navigation_state = |
| 521 observer->frame_navigation_state(); | 508 observer->frame_navigation_state(); |
| 522 | 509 |
| 523 std::vector<GetAllFrames::Results::DetailsType> result_list; | 510 std::vector<GetAllFrames::Results::DetailsType> result_list; |
| 524 for (FrameNavigationState::const_iterator it = navigation_state.begin(); | 511 for (FrameNavigationState::const_iterator it = navigation_state.begin(); |
| 525 it != navigation_state.end(); ++it) { | 512 it != navigation_state.end(); ++it) { |
| 526 GURL frame_url = navigation_state.GetUrl(*it); | 513 GURL frame_url = navigation_state.GetUrl(*it); |
| 527 if (!navigation_state.IsValidUrl(frame_url)) | 514 if (!navigation_state.IsValidUrl(frame_url)) |
| 528 continue; | 515 continue; |
| 529 GetAllFrames::Results::DetailsType frame; | 516 GetAllFrames::Results::DetailsType frame; |
| 530 frame.url = frame_url.spec(); | 517 frame.url = frame_url.spec(); |
| 531 frame.frame_id = ExtensionApiFrameIdMap::GetFrameId(*it); | 518 frame.frame_id = ExtensionApiFrameIdMap::GetFrameId(*it); |
| 532 frame.parent_frame_id = | 519 frame.parent_frame_id = |
| 533 ExtensionApiFrameIdMap::GetFrameId((*it)->GetParent()); | 520 ExtensionApiFrameIdMap::GetFrameId((*it)->GetParent()); |
| 534 frame.process_id = (*it)->GetProcess()->GetID(); | 521 frame.process_id = (*it)->GetProcess()->GetID(); |
| 535 frame.error_occurred = navigation_state.GetErrorOccurredInFrame(*it); | 522 frame.error_occurred = navigation_state.GetErrorOccurredInFrame(*it); |
| 536 result_list.push_back(std::move(frame)); | 523 result_list.push_back(std::move(frame)); |
| 537 } | 524 } |
| 538 results_ = GetAllFrames::Results::Create(result_list); | 525 return RespondNow(ArgumentList(GetAllFrames::Results::Create(result_list))); |
| 539 return true; | |
| 540 } | 526 } |
| 541 | 527 |
| 542 WebNavigationAPI::WebNavigationAPI(content::BrowserContext* context) | 528 WebNavigationAPI::WebNavigationAPI(content::BrowserContext* context) |
| 543 : browser_context_(context) { | 529 : browser_context_(context) { |
| 544 EventRouter* event_router = EventRouter::Get(browser_context_); | 530 EventRouter* event_router = EventRouter::Get(browser_context_); |
| 545 event_router->RegisterObserver(this, | 531 event_router->RegisterObserver(this, |
| 546 web_navigation::OnBeforeNavigate::kEventName); | 532 web_navigation::OnBeforeNavigate::kEventName); |
| 547 event_router->RegisterObserver(this, web_navigation::OnCommitted::kEventName); | 533 event_router->RegisterObserver(this, web_navigation::OnCommitted::kEventName); |
| 548 event_router->RegisterObserver(this, web_navigation::OnCompleted::kEventName); | 534 event_router->RegisterObserver(this, web_navigation::OnCompleted::kEventName); |
| 549 event_router->RegisterObserver( | 535 event_router->RegisterObserver( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 576 return g_factory.Pointer(); | 562 return g_factory.Pointer(); |
| 577 } | 563 } |
| 578 | 564 |
| 579 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { | 565 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { |
| 580 web_navigation_event_router_.reset(new WebNavigationEventRouter( | 566 web_navigation_event_router_.reset(new WebNavigationEventRouter( |
| 581 Profile::FromBrowserContext(browser_context_))); | 567 Profile::FromBrowserContext(browser_context_))); |
| 582 EventRouter::Get(browser_context_)->UnregisterObserver(this); | 568 EventRouter::Get(browser_context_)->UnregisterObserver(this); |
| 583 } | 569 } |
| 584 | 570 |
| 585 } // namespace extensions | 571 } // namespace extensions |
| OLD | NEW |