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