1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright (c) 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/renderer/prefetch_helper.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/common/prefetch_messages.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/renderer/render_frame.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/web/WebLocalFrame.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "third_party/WebKit/public/web/WebURLLoaderOptions.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace prefetch { 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)PrefetchHelper::PrefetchHelper(content::RenderFrame* render_frame) 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : content::RenderFrameObserver(render_frame) { 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)PrefetchHelper::~PrefetchHelper() { 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) STLDeleteElements(&loader_set_); 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool PrefetchHelper::OnMessageReceived( 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const IPC::Message& message) { 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool handled = true; 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(PrefetchHelper, message) 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC_MESSAGE_HANDLER(PrefetchMsg_Prefetch, OnPrefetch) 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC_END_MESSAGE_MAP() 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return handled; 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PrefetchHelper::OnPrefetch(const GURL& url) { 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebFrame* frame = render_frame()->GetWebFrame(); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebURLRequest request(url); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) request.setRequestContext(blink::WebURLRequest::RequestContextPrefetch); 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) request.setPriority(blink::WebURLRequest::PriorityVeryLow); 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebURLLoaderOptions options; 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) options.allowCredentials = true; 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) options.crossOriginRequestPolicy = 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow; 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebURLLoader* loader = frame->createAssociatedURLLoader(options); 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) loader->loadAsynchronously(request, this); 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) loader_set_.insert(loader); 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PrefetchHelper::didFinishLoading(blink::WebURLLoader* loader, 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) double finishTime, 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int64_t totalEncodedDataLength) { 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) loader_set_.erase(loader); 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PrefetchHelper::didFail(blink::WebURLLoader* loader, 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const blink::WebURLError& error) { 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) loader_set_.erase(loader); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace prefetch 59