OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |