Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Side by Side Diff: chrome/browser/ssl/ssl_blocking_page.h

Issue 622683006: Refactor security interstitials, add SecurityInterstitialPage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_ 5 #ifndef CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_
6 #define CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_ 6 #define CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
13 #include "base/task/cancelable_task_tracker.h" 13 #include "base/task/cancelable_task_tracker.h"
14 #include "base/time/time.h" 14 #include "base/time/time.h"
15 #include "chrome/browser/history/history_service.h" 15 #include "chrome/browser/history/history_service.h"
16 #include "content/public/browser/interstitial_page_delegate.h" 16 #include "chrome/browser/interstitials/security_interstitial_page.h"
17 #include "net/ssl/ssl_info.h" 17 #include "net/ssl/ssl_info.h"
18 #include "url/gurl.h" 18 #include "url/gurl.h"
19 19
20 namespace base {
21 class DictionaryValue;
22 }
23
24 namespace content {
25 class InterstitialPage;
26 class WebContents;
27 }
28
29 #if defined(ENABLE_EXTENSIONS) 20 #if defined(ENABLE_EXTENSIONS)
30 namespace extensions { 21 namespace extensions {
31 class ExperienceSamplingEvent; 22 class ExperienceSamplingEvent;
32 } 23 }
33 #endif 24 #endif
34 25
35 class SSLErrorClassification; 26 class SSLErrorClassification;
36 27
37 // This class is responsible for showing/hiding the interstitial page that is 28 // This class is responsible for showing/hiding the interstitial page that is
38 // shown when a certificate error happens. 29 // shown when a certificate error happens.
39 // It deletes itself when the interstitial page is closed. 30 // It deletes itself when the interstitial page is closed.
40 class SSLBlockingPage : public content::InterstitialPageDelegate { 31 class SSLBlockingPage : public SecurityInterstitialPage {
41 public: 32 public:
42 // These represent the commands sent from the interstitial JavaScript. They 33 // These represent the commands sent from the interstitial JavaScript. They
43 // are defined in chrome/browser/resources/ssl/ssl_errors_common.js. 34 // are defined in chrome/browser/resources/ssl/ssl_errors_common.js.
44 // DO NOT reorder or change these without also changing the JavaScript! 35 // DO NOT reorder or change these without also changing the JavaScript!
45 enum SSLBlockingPageCommands { 36 enum SSLBlockingPageCommands {
46 CMD_DONT_PROCEED = 0, 37 CMD_DONT_PROCEED = 0,
47 CMD_PROCEED = 1, 38 CMD_PROCEED = 1,
48 CMD_MORE = 2, 39 CMD_MORE = 2,
49 CMD_RELOAD = 3, 40 CMD_RELOAD = 3,
50 CMD_HELP = 4, 41 CMD_HELP = 4,
51 CMD_CLOCK = 5 42 CMD_CLOCK = 5
52 }; 43 };
53 44
54 enum SSLBlockingPageOptionsMask { 45 enum SSLBlockingPageOptionsMask {
55 OVERRIDABLE = 1 << 0, 46 OVERRIDABLE = 1 << 0,
56 STRICT_ENFORCEMENT = 1 << 1, 47 STRICT_ENFORCEMENT = 1 << 1,
57 EXPIRED_BUT_PREVIOUSLY_ALLOWED = 1 << 2 48 EXPIRED_BUT_PREVIOUSLY_ALLOWED = 1 << 2
58 }; 49 };
59 50
60 virtual ~SSLBlockingPage(); 51 virtual ~SSLBlockingPage();
61 52
62 // Create an interstitial and show it.
63 void Show();
64
65 // Creates an SSL blocking page. If the blocking page isn't shown, the caller 53 // Creates an SSL blocking page. If the blocking page isn't shown, the caller
66 // is responsible for cleaning up the blocking page, otherwise the 54 // is responsible for cleaning up the blocking page, otherwise the
67 // interstitial takes ownership when shown. |options_mask| must be a bitwise 55 // interstitial takes ownership when shown. |options_mask| must be a bitwise
68 // mask of SSLBlockingPageOptionsMask values. 56 // mask of SSLBlockingPageOptionsMask values.
69 SSLBlockingPage(content::WebContents* web_contents, 57 SSLBlockingPage(content::WebContents* web_contents,
70 int cert_error, 58 int cert_error,
71 const net::SSLInfo& ssl_info, 59 const net::SSLInfo& ssl_info,
72 const GURL& request_url, 60 const GURL& request_url,
73 int options_mask, 61 int options_mask,
74 const base::Callback<void(bool)>& callback); 62 const base::Callback<void(bool)>& callback);
75 63
64 // SecurityInterstitialPage method:
65 virtual SecurityInterstitialPage::Type GetTypeForTesting() const OVERRIDE;
66
76 // A method that sets strings in the specified dictionary from the passed 67 // A method that sets strings in the specified dictionary from the passed
77 // vector so that they can be used to resource the ssl_roadblock.html/ 68 // vector so that they can be used to resource the ssl_roadblock.html/
78 // ssl_error.html files. 69 // ssl_error.html files.
79 // Note: there can be up to 5 strings in |extra_info|. 70 // Note: there can be up to 5 strings in |extra_info|.
80 static void SetExtraInfo(base::DictionaryValue* strings, 71 static void SetExtraInfo(base::DictionaryValue* strings,
81 const std::vector<base::string16>& extra_info); 72 const std::vector<base::string16>& extra_info);
82 73
83 protected: 74 protected:
84 // InterstitialPageDelegate implementation. 75 // InterstitialPageDelegate implementation.
85 virtual std::string GetHTMLContents() OVERRIDE;
86 virtual void CommandReceived(const std::string& command) OVERRIDE; 76 virtual void CommandReceived(const std::string& command) OVERRIDE;
87 virtual void OverrideEntry(content::NavigationEntry* entry) OVERRIDE; 77 virtual void OverrideEntry(content::NavigationEntry* entry) OVERRIDE;
88 virtual void OverrideRendererPrefs( 78 virtual void OverrideRendererPrefs(
89 content::RendererPreferences* prefs) OVERRIDE; 79 content::RendererPreferences* prefs) OVERRIDE;
90 virtual void OnProceed() OVERRIDE; 80 virtual void OnProceed() OVERRIDE;
91 virtual void OnDontProceed() OVERRIDE; 81 virtual void OnDontProceed() OVERRIDE;
92 82
83 // SecurityInterstitialPage implementation:
84 virtual bool ShouldCreateNewNavigation() const OVERRIDE;
85 virtual void PopulateLoadTimeData(
86 base::DictionaryValue* load_time_data) OVERRIDE;
87
93 private: 88 private:
94 void NotifyDenyCertificate(); 89 void NotifyDenyCertificate();
95 void NotifyAllowCertificate(); 90 void NotifyAllowCertificate();
96 91
97 // Used to query the HistoryService to see if the URL is in history. For UMA. 92 // Used to query the HistoryService to see if the URL is in history. For UMA.
98 void OnGotHistoryCount(bool success, int num_visits, base::Time first_visit); 93 void OnGotHistoryCount(bool success, int num_visits, base::Time first_visit);
99 94
100 base::Callback<void(bool)> callback_; 95 base::Callback<void(bool)> callback_;
101 96
102 content::WebContents* web_contents_;
103 const int cert_error_; 97 const int cert_error_;
104 const net::SSLInfo ssl_info_; 98 const net::SSLInfo ssl_info_;
105 const GURL request_url_; 99 const GURL request_url_;
106 // Could the user successfully override the error? 100 // Could the user successfully override the error?
107 // overridable_ will be set to false if strict_enforcement_ is true. 101 // overridable_ will be set to false if strict_enforcement_ is true.
108 const bool overridable_; 102 const bool overridable_;
109 // Has the site requested strict enforcement of certificate errors? 103 // Has the site requested strict enforcement of certificate errors?
110 const bool strict_enforcement_; 104 const bool strict_enforcement_;
111 content::InterstitialPage* interstitial_page_; // Owns us.
112 // Is the hostname for an internal network? 105 // Is the hostname for an internal network?
113 bool internal_; 106 bool internal_;
114 // How many times is this same URL in history? 107 // How many times is this same URL in history?
115 int num_visits_; 108 int num_visits_;
116 // Used for getting num_visits_. 109 // Used for getting num_visits_.
117 base::CancelableTaskTracker request_tracker_; 110 base::CancelableTaskTracker request_tracker_;
118 // Did the user previously allow a bad certificate but the decision has now 111 // Did the user previously allow a bad certificate but the decision has now
119 // expired? 112 // expired?
120 const bool expired_but_previously_allowed_; 113 const bool expired_but_previously_allowed_;
121 scoped_ptr<SSLErrorClassification> ssl_error_classification_; 114 scoped_ptr<SSLErrorClassification> ssl_error_classification_;
122 115
123 #if defined(ENABLE_EXTENSIONS) 116 #if defined(ENABLE_EXTENSIONS)
124 // For Chrome Experience Sampling Platform: this maintains event state. 117 // For Chrome Experience Sampling Platform: this maintains event state.
125 scoped_ptr<extensions::ExperienceSamplingEvent> sampling_event_; 118 scoped_ptr<extensions::ExperienceSamplingEvent> sampling_event_;
126 #endif 119 #endif
127 120
128 content::NotificationRegistrar registrar_; 121 content::NotificationRegistrar registrar_;
129 122
130 DISALLOW_COPY_AND_ASSIGN(SSLBlockingPage); 123 DISALLOW_COPY_AND_ASSIGN(SSLBlockingPage);
131 }; 124 };
132 125
133 #endif // CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_ 126 #endif // CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698