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 |