Chromium Code Reviews| 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 content::WebContents* new_contents, | 115 content::WebContents* new_contents, |
| 116 int index) { | 116 int index) { |
| 117 WebNavigationTabObserver* tab_observer = | 117 WebNavigationTabObserver* tab_observer = |
| 118 WebNavigationTabObserver::Get(old_contents); | 118 WebNavigationTabObserver::Get(old_contents); |
| 119 if (!tab_observer) { | 119 if (!tab_observer) { |
| 120 // If you hit this DCHECK(), please add reproduction steps to | 120 // If you hit this DCHECK(), please add reproduction steps to |
| 121 // http://crbug.com/109464. | 121 // http://crbug.com/109464. |
| 122 DCHECK(GetViewType(old_contents) != VIEW_TYPE_TAB_CONTENTS); | 122 DCHECK(GetViewType(old_contents) != VIEW_TYPE_TAB_CONTENTS); |
| 123 return; | 123 return; |
| 124 } | 124 } |
| 125 const FrameNavigationState& frame_navigation_state = | 125 if (!FrameNavigationState::IsValidUrl(old_contents->GetURL()) || |
| 126 tab_observer->frame_navigation_state(); | 126 !FrameNavigationState::IsValidUrl(new_contents->GetURL())) |
| 127 | |
| 128 if (!frame_navigation_state.IsValidUrl(old_contents->GetURL()) || | |
| 129 !frame_navigation_state.IsValidUrl(new_contents->GetURL())) | |
| 130 return; | 127 return; |
| 131 | 128 |
| 132 helpers::DispatchOnTabReplaced(old_contents, profile_, new_contents); | 129 helpers::DispatchOnTabReplaced(old_contents, profile_, new_contents); |
| 133 } | 130 } |
| 134 | 131 |
| 135 void WebNavigationEventRouter::Observe( | 132 void WebNavigationEventRouter::Observe( |
| 136 int type, | 133 int type, |
| 137 const content::NotificationSource& source, | 134 const content::NotificationSource& source, |
| 138 const content::NotificationDetails& details) { | 135 const content::NotificationDetails& details) { |
| 139 switch (type) { | 136 switch (type) { |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 249 WebNavigationTabObserver* WebNavigationTabObserver::Get( | 246 WebNavigationTabObserver* WebNavigationTabObserver::Get( |
| 250 content::WebContents* web_contents) { | 247 content::WebContents* web_contents) { |
| 251 TabObserverMap::iterator i = g_tab_observer.Get().find(web_contents); | 248 TabObserverMap::iterator i = g_tab_observer.Get().find(web_contents); |
| 252 return i == g_tab_observer.Get().end() ? NULL : i->second; | 249 return i == g_tab_observer.Get().end() ? NULL : i->second; |
| 253 } | 250 } |
| 254 | 251 |
| 255 void WebNavigationTabObserver::RenderFrameDeleted( | 252 void WebNavigationTabObserver::RenderFrameDeleted( |
| 256 content::RenderFrameHost* render_frame_host) { | 253 content::RenderFrameHost* render_frame_host) { |
| 257 if (navigation_state_.CanSendEvents(render_frame_host) && | 254 if (navigation_state_.CanSendEvents(render_frame_host) && |
| 258 !navigation_state_.GetNavigationCompleted(render_frame_host)) { | 255 !navigation_state_.GetNavigationCompleted(render_frame_host)) { |
| 259 helpers::DispatchOnErrorOccurred( | 256 DispatchErrorToHelper(render_frame_host, net::ERR_ABORTED); |
| 260 web_contents(), | |
| 261 render_frame_host, | |
| 262 navigation_state_.GetUrl(render_frame_host), | |
| 263 net::ERR_ABORTED); | |
| 264 navigation_state_.SetErrorOccurredInFrame(render_frame_host); | 257 navigation_state_.SetErrorOccurredInFrame(render_frame_host); |
| 265 } | 258 } |
| 266 } | 259 } |
| 267 | 260 |
| 268 void WebNavigationTabObserver::FrameDeleted( | 261 void WebNavigationTabObserver::FrameDeleted( |
| 269 content::RenderFrameHost* render_frame_host) { | 262 content::RenderFrameHost* render_frame_host) { |
| 270 navigation_state_.FrameHostDeleted(render_frame_host); | 263 navigation_state_.FrameHostDeleted(render_frame_host); |
| 271 } | 264 } |
| 272 | 265 |
| 273 void WebNavigationTabObserver::RenderFrameHostChanged( | 266 void WebNavigationTabObserver::RenderFrameHostChanged( |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 351 | 344 |
| 352 void WebNavigationTabObserver::DidFailProvisionalLoad( | 345 void WebNavigationTabObserver::DidFailProvisionalLoad( |
| 353 content::RenderFrameHost* render_frame_host, | 346 content::RenderFrameHost* render_frame_host, |
| 354 const GURL& validated_url, | 347 const GURL& validated_url, |
| 355 int error_code, | 348 int error_code, |
| 356 const base::string16& error_description) { | 349 const base::string16& error_description) { |
| 357 DVLOG(2) << "DidFailProvisionalLoad(" | 350 DVLOG(2) << "DidFailProvisionalLoad(" |
| 358 << "render_frame_host=" << render_frame_host | 351 << "render_frame_host=" << render_frame_host |
| 359 << ", frame_num=" << render_frame_host->GetRoutingID() | 352 << ", frame_num=" << render_frame_host->GetRoutingID() |
| 360 << ", url=" << validated_url << ")"; | 353 << ", url=" << validated_url << ")"; |
| 361 if (navigation_state_.CanSendEvents(render_frame_host)) { | 354 if (navigation_state_.CanSendEvents(render_frame_host)) |
| 362 helpers::DispatchOnErrorOccurred( | 355 DispatchErrorToHelper(render_frame_host, error_code); |
| 363 web_contents(), | |
| 364 render_frame_host, | |
| 365 navigation_state_.GetUrl(render_frame_host), | |
| 366 error_code); | |
| 367 } | |
| 368 navigation_state_.SetErrorOccurredInFrame(render_frame_host); | 356 navigation_state_.SetErrorOccurredInFrame(render_frame_host); |
| 369 } | 357 } |
| 370 | 358 |
| 371 void WebNavigationTabObserver::DocumentLoadedInFrame( | 359 void WebNavigationTabObserver::DocumentLoadedInFrame( |
| 372 content::RenderFrameHost* render_frame_host) { | 360 content::RenderFrameHost* render_frame_host) { |
| 373 DVLOG(2) << "DocumentLoadedInFrame(" | 361 DVLOG(2) << "DocumentLoadedInFrame(" |
| 374 << "render_frame_host=" << render_frame_host | 362 << "render_frame_host=" << render_frame_host |
| 375 << ", frame_num=" << render_frame_host->GetRoutingID() << ")"; | 363 << ", frame_num=" << render_frame_host->GetRoutingID() << ")"; |
| 376 if (!navigation_state_.CanSendEvents(render_frame_host)) | 364 if (!navigation_state_.CanSendEvents(render_frame_host)) |
| 377 return; | 365 return; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 429 int error_code, | 417 int error_code, |
| 430 const base::string16& error_description) { | 418 const base::string16& error_description) { |
| 431 DVLOG(2) << "DidFailLoad(" | 419 DVLOG(2) << "DidFailLoad(" |
| 432 << "render_frame_host=" << render_frame_host | 420 << "render_frame_host=" << render_frame_host |
| 433 << ", frame_num=" << render_frame_host->GetRoutingID() | 421 << ", frame_num=" << render_frame_host->GetRoutingID() |
| 434 << ", url=" << validated_url << ")"; | 422 << ", url=" << validated_url << ")"; |
| 435 // When showing replacement content, we might get load signals for frames | 423 // When showing replacement content, we might get load signals for frames |
| 436 // that weren't reguarly loaded. | 424 // that weren't reguarly loaded. |
| 437 if (!navigation_state_.IsValidFrame(render_frame_host)) | 425 if (!navigation_state_.IsValidFrame(render_frame_host)) |
| 438 return; | 426 return; |
| 439 if (navigation_state_.CanSendEvents(render_frame_host)) { | 427 if (navigation_state_.CanSendEvents(render_frame_host)) |
| 440 helpers::DispatchOnErrorOccurred( | 428 DispatchErrorToHelper(render_frame_host, error_code); |
| 441 web_contents(), | |
| 442 render_frame_host, | |
| 443 navigation_state_.GetUrl(render_frame_host), | |
| 444 error_code); | |
| 445 } | |
| 446 navigation_state_.SetErrorOccurredInFrame(render_frame_host); | 429 navigation_state_.SetErrorOccurredInFrame(render_frame_host); |
| 447 } | 430 } |
| 448 | 431 |
| 449 void WebNavigationTabObserver::DidGetRedirectForResourceRequest( | 432 void WebNavigationTabObserver::DidGetRedirectForResourceRequest( |
| 450 content::RenderFrameHost* render_frame_host, | 433 content::RenderFrameHost* render_frame_host, |
| 451 const content::ResourceRedirectDetails& details) { | 434 const content::ResourceRedirectDetails& details) { |
| 452 if (details.resource_type != content::RESOURCE_TYPE_MAIN_FRAME && | 435 if (details.resource_type != content::RESOURCE_TYPE_MAIN_FRAME && |
| 453 details.resource_type != content::RESOURCE_TYPE_SUB_FRAME) { | 436 details.resource_type != content::RESOURCE_TYPE_SUB_FRAME) { |
| 454 return; | 437 return; |
| 455 } | 438 } |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 481 source_render_frame_host, | 464 source_render_frame_host, |
| 482 new_contents, | 465 new_contents, |
| 483 url); | 466 url); |
| 484 } | 467 } |
| 485 | 468 |
| 486 void WebNavigationTabObserver::WebContentsDestroyed() { | 469 void WebNavigationTabObserver::WebContentsDestroyed() { |
| 487 g_tab_observer.Get().erase(web_contents()); | 470 g_tab_observer.Get().erase(web_contents()); |
| 488 registrar_.RemoveAll(); | 471 registrar_.RemoveAll(); |
| 489 } | 472 } |
| 490 | 473 |
| 474 void WebNavigationTabObserver::DispatchErrorToHelper( | |
|
nasko
2015/05/14 17:00:41
First of all, it is unrelated to the change you ar
| |
| 475 content::RenderFrameHost* render_frame_host, | |
| 476 int error_code) { | |
| 477 helpers::DispatchOnErrorOccurred(web_contents(), render_frame_host, | |
| 478 navigation_state_.GetUrl(render_frame_host), | |
| 479 error_code); | |
| 480 } | |
| 481 | |
| 491 // See also NavigationController::IsURLInPageNavigation. | 482 // See also NavigationController::IsURLInPageNavigation. |
| 492 bool WebNavigationTabObserver::IsReferenceFragmentNavigation( | 483 bool WebNavigationTabObserver::IsReferenceFragmentNavigation( |
| 493 content::RenderFrameHost* render_frame_host, | 484 content::RenderFrameHost* render_frame_host, |
| 494 const GURL& url) { | 485 const GURL& url) { |
| 495 GURL existing_url = navigation_state_.GetUrl(render_frame_host); | 486 GURL existing_url = navigation_state_.GetUrl(render_frame_host); |
| 496 if (existing_url == url) | 487 if (existing_url == url) |
| 497 return false; | 488 return false; |
| 498 | 489 |
| 499 url::Replacements<char> replacements; | 490 url::Replacements<char> replacements; |
| 500 replacements.ClearRef(); | 491 replacements.ClearRef(); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 632 return g_factory.Pointer(); | 623 return g_factory.Pointer(); |
| 633 } | 624 } |
| 634 | 625 |
| 635 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { | 626 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { |
| 636 web_navigation_event_router_.reset(new WebNavigationEventRouter( | 627 web_navigation_event_router_.reset(new WebNavigationEventRouter( |
| 637 Profile::FromBrowserContext(browser_context_))); | 628 Profile::FromBrowserContext(browser_context_))); |
| 638 EventRouter::Get(browser_context_)->UnregisterObserver(this); | 629 EventRouter::Get(browser_context_)->UnregisterObserver(this); |
| 639 } | 630 } |
| 640 | 631 |
| 641 } // namespace extensions | 632 } // namespace extensions |
| OLD | NEW |