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

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

Issue 1310743003: Consistently use LoFi for an entire page (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 2 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
« no previous file with comments | « content/renderer/render_frame_impl.h ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader( 421 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader(
422 common_params.referrer.policy, 422 common_params.referrer.policy,
423 common_params.url, 423 common_params.url,
424 WebString::fromUTF8(common_params.referrer.url.spec())); 424 WebString::fromUTF8(common_params.referrer.url.spec()));
425 if (!web_referrer.isEmpty()) 425 if (!web_referrer.isEmpty())
426 request.setHTTPReferrer(web_referrer, common_params.referrer.policy); 426 request.setHTTPReferrer(web_referrer, common_params.referrer.policy);
427 } 427 }
428 428
429 RequestExtraData* extra_data = new RequestExtraData(); 429 RequestExtraData* extra_data = new RequestExtraData();
430 extra_data->set_stream_override(stream_override.Pass()); 430 extra_data->set_stream_override(stream_override.Pass());
431 extra_data->set_lofi_state(common_params.lofi_state);
megjablon 2015/10/07 02:22:48 I'm finding that setting this extra data here does
431 request.setExtraData(extra_data); 432 request.setExtraData(extra_data);
432 433
433 // Set the ui timestamp for this navigation. Currently the timestamp here is 434 // Set the ui timestamp for this navigation. Currently the timestamp here is
434 // only non empty when the navigation was triggered by an Android intent. The 435 // only non empty when the navigation was triggered by an Android intent. The
435 // timestamp is converted to a double version supported by blink. It will be 436 // timestamp is converted to a double version supported by blink. It will be
436 // passed back to the browser in the DidCommitProvisionalLoad and the 437 // passed back to the browser in the DidCommitProvisionalLoad and the
437 // DocumentLoadComplete IPCs. 438 // DocumentLoadComplete IPCs.
438 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks(); 439 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks();
439 request.setUiStartTime(ui_timestamp.InSecondsF()); 440 request.setUiStartTime(ui_timestamp.InSecondsF());
440 request.setInputPerfMetricReportPolicy( 441 request.setInputPerfMetricReportPolicy(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 // CommitNavigation IPC, and then back to the browser again in the 488 // CommitNavigation IPC, and then back to the browser again in the
488 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs. 489 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs.
489 base::TimeTicks ui_timestamp = 490 base::TimeTicks ui_timestamp =
490 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime()); 491 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime());
491 FrameMsg_UILoadMetricsReportType::Value report_type = 492 FrameMsg_UILoadMetricsReportType::Value report_type =
492 static_cast<FrameMsg_UILoadMetricsReportType::Value>( 493 static_cast<FrameMsg_UILoadMetricsReportType::Value>(
493 request->inputPerfMetricReportPolicy()); 494 request->inputPerfMetricReportPolicy());
494 return CommonNavigationParams( 495 return CommonNavigationParams(
495 request->url(), referrer, extra_data->transition_type(), 496 request->url(), referrer, extra_data->transition_type(),
496 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry, 497 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry,
497 ui_timestamp, report_type, GURL(), GURL()); 498 ui_timestamp, report_type, GURL(), GURL(), LOFI_UNSPECIFIED);
498 } 499 }
499 500
500 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) 501 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
501 media::Context3D GetSharedMainThreadContext3D() { 502 media::Context3D GetSharedMainThreadContext3D() {
502 cc::ContextProvider* provider = 503 cc::ContextProvider* provider =
503 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 504 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
504 if (!provider) 505 if (!provider)
505 return media::Context3D(); 506 return media::Context3D();
506 return media::Context3D(provider->ContextGL(), provider->GrContext()); 507 return media::Context3D(provider->ContextGL(), provider->GrContext());
507 } 508 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 #endif 715 #endif
715 has_played_media_(false), 716 has_played_media_(false),
716 devtools_agent_(nullptr), 717 devtools_agent_(nullptr),
717 geolocation_dispatcher_(NULL), 718 geolocation_dispatcher_(NULL),
718 push_messaging_dispatcher_(NULL), 719 push_messaging_dispatcher_(NULL),
719 presentation_dispatcher_(NULL), 720 presentation_dispatcher_(NULL),
720 screen_orientation_dispatcher_(NULL), 721 screen_orientation_dispatcher_(NULL),
721 manifest_manager_(NULL), 722 manifest_manager_(NULL),
722 accessibility_mode_(AccessibilityModeOff), 723 accessibility_mode_(AccessibilityModeOff),
723 renderer_accessibility_(NULL), 724 renderer_accessibility_(NULL),
725 is_using_lofi_(false),
724 weak_factory_(this) { 726 weak_factory_(this) {
725 std::pair<RoutingIDFrameMap::iterator, bool> result = 727 std::pair<RoutingIDFrameMap::iterator, bool> result =
726 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this)); 728 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this));
727 CHECK(result.second) << "Inserting a duplicate item."; 729 CHECK(result.second) << "Inserting a duplicate item.";
728 730
729 RenderThread::Get()->AddRoute(routing_id_, this); 731 RenderThread::Get()->AddRoute(routing_id_, this);
730 732
731 render_view_->RegisterRenderFrame(this); 733 render_view_->RegisterRenderFrame(this);
732 734
733 // Everything below subclasses RenderFrameObserver and is automatically 735 // Everything below subclasses RenderFrameObserver and is automatically
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 std::make_pair(web_frame, this)); 790 std::make_pair(web_frame, this));
789 CHECK(result.second) << "Inserting a duplicate item."; 791 CHECK(result.second) << "Inserting a duplicate item.";
790 792
791 frame_ = web_frame; 793 frame_ = web_frame;
792 } 794 }
793 795
794 void RenderFrameImpl::Initialize() { 796 void RenderFrameImpl::Initialize() {
795 is_main_frame_ = !frame_->parent(); 797 is_main_frame_ = !frame_->parent();
796 is_local_root_ = is_main_frame_ || frame_->parent()->isWebRemoteFrame(); 798 is_local_root_ = is_main_frame_ || frame_->parent()->isWebRemoteFrame();
797 799
800 RenderFrameImpl* parent_frame = RenderFrameImpl::FromWebFrame(
801 frame_->parent());
802 if (parent_frame)
803 is_using_lofi_ = parent_frame->IsUsingLoFi();
804
798 bool is_tracing = false; 805 bool is_tracing = false;
799 TRACE_EVENT_CATEGORY_GROUP_ENABLED("navigation", &is_tracing); 806 TRACE_EVENT_CATEGORY_GROUP_ENABLED("navigation", &is_tracing);
800 if (is_tracing) { 807 if (is_tracing) {
801 int parent_id = MSG_ROUTING_NONE; 808 int parent_id = MSG_ROUTING_NONE;
802 if (!is_main_frame_) { 809 if (!is_main_frame_) {
803 if (frame_->parent()->isWebRemoteFrame()) { 810 if (frame_->parent()->isWebRemoteFrame()) {
804 RenderFrameProxy* parent_proxy = RenderFrameProxy::FromWebFrame( 811 RenderFrameProxy* parent_proxy = RenderFrameProxy::FromWebFrame(
805 frame_->parent()); 812 frame_->parent());
806 if (parent_proxy) 813 if (parent_proxy)
807 parent_id = parent_proxy->routing_id(); 814 parent_id = parent_proxy->routing_id();
808 } else { 815 } else {
809 RenderFrameImpl* parent_frame = RenderFrameImpl::FromWebFrame(
810 frame_->parent());
811 if (parent_frame) 816 if (parent_frame)
812 parent_id = parent_frame->GetRoutingID(); 817 parent_id = parent_frame->GetRoutingID();
813 } 818 }
814 } 819 }
815 TRACE_EVENT2("navigation", "RenderFrameImpl::Initialize", 820 TRACE_EVENT2("navigation", "RenderFrameImpl::Initialize",
816 "id", routing_id_, 821 "id", routing_id_,
817 "parent", parent_id); 822 "parent", parent_id);
818 } 823 }
819 824
820 #if defined(ENABLE_PLUGINS) 825 #if defined(ENABLE_PLUGINS)
(...skipping 1194 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 ServiceRegistryJsWrapper::kModuleName, 2020 ServiceRegistryJsWrapper::kModuleName,
2016 ServiceRegistryJsWrapper::Create(isolate, &service_registry_).ToV8()); 2021 ServiceRegistryJsWrapper::Create(isolate, &service_registry_).ToV8());
2017 } 2022 }
2018 2023
2019 void RenderFrameImpl::AddMessageToConsole(ConsoleMessageLevel level, 2024 void RenderFrameImpl::AddMessageToConsole(ConsoleMessageLevel level,
2020 const std::string& message) { 2025 const std::string& message) {
2021 if (devtools_agent_) 2026 if (devtools_agent_)
2022 devtools_agent_->AddMessageToConsole(level, message); 2027 devtools_agent_->AddMessageToConsole(level, message);
2023 } 2028 }
2024 2029
2030 bool RenderFrameImpl::IsUsingLoFi() {
2031 return is_using_lofi_;
2032 }
2033
2025 // blink::WebFrameClient implementation ---------------------------------------- 2034 // blink::WebFrameClient implementation ----------------------------------------
2026 2035
2027 blink::WebPlugin* RenderFrameImpl::createPlugin( 2036 blink::WebPlugin* RenderFrameImpl::createPlugin(
2028 blink::WebLocalFrame* frame, 2037 blink::WebLocalFrame* frame,
2029 const blink::WebPluginParams& params) { 2038 const blink::WebPluginParams& params) {
2030 DCHECK_EQ(frame_, frame); 2039 DCHECK_EQ(frame_, frame);
2031 blink::WebPlugin* plugin = NULL; 2040 blink::WebPlugin* plugin = NULL;
2032 if (GetContentClient()->renderer()->OverrideCreatePlugin( 2041 if (GetContentClient()->renderer()->OverrideCreatePlugin(
2033 this, frame, params, &plugin)) { 2042 this, frame, params, &plugin)) {
2034 return plugin; 2043 return plugin;
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
2714 const blink::WebHistoryItem& item, 2723 const blink::WebHistoryItem& item,
2715 blink::WebHistoryCommitType commit_type) { 2724 blink::WebHistoryCommitType commit_type) {
2716 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", 2725 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad",
2717 "id", routing_id_, 2726 "id", routing_id_,
2718 "url", GetLoadingUrl().possibly_invalid_spec()); 2727 "url", GetLoadingUrl().possibly_invalid_spec());
2719 DCHECK(!frame_ || frame_ == frame); 2728 DCHECK(!frame_ || frame_ == frame);
2720 DocumentState* document_state = 2729 DocumentState* document_state =
2721 DocumentState::FromDataSource(frame->dataSource()); 2730 DocumentState::FromDataSource(frame->dataSource());
2722 NavigationStateImpl* navigation_state = 2731 NavigationStateImpl* navigation_state =
2723 static_cast<NavigationStateImpl*>(document_state->navigation_state()); 2732 static_cast<NavigationStateImpl*>(document_state->navigation_state());
2733 WebURLResponseExtraDataImpl* extra_data = GetExtraDataFromResponse(
2734 frame->dataSource()->response());
2735 is_using_lofi_ = extra_data && extra_data->is_using_lofi();
2724 2736
2725 if (proxy_routing_id_ != MSG_ROUTING_NONE) { 2737 if (proxy_routing_id_ != MSG_ROUTING_NONE) {
2726 RenderFrameProxy* proxy = 2738 RenderFrameProxy* proxy =
2727 RenderFrameProxy::FromRoutingID(proxy_routing_id_); 2739 RenderFrameProxy::FromRoutingID(proxy_routing_id_);
2728 CHECK(proxy); 2740 CHECK(proxy);
2729 proxy->web_frame()->swap(frame_); 2741 proxy->web_frame()->swap(frame_);
2730 proxy_routing_id_ = MSG_ROUTING_NONE; 2742 proxy_routing_id_ = MSG_ROUTING_NONE;
2731 2743
2732 // If this is the main frame going from a remote frame to a local frame, 2744 // If this is the main frame going from a remote frame to a local frame,
2733 // it needs to set RenderViewImpl's pointer for the main frame to itself 2745 // it needs to set RenderViewImpl's pointer for the main frame to itself
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
3278 3290
3279 // The request's extra data may indicate that we should set a custom user 3291 // The request's extra data may indicate that we should set a custom user
3280 // agent. This needs to be done here, after WebKit is through with setting the 3292 // agent. This needs to be done here, after WebKit is through with setting the
3281 // user agent on its own. Similarly, it may indicate that we should set an 3293 // user agent on its own. Similarly, it may indicate that we should set an
3282 // X-Requested-With header. This must be done here to avoid breaking CORS 3294 // X-Requested-With header. This must be done here to avoid breaking CORS
3283 // checks. 3295 // checks.
3284 // PlzNavigate: there may also be a stream url associated with the request. 3296 // PlzNavigate: there may also be a stream url associated with the request.
3285 WebString custom_user_agent; 3297 WebString custom_user_agent;
3286 WebString requested_with; 3298 WebString requested_with;
3287 scoped_ptr<StreamOverrideParameters> stream_override; 3299 scoped_ptr<StreamOverrideParameters> stream_override;
3300 LoFiState lofi_state = LOFI_UNSPECIFIED;
3288 if (request.extraData()) { 3301 if (request.extraData()) {
3289 RequestExtraData* old_extra_data = 3302 RequestExtraData* old_extra_data =
3290 static_cast<RequestExtraData*>(request.extraData()); 3303 static_cast<RequestExtraData*>(request.extraData());
3291 3304
3292 custom_user_agent = old_extra_data->custom_user_agent(); 3305 custom_user_agent = old_extra_data->custom_user_agent();
3293 if (!custom_user_agent.isNull()) { 3306 if (!custom_user_agent.isNull()) {
3294 if (custom_user_agent.isEmpty()) 3307 if (custom_user_agent.isEmpty())
3295 request.clearHTTPHeaderField("User-Agent"); 3308 request.clearHTTPHeaderField("User-Agent");
3296 else 3309 else
3297 request.setHTTPHeaderField("User-Agent", custom_user_agent); 3310 request.setHTTPHeaderField("User-Agent", custom_user_agent);
3298 } 3311 }
3299 3312
3300 requested_with = old_extra_data->requested_with(); 3313 requested_with = old_extra_data->requested_with();
3301 if (!requested_with.isNull()) { 3314 if (!requested_with.isNull()) {
3302 if (requested_with.isEmpty()) 3315 if (requested_with.isEmpty())
3303 request.clearHTTPHeaderField("X-Requested-With"); 3316 request.clearHTTPHeaderField("X-Requested-With");
3304 else 3317 else
3305 request.setHTTPHeaderField("X-Requested-With", requested_with); 3318 request.setHTTPHeaderField("X-Requested-With", requested_with);
3306 } 3319 }
3307 stream_override = old_extra_data->TakeStreamOverrideOwnership(); 3320 stream_override = old_extra_data->TakeStreamOverrideOwnership();
3321 lofi_state = old_extra_data->lofi_state();
3308 } 3322 }
3309 3323
3310 // Add the default accept header for frame request if it has not been set 3324 // Add the default accept header for frame request if it has not been set
3311 // already. 3325 // already.
3312 if ((request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || 3326 if ((request.frameType() == blink::WebURLRequest::FrameTypeTopLevel ||
3313 request.frameType() == blink::WebURLRequest::FrameTypeNested) && 3327 request.frameType() == blink::WebURLRequest::FrameTypeNested) &&
3314 request.httpHeaderField(WebString::fromUTF8(kAcceptHeader)).isEmpty()) { 3328 request.httpHeaderField(WebString::fromUTF8(kAcceptHeader)).isEmpty()) {
3315 request.setHTTPHeaderField(WebString::fromUTF8(kAcceptHeader), 3329 request.setHTTPHeaderField(WebString::fromUTF8(kAcceptHeader),
3316 WebString::fromUTF8(kDefaultAcceptHeader)); 3330 WebString::fromUTF8(kDefaultAcceptHeader));
3317 } 3331 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
3381 extra_data->set_allow_download( 3395 extra_data->set_allow_download(
3382 navigation_state->common_params().allow_download); 3396 navigation_state->common_params().allow_download);
3383 extra_data->set_transition_type(transition_type); 3397 extra_data->set_transition_type(transition_type);
3384 extra_data->set_should_replace_current_entry(should_replace_current_entry); 3398 extra_data->set_should_replace_current_entry(should_replace_current_entry);
3385 extra_data->set_transferred_request_child_id( 3399 extra_data->set_transferred_request_child_id(
3386 navigation_state->start_params().transferred_request_child_id); 3400 navigation_state->start_params().transferred_request_child_id);
3387 extra_data->set_transferred_request_request_id( 3401 extra_data->set_transferred_request_request_id(
3388 navigation_state->start_params().transferred_request_request_id); 3402 navigation_state->start_params().transferred_request_request_id);
3389 extra_data->set_service_worker_provider_id(provider_id); 3403 extra_data->set_service_worker_provider_id(provider_id);
3390 extra_data->set_stream_override(stream_override.Pass()); 3404 extra_data->set_stream_override(stream_override.Pass());
3405 // TODO(megjablon): Set the navigation params for single image loads to
3406 // LOFI_OFF and remove the dependency on ReloadBypassingCache.
3407 if (request.cachePolicy() == WebURLRequest::ReloadBypassingCache)
3408 extra_data->set_lofi_state(LOFI_OFF);
3409 else if (!navigation_state->request_committed())
3410 extra_data->set_lofi_state(lofi_state);
3411 else
3412 extra_data->set_lofi_state(is_using_lofi_ ? LOFI_ON : LOFI_OFF);
3391 request.setExtraData(extra_data); 3413 request.setExtraData(extra_data);
3392 3414
3393 // TODO(creis): Update prefetching to work with out-of-process iframes. 3415 // TODO(creis): Update prefetching to work with out-of-process iframes.
3394 WebFrame* top_frame = frame->top(); 3416 WebFrame* top_frame = frame->top();
3395 if (top_frame && top_frame->isWebLocalFrame()) { 3417 if (top_frame && top_frame->isWebLocalFrame()) {
3396 DocumentState* top_document_state = 3418 DocumentState* top_document_state =
3397 DocumentState::FromDataSource(top_frame->dataSource()); 3419 DocumentState::FromDataSource(top_frame->dataSource());
3398 if (top_document_state) { 3420 if (top_document_state) {
3399 // TODO(gavinp): separate out prefetching and prerender field trials 3421 // TODO(gavinp): separate out prefetching and prerender field trials
3400 // if the rel=prerender rel type is sticking around. 3422 // if the rel=prerender rel type is sticking around.
(...skipping 1795 matching lines...) Expand 10 before | Expand all | Expand 10 after
5196 mojo::ServiceProviderPtr service_provider; 5218 mojo::ServiceProviderPtr service_provider;
5197 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5219 mojo::URLRequestPtr request(mojo::URLRequest::New());
5198 request->url = mojo::String::From(url); 5220 request->url = mojo::String::From(url);
5199 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5221 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5200 nullptr, nullptr, 5222 nullptr, nullptr,
5201 base::Bind(&OnGotContentHandlerID)); 5223 base::Bind(&OnGotContentHandlerID));
5202 return service_provider.Pass(); 5224 return service_provider.Pass();
5203 } 5225 }
5204 5226
5205 } // namespace content 5227 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698