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_contents.h" | 5 #include "chrome/browser/prerender/prerender_contents.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
11 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
12 #include "chrome/browser/history/history_tab_helper.h" | 12 #include "chrome/browser/history/history_tab_helper.h" |
13 #include "chrome/browser/history/history_types.h" | 13 #include "chrome/browser/history/history_types.h" |
14 #include "chrome/browser/prerender/prerender_final_status.h" | 14 #include "chrome/browser/prerender/prerender_final_status.h" |
15 #include "chrome/browser/prerender/prerender_manager.h" | 15 #include "chrome/browser/prerender/prerender_manager.h" |
16 #include "chrome/browser/prerender/prerender_render_view_host_observer.h" | 16 #include "chrome/browser/prerender/prerender_render_view_host_observer.h" |
17 #include "chrome/browser/prerender/prerender_tracker.h" | 17 #include "chrome/browser/prerender/prerender_tracker.h" |
18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
19 #include "chrome/browser/ui/browser.h" | 19 #include "chrome/browser/ui/browser.h" |
20 #include "chrome/browser/ui/browser_finder.h" | 20 #include "chrome/browser/ui/browser_finder.h" |
21 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 21 #include "chrome/browser/ui/tab_contents/tab_contents.h" |
22 #include "chrome/common/chrome_notification_types.h" | 22 #include "chrome/common/chrome_notification_types.h" |
23 #include "chrome/common/icon_messages.h" | 23 #include "chrome/common/icon_messages.h" |
24 #include "chrome/common/prerender_messages.h" | 24 #include "chrome/common/prerender_messages.h" |
25 #include "chrome/common/url_constants.h" | 25 #include "chrome/common/url_constants.h" |
26 #include "content/public/browser/resource_request_details.h" | 26 #include "content/public/browser/resource_request_details.h" |
27 #include "content/public/browser/browser_child_process_host.h" | 27 #include "content/public/browser/browser_child_process_host.h" |
28 #include "content/public/browser/notification_service.h" | 28 #include "content/public/browser/notification_service.h" |
29 #include "content/public/browser/render_process_host.h" | 29 #include "content/public/browser/render_process_host.h" |
30 #include "content/public/browser/render_view_host.h" | 30 #include "content/public/browser/render_view_host.h" |
31 #include "content/public/browser/web_contents.h" | 31 #include "content/public/browser/web_contents.h" |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 } | 182 } |
183 | 183 |
184 virtual void JSOutOfMemory(WebContents* tab) OVERRIDE { | 184 virtual void JSOutOfMemory(WebContents* tab) OVERRIDE { |
185 prerender_contents_->OnJSOutOfMemory(); | 185 prerender_contents_->OnJSOutOfMemory(); |
186 } | 186 } |
187 | 187 |
188 virtual bool ShouldSuppressDialogs() OVERRIDE { | 188 virtual bool ShouldSuppressDialogs() OVERRIDE { |
189 return prerender_contents_->ShouldSuppressDialogs(); | 189 return prerender_contents_->ShouldSuppressDialogs(); |
190 } | 190 } |
191 | 191 |
192 // Commits the History of Pages to the given TabContentsWrapper. | 192 // Commits the History of Pages to the given TabContents. |
193 void CommitHistory(TabContentsWrapper* tab) { | 193 void CommitHistory(TabContents* tab) { |
194 for (size_t i = 0; i < add_page_vector_.size(); ++i) | 194 for (size_t i = 0; i < add_page_vector_.size(); ++i) |
195 tab->history_tab_helper()->UpdateHistoryForNavigation( | 195 tab->history_tab_helper()->UpdateHistoryForNavigation( |
196 add_page_vector_[i].get()); | 196 add_page_vector_[i].get()); |
197 } | 197 } |
198 | 198 |
199 private: | 199 private: |
200 typedef std::vector<scoped_refptr<history::HistoryAddPageArgs> > | 200 typedef std::vector<scoped_refptr<history::HistoryAddPageArgs> > |
201 AddPageVector; | 201 AddPageVector; |
202 | 202 |
203 // Caches pages to be added to the history. | 203 // Caches pages to be added to the history. |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 | 313 |
314 // Everything after this point sets up the WebContents object and associated | 314 // Everything after this point sets up the WebContents object and associated |
315 // RenderView for the prerender page. Don't do this for members of the | 315 // RenderView for the prerender page. Don't do this for members of the |
316 // control group. | 316 // control group. |
317 if (is_control_group) | 317 if (is_control_group) |
318 return; | 318 return; |
319 | 319 |
320 prerendering_has_started_ = true; | 320 prerendering_has_started_ = true; |
321 | 321 |
322 WebContents* new_contents = CreateWebContents(session_storage_namespace); | 322 WebContents* new_contents = CreateWebContents(session_storage_namespace); |
323 prerender_contents_.reset(new TabContentsWrapper(new_contents)); | 323 prerender_contents_.reset(new TabContents(new_contents)); |
324 content::WebContentsObserver::Observe(new_contents); | 324 content::WebContentsObserver::Observe(new_contents); |
325 | 325 |
326 tab_contents_delegate_.reset(new TabContentsDelegateImpl(this)); | 326 tab_contents_delegate_.reset(new TabContentsDelegateImpl(this)); |
327 new_contents->SetDelegate(tab_contents_delegate_.get()); | 327 new_contents->SetDelegate(tab_contents_delegate_.get()); |
328 | 328 |
329 // Set the size of the prerender WebContents. | 329 // Set the size of the prerender WebContents. |
330 prerender_contents_->web_contents()->GetView()->SizeContents(size_); | 330 prerender_contents_->web_contents()->GetView()->SizeContents(size_); |
331 | 331 |
332 // Register as an observer of the RenderViewHost so we get messages. | 332 // Register as an observer of the RenderViewHost so we get messages. |
333 render_view_host_observer_.reset( | 333 render_view_host_observer_.reset( |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 if (metrics == NULL) | 667 if (metrics == NULL) |
668 return; | 668 return; |
669 | 669 |
670 size_t private_bytes, shared_bytes; | 670 size_t private_bytes, shared_bytes; |
671 if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes) && | 671 if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes) && |
672 private_bytes > prerender_manager_->config().max_bytes) { | 672 private_bytes > prerender_manager_->config().max_bytes) { |
673 Destroy(FINAL_STATUS_MEMORY_LIMIT_EXCEEDED); | 673 Destroy(FINAL_STATUS_MEMORY_LIMIT_EXCEEDED); |
674 } | 674 } |
675 } | 675 } |
676 | 676 |
677 TabContentsWrapper* PrerenderContents::ReleasePrerenderContents() { | 677 TabContents* PrerenderContents::ReleasePrerenderContents() { |
678 prerender_contents_->web_contents()->SetDelegate(NULL); | 678 prerender_contents_->web_contents()->SetDelegate(NULL); |
679 render_view_host_observer_.reset(); | 679 render_view_host_observer_.reset(); |
680 content::WebContentsObserver::Observe(NULL); | 680 content::WebContentsObserver::Observe(NULL); |
681 return prerender_contents_.release(); | 681 return prerender_contents_.release(); |
682 } | 682 } |
683 | 683 |
684 WebContents* PrerenderContents::GetWebContents() { | 684 WebContents* PrerenderContents::GetWebContents() { |
685 if (!prerender_contents_.get()) | 685 if (!prerender_contents_.get()) |
686 return NULL; | 686 return NULL; |
687 return prerender_contents_->web_contents(); | 687 return prerender_contents_->web_contents(); |
688 } | 688 } |
689 | 689 |
690 RenderViewHost* PrerenderContents::GetRenderViewHostMutable() { | 690 RenderViewHost* PrerenderContents::GetRenderViewHostMutable() { |
691 return const_cast<RenderViewHost*>(GetRenderViewHost()); | 691 return const_cast<RenderViewHost*>(GetRenderViewHost()); |
692 } | 692 } |
693 | 693 |
694 const RenderViewHost* PrerenderContents::GetRenderViewHost() const { | 694 const RenderViewHost* PrerenderContents::GetRenderViewHost() const { |
695 if (!prerender_contents_.get()) | 695 if (!prerender_contents_.get()) |
696 return NULL; | 696 return NULL; |
697 return prerender_contents_->web_contents()->GetRenderViewHost(); | 697 return prerender_contents_->web_contents()->GetRenderViewHost(); |
698 } | 698 } |
699 | 699 |
700 void PrerenderContents::CommitHistory(TabContentsWrapper* tab) { | 700 void PrerenderContents::CommitHistory(TabContents* tab) { |
701 if (tab_contents_delegate_.get()) | 701 if (tab_contents_delegate_.get()) |
702 tab_contents_delegate_->CommitHistory(tab); | 702 tab_contents_delegate_->CommitHistory(tab); |
703 } | 703 } |
704 | 704 |
705 Value* PrerenderContents::GetAsValue() const { | 705 Value* PrerenderContents::GetAsValue() const { |
706 if (!prerender_contents_.get()) | 706 if (!prerender_contents_.get()) |
707 return NULL; | 707 return NULL; |
708 DictionaryValue* dict_value = new DictionaryValue(); | 708 DictionaryValue* dict_value = new DictionaryValue(); |
709 dict_value->SetString("url", prerender_url_.spec()); | 709 dict_value->SetString("url", prerender_url_.spec()); |
710 base::TimeTicks current_time = base::TimeTicks::Now(); | 710 base::TimeTicks current_time = base::TimeTicks::Now(); |
711 base::TimeDelta duration = current_time - load_start_time_; | 711 base::TimeDelta duration = current_time - load_start_time_; |
712 dict_value->SetInteger("duration", duration.InSeconds()); | 712 dict_value->SetInteger("duration", duration.InSeconds()); |
713 return dict_value; | 713 return dict_value; |
714 } | 714 } |
715 | 715 |
716 bool PrerenderContents::IsCrossSiteNavigationPending() const { | 716 bool PrerenderContents::IsCrossSiteNavigationPending() const { |
717 if (!prerender_contents_.get() || !prerender_contents_->web_contents()) | 717 if (!prerender_contents_.get() || !prerender_contents_->web_contents()) |
718 return false; | 718 return false; |
719 const WebContents* web_contents = prerender_contents_->web_contents(); | 719 const WebContents* web_contents = prerender_contents_->web_contents(); |
720 return (web_contents->GetSiteInstance() != | 720 return (web_contents->GetSiteInstance() != |
721 web_contents->GetPendingSiteInstance()); | 721 web_contents->GetPendingSiteInstance()); |
722 } | 722 } |
723 | 723 |
724 | 724 |
725 } // namespace prerender | 725 } // namespace prerender |
OLD | NEW |