| OLD | NEW |
| 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 CONTENT_BROWSER_SSL_SSL_ERROR_HANDLER_H_ | 5 #ifndef CONTENT_BROWSER_SSL_SSL_ERROR_HANDLER_H_ |
| 6 #define CONTENT_BROWSER_SSL_SSL_ERROR_HANDLER_H_ | 6 #define CONTENT_BROWSER_SSL_SSL_ERROR_HANDLER_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "content/browser/ssl/ssl_manager.h" | |
| 14 #include "content/common/content_export.h" | 13 #include "content/common/content_export.h" |
| 15 #include "content/public/browser/global_request_id.h" | 14 #include "content/public/browser/global_request_id.h" |
| 16 #include "googleurl/src/gurl.h" | 15 #include "googleurl/src/gurl.h" |
| 17 #include "webkit/glue/resource_type.h" | 16 #include "webkit/glue/resource_type.h" |
| 18 | 17 |
| 19 class SSLCertErrorHandler; | 18 class SSLCertErrorHandler; |
| 19 class SSLManager; |
| 20 | 20 |
| 21 namespace content { | 21 namespace content { |
| 22 class ResourceDispatcherHostImpl; | 22 class ResourceDispatcherHostImpl; |
| 23 } | 23 } |
| 24 | 24 |
| 25 namespace net { | 25 namespace net { |
| 26 class SSLInfo; |
| 26 class URLRequest; | 27 class URLRequest; |
| 27 } // namespace net | 28 } // namespace net |
| 28 | 29 |
| 29 // An SSLErrorHandler carries information from the IO thread to the UI thread | 30 // An SSLErrorHandler carries information from the IO thread to the UI thread |
| 30 // and is dispatched to the appropriate SSLManager when it arrives on the | 31 // and is dispatched to the appropriate SSLManager when it arrives on the |
| 31 // UI thread. Subclasses should override the OnDispatched/OnDispatchFailed | 32 // UI thread. Subclasses should override the OnDispatched/OnDispatchFailed |
| 32 // methods to implement the actions that should be taken on the UI thread. | 33 // methods to implement the actions that should be taken on the UI thread. |
| 33 // These methods can call the different convenience methods ContinueRequest/ | 34 // These methods can call the different convenience methods ContinueRequest/ |
| 34 // CancelRequest to perform any required action on the net::URLRequest the | 35 // CancelRequest to perform any required action on the net::URLRequest the |
| 35 // ErrorHandler was created with. | 36 // ErrorHandler was created with. |
| 36 // | 37 // |
| 37 // IMPORTANT NOTE: | 38 // IMPORTANT NOTE: |
| 38 // | 39 // |
| 39 // If you are not doing anything in OnDispatched/OnDispatchFailed, make sure | 40 // If you are not doing anything in OnDispatched/OnDispatchFailed, make sure |
| 40 // you call TakeNoAction(). This is necessary for ensuring the instance is | 41 // you call TakeNoAction(). This is necessary for ensuring the instance is |
| 41 // not leaked. | 42 // not leaked. |
| 42 // | 43 // |
| 43 class SSLErrorHandler : public base::RefCountedThreadSafe<SSLErrorHandler> { | 44 class SSLErrorHandler : public base::RefCountedThreadSafe<SSLErrorHandler> { |
| 44 public: | 45 public: |
| 46 // Delegate functions must be called from IO thread. All functions accept |
| 47 // |id| as the first argument. |id| is a copy of the second argument of |
| 48 // SSLManager::OnSSLCertificateError() and represents the request. |
| 49 // Finally, CancelSSLRequest() or ContinueSSLRequest() will be called after |
| 50 // SSLErrorHandler makes a decision on the SSL error. |
| 51 class Delegate { |
| 52 public: |
| 53 // Called when SSLErrorHandler decides to cancel the request because of |
| 54 // the SSL error. |
| 55 virtual void CancelSSLRequest(const content::GlobalRequestID& id, |
| 56 int error, |
| 57 const net::SSLInfo* ssl_info) = 0; |
| 58 |
| 59 // Called when SSLErrorHandler decides to continue the request despite the |
| 60 // SSL error. |
| 61 virtual void ContinueSSLRequest(const content::GlobalRequestID& id) = 0; |
| 62 }; |
| 63 |
| 45 virtual SSLCertErrorHandler* AsSSLCertErrorHandler(); | 64 virtual SSLCertErrorHandler* AsSSLCertErrorHandler(); |
| 46 | 65 |
| 47 // Find the appropriate SSLManager for the net::URLRequest and begin handling | 66 // Find the appropriate SSLManager for the net::URLRequest and begin handling |
| 48 // this error. | 67 // this error. |
| 49 // | 68 // |
| 50 // Call on UI thread. | 69 // Call on UI thread. |
| 51 void Dispatch(); | 70 void Dispatch(); |
| 52 | 71 |
| 53 // Available on either thread. | 72 // Available on either thread. |
| 54 const GURL& request_url() const { return request_url_; } | 73 const GURL& request_url() const { return request_url_; } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 79 // call this. | 98 // call this. |
| 80 void TakeNoAction(); | 99 void TakeNoAction(); |
| 81 | 100 |
| 82 int render_process_id() const { return render_process_id_; } | 101 int render_process_id() const { return render_process_id_; } |
| 83 int render_view_id() const { return render_view_id_; } | 102 int render_view_id() const { return render_view_id_; } |
| 84 | 103 |
| 85 protected: | 104 protected: |
| 86 friend class base::RefCountedThreadSafe<SSLErrorHandler>; | 105 friend class base::RefCountedThreadSafe<SSLErrorHandler>; |
| 87 | 106 |
| 88 // Construct on the IO thread. | 107 // Construct on the IO thread. |
| 89 SSLErrorHandler(content::ResourceDispatcherHostImpl* host, | 108 SSLErrorHandler(Delegate* delegate, |
| 90 net::URLRequest* request, | 109 const content::GlobalRequestID& id, |
| 91 ResourceType::Type resource_type); | 110 ResourceType::Type resource_type, |
| 111 const GURL& url, |
| 112 int render_process_id, |
| 113 int render_view_id); |
| 92 | 114 |
| 93 virtual ~SSLErrorHandler(); | 115 virtual ~SSLErrorHandler(); |
| 94 | 116 |
| 95 // The following 2 methods are the methods subclasses should implement. | 117 // The following 2 methods are the methods subclasses should implement. |
| 96 virtual void OnDispatchFailed(); | 118 virtual void OnDispatchFailed(); |
| 97 | 119 |
| 98 // Can use the manager_ member. | 120 // Can use the manager_ member. |
| 99 virtual void OnDispatched(); | 121 virtual void OnDispatched(); |
| 100 | 122 |
| 101 // Should only be accessed on the UI thread. | 123 // Should only be accessed on the UI thread. |
| 102 SSLManager* manager_; // Our manager. | 124 SSLManager* manager_; // Our manager. |
| 103 | 125 |
| 104 // The id of the net::URLRequest associated with this object. | 126 // The id of the request associated with this object. |
| 105 // Should only be accessed from the IO thread. | 127 // Should only be accessed from the IO thread. |
| 106 content::GlobalRequestID request_id_; | 128 content::GlobalRequestID request_id_; |
| 107 | 129 |
| 108 // The ResourceDispatcherHostImpl we are associated with. | 130 // The delegate we are associated with. |
| 109 content::ResourceDispatcherHostImpl* resource_dispatcher_host_; | 131 Delegate* delegate_; |
| 110 | 132 |
| 111 private: | 133 private: |
| 112 // Completes the CancelRequest operation on the IO thread. | 134 // Completes the CancelRequest operation on the IO thread. |
| 113 // Call on the IO thread. | 135 // Call on the IO thread. |
| 114 void CompleteCancelRequest(int error); | 136 void CompleteCancelRequest(int error); |
| 115 | 137 |
| 116 // Completes the ContinueRequest operation on the IO thread. | 138 // Completes the ContinueRequest operation on the IO thread. |
| 117 // | 139 // |
| 118 // Call on the IO thread. | 140 // Call on the IO thread. |
| 119 void CompleteContinueRequest(); | 141 void CompleteContinueRequest(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 137 const ResourceType::Type resource_type_; | 159 const ResourceType::Type resource_type_; |
| 138 | 160 |
| 139 // A flag to make sure we notify the net::URLRequest exactly once. | 161 // A flag to make sure we notify the net::URLRequest exactly once. |
| 140 // Should only be accessed on the IO thread | 162 // Should only be accessed on the IO thread |
| 141 bool request_has_been_notified_; | 163 bool request_has_been_notified_; |
| 142 | 164 |
| 143 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandler); | 165 DISALLOW_COPY_AND_ASSIGN(SSLErrorHandler); |
| 144 }; | 166 }; |
| 145 | 167 |
| 146 #endif // CONTENT_BROWSER_SSL_SSL_ERROR_HANDLER_H_ | 168 #endif // CONTENT_BROWSER_SSL_SSL_ERROR_HANDLER_H_ |
| OLD | NEW |