OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #include "chrome/browser/instant/instant_loader.h" | 5 #include "chrome/browser/instant/instant_loader.h" |
6 | 6 |
7 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 7 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
8 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" | 8 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" |
9 #include "chrome/browser/favicon/favicon_tab_helper.h" | 9 #include "chrome/browser/favicon/favicon_tab_helper.h" |
10 #include "chrome/browser/history/history_tab_helper.h" | 10 #include "chrome/browser/history/history_tab_helper.h" |
11 #include "chrome/browser/instant/instant_controller.h" | 11 #include "chrome/browser/instant/instant_controller.h" |
12 #include "chrome/browser/safe_browsing/safe_browsing_tab_observer.h" | 12 #include "chrome/browser/safe_browsing/safe_browsing_tab_observer.h" |
13 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" | 13 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" |
14 #include "chrome/browser/ui/search/search_tab_helper.h" | 14 #include "chrome/browser/ui/search/search_tab_helper.h" |
15 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" | 15 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" |
16 #include "chrome/browser/ui/tab_contents/core_tab_helper_delegate.h" | 16 #include "chrome/browser/ui/tab_contents/core_tab_helper_delegate.h" |
17 #include "chrome/browser/ui/web_contents_modal_dialog_manager.h" | 17 #include "chrome/browser/ui/web_contents_modal_dialog_manager.h" |
18 #include "chrome/browser/ui/web_contents_modal_dialog_manager_delegate.h" | 18 #include "chrome/browser/ui/web_contents_modal_dialog_manager_delegate.h" |
19 #include "content/public/browser/notification_source.h" | 19 #include "content/public/browser/notification_source.h" |
20 #include "content/public/browser/notification_types.h" | 20 #include "content/public/browser/notification_types.h" |
21 #include "content/public/browser/render_widget_host_view.h" | 21 #include "content/public/browser/render_widget_host_view.h" |
| 22 #include "content/public/browser/resource_request_details.h" |
22 #include "content/public/browser/web_contents_delegate.h" | 23 #include "content/public/browser/web_contents_delegate.h" |
23 #include "content/public/browser/web_contents_view.h" | 24 #include "content/public/browser/web_contents_view.h" |
24 #include "ipc/ipc_message.h" | 25 #include "ipc/ipc_message.h" |
25 | 26 |
26 namespace { | 27 namespace { |
27 | 28 |
28 int kUserDataKey; | 29 int kUserDataKey; |
29 | 30 |
30 class InstantLoaderUserData : public base::SupportsUserData::Data { | 31 class InstantLoaderUserData : public base::SupportsUserData::Data { |
31 public: | 32 public: |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 void InstantLoader::StopCapturingKeyStrokes() { | 320 void InstantLoader::StopCapturingKeyStrokes() { |
320 InstantSupportDetermined(true); | 321 InstantSupportDetermined(true); |
321 controller_->StopCapturingKeyStrokes(); | 322 controller_->StopCapturingKeyStrokes(); |
322 } | 323 } |
323 | 324 |
324 void InstantLoader::RenderViewGone() { | 325 void InstantLoader::RenderViewGone() { |
325 controller_->InstantLoaderRenderViewGone(); | 326 controller_->InstantLoaderRenderViewGone(); |
326 } | 327 } |
327 | 328 |
328 void InstantLoader::AboutToNavigateMainFrame(const GURL& url) { | 329 void InstantLoader::AboutToNavigateMainFrame(const GURL& url) { |
329 controller_->InstantLoaderAboutToNavigateMainFrame(url); | 330 controller_->InstantLoaderAboutToNavigateMainFrame( |
| 331 url, url == expected_redirect_); |
| 332 expected_redirect_ = GURL(); |
330 } | 333 } |
331 | 334 |
332 void InstantLoader::NavigateToURL(const GURL& url, | 335 void InstantLoader::NavigateToURL(const GURL& url, |
333 content::PageTransition transition) { | 336 content::PageTransition transition) { |
334 InstantSupportDetermined(true); | 337 InstantSupportDetermined(true); |
335 controller_->NavigateToURL(url, transition); | 338 controller_->NavigateToURL(url, transition); |
336 } | 339 } |
337 | 340 |
338 void InstantLoader::Observe(int type, | 341 void InstantLoader::Observe(int type, |
339 const content::NotificationSource& source, | 342 const content::NotificationSource& source, |
340 const content::NotificationDetails& details) { | 343 const content::NotificationDetails& details) { |
| 344 if (type == content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT) { |
| 345 content::ResourceRedirectDetails* resource_redirect_details = |
| 346 content::Details<content::ResourceRedirectDetails>(details).ptr(); |
| 347 if (resource_redirect_details->resource_type == ResourceType::MAIN_FRAME) |
| 348 expected_redirect_ = resource_redirect_details->new_url; |
| 349 } |
| 350 |
341 #if defined(OS_MACOSX) | 351 #if defined(OS_MACOSX) |
342 if (type == content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED) { | 352 if (type == content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED) { |
343 if (content::RenderWidgetHostView* rwhv = | 353 if (content::RenderWidgetHostView* rwhv = |
344 contents_->GetRenderWidgetHostView()) | 354 contents_->GetRenderWidgetHostView()) |
345 rwhv->SetTakesFocusOnlyOnMouseDown(true); | 355 rwhv->SetTakesFocusOnlyOnMouseDown(true); |
346 return; | 356 return; |
347 } | 357 } |
348 NOTREACHED(); | 358 NOTREACHED(); |
349 #endif | 359 #endif |
350 } | 360 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 #if defined(OS_MACOSX) | 400 #if defined(OS_MACOSX) |
391 // If |contents_| doesn't yet have a RWHV, SetTakesFocusOnlyOnMouseDown() will | 401 // If |contents_| doesn't yet have a RWHV, SetTakesFocusOnlyOnMouseDown() will |
392 // be called later, when NOTIFICATION_RENDER_VIEW_HOST_CHANGED is received. | 402 // be called later, when NOTIFICATION_RENDER_VIEW_HOST_CHANGED is received. |
393 if (content::RenderWidgetHostView* rwhv = | 403 if (content::RenderWidgetHostView* rwhv = |
394 contents_->GetRenderWidgetHostView()) | 404 contents_->GetRenderWidgetHostView()) |
395 rwhv->SetTakesFocusOnlyOnMouseDown(true); | 405 rwhv->SetTakesFocusOnlyOnMouseDown(true); |
396 registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 406 registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
397 content::Source<content::NavigationController>( | 407 content::Source<content::NavigationController>( |
398 &contents_->GetController())); | 408 &contents_->GetController())); |
399 #endif | 409 #endif |
| 410 |
| 411 registrar_.Add(this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT, |
| 412 content::Source<content::WebContents>(contents())); |
400 } | 413 } |
401 | 414 |
402 void InstantLoader::CleanupPreviewContents() { | 415 void InstantLoader::CleanupPreviewContents() { |
403 client_.SetContents(NULL); | 416 client_.SetContents(NULL); |
404 contents_->RemoveUserData(&kUserDataKey); | 417 contents_->RemoveUserData(&kUserDataKey); |
405 contents_->SetDelegate(NULL); | 418 contents_->SetDelegate(NULL); |
406 | 419 |
407 // Undo tab helper work done in SetupPreviewContents(). | 420 // Undo tab helper work done in SetupPreviewContents(). |
408 | 421 |
409 BlockedContentTabHelper::FromWebContents(contents())-> | 422 BlockedContentTabHelper::FromWebContents(contents())-> |
(...skipping 20 matching lines...) Expand all Loading... |
430 content::WebContents* new_contents) { | 443 content::WebContents* new_contents) { |
431 DCHECK_EQ(old_contents, contents()); | 444 DCHECK_EQ(old_contents, contents()); |
432 CleanupPreviewContents(); | 445 CleanupPreviewContents(); |
433 // We release here without deleting so that the caller still has the | 446 // We release here without deleting so that the caller still has the |
434 // responsibility for deleting the WebContents. | 447 // responsibility for deleting the WebContents. |
435 ignore_result(contents_.release()); | 448 ignore_result(contents_.release()); |
436 contents_.reset(new_contents); | 449 contents_.reset(new_contents); |
437 SetupPreviewContents(); | 450 SetupPreviewContents(); |
438 controller_->SwappedWebContents(); | 451 controller_->SwappedWebContents(); |
439 } | 452 } |
OLD | NEW |