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

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

Issue 1425303002: OOPIF: Stop using HistoryController and refactor UpdateState. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix nit Created 5 years, 1 month 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') | content/renderer/render_view_browsertest.cc » ('j') | 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 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 264
265 const size_t kExtraCharsBeforeAndAfterSelection = 100; 265 const size_t kExtraCharsBeforeAndAfterSelection = 100;
266 266
267 typedef std::map<int, RenderFrameImpl*> RoutingIDFrameMap; 267 typedef std::map<int, RenderFrameImpl*> RoutingIDFrameMap;
268 static base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map = 268 static base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map =
269 LAZY_INSTANCE_INITIALIZER; 269 LAZY_INSTANCE_INITIALIZER;
270 270
271 typedef std::map<blink::WebFrame*, RenderFrameImpl*> FrameMap; 271 typedef std::map<blink::WebFrame*, RenderFrameImpl*> FrameMap;
272 base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER; 272 base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER;
273 273
274 int64 ExtractPostId(HistoryEntry* entry) { 274 int64 ExtractPostId(const WebHistoryItem& item) {
275 if (!entry)
276 return -1;
277
278 const WebHistoryItem& item = entry->root();
279 if (item.isNull() || item.httpBody().isNull()) 275 if (item.isNull() || item.httpBody().isNull())
280 return -1; 276 return -1;
281 277
282 return item.httpBody().identifier(); 278 return item.httpBody().identifier();
283 } 279 }
284 280
285 WebURLResponseExtraDataImpl* GetExtraDataFromResponse( 281 WebURLResponseExtraDataImpl* GetExtraDataFromResponse(
286 const WebURLResponse& response) { 282 const WebURLResponse& response) {
287 return static_cast<WebURLResponseExtraDataImpl*>(response.extraData()); 283 return static_cast<WebURLResponseExtraDataImpl*>(response.extraData());
288 } 284 }
(...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after
1270 CHECK(is_main_frame_ || SiteIsolationPolicy::AreCrossProcessFramesPossible()); 1266 CHECK(is_main_frame_ || SiteIsolationPolicy::AreCrossProcessFramesPossible());
1271 1267
1272 // Only run unload if we're not swapped out yet, but send the ack either way. 1268 // Only run unload if we're not swapped out yet, but send the ack either way.
1273 if (!is_swapped_out_) { 1269 if (!is_swapped_out_) {
1274 // Swap this RenderFrame out so the frame can navigate to a page rendered by 1270 // Swap this RenderFrame out so the frame can navigate to a page rendered by
1275 // a different process. This involves running the unload handler and 1271 // a different process. This involves running the unload handler and
1276 // clearing the page. We also allow this process to exit if there are no 1272 // clearing the page. We also allow this process to exit if there are no
1277 // other active RenderFrames in it. 1273 // other active RenderFrames in it.
1278 1274
1279 // Send an UpdateState message before we get swapped out. 1275 // Send an UpdateState message before we get swapped out.
1280 render_view_->SendUpdateState(); 1276 if (SiteIsolationPolicy::UseSubframeNavigationEntries())
1277 SendUpdateState();
1278 else
1279 render_view_->SendUpdateState();
1281 1280
1282 // If we need a proxy to replace this, create it now so its routing id is 1281 // If we need a proxy to replace this, create it now so its routing id is
1283 // registered for receiving IPC messages. 1282 // registered for receiving IPC messages.
1284 if (proxy_routing_id != MSG_ROUTING_NONE) { 1283 if (proxy_routing_id != MSG_ROUTING_NONE) {
1285 proxy = RenderFrameProxy::CreateProxyToReplaceFrame( 1284 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(
1286 this, proxy_routing_id, replicated_frame_state.scope); 1285 this, proxy_routing_id, replicated_frame_state.scope);
1287 } 1286 }
1288 1287
1289 // Synchronously run the unload handler before sending the ACK. 1288 // Synchronously run the unload handler before sending the ACK.
1290 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support 1289 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support
(...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after
2532 request.url(), referrer, 2531 request.url(), referrer,
2533 suggested_name)); 2532 suggested_name));
2534 } else { 2533 } else {
2535 OpenURL(request.url(), referrer, policy, should_replace_current_entry); 2534 OpenURL(request.url(), referrer, policy, should_replace_current_entry);
2536 } 2535 }
2537 } 2536 }
2538 2537
2539 blink::WebHistoryItem RenderFrameImpl::historyItemForNewChildFrame( 2538 blink::WebHistoryItem RenderFrameImpl::historyItemForNewChildFrame(
2540 blink::WebFrame* frame) { 2539 blink::WebFrame* frame) {
2541 DCHECK(!frame_ || frame_ == frame); 2540 DCHECK(!frame_ || frame_ == frame);
2541
2542 // TODO(creis): In OOPIF enabled modes, send an IPC to the browser process
2543 // telling it to navigate the new frame. See https://crbug.com/502317.
2544 if (SiteIsolationPolicy::UseSubframeNavigationEntries())
2545 return WebHistoryItem();
2546
2542 return render_view_->history_controller()->GetItemForNewChildFrame(this); 2547 return render_view_->history_controller()->GetItemForNewChildFrame(this);
2543 } 2548 }
2544 2549
2545 void RenderFrameImpl::willSendSubmitEvent(blink::WebLocalFrame* frame, 2550 void RenderFrameImpl::willSendSubmitEvent(blink::WebLocalFrame* frame,
2546 const blink::WebFormElement& form) { 2551 const blink::WebFormElement& form) {
2547 DCHECK(!frame_ || frame_ == frame); 2552 DCHECK(!frame_ || frame_ == frame);
2548 2553
2549 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSendSubmitEvent(form)); 2554 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSendSubmitEvent(form));
2550 } 2555 }
2551 2556
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
2732 DidStartProvisionalLoad(frame)); 2737 DidStartProvisionalLoad(frame));
2733 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); 2738 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad());
2734 2739
2735 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( 2740 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame(
2736 routing_id_, ds->request().url())); 2741 routing_id_, ds->request().url()));
2737 } 2742 }
2738 2743
2739 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( 2744 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
2740 blink::WebLocalFrame* frame) { 2745 blink::WebLocalFrame* frame) {
2741 DCHECK(!frame_ || frame_ == frame); 2746 DCHECK(!frame_ || frame_ == frame);
2747
2748 // We don't use HistoryController in OOPIF enabled modes.
2749 if (SiteIsolationPolicy::UseSubframeNavigationEntries())
2750 return;
2751
2742 render_view_->history_controller()->RemoveChildrenForRedirect(this); 2752 render_view_->history_controller()->RemoveChildrenForRedirect(this);
2743 } 2753 }
2744 2754
2745 void RenderFrameImpl::didFailProvisionalLoad( 2755 void RenderFrameImpl::didFailProvisionalLoad(
2746 blink::WebLocalFrame* frame, 2756 blink::WebLocalFrame* frame,
2747 const blink::WebURLError& error, 2757 const blink::WebURLError& error,
2748 blink::WebHistoryCommitType commit_type) { 2758 blink::WebHistoryCommitType commit_type) {
2749 TRACE_EVENT1("navigation,benchmark", 2759 TRACE_EVENT1("navigation,benchmark",
2750 "RenderFrameImpl::didFailProvisionalLoad", "id", routing_id_); 2760 "RenderFrameImpl::didFailProvisionalLoad", "id", routing_id_);
2751 DCHECK(!frame_ || frame_ == frame); 2761 DCHECK(!frame_ || frame_ == frame);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2834 // For new page navigations, the browser process needs to be notified of the 2844 // For new page navigations, the browser process needs to be notified of the
2835 // first paint of that page, so it can cancel the timer that waits for it. 2845 // first paint of that page, so it can cancel the timer that waits for it.
2836 if (is_main_frame_ && !navigation_state->WasWithinSamePage()) { 2846 if (is_main_frame_ && !navigation_state->WasWithinSamePage()) {
2837 render_view_->QueueMessage( 2847 render_view_->QueueMessage(
2838 new ViewHostMsg_DidFirstPaintAfterLoad(render_view_->routing_id_), 2848 new ViewHostMsg_DidFirstPaintAfterLoad(render_view_->routing_id_),
2839 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); 2849 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE);
2840 } 2850 }
2841 2851
2842 // When we perform a new navigation, we need to update the last committed 2852 // When we perform a new navigation, we need to update the last committed
2843 // session history entry with state for the page we are leaving. Do this 2853 // session history entry with state for the page we are leaving. Do this
2844 // before updating the HistoryController state. 2854 // before updating the current history item.
2845 render_view_->SendUpdateState(); 2855 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) {
2846 2856 SendUpdateState();
2847 render_view_->history_controller()->UpdateForCommit( 2857 current_history_item_ = item;
2848 this, item, commit_type, navigation_state->WasWithinSamePage()); 2858 } else {
2859 render_view_->SendUpdateState();
2860 render_view_->history_controller()->UpdateForCommit(
2861 this, item, commit_type, navigation_state->WasWithinSamePage());
2862 }
2849 2863
2850 InternalDocumentStateData* internal_data = 2864 InternalDocumentStateData* internal_data =
2851 InternalDocumentStateData::FromDocumentState(document_state); 2865 InternalDocumentStateData::FromDocumentState(document_state);
2852 2866
2853 if (document_state->commit_load_time().is_null()) 2867 if (document_state->commit_load_time().is_null())
2854 document_state->set_commit_load_time(Time::Now()); 2868 document_state->set_commit_load_time(Time::Now());
2855 2869
2856 if (internal_data->must_reset_scroll_and_scale_state()) { 2870 if (internal_data->must_reset_scroll_and_scale_state()) {
2857 render_view_->webview()->resetScrollAndScaleState(); 2871 render_view_->webview()->resetScrollAndScaleState();
2858 internal_data->set_must_reset_scroll_and_scale_state(false); 2872 internal_data->set_must_reset_scroll_and_scale_state(false);
(...skipping 1270 matching lines...) Expand 10 before | Expand all | Expand 10 after
4129 !response.isMultipartPayload() && (response.httpStatusCode() != 404); 4143 !response.isMultipartPayload() && (response.httpStatusCode() != 404);
4130 4144
4131 params.searchable_form_url = internal_data->searchable_form_url(); 4145 params.searchable_form_url = internal_data->searchable_form_url();
4132 params.searchable_form_encoding = internal_data->searchable_form_encoding(); 4146 params.searchable_form_encoding = internal_data->searchable_form_encoding();
4133 4147
4134 params.gesture = render_view_->navigation_gesture_; 4148 params.gesture = render_view_->navigation_gesture_;
4135 render_view_->navigation_gesture_ = NavigationGestureUnknown; 4149 render_view_->navigation_gesture_ = NavigationGestureUnknown;
4136 4150
4137 // Make navigation state a part of the DidCommitProvisionalLoad message so 4151 // Make navigation state a part of the DidCommitProvisionalLoad message so
4138 // that committed entry has it at all times. 4152 // that committed entry has it at all times.
4139 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); 4153 int64 post_id = -1;
4140 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) { 4154 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) {
4141 if (entry) 4155 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry();
4156 if (entry) {
4142 params.page_state = HistoryEntryToPageState(entry); 4157 params.page_state = HistoryEntryToPageState(entry);
4143 else 4158 post_id = ExtractPostId(entry->root());
4159 } else {
4144 params.page_state = PageState::CreateFromURL(request.url()); 4160 params.page_state = PageState::CreateFromURL(request.url());
4161 }
4145 } else { 4162 } else {
4146 // In --site-per-process, just send a single HistoryItem for this frame, 4163 // In --site-per-process, just send a single HistoryItem for this frame,
4147 // rather than the whole tree. It will be stored in the corresponding 4164 // rather than the whole tree. It will be stored in the corresponding
4148 // FrameNavigationEntry. 4165 // FrameNavigationEntry.
4149 params.page_state = SingleHistoryItemToPageState(item); 4166 params.page_state = SingleHistoryItemToPageState(item);
4167 post_id = ExtractPostId(item);
4150 } 4168 }
4151 params.item_sequence_number = item.itemSequenceNumber(); 4169 params.item_sequence_number = item.itemSequenceNumber();
4152 params.document_sequence_number = item.documentSequenceNumber(); 4170 params.document_sequence_number = item.documentSequenceNumber();
4153 4171
4154 if (!frame->parent()) { 4172 if (!frame->parent()) {
4155 // Top-level navigation. 4173 // Top-level navigation.
4156 4174
4157 // Reset the zoom limits in case a plugin had changed them previously. This 4175 // Reset the zoom limits in case a plugin had changed them previously. This
4158 // will also call us back which will cause us to send a message to 4176 // will also call us back which will cause us to send a message to
4159 // update WebContentsImpl. 4177 // update WebContentsImpl.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
4210 params.transition = ui::PageTransitionFromInt( 4228 params.transition = ui::PageTransitionFromInt(
4211 params.transition | ui::PAGE_TRANSITION_CLIENT_REDIRECT); 4229 params.transition | ui::PAGE_TRANSITION_CLIENT_REDIRECT);
4212 } else { 4230 } else {
4213 params.referrer = RenderViewImpl::GetReferrerFromRequest( 4231 params.referrer = RenderViewImpl::GetReferrerFromRequest(
4214 frame, ds->request()); 4232 frame, ds->request());
4215 } 4233 }
4216 4234
4217 base::string16 method = request.httpMethod(); 4235 base::string16 method = request.httpMethod();
4218 if (base::EqualsASCII(method, "POST")) { 4236 if (base::EqualsASCII(method, "POST")) {
4219 params.is_post = true; 4237 params.is_post = true;
4220 params.post_id = ExtractPostId(entry); 4238 params.post_id = post_id;
4221 } 4239 }
4222 4240
4223 // Send the user agent override back. 4241 // Send the user agent override back.
4224 params.is_overriding_user_agent = internal_data->is_overriding_user_agent(); 4242 params.is_overriding_user_agent = internal_data->is_overriding_user_agent();
4225 4243
4226 // Track the URL of the original request. We use the first entry of the 4244 // Track the URL of the original request. We use the first entry of the
4227 // redirect chain if it exists because the chain may have started in another 4245 // redirect chain if it exists because the chain may have started in another
4228 // process. 4246 // process.
4229 params.original_request_url = GetOriginalRequestURL(ds); 4247 params.original_request_url = GetOriginalRequestURL(ds);
4230 4248
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
4655 4673
4656 GetContentClient()->SetActiveURL(common_params.url); 4674 GetContentClient()->SetActiveURL(common_params.url);
4657 4675
4658 // If this frame isn't in the same process as the main frame, it may naively 4676 // If this frame isn't in the same process as the main frame, it may naively
4659 // assume that this is the first navigation in the iframe, but this may not 4677 // assume that this is the first navigation in the iframe, but this may not
4660 // actually be the case. Inform the frame's state machine if this frame has 4678 // actually be the case. Inform the frame's state machine if this frame has
4661 // already committed other loads. 4679 // already committed other loads.
4662 if (request_params.has_committed_real_load && frame_->parent()) 4680 if (request_params.has_committed_real_load && frame_->parent())
4663 frame_->setCommittedFirstRealLoad(); 4681 frame_->setCommittedFirstRealLoad();
4664 4682
4665 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { 4683 bool no_current_entry =
4684 SiteIsolationPolicy::UseSubframeNavigationEntries()
4685 ? current_history_item_.isNull()
4686 : !render_view_->history_controller()->GetCurrentEntry();
4687 if (is_reload && no_current_entry) {
4666 // We cannot reload if we do not have any history state. This happens, for 4688 // We cannot reload if we do not have any history state. This happens, for
4667 // example, when recovering from a crash. 4689 // example, when recovering from a crash.
4668 is_reload = false; 4690 is_reload = false;
4669 cache_policy = WebURLRequest::ReloadIgnoringCacheData; 4691 cache_policy = WebURLRequest::ReloadIgnoringCacheData;
4670 } 4692 }
4671 4693
4672 pending_navigation_params_.reset( 4694 pending_navigation_params_.reset(
4673 new NavigationParams(common_params, start_params, request_params)); 4695 new NavigationParams(common_params, start_params, request_params));
4674 4696
4675 // Create parameters for a standard navigation. 4697 // Create parameters for a standard navigation.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
4736 // TODO(creis): Change PageState to FrameState. In the meantime, we 4758 // TODO(creis): Change PageState to FrameState. In the meantime, we
4737 // store the relevant frame's WebHistoryItem in the root of the 4759 // store the relevant frame's WebHistoryItem in the root of the
4738 // PageState. 4760 // PageState.
4739 SetPendingNavigationParams(navigation_params.Pass()); 4761 SetPendingNavigationParams(navigation_params.Pass());
4740 blink::WebHistoryItem history_item = entry->root(); 4762 blink::WebHistoryItem history_item = entry->root();
4741 blink::WebHistoryLoadType load_type = 4763 blink::WebHistoryLoadType load_type =
4742 request_params.is_same_document_history_load 4764 request_params.is_same_document_history_load
4743 ? blink::WebHistorySameDocumentLoad 4765 ? blink::WebHistorySameDocumentLoad
4744 : blink::WebHistoryDifferentDocumentLoad; 4766 : blink::WebHistoryDifferentDocumentLoad;
4745 4767
4746 // Let the history controller know the provisional entry, since it is 4768 // Navigate the frame directly.
4747 // used at commit time. Otherwise skip GoToEntry and navigate the
4748 // frame directly.
4749 // TODO(creis): Consider cloning the current entry to handle subframe
4750 // cases. Changes to SendUpdateState might affect this.
4751 render_view_->history_controller()->set_provisional_entry(
4752 entry.Pass());
4753 WebURLRequest request = 4769 WebURLRequest request =
4754 frame_->requestFromHistoryItem(history_item, cache_policy); 4770 frame_->requestFromHistoryItem(history_item, cache_policy);
4755 frame_->load(request, blink::WebFrameLoadType::BackForward, 4771 frame_->load(request, blink::WebFrameLoadType::BackForward,
4756 history_item, load_type); 4772 history_item, load_type);
4757 } 4773 }
4758 } else { 4774 } else {
4759 // TODO(clamy): this should be set to the HistoryItem sent by the 4775 // TODO(clamy): this should be set to the HistoryItem sent by the
4760 // browser once the HistoryController has moved to the browser. 4776 // browser once the HistoryController has moved to the browser.
4761 // TODO(clamy): distinguish between different document and same document 4777 // TODO(clamy): distinguish between different document and same document
4762 // loads. 4778 // loads.
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
5068 WebString::fromUTF8(charset), 5084 WebString::fromUTF8(charset),
5069 base_url, 5085 base_url,
5070 params.history_url_for_data_url, 5086 params.history_url_for_data_url,
5071 false); 5087 false);
5072 } else { 5088 } else {
5073 CHECK(false) << "Invalid URL passed: " 5089 CHECK(false) << "Invalid URL passed: "
5074 << params.url.possibly_invalid_spec(); 5090 << params.url.possibly_invalid_spec();
5075 } 5091 }
5076 } 5092 }
5077 5093
5094 void RenderFrameImpl::SendUpdateState() {
5095 DCHECK(SiteIsolationPolicy::UseSubframeNavigationEntries());
5096 if (current_history_item_.isNull())
5097 return;
5098
5099 Send(new FrameHostMsg_UpdateState(
5100 routing_id_, SingleHistoryItemToPageState(current_history_item_)));
5101 }
5102
5078 void RenderFrameImpl::SendFailedProvisionalLoad( 5103 void RenderFrameImpl::SendFailedProvisionalLoad(
5079 const blink::WebURLRequest& request, 5104 const blink::WebURLRequest& request,
5080 const blink::WebURLError& error, 5105 const blink::WebURLError& error,
5081 blink::WebLocalFrame* frame) { 5106 blink::WebLocalFrame* frame) {
5082 bool show_repost_interstitial = 5107 bool show_repost_interstitial =
5083 (error.reason == net::ERR_CACHE_MISS && 5108 (error.reason == net::ERR_CACHE_MISS &&
5084 base::EqualsASCII(base::StringPiece16(request.httpMethod()), "POST")); 5109 base::EqualsASCII(base::StringPiece16(request.httpMethod()), "POST"));
5085 5110
5086 FrameHostMsg_DidFailProvisionalLoadWithError_Params params; 5111 FrameHostMsg_DidFailProvisionalLoadWithError_Params params;
5087 params.error_code = error.reason; 5112 params.error_code = error.reason;
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
5312 mojo::ServiceProviderPtr service_provider; 5337 mojo::ServiceProviderPtr service_provider;
5313 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5338 mojo::URLRequestPtr request(mojo::URLRequest::New());
5314 request->url = mojo::String::From(url); 5339 request->url = mojo::String::From(url);
5315 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5340 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5316 nullptr, nullptr, 5341 nullptr, nullptr,
5317 base::Bind(&OnGotContentHandlerID)); 5342 base::Bind(&OnGotContentHandlerID));
5318 return service_provider.Pass(); 5343 return service_provider.Pass();
5319 } 5344 }
5320 5345
5321 } // namespace content 5346 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698