15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#ifndef CONTENT_RENDERER_FETCHERS_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_ 6a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#define CONTENT_RENDERER_FETCHERS_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLError.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLRequest.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebFrame; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebURLResponse; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)namespace content { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceFetcher; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for downloading alternate dns error pages. Once downloading is done 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (or fails), the webview delegate is notified. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AltErrorPageResourceFetcher { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will be called when the alternative error page has been fetched, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // successfully or not. If there is a failure, the third parameter (the 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // data) will be empty. 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef base::Callback<void(blink::WebFrame*, 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebURLRequest&, 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebURLError&, 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string&)> Callback; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) AltErrorPageResourceFetcher( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebFrame* frame, 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebURLRequest& original_request, 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebURLError& original_error, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Callback& callback); 40a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ~AltErrorPageResourceFetcher(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnURLFetchComplete(const blink::WebURLResponse& response, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& data); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Does the actual fetching. 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<ResourceFetcher> fetcher_; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebFrame* frame_; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Callback callback_; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The original request. If loading the alternate error page fails, it's 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // needed to generate the error page. 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebURLRequest original_request_; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The error associated with this load. If there's an error talking with the 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // alt error page server, we need this to complete the original load. 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebURLError original_error_; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AltErrorPageResourceFetcher); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 63a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} // namespace content 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#endif // CONTENT_RENDERER_FETCHERS_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_ 66