• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef WEBKIT_GLUE_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_
6 #define WEBKIT_GLUE_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_
7 
8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "googleurl/src/gurl.h"
11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h"
12 
13 namespace WebKit {
14 class WebFrame;
15 class WebURLResponse;
16 }
17 
18 namespace webkit_glue {
19 class ResourceFetcherWithTimeout;
20 
21 // Used for downloading alternate dns error pages. Once downloading is done
22 // (or fails), the webview delegate is notified.
23 class AltErrorPageResourceFetcher {
24  public:
25   // This will be called when the alternative error page has been fetched,
26   // successfully or not.  If there is a failure, the third parameter (the
27   // data) will be empty.
28   typedef Callback3<WebKit::WebFrame*, const WebKit::WebURLError&,
29                     const std::string&>::Type Callback;
30 
31   AltErrorPageResourceFetcher(const GURL& url,
32                               WebKit::WebFrame* frame,
33                               const WebKit::WebURLError& original_error,
34                               Callback* callback);
35   ~AltErrorPageResourceFetcher();
36 
37   // Stop any pending loads.
38   void Cancel();
39 
40  private:
41   void OnURLFetchComplete(const WebKit::WebURLResponse& response,
42                           const std::string& data);
43 
44   // Does the actual fetching.
45   scoped_ptr<ResourceFetcherWithTimeout> fetcher_;
46 
47   WebKit::WebFrame* frame_;
48   scoped_ptr<Callback> callback_;
49 
50   // The error associated with this load.  If there's an error talking with the
51   // alt error page server, we need this to complete the original load.
52   WebKit::WebURLError original_error_;
53 
54   DISALLOW_COPY_AND_ASSIGN(AltErrorPageResourceFetcher);
55 };
56 
57 }  // namespace webkit_glue
58 
59 #endif  // WEBKIT_GLUE_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_
60