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 CHROME_COMMON_LOCALIZED_ERROR_H_
6#define CHROME_COMMON_LOCALIZED_ERROR_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/memory/scoped_ptr.h"
12#include "base/strings/string16.h"
13#include "url/gurl.h"
14
15namespace base {
16class DictionaryValue;
17class ListValue;
18}
19
20namespace extensions {
21class Extension;
22}
23
24namespace blink {
25struct WebURLError;
26}
27
28class LocalizedError {
29 public:
30  // Optional parameters that affect the display of an error page.
31  struct ErrorPageParams {
32    ErrorPageParams();
33    ~ErrorPageParams();
34
35    // Overrides whether reloading is suggested.
36    bool suggest_reload;
37    int reload_tracking_id;
38
39    // Overrides default suggestions.  Each entry must contain a header and may
40    // optionally contain a body as well.  Must not be NULL.
41    scoped_ptr<base::ListValue> override_suggestions;
42
43    // Prefix to prepend to search terms.  Search box is only shown if this is
44    // a valid url.  The search terms will be appended to the end of this URL to
45    // conduct a search.
46    GURL search_url;
47    // Default search terms.  Ignored if |search_url| is invalid.
48    std::string search_terms;
49    int search_tracking_id;
50  };
51
52  // Fills |error_strings| with values to be used to build an error page used
53  // on HTTP errors, like 404 or connection reset.
54  static void GetStrings(int error_code,
55                         const std::string& error_domain,
56                         const GURL& failed_url,
57                         bool is_post,
58                         bool show_stale_load_button,
59                         const std::string& locale,
60                         const std::string& accept_languages,
61                         scoped_ptr<ErrorPageParams> params,
62                         base::DictionaryValue* strings);
63
64  // Returns a description of the encountered error.
65  static base::string16 GetErrorDetails(const blink::WebURLError& error,
66                                        bool is_post);
67
68  // Returns true if an error page exists for the specified parameters.
69  static bool HasStrings(const std::string& error_domain, int error_code);
70
71  // Fills |error_strings| with values to be used to build an error page used
72  // on HTTP errors, like 404 or connection reset, but using information from
73  // the associated |app| in order to make the error page look like it's more
74  // part of the app.
75  static void GetAppErrorStrings(const GURL& display_url,
76                                 const extensions::Extension* app,
77                                 base::DictionaryValue* error_strings);
78
79  static const char kHttpErrorDomain[];
80
81 private:
82  DISALLOW_IMPLICIT_CONSTRUCTORS(LocalizedError);
83};
84
85#endif  // CHROME_COMMON_LOCALIZED_ERROR_H_
86