Index: content/browser/ssl/ssl_manager.cc |
diff --git a/content/browser/ssl/ssl_manager.cc b/content/browser/ssl/ssl_manager.cc |
index 18c64c8d455e2a7d1487da52f3e389a8bc3dfb96..d41260e583e325a7dc9ef4e251c148ba006ce283 100644 |
--- a/content/browser/ssl/ssl_manager.cc |
+++ b/content/browser/ssl/ssl_manager.cc |
@@ -4,10 +4,7 @@ |
#include "content/browser/ssl/ssl_manager.h" |
-#include <set> |
- |
#include "base/bind.h" |
-#include "base/supports_user_data.h" |
#include "base/utf_string_conversions.h" |
#include "content/browser/loader/resource_dispatcher_host_impl.h" |
#include "content/browser/loader/resource_request_info_impl.h" |
@@ -17,7 +14,6 @@ |
#include "content/browser/web_contents/navigation_entry_impl.h" |
#include "content/browser/web_contents/web_contents_impl.h" |
#include "content/common/ssl_status_serialization.h" |
-#include "content/public/browser/browser_context.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/load_from_memory_cache_details.h" |
#include "content/public/browser/navigation_details.h" |
@@ -29,25 +25,6 @@ |
namespace content { |
-namespace { |
- |
-const char kSSLManagerKeyName[] = "content_ssl_manager"; |
- |
-class SSLManagerSet : public base::SupportsUserData::Data { |
- public: |
- SSLManagerSet() { |
- } |
- |
- std::set<SSLManager*>& get() { return set_; } |
- |
- private: |
- std::set<SSLManager*> set_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SSLManagerSet); |
-}; |
- |
-} // namespace |
- |
// static |
void SSLManager::OnSSLCertificateError( |
const base::WeakPtr<SSLErrorHandler::Delegate>& delegate, |
@@ -84,15 +61,12 @@ void SSLManager::OnSSLCertificateError( |
} |
// static |
-void SSLManager::NotifySSLInternalStateChanged(BrowserContext* context) { |
- SSLManagerSet* managers = static_cast<SSLManagerSet*>( |
- context->GetUserData(kSSLManagerKeyName)); |
- |
- for (std::set<SSLManager*>::iterator i = managers->get().begin(); |
- i != managers->get().end(); ++i) { |
- (*i)->UpdateEntry(NavigationEntryImpl::FromNavigationEntry( |
- (*i)->controller()->GetActiveEntry())); |
- } |
+void SSLManager::NotifySSLInternalStateChanged( |
+ NavigationControllerImpl* controller) { |
+ NotificationService::current()->Notify( |
+ NOTIFICATION_SSL_INTERNAL_STATE_CHANGED, |
+ Source<BrowserContext>(controller->GetBrowserContext()), |
+ NotificationService::NoDetails()); |
} |
SSLManager::SSLManager(NavigationControllerImpl* controller) |
@@ -111,20 +85,13 @@ SSLManager::SSLManager(NavigationControllerImpl* controller) |
registrar_.Add( |
this, NOTIFICATION_LOAD_FROM_MEMORY_CACHE, |
Source<NavigationController>(controller_)); |
- |
- SSLManagerSet* managers = static_cast<SSLManagerSet*>( |
- controller_->GetBrowserContext()->GetUserData(kSSLManagerKeyName)); |
- if (!managers) { |
- managers = new SSLManagerSet; |
- controller_->GetBrowserContext()->SetUserData(kSSLManagerKeyName, managers); |
- } |
- managers->get().insert(this); |
+ registrar_.Add( |
+ this, NOTIFICATION_SSL_INTERNAL_STATE_CHANGED, |
+ Source<BrowserContext>( |
+ controller_->GetBrowserContext())); |
} |
SSLManager::~SSLManager() { |
- SSLManagerSet* managers = static_cast<SSLManagerSet*>( |
- controller_->GetBrowserContext()->GetUserData(kSSLManagerKeyName)); |
- managers->get().erase(this); |
} |
void SSLManager::DidCommitProvisionalLoad( |
@@ -161,16 +128,10 @@ void SSLManager::DidCommitProvisionalLoad( |
UpdateEntry(entry); |
} |
-void SSLManager::DidDisplayInsecureContent() { |
- UpdateEntry( |
- NavigationEntryImpl::FromNavigationEntry(controller_->GetActiveEntry())); |
-} |
- |
void SSLManager::DidRunInsecureContent(const std::string& security_origin) { |
- NavigationEntryImpl* navigation_entry = |
- NavigationEntryImpl::FromNavigationEntry(controller_->GetActiveEntry()); |
- policy()->DidRunInsecureContent(navigation_entry, security_origin); |
- UpdateEntry(navigation_entry); |
+ policy()->DidRunInsecureContent( |
+ NavigationEntryImpl::FromNavigationEntry(controller_->GetActiveEntry()), |
+ security_origin); |
} |
void SSLManager::Observe(int type, |
@@ -190,6 +151,9 @@ void SSLManager::Observe(int type, |
DidLoadFromMemoryCache( |
Details<LoadFromMemoryCacheDetails>(details).ptr()); |
break; |
+ case NOTIFICATION_SSL_INTERNAL_STATE_CHANGED: |
+ DidChangeSSLInternalState(); |
+ break; |
default: |
NOTREACHED() << "The SSLManager received an unexpected notification."; |
} |
@@ -234,6 +198,11 @@ void SSLManager::DidReceiveResourceRedirect(ResourceRedirectDetails* details) { |
// HTTP request to https://attacker.com/payload.js. |
} |
+void SSLManager::DidChangeSSLInternalState() { |
+ UpdateEntry( |
+ NavigationEntryImpl::FromNavigationEntry(controller_->GetActiveEntry())); |
+} |
+ |
void SSLManager::UpdateEntry(NavigationEntryImpl* entry) { |
// We don't always have a navigation entry to update, for example in the |
// case of the Web Inspector. |
@@ -244,8 +213,12 @@ void SSLManager::UpdateEntry(NavigationEntryImpl* entry) { |
policy()->UpdateEntry(entry, controller_->web_contents()); |
- if (!entry->GetSSL().Equals(original_ssl_status)) |
- controller_->web_contents()->DidChangeVisibleSSLState(); |
+ if (!entry->GetSSL().Equals(original_ssl_status)) { |
+ NotificationService::current()->Notify( |
+ NOTIFICATION_SSL_VISIBLE_STATE_CHANGED, |
+ Source<NavigationController>(controller_), |
+ NotificationService::NoDetails()); |
+ } |
} |
} // namespace content |