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 #include "chrome/browser/prerender/prerender_manager.h" | 5 #include "chrome/browser/prerender/prerender_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 #include "chrome/common/prerender_types.h" | 51 #include "chrome/common/prerender_types.h" |
52 #include "content/public/browser/browser_thread.h" | 52 #include "content/public/browser/browser_thread.h" |
53 #include "content/public/browser/devtools_agent_host.h" | 53 #include "content/public/browser/devtools_agent_host.h" |
54 #include "content/public/browser/navigation_controller.h" | 54 #include "content/public/browser/navigation_controller.h" |
55 #include "content/public/browser/notification_service.h" | 55 #include "content/public/browser/notification_service.h" |
56 #include "content/public/browser/notification_source.h" | 56 #include "content/public/browser/notification_source.h" |
57 #include "content/public/browser/render_frame_host.h" | 57 #include "content/public/browser/render_frame_host.h" |
58 #include "content/public/browser/render_process_host.h" | 58 #include "content/public/browser/render_process_host.h" |
59 #include "content/public/browser/render_view_host.h" | 59 #include "content/public/browser/render_view_host.h" |
60 #include "content/public/browser/session_storage_namespace.h" | 60 #include "content/public/browser/session_storage_namespace.h" |
| 61 #include "content/public/browser/site_instance.h" |
61 #include "content/public/browser/storage_partition.h" | 62 #include "content/public/browser/storage_partition.h" |
62 #include "content/public/browser/web_contents.h" | 63 #include "content/public/browser/web_contents.h" |
63 #include "content/public/browser/web_contents_delegate.h" | 64 #include "content/public/browser/web_contents_delegate.h" |
64 #include "content/public/common/url_constants.h" | 65 #include "content/public/common/url_constants.h" |
65 #include "extensions/common/constants.h" | 66 #include "extensions/common/constants.h" |
66 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 67 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
67 #include "net/url_request/url_request_context.h" | 68 #include "net/url_request/url_request_context.h" |
68 #include "net/url_request/url_request_context_getter.h" | 69 #include "net/url_request/url_request_context_getter.h" |
69 | 70 |
70 using content::BrowserThread; | 71 using content::BrowserThread; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 final_status != FINAL_STATUS_TIMED_OUT && | 122 final_status != FINAL_STATUS_TIMED_OUT && |
122 final_status != FINAL_STATUS_MANAGER_SHUTDOWN && | 123 final_status != FINAL_STATUS_MANAGER_SHUTDOWN && |
123 final_status != FINAL_STATUS_PROFILE_DESTROYED && | 124 final_status != FINAL_STATUS_PROFILE_DESTROYED && |
124 final_status != FINAL_STATUS_APP_TERMINATING && | 125 final_status != FINAL_STATUS_APP_TERMINATING && |
125 final_status != FINAL_STATUS_WINDOW_OPENER && | 126 final_status != FINAL_STATUS_WINDOW_OPENER && |
126 final_status != FINAL_STATUS_CACHE_OR_HISTORY_CLEARED && | 127 final_status != FINAL_STATUS_CACHE_OR_HISTORY_CLEARED && |
127 final_status != FINAL_STATUS_CANCELLED && | 128 final_status != FINAL_STATUS_CANCELLED && |
128 final_status != FINAL_STATUS_DEVTOOLS_ATTACHED && | 129 final_status != FINAL_STATUS_DEVTOOLS_ATTACHED && |
129 final_status != FINAL_STATUS_CROSS_SITE_NAVIGATION_PENDING && | 130 final_status != FINAL_STATUS_CROSS_SITE_NAVIGATION_PENDING && |
130 final_status != FINAL_STATUS_PAGE_BEING_CAPTURED && | 131 final_status != FINAL_STATUS_PAGE_BEING_CAPTURED && |
131 final_status != FINAL_STATUS_NAVIGATION_UNCOMMITTED; | 132 final_status != FINAL_STATUS_NAVIGATION_UNCOMMITTED && |
| 133 final_status != FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE; |
132 } | 134 } |
133 | 135 |
134 void CheckIfCookiesExistForDomainResultOnUIThread( | 136 void CheckIfCookiesExistForDomainResultOnUIThread( |
135 const net::CookieMonster::HasCookiesForETLDP1Callback& callback, | 137 const net::CookieMonster::HasCookiesForETLDP1Callback& callback, |
136 bool cookies_exist) { | 138 bool cookies_exist) { |
137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
138 callback.Run(cookies_exist); | 140 callback.Run(cookies_exist); |
139 } | 141 } |
140 | 142 |
141 void CheckIfCookiesExistForDomainResultOnIOThread( | 143 void CheckIfCookiesExistForDomainResultOnIOThread( |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 // there is a pending entry, it may not commit. | 532 // there is a pending entry, it may not commit. |
531 // TODO(creis): If there is a pending navigation and no last committed | 533 // TODO(creis): If there is a pending navigation and no last committed |
532 // entry, we might be able to transfer the network request instead. | 534 // entry, we might be able to transfer the network request instead. |
533 if (!new_web_contents->GetController().CanPruneAllButLastCommitted()) { | 535 if (!new_web_contents->GetController().CanPruneAllButLastCommitted()) { |
534 // Abort this prerender so it is not used later. http://crbug.com/292121 | 536 // Abort this prerender so it is not used later. http://crbug.com/292121 |
535 prerender_data->contents()->Destroy(FINAL_STATUS_NAVIGATION_UNCOMMITTED); | 537 prerender_data->contents()->Destroy(FINAL_STATUS_NAVIGATION_UNCOMMITTED); |
536 return NULL; | 538 return NULL; |
537 } | 539 } |
538 } | 540 } |
539 | 541 |
| 542 // Do not swap if the target WebContents is not the only WebContents in its |
| 543 // current BrowsingInstance. |
| 544 if (web_contents->GetSiteInstance()->GetRelatedActiveContentsCount() != 1u) { |
| 545 DCHECK_GT( |
| 546 web_contents->GetSiteInstance()->GetRelatedActiveContentsCount(), 1u); |
| 547 prerender_data->contents()->Destroy( |
| 548 FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE); |
| 549 return NULL; |
| 550 } |
| 551 |
540 // Do not use the prerendered version if there is an opener object. | 552 // Do not use the prerendered version if there is an opener object. |
541 if (web_contents->HasOpener()) { | 553 if (web_contents->HasOpener()) { |
542 prerender_data->contents()->Destroy(FINAL_STATUS_WINDOW_OPENER); | 554 prerender_data->contents()->Destroy(FINAL_STATUS_WINDOW_OPENER); |
543 return NULL; | 555 return NULL; |
544 } | 556 } |
545 | 557 |
546 // Do not swap in the prerender if the current WebContents is being captured. | 558 // Do not swap in the prerender if the current WebContents is being captured. |
547 if (web_contents->GetCapturerCount() > 0) { | 559 if (web_contents->GetCapturerCount() > 0) { |
548 prerender_data->contents()->Destroy(FINAL_STATUS_PAGE_BEING_CAPTURED); | 560 prerender_data->contents()->Destroy(FINAL_STATUS_PAGE_BEING_CAPTURED); |
549 return NULL; | 561 return NULL; |
(...skipping 1343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1893 content::RenderProcessHost* host) { | 1905 content::RenderProcessHost* host) { |
1894 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1906 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1895 prerender_process_hosts_.erase(host); | 1907 prerender_process_hosts_.erase(host); |
1896 BrowserThread::PostTask( | 1908 BrowserThread::PostTask( |
1897 BrowserThread::IO, FROM_HERE, | 1909 BrowserThread::IO, FROM_HERE, |
1898 base::Bind(&PrerenderTracker::RemovePrerenderCookieStoreOnIOThread, | 1910 base::Bind(&PrerenderTracker::RemovePrerenderCookieStoreOnIOThread, |
1899 base::Unretained(prerender_tracker()), host->GetID(), false)); | 1911 base::Unretained(prerender_tracker()), host->GetID(), false)); |
1900 } | 1912 } |
1901 | 1913 |
1902 } // namespace prerender | 1914 } // namespace prerender |
OLD | NEW |