| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/renderer/prerender/prerender_dispatcher.h" | 5 #include "chrome/renderer/prerender/prerender_dispatcher.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "chrome/common/prerender_messages.h" | 10 #include "chrome/common/prerender_messages.h" |
| 11 #include "chrome/common/prerender_types.h" | 11 #include "chrome/common/prerender_types.h" |
| 12 #include "chrome/renderer/prerender/prerender_extra_data.h" | 12 #include "chrome/renderer/prerender/prerender_extra_data.h" |
| 13 #include "content/public/child/url_conversion.h" |
| 13 #include "content/public/common/referrer.h" | 14 #include "content/public/common/referrer.h" |
| 14 #include "content/public/renderer/render_thread.h" | 15 #include "content/public/renderer/render_thread.h" |
| 15 #include "content/public/renderer/render_view.h" | 16 #include "content/public/renderer/render_view.h" |
| 16 #include "third_party/WebKit/public/platform/WebPrerenderingSupport.h" | 17 #include "third_party/WebKit/public/platform/WebPrerenderingSupport.h" |
| 17 #include "third_party/WebKit/public/platform/WebString.h" | 18 #include "third_party/WebKit/public/platform/WebString.h" |
| 18 #include "third_party/WebKit/public/platform/WebURL.h" | 19 #include "third_party/WebKit/public/platform/WebURL.h" |
| 19 #include "url/gurl.h" | 20 #include "url/gurl.h" |
| 20 | 21 |
| 21 namespace prerender { | 22 namespace prerender { |
| 22 | 23 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 | 137 |
| 137 prerenders_[extra_data.prerender_id()] = prerender; | 138 prerenders_[extra_data.prerender_id()] = prerender; |
| 138 | 139 |
| 139 PrerenderAttributes attributes; | 140 PrerenderAttributes attributes; |
| 140 attributes.url = GURL(prerender.url()); | 141 attributes.url = GURL(prerender.url()); |
| 141 attributes.rel_types = prerender.relTypes(); | 142 attributes.rel_types = prerender.relTypes(); |
| 142 | 143 |
| 143 content::RenderThread::Get()->Send(new PrerenderHostMsg_AddLinkRelPrerender( | 144 content::RenderThread::Get()->Send(new PrerenderHostMsg_AddLinkRelPrerender( |
| 144 extra_data.prerender_id(), attributes, | 145 extra_data.prerender_id(), attributes, |
| 145 content::Referrer::SanitizeForRequest( | 146 content::Referrer::SanitizeForRequest( |
| 146 GURL(prerender.url()), content::Referrer(GURL(prerender.referrer()), | 147 GURL(prerender.url()), |
| 147 prerender.referrerPolicy())), | 148 content::Referrer(content::WebStringToGURL(prerender.referrer()), |
| 149 prerender.referrerPolicy())), |
| 148 extra_data.size(), extra_data.render_view_route_id())); | 150 extra_data.size(), extra_data.render_view_route_id())); |
| 149 } | 151 } |
| 150 | 152 |
| 151 void PrerenderDispatcher::cancel(const WebPrerender& prerender) { | 153 void PrerenderDispatcher::cancel(const WebPrerender& prerender) { |
| 152 const PrerenderExtraData& extra_data = | 154 const PrerenderExtraData& extra_data = |
| 153 PrerenderExtraData::FromPrerender(prerender); | 155 PrerenderExtraData::FromPrerender(prerender); |
| 154 content::RenderThread::Get()->Send( | 156 content::RenderThread::Get()->Send( |
| 155 new PrerenderHostMsg_CancelLinkRelPrerender(extra_data.prerender_id())); | 157 new PrerenderHostMsg_CancelLinkRelPrerender(extra_data.prerender_id())); |
| 156 // The browser will not send an OnPrerenderStop (the prerender may have even | 158 // The browser will not send an OnPrerenderStop (the prerender may have even |
| 157 // been canceled before it was started), so release it to avoid a | 159 // been canceled before it was started), so release it to avoid a |
| 158 // leak. Moreover, if it did, the PrerenderClient in Blink will have been | 160 // leak. Moreover, if it did, the PrerenderClient in Blink will have been |
| 159 // detached already. | 161 // detached already. |
| 160 prerenders_.erase(extra_data.prerender_id()); | 162 prerenders_.erase(extra_data.prerender_id()); |
| 161 } | 163 } |
| 162 | 164 |
| 163 void PrerenderDispatcher::abandon(const WebPrerender& prerender) { | 165 void PrerenderDispatcher::abandon(const WebPrerender& prerender) { |
| 164 const PrerenderExtraData& extra_data = | 166 const PrerenderExtraData& extra_data = |
| 165 PrerenderExtraData::FromPrerender(prerender); | 167 PrerenderExtraData::FromPrerender(prerender); |
| 166 content::RenderThread::Get()->Send( | 168 content::RenderThread::Get()->Send( |
| 167 new PrerenderHostMsg_AbandonLinkRelPrerender(extra_data.prerender_id())); | 169 new PrerenderHostMsg_AbandonLinkRelPrerender(extra_data.prerender_id())); |
| 168 // The browser will not send an OnPrerenderStop (the prerender may have even | 170 // The browser will not send an OnPrerenderStop (the prerender may have even |
| 169 // been canceled before it was started), so release it to avoid a | 171 // been canceled before it was started), so release it to avoid a |
| 170 // leak. Moreover, if it did, the PrerenderClient in Blink will have been | 172 // leak. Moreover, if it did, the PrerenderClient in Blink will have been |
| 171 // detached already. | 173 // detached already. |
| 172 prerenders_.erase(extra_data.prerender_id()); | 174 prerenders_.erase(extra_data.prerender_id()); |
| 173 } | 175 } |
| 174 | 176 |
| 175 } // namespace prerender | 177 } // namespace prerender |
| OLD | NEW |