Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 241223002: Start using RenderFrameProxyHost objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moar fixes. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/renderer/render_thread_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "content/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 session_storage_namespace_id_(params->session_storage_namespace_id), 660 session_storage_namespace_id_(params->session_storage_namespace_id),
661 next_snapshot_id_(0) { 661 next_snapshot_id_(0) {
662 } 662 }
663 663
664 void RenderViewImpl::Initialize(RenderViewImplParams* params) { 664 void RenderViewImpl::Initialize(RenderViewImplParams* params) {
665 routing_id_ = params->routing_id; 665 routing_id_ = params->routing_id;
666 surface_id_ = params->surface_id; 666 surface_id_ = params->surface_id;
667 if (params->opener_id != MSG_ROUTING_NONE && params->is_renderer_created) 667 if (params->opener_id != MSG_ROUTING_NONE && params->is_renderer_created)
668 opener_id_ = params->opener_id; 668 opener_id_ = params->opener_id;
669 669
670 LOG(ERROR) << "RV[" << this << "]::Initialize:"
671 << " routing_id:" << routing_id_
672 << ", frame_routing_id:" << params->main_frame_routing_id;
673
670 // Ensure we start with a valid next_page_id_ from the browser. 674 // Ensure we start with a valid next_page_id_ from the browser.
671 DCHECK_GE(next_page_id_, 0); 675 DCHECK_GE(next_page_id_, 0);
672 676
673 main_render_frame_.reset(RenderFrameImpl::Create( 677 main_render_frame_.reset(RenderFrameImpl::Create(
674 this, params->main_frame_routing_id)); 678 this, params->main_frame_routing_id));
675 // The main frame WebLocalFrame object is closed by 679 // The main frame WebLocalFrame object is closed by
676 // RenderFrameImpl::frameDetached(). 680 // RenderFrameImpl::frameDetached().
677 WebLocalFrame* web_frame = WebLocalFrame::create(main_render_frame_.get()); 681 WebLocalFrame* web_frame = WebLocalFrame::create(main_render_frame_.get());
678 main_render_frame_->SetWebFrame(web_frame); 682 main_render_frame_->SetWebFrame(web_frame);
679 683
680 if (params->proxy_routing_id != MSG_ROUTING_NONE) {
681 CHECK(params->swapped_out);
682 RenderFrameProxy* proxy =
683 RenderFrameProxy::CreateFrameProxy(params->proxy_routing_id,
684 params->main_frame_routing_id);
685 main_render_frame_->set_render_frame_proxy(proxy);
686 }
687
688 webwidget_ = WebView::create(this); 684 webwidget_ = WebView::create(this);
689 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_)); 685 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
690 686
691 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 687 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
692 688
693 if (command_line.HasSwitch(switches::kStatsCollectionController)) 689 if (command_line.HasSwitch(switches::kStatsCollectionController))
694 stats_collection_observer_.reset(new StatsCollectionObserver(this)); 690 stats_collection_observer_.reset(new StatsCollectionObserver(this));
695 691
696 #if defined(OS_ANDROID) 692 #if defined(OS_ANDROID)
697 const std::string region_code = 693 const std::string region_code =
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 webview()->settings()->setCompositedScrollingForFramesEnabled( 733 webview()->settings()->setCompositedScrollingForFramesEnabled(
738 ShouldUseCompositedScrollingForFrames(device_scale_factor_)); 734 ShouldUseCompositedScrollingForFrames(device_scale_factor_));
739 webview()->settings()->setUseExpandedHeuristicsForGpuRasterization( 735 webview()->settings()->setUseExpandedHeuristicsForGpuRasterization(
740 ShouldUseExpandedHeuristicsForGpuRasterization()); 736 ShouldUseExpandedHeuristicsForGpuRasterization());
741 737
742 ApplyWebPreferences(webkit_preferences_, webview()); 738 ApplyWebPreferences(webkit_preferences_, webview());
743 739
744 webview()->settings()->setAllowConnectingInsecureWebSocket( 740 webview()->settings()->setAllowConnectingInsecureWebSocket(
745 command_line.HasSwitch(switches::kAllowInsecureWebSocketFromHttpsOrigin)); 741 command_line.HasSwitch(switches::kAllowInsecureWebSocketFromHttpsOrigin));
746 742
747 webview()->setMainFrame(main_render_frame_->GetWebFrame()); 743 RenderFrameProxy* proxy = NULL;
744 if (params->proxy_routing_id != MSG_ROUTING_NONE) {
745 CHECK(params->swapped_out);
746 proxy = RenderFrameProxy::CreateProxyForFrame(
747 params->proxy_routing_id, params->main_frame_routing_id);
748 main_render_frame_->set_render_frame_proxy(proxy);
749 }
750
751 // In --site-per-process, just use the WebRemoteFrame as the main frame.
752 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess) &&
753 proxy) {
754 webview()->setMainFrame(proxy->GetWebFrame());
755 } else {
756 webview()->setMainFrame(main_render_frame_->GetWebFrame());
757 }
748 main_render_frame_->Initialize(); 758 main_render_frame_->Initialize();
749 759
750 if (switches::IsTouchDragDropEnabled()) 760 if (switches::IsTouchDragDropEnabled())
751 webview()->settings()->setTouchDragDropEnabled(true); 761 webview()->settings()->setTouchDragDropEnabled(true);
752 762
753 if (switches::IsTouchEditingEnabled()) 763 if (switches::IsTouchEditingEnabled())
754 webview()->settings()->setTouchEditingEnabled(true); 764 webview()->settings()->setTouchEditingEnabled(true);
755 765
756 if (!params->frame_name.empty()) 766 if (!params->frame_name.empty())
757 webview()->mainFrame()->setName(params->frame_name); 767 webview()->mainFrame()->setName(params->frame_name);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 // If we have an opener_id but we weren't created by a renderer, then 809 // If we have an opener_id but we weren't created by a renderer, then
800 // it's the browser asking us to set our opener to another RenderView. 810 // it's the browser asking us to set our opener to another RenderView.
801 if (params->opener_id != MSG_ROUTING_NONE && !params->is_renderer_created) { 811 if (params->opener_id != MSG_ROUTING_NONE && !params->is_renderer_created) {
802 RenderViewImpl* opener_view = FromRoutingID(params->opener_id); 812 RenderViewImpl* opener_view = FromRoutingID(params->opener_id);
803 if (opener_view) 813 if (opener_view)
804 webview()->mainFrame()->setOpener(opener_view->webview()->mainFrame()); 814 webview()->mainFrame()->setOpener(opener_view->webview()->mainFrame());
805 } 815 }
806 816
807 // If we are initially swapped out, navigate to kSwappedOutURL. 817 // If we are initially swapped out, navigate to kSwappedOutURL.
808 // This ensures we are in a unique origin that others cannot script. 818 // This ensures we are in a unique origin that others cannot script.
809 if (is_swapped_out_) 819 if (is_swapped_out_ && webview()->mainFrame()->isWebLocalFrame())
810 NavigateToSwappedOutURL(webview()->mainFrame()); 820 NavigateToSwappedOutURL(webview()->mainFrame());
811 } 821 }
812 822
813 RenderViewImpl::~RenderViewImpl() { 823 RenderViewImpl::~RenderViewImpl() {
814 for (BitmapMap::iterator it = disambiguation_bitmaps_.begin(); 824 for (BitmapMap::iterator it = disambiguation_bitmaps_.begin();
815 it != disambiguation_bitmaps_.end(); 825 it != disambiguation_bitmaps_.end();
816 ++it) 826 ++it)
817 delete it->second; 827 delete it->second;
818 history_page_ids_.clear(); 828 history_page_ids_.clear();
819 829
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 if (webview()) 1042 if (webview())
1033 webview()->transferActiveWheelFlingAnimation(params); 1043 webview()->transferActiveWheelFlingAnimation(params);
1034 } 1044 }
1035 1045
1036 bool RenderViewImpl::HasIMETextFocus() { 1046 bool RenderViewImpl::HasIMETextFocus() {
1037 return GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE; 1047 return GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE;
1038 } 1048 }
1039 1049
1040 bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { 1050 bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
1041 WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL; 1051 WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL;
1042 if (main_frame) 1052 if (main_frame && main_frame->isWebLocalFrame())
1043 GetContentClient()->SetActiveURL(main_frame->document().url()); 1053 GetContentClient()->SetActiveURL(main_frame->document().url());
1044 1054
1045 ObserverListBase<RenderViewObserver>::Iterator it(observers_); 1055 ObserverListBase<RenderViewObserver>::Iterator it(observers_);
1046 RenderViewObserver* observer; 1056 RenderViewObserver* observer;
1047 while ((observer = it.GetNext()) != NULL) 1057 while ((observer = it.GetNext()) != NULL)
1048 if (observer->OnMessageReceived(message)) 1058 if (observer->OnMessageReceived(message))
1049 return true; 1059 return true;
1050 1060
1051 bool handled = true; 1061 bool handled = true;
1052 IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message) 1062 IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message)
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
1950 } 1960 }
1951 1961
1952 const std::string& RenderViewImpl::GetAcceptLanguages() const { 1962 const std::string& RenderViewImpl::GetAcceptLanguages() const {
1953 return renderer_preferences_.accept_languages; 1963 return renderer_preferences_.accept_languages;
1954 } 1964 }
1955 1965
1956 void RenderViewImpl::didCreateDataSource(WebLocalFrame* frame, 1966 void RenderViewImpl::didCreateDataSource(WebLocalFrame* frame,
1957 WebDataSource* ds) { 1967 WebDataSource* ds) {
1958 bool content_initiated = !pending_navigation_params_.get(); 1968 bool content_initiated = !pending_navigation_params_.get();
1959 1969
1970 LOG(ERROR) << "RV[" << this << "]::didCreateDataSource:"
1971 << " frame:" << frame
1972 << " url:" << ds->request().url();
1960 // Make sure any previous redirect URLs end up in our new data source. 1973 // Make sure any previous redirect URLs end up in our new data source.
1961 if (pending_navigation_params_.get()) { 1974 if (pending_navigation_params_.get()) {
1962 for (std::vector<GURL>::const_iterator i = 1975 for (std::vector<GURL>::const_iterator i =
1963 pending_navigation_params_->redirects.begin(); 1976 pending_navigation_params_->redirects.begin();
1964 i != pending_navigation_params_->redirects.end(); ++i) { 1977 i != pending_navigation_params_->redirects.end(); ++i) {
1965 ds->appendRedirect(*i); 1978 ds->appendRedirect(*i);
1966 } 1979 }
1967 } 1980 }
1968 1981
1969 DocumentState* document_state = DocumentState::FromDataSource(ds); 1982 DocumentState* document_state = DocumentState::FromDataSource(ds);
1970 if (!document_state) { 1983 if (!document_state) {
1971 document_state = new DocumentState; 1984 document_state = new DocumentState;
1972 ds->setExtraData(document_state); 1985 ds->setExtraData(document_state);
1973 if (!content_initiated) 1986 if (!content_initiated)
1974 PopulateDocumentStateFromPending(document_state); 1987 PopulateDocumentStateFromPending(document_state);
1975 } 1988 }
1976 1989
1977 // Carry over the user agent override flag, if it exists. 1990 // Carry over the user agent override flag, if it exists.
1978 if (content_initiated && webview() && webview()->mainFrame() && 1991 LOG(ERROR) << "RV[" << this << "]::didCreateDataSource:"
1992 << " frame:" << frame
1993 << " mainFrame is local: " << webview()->mainFrame()->isWebLocalFrame();
1994 if (content_initiated && webview() &&
1995 webview()->mainFrame() &&
1996 webview()->mainFrame()->isWebLocalFrame() &&
1979 webview()->mainFrame()->dataSource()) { 1997 webview()->mainFrame()->dataSource()) {
1980 DocumentState* old_document_state = 1998 DocumentState* old_document_state =
1981 DocumentState::FromDataSource(webview()->mainFrame()->dataSource()); 1999 DocumentState::FromDataSource(webview()->mainFrame()->dataSource());
1982 if (old_document_state) { 2000 if (old_document_state) {
1983 InternalDocumentStateData* internal_data = 2001 InternalDocumentStateData* internal_data =
1984 InternalDocumentStateData::FromDocumentState(document_state); 2002 InternalDocumentStateData::FromDocumentState(document_state);
1985 InternalDocumentStateData* old_internal_data = 2003 InternalDocumentStateData* old_internal_data =
1986 InternalDocumentStateData::FromDocumentState(old_document_state); 2004 InternalDocumentStateData::FromDocumentState(old_document_state);
1987 internal_data->set_is_overriding_user_agent( 2005 internal_data->set_is_overriding_user_agent(
1988 old_internal_data->is_overriding_user_agent()); 2006 old_internal_data->is_overriding_user_agent());
(...skipping 15 matching lines...) Expand all
2004 // page. We are early enough in the request process here that we 2022 // page. We are early enough in the request process here that we
2005 // can still see the DocumentState of the previous page and set 2023 // can still see the DocumentState of the previous page and set
2006 // this value appropriately. 2024 // this value appropriately.
2007 // TODO(gavinp): catch the important case of navigation in a new 2025 // TODO(gavinp): catch the important case of navigation in a new
2008 // renderer process. 2026 // renderer process.
2009 if (webview()) { 2027 if (webview()) {
2010 if (WebFrame* old_frame = webview()->mainFrame()) { 2028 if (WebFrame* old_frame = webview()->mainFrame()) {
2011 const WebURLRequest& original_request = ds->originalRequest(); 2029 const WebURLRequest& original_request = ds->originalRequest();
2012 const GURL referrer( 2030 const GURL referrer(
2013 original_request.httpHeaderField(WebString::fromUTF8("Referer"))); 2031 original_request.httpHeaderField(WebString::fromUTF8("Referer")));
2014 if (!referrer.is_empty() && 2032 if (!referrer.is_empty() && old_frame->isWebLocalFrame() &&
2015 DocumentState::FromDataSource( 2033 DocumentState::FromDataSource(
2016 old_frame->dataSource())->was_prefetcher()) { 2034 old_frame->dataSource())->was_prefetcher()) {
2017 for (; old_frame; old_frame = old_frame->traverseNext(false)) { 2035 for (; old_frame; old_frame = old_frame->traverseNext(false)) {
2018 WebDataSource* old_frame_ds = old_frame->dataSource(); 2036 WebDataSource* old_frame_ds = old_frame->dataSource();
2019 if (old_frame_ds && referrer == GURL(old_frame_ds->request().url())) { 2037 if (old_frame_ds && referrer == GURL(old_frame_ds->request().url())) {
2020 document_state->set_was_referred_by_prefetcher(true); 2038 document_state->set_was_referred_by_prefetcher(true);
2021 break; 2039 break;
2022 } 2040 }
2023 } 2041 }
2024 } 2042 }
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
2351 if (!webview()) 2369 if (!webview())
2352 return; 2370 return;
2353 SendUpdateState(history_controller_->GetCurrentEntry()); 2371 SendUpdateState(history_controller_->GetCurrentEntry());
2354 } 2372 }
2355 2373
2356 blink::WebPlugin* RenderViewImpl::GetWebPluginForFind() { 2374 blink::WebPlugin* RenderViewImpl::GetWebPluginForFind() {
2357 if (!webview()) 2375 if (!webview())
2358 return NULL; 2376 return NULL;
2359 2377
2360 WebFrame* main_frame = webview()->mainFrame(); 2378 WebFrame* main_frame = webview()->mainFrame();
2361 if (main_frame->document().isPluginDocument()) 2379 if (main_frame->isWebLocalFrame() &&
2380 main_frame->document().isPluginDocument())
2362 return webview()->mainFrame()->document().to<WebPluginDocument>().plugin(); 2381 return webview()->mainFrame()->document().to<WebPluginDocument>().plugin();
2363 2382
2364 #if defined(ENABLE_PLUGINS) 2383 #if defined(ENABLE_PLUGINS)
2365 if (plugin_find_handler_) 2384 if (plugin_find_handler_)
2366 return plugin_find_handler_->container()->plugin(); 2385 return plugin_find_handler_->container()->plugin();
2367 #endif 2386 #endif
2368 2387
2369 return NULL; 2388 return NULL;
2370 } 2389 }
2371 2390
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
2856 } 2875 }
2857 #endif // defined(USE_DEFAULT_RENDER_THEME) 2876 #endif // defined(USE_DEFAULT_RENDER_THEME)
2858 2877
2859 if (RenderThreadImpl::current()) // Will be NULL during unit tests. 2878 if (RenderThreadImpl::current()) // Will be NULL during unit tests.
2860 RenderThreadImpl::current()->SetFlingCurveParameters( 2879 RenderThreadImpl::current()->SetFlingCurveParameters(
2861 renderer_prefs.touchpad_fling_profile, 2880 renderer_prefs.touchpad_fling_profile,
2862 renderer_prefs.touchscreen_fling_profile); 2881 renderer_prefs.touchscreen_fling_profile);
2863 2882
2864 // If the zoom level for this page matches the old zoom default, and this 2883 // If the zoom level for this page matches the old zoom default, and this
2865 // is not a plugin, update the zoom level to match the new default. 2884 // is not a plugin, update the zoom level to match the new default.
2866 if (webview() && !webview()->mainFrame()->document().isPluginDocument() && 2885 if (webview() && webview()->mainFrame()->isWebLocalFrame() &&
2886 !webview()->mainFrame()->document().isPluginDocument() &&
2867 !ZoomValuesEqual(old_zoom_level, 2887 !ZoomValuesEqual(old_zoom_level,
2868 renderer_preferences_.default_zoom_level) && 2888 renderer_preferences_.default_zoom_level) &&
2869 ZoomValuesEqual(webview()->zoomLevel(), old_zoom_level)) { 2889 ZoomValuesEqual(webview()->zoomLevel(), old_zoom_level)) {
2870 webview()->setZoomLevel(renderer_preferences_.default_zoom_level); 2890 webview()->setZoomLevel(renderer_preferences_.default_zoom_level);
2871 zoomLevelChanged(); 2891 zoomLevelChanged();
2872 } 2892 }
2873 2893
2874 if (webview() && 2894 if (webview() &&
2875 old_accept_languages != renderer_preferences_.accept_languages) { 2895 old_accept_languages != renderer_preferences_.accept_languages) {
2876 webview()->acceptLanguagesChanged(); 2896 webview()->acceptLanguagesChanged();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2958 webstring_paths, 2978 webstring_paths,
2959 local_directory_name.AsUTF16Unsafe()); 2979 local_directory_name.AsUTF16Unsafe());
2960 } 2980 }
2961 2981
2962 void RenderViewImpl::OnSuppressDialogsUntilSwapOut() { 2982 void RenderViewImpl::OnSuppressDialogsUntilSwapOut() {
2963 // Don't show any more dialogs until we finish OnSwapOut. 2983 // Don't show any more dialogs until we finish OnSwapOut.
2964 suppress_dialogs_until_swap_out_ = true; 2984 suppress_dialogs_until_swap_out_ = true;
2965 } 2985 }
2966 2986
2967 void RenderViewImpl::NavigateToSwappedOutURL(blink::WebFrame* frame) { 2987 void RenderViewImpl::NavigateToSwappedOutURL(blink::WebFrame* frame) {
2988 LOG(ERROR) << "RV[" << this << "]::NavigateToSwappedOutURL: " << is_swapped_ou t_;
2968 // We use loadRequest instead of loadHTMLString because the former commits 2989 // We use loadRequest instead of loadHTMLString because the former commits
2969 // synchronously. Otherwise a new navigation can interrupt the navigation 2990 // synchronously. Otherwise a new navigation can interrupt the navigation
2970 // to kSwappedOutURL. If that happens to be to the page we had been 2991 // to kSwappedOutURL. If that happens to be to the page we had been
2971 // showing, then WebKit will never send a commit and we'll be left spinning. 2992 // showing, then WebKit will never send a commit and we'll be left spinning.
2972 // TODO(creis): Until we move this to RenderFrame, we may call this from a 2993 // TODO(creis): Until we move this to RenderFrame, we may call this from a
2973 // swapped out RenderFrame while our own is_swapped_out_ is false. 2994 // swapped out RenderFrame while our own is_swapped_out_ is false.
2974 RenderFrameImpl* rf = RenderFrameImpl::FromWebFrame(frame); 2995 RenderFrameImpl* rf = RenderFrameImpl::FromWebFrame(frame);
2975 CHECK(is_swapped_out_ || rf->is_swapped_out()); 2996 CHECK(is_swapped_out_ || rf->is_swapped_out());
2976 GURL swappedOutURL(kSwappedOutURL); 2997 GURL swappedOutURL(kSwappedOutURL);
2977 WebURLRequest request(swappedOutURL); 2998 WebURLRequest request(swappedOutURL);
2978 frame->loadRequest(request); 2999 if (frame->isWebLocalFrame())
3000 frame->loadRequest(request);
2979 } 3001 }
2980 3002
2981 void RenderViewImpl::OnClosePage() { 3003 void RenderViewImpl::OnClosePage() {
2982 FOR_EACH_OBSERVER(RenderViewObserver, observers_, ClosePage()); 3004 FOR_EACH_OBSERVER(RenderViewObserver, observers_, ClosePage());
2983 // TODO(creis): We'd rather use webview()->Close() here, but that currently 3005 // TODO(creis): We'd rather use webview()->Close() here, but that currently
2984 // sets the WebView's delegate_ to NULL, preventing any JavaScript dialogs 3006 // sets the WebView's delegate_ to NULL, preventing any JavaScript dialogs
2985 // in the onunload handler from appearing. For now, we're bypassing that and 3007 // in the onunload handler from appearing. For now, we're bypassing that and
2986 // calling the FrameLoader's CloseURL method directly. This should be 3008 // calling the FrameLoader's CloseURL method directly. This should be
2987 // revisited to avoid having two ways to close a page. Having a single way 3009 // revisited to avoid having two ways to close a page. Having a single way
2988 // to close that can run onunload is also useful for fixing 3010 // to close that can run onunload is also useful for fixing
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
3070 (*i)->ViewFlushedPaint(); 3092 (*i)->ViewFlushedPaint();
3071 } 3093 }
3072 #endif 3094 #endif
3073 3095
3074 // If the RenderWidget is closing down then early-exit, otherwise we'll crash. 3096 // If the RenderWidget is closing down then early-exit, otherwise we'll crash.
3075 // See crbug.com/112921. 3097 // See crbug.com/112921.
3076 if (!webview()) 3098 if (!webview())
3077 return; 3099 return;
3078 3100
3079 WebFrame* main_frame = webview()->mainFrame(); 3101 WebFrame* main_frame = webview()->mainFrame();
3102 for (WebFrame* frame = main_frame; frame; frame = frame->traverseNext(false)) {
3103 if (frame->isWebLocalFrame())
3104 main_frame = frame;
3105 }
3080 3106
3081 // If we have a provisional frame we are between the start and commit stages 3107 // If we have a provisional frame we are between the start and commit stages
3082 // of loading and we don't want to save stats. 3108 // of loading and we don't want to save stats.
3083 if (!main_frame->provisionalDataSource()) { 3109 if (!main_frame->provisionalDataSource()) {
3084 WebDataSource* ds = main_frame->dataSource(); 3110 WebDataSource* ds = main_frame->dataSource();
3085 DocumentState* document_state = DocumentState::FromDataSource(ds); 3111 DocumentState* document_state = DocumentState::FromDataSource(ds);
3086 InternalDocumentStateData* data = 3112 InternalDocumentStateData* data =
3087 InternalDocumentStateData::FromDocumentState(document_state); 3113 InternalDocumentStateData::FromDocumentState(document_state);
3088 if (data->did_first_visually_non_empty_layout() && 3114 if (data->did_first_visually_non_empty_layout() &&
3089 !data->did_first_visually_non_empty_paint()) { 3115 !data->did_first_visually_non_empty_paint()) {
3090 data->set_did_first_visually_non_empty_paint(true); 3116 data->set_did_first_visually_non_empty_paint(true);
3091 Send(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_)); 3117 Send(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_));
3092 } 3118 }
3093 3119
3094 // TODO(jar): The following code should all be inside a method, probably in 3120 // TODO(jar): The following code should all be inside a method, probably in
3095 // NavigatorState. 3121 // NavigatorState.
3096 Time now = Time::Now(); 3122 Time now = Time::Now();
3097 if (document_state->first_paint_time().is_null()) { 3123 if (document_state->first_paint_time().is_null()) {
3098 document_state->set_first_paint_time(now); 3124 document_state->set_first_paint_time(now);
3099 } 3125 }
3100 if (document_state->first_paint_after_load_time().is_null() && 3126 if (document_state->first_paint_after_load_time().is_null() &&
3101 !document_state->finish_load_time().is_null()) { 3127 !document_state->finish_load_time().is_null()) {
3102 document_state->set_first_paint_after_load_time(now); 3128 document_state->set_first_paint_after_load_time(now);
3103 } 3129 }
3104 } 3130 }
3105 } 3131 }
3106 3132
3107 gfx::Vector2d RenderViewImpl::GetScrollOffset() { 3133 gfx::Vector2d RenderViewImpl::GetScrollOffset() {
3108 WebSize scroll_offset = webview()->mainFrame()->scrollOffset(); 3134 WebFrame* main_frame = webview()->mainFrame();
3135 for (WebFrame* frame = main_frame; frame; frame = frame->traverseNext(false)) {
3136 if (frame->isWebLocalFrame())
3137 main_frame = frame;
3138 }
3139
3140 WebSize scroll_offset = main_frame->scrollOffset();
3109 return gfx::Vector2d(scroll_offset.width, scroll_offset.height); 3141 return gfx::Vector2d(scroll_offset.width, scroll_offset.height);
3110 } 3142 }
3111 3143
3112 void RenderViewImpl::OnClearFocusedElement() { 3144 void RenderViewImpl::OnClearFocusedElement() {
3113 if (webview()) 3145 if (webview())
3114 webview()->clearFocusedElement(); 3146 webview()->clearFocusedElement();
3115 } 3147 }
3116 3148
3117 void RenderViewImpl::OnSetBackgroundOpaque(bool opaque) { 3149 void RenderViewImpl::OnSetBackgroundOpaque(bool opaque) {
3118 if (webview()) 3150 if (webview())
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
3302 for (plugin_it = plugin_delegates_.begin(); 3334 for (plugin_it = plugin_delegates_.begin();
3303 plugin_it != plugin_delegates_.end(); ++plugin_it) { 3335 plugin_it != plugin_delegates_.end(); ++plugin_it) {
3304 (*plugin_it)->SetContainerVisibility(true); 3336 (*plugin_it)->SetContainerVisibility(true);
3305 } 3337 }
3306 #endif // OS_MACOSX 3338 #endif // OS_MACOSX
3307 #endif // ENABLE_PLUGINS 3339 #endif // ENABLE_PLUGINS
3308 } 3340 }
3309 3341
3310 GURL RenderViewImpl::GetURLForGraphicsContext3D() { 3342 GURL RenderViewImpl::GetURLForGraphicsContext3D() {
3311 DCHECK(webview()); 3343 DCHECK(webview());
3312 if (webview()->mainFrame()) 3344 if (webview()->mainFrame()->isWebLocalFrame())
3313 return GURL(webview()->mainFrame()->document().url()); 3345 return GURL(webview()->mainFrame()->document().url());
3314 else 3346 else
3315 return GURL("chrome://gpu/RenderViewImpl::CreateGraphicsContext3D"); 3347 return GURL("chrome://gpu/RenderViewImpl::CreateGraphicsContext3D");
3316 } 3348 }
3317 3349
3318 void RenderViewImpl::OnSetFocus(bool enable) { 3350 void RenderViewImpl::OnSetFocus(bool enable) {
3319 RenderWidget::OnSetFocus(enable); 3351 RenderWidget::OnSetFocus(enable);
3320 3352
3321 #if defined(ENABLE_PLUGINS) 3353 #if defined(ENABLE_PLUGINS)
3322 if (webview() && webview()->isActive()) { 3354 if (webview() && webview()->isActive()) {
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after
4013 std::vector<gfx::Size> sizes; 4045 std::vector<gfx::Size> sizes;
4014 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); 4046 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes);
4015 if (!url.isEmpty()) 4047 if (!url.isEmpty())
4016 urls.push_back( 4048 urls.push_back(
4017 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); 4049 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes));
4018 } 4050 }
4019 SendUpdateFaviconURL(urls); 4051 SendUpdateFaviconURL(urls);
4020 } 4052 }
4021 4053
4022 } // namespace content 4054 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_thread_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698