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

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

Issue 7111013: Move most of the core SSL code from chrome to content. The UI code that's specific to Chrome (i.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
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_BROWSER_SSL_SSL_ERROR_HANDLER_H_
6 #define CHROME_BROWSER_SSL_SSL_ERROR_HANDLER_H_
7 #pragma once
8
9 #include <string>
10
11 #include "base/basictypes.h"
12 #include "base/memory/ref_counted.h"
13 #include "chrome/browser/ssl/ssl_manager.h"
14 #include "content/browser/renderer_host/global_request_id.h"
15 #include "googleurl/src/gurl.h"
16 #include "webkit/glue/resource_type.h"
17
18 class ResourceDispatcherHost;
19 class SSLCertErrorHandler;
20 class TabContents;
21
22 namespace net {
23 class URLRequest;
24 } // namespace net
25
26 // An SSLErrorHandler carries information from the IO thread to the UI thread
27 // and is dispatched to the appropriate SSLManager when it arrives on the
28 // UI thread. Subclasses should override the OnDispatched/OnDispatchFailed
29 // methods to implement the actions that should be taken on the UI thread.
30 // These methods can call the different convenience methods ContinueRequest/
31 // CancelRequest to perform any required action on the net::URLRequest the
32 // ErrorHandler was created with.
33 //
34 // IMPORTANT NOTE:
35 //
36 // If you are not doing anything in OnDispatched/OnDispatchFailed, make sure
37 // you call TakeNoAction(). This is necessary for ensuring the instance is
38 // not leaked.
39 //
40 class SSLErrorHandler : public base::RefCountedThreadSafe<SSLErrorHandler> {
41 public:
42 virtual SSLCertErrorHandler* AsSSLCertErrorHandler();
43
44 // Find the appropriate SSLManager for the net::URLRequest and begin handling
45 // this error.
46 //
47 // Call on UI thread.
48 void Dispatch();
49
50 // Available on either thread.
51 const GURL& request_url() const { return request_url_; }
52
53 // Available on either thread.
54 ResourceType::Type resource_type() const { return resource_type_; }
55
56 // Returns the TabContents this object is associated with. Should be
57 // called from the UI thread.
58 TabContents* GetTabContents();
59
60 // Cancels the associated net::URLRequest.
61 // This method can be called from OnDispatchFailed and OnDispatched.
62 void CancelRequest();
63
64 // Continue the net::URLRequest ignoring any previous errors. Note that some
65 // errors cannot be ignored, in which case this will result in the request
66 // being canceled.
67 // This method can be called from OnDispatchFailed and OnDispatched.
68 void ContinueRequest();
69
70 // Cancels the associated net::URLRequest and mark it as denied. The renderer
71 // processes such request in a special manner, optionally replacing them
72 // with alternate content (typically frames content is replaced with a
73 // warning message).
74 // This method can be called from OnDispatchFailed and OnDispatched.
75 void DenyRequest();
76
77 // Does nothing on the net::URLRequest but ensures the current instance ref
78 // count is decremented appropriately. Subclasses that do not want to
79 // take any specific actions in their OnDispatched/OnDispatchFailed should
80 // call this.
81 void TakeNoAction();
82
83 protected:
84 friend class base::RefCountedThreadSafe<SSLErrorHandler>;
85
86 // Construct on the IO thread.
87 SSLErrorHandler(ResourceDispatcherHost* resource_dispatcher_host,
88 net::URLRequest* request,
89 ResourceType::Type resource_type);
90
91 virtual ~SSLErrorHandler();
92
93 // The following 2 methods are the methods subclasses should implement.
94 virtual void OnDispatchFailed();
95
96 // Can use the manager_ member.
97 virtual void OnDispatched();
98
99 // Should only be accessed on the UI thread.
100 SSLManager* manager_; // Our manager.
101
102 // The id of the net::URLRequest associated with this object.
103 // Should only be accessed from the IO thread.
104 GlobalRequestID request_id_;
105
106 // The ResourceDispatcherHost we are associated with.
107 ResourceDispatcherHost* resource_dispatcher_host_;
108
109 private:
110 // Completes the CancelRequest operation on the IO thread.
111 // Call on the IO thread.
112 void CompleteCancelRequest(int error);
113
114 // Completes the ContinueRequest operation on the IO thread.
115 //
116 // Call on the IO thread.
117 void CompleteContinueRequest();
118
119 // Derefs this instance.
120 // Call on the IO thread.
121 void CompleteTakeNoAction();
122
123 // We use these members to find the correct SSLManager when we arrive on
124 // the UI thread.
125 int render_process_host_id_;
126 int tab_contents_id_;
127
128 // The URL that we requested.
129 // This read-only member can be accessed on any thread.
130 const GURL request_url_;
131
132 // What kind of resource is associated with the requested that generated
133 // that error.
134 // This read-only member can be accessed on any thread.
135 const ResourceType::Type resource_type_;
136
137 // A flag to make sure we notify the net::URLRequest exactly once.
138 // Should only be accessed on the IO thread
139 bool request_has_been_notified_;
140
141 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandler);
142 };
143
144 #endif // CHROME_BROWSER_SSL_SSL_ERROR_HANDLER_H_
OLDNEW
« no previous file with comments | « chrome/browser/ssl/ssl_client_auth_notification_details.cc ('k') | chrome/browser/ssl/ssl_error_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698