| 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
|
|
|