| 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 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" | 5 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" | 
| 6 | 6 | 
| 7 #include <utility> | 7 #include <utility> | 
| 8 | 8 | 
| 9 #include "base/bind.h" | 9 #include "base/bind.h" | 
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" | 
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 156 | 156 | 
| 157 // JobInterceptorFactory ------------------------------------------------------- | 157 // JobInterceptorFactory ------------------------------------------------------- | 
| 158 | 158 | 
| 159 // Instances of JobInterceptorFactory are produced for ownership by the IO | 159 // Instances of JobInterceptorFactory are produced for ownership by the IO | 
| 160 // thread where it handler URL requests. We should never hold | 160 // thread where it handler URL requests. We should never hold | 
| 161 // any pointers on this class, only produce them in response to | 161 // any pointers on this class, only produce them in response to | 
| 162 // requests via |ProtocolHandlerRegistry::CreateJobInterceptorFactory|. | 162 // requests via |ProtocolHandlerRegistry::CreateJobInterceptorFactory|. | 
| 163 ProtocolHandlerRegistry::JobInterceptorFactory::JobInterceptorFactory( | 163 ProtocolHandlerRegistry::JobInterceptorFactory::JobInterceptorFactory( | 
| 164     IOThreadDelegate* io_thread_delegate) | 164     IOThreadDelegate* io_thread_delegate) | 
| 165     : io_thread_delegate_(io_thread_delegate) { | 165     : io_thread_delegate_(io_thread_delegate) { | 
| 166   DCHECK(io_thread_delegate_); | 166   DCHECK(io_thread_delegate_.get()); | 
| 167   DetachFromThread(); | 167   DetachFromThread(); | 
| 168 } | 168 } | 
| 169 | 169 | 
| 170 ProtocolHandlerRegistry::JobInterceptorFactory::~JobInterceptorFactory() { | 170 ProtocolHandlerRegistry::JobInterceptorFactory::~JobInterceptorFactory() { | 
| 171 } | 171 } | 
| 172 | 172 | 
| 173 void ProtocolHandlerRegistry::JobInterceptorFactory::Chain( | 173 void ProtocolHandlerRegistry::JobInterceptorFactory::Chain( | 
| 174     scoped_ptr<net::URLRequestJobFactory> job_factory) { | 174     scoped_ptr<net::URLRequestJobFactory> job_factory) { | 
| 175   job_factory_ = job_factory.Pass(); | 175   job_factory_ = job_factory.Pass(); | 
| 176 } | 176 } | 
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 294 } | 294 } | 
| 295 | 295 | 
| 296 void ProtocolHandlerRegistry::Delegate::RegisterWithOSAsDefaultClient( | 296 void ProtocolHandlerRegistry::Delegate::RegisterWithOSAsDefaultClient( | 
| 297     const std::string& protocol, ProtocolHandlerRegistry* registry) { | 297     const std::string& protocol, ProtocolHandlerRegistry* registry) { | 
| 298   DefaultClientObserver* observer = CreateShellObserver(registry); | 298   DefaultClientObserver* observer = CreateShellObserver(registry); | 
| 299   // The worker pointer is reference counted. While it is running the | 299   // The worker pointer is reference counted. While it is running the | 
| 300   // message loops of the FILE and UI thread will hold references to it | 300   // message loops of the FILE and UI thread will hold references to it | 
| 301   // and it will be automatically freed once all its tasks have finished. | 301   // and it will be automatically freed once all its tasks have finished. | 
| 302   scoped_refptr<ShellIntegration::DefaultProtocolClientWorker> worker; | 302   scoped_refptr<ShellIntegration::DefaultProtocolClientWorker> worker; | 
| 303   worker = CreateShellWorker(observer, protocol); | 303   worker = CreateShellWorker(observer, protocol); | 
| 304   observer->SetWorker(worker); | 304   observer->SetWorker(worker.get()); | 
| 305   registry->default_client_observers_.push_back(observer); | 305   registry->default_client_observers_.push_back(observer); | 
| 306   worker->StartSetAsDefault(); | 306   worker->StartSetAsDefault(); | 
| 307 } | 307 } | 
| 308 | 308 | 
| 309 // ProtocolHandlerRegistry ----------------------------------------------------- | 309 // ProtocolHandlerRegistry ----------------------------------------------------- | 
| 310 | 310 | 
| 311 ProtocolHandlerRegistry::ProtocolHandlerRegistry(Profile* profile, | 311 ProtocolHandlerRegistry::ProtocolHandlerRegistry(Profile* profile, | 
| 312     Delegate* delegate) | 312     Delegate* delegate) | 
| 313     : profile_(profile), | 313     : profile_(profile), | 
| 314       delegate_(delegate), | 314       delegate_(delegate), | 
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 467 | 467 | 
| 468   // For each default protocol handler, check that we are still registered | 468   // For each default protocol handler, check that we are still registered | 
| 469   // with the OS as the default application. | 469   // with the OS as the default application. | 
| 470   if (ShouldRemoveHandlersNotInOS()) { | 470   if (ShouldRemoveHandlersNotInOS()) { | 
| 471     for (ProtocolHandlerMap::const_iterator p = default_handlers_.begin(); | 471     for (ProtocolHandlerMap::const_iterator p = default_handlers_.begin(); | 
| 472          p != default_handlers_.end(); ++p) { | 472          p != default_handlers_.end(); ++p) { | 
| 473       ProtocolHandler handler = p->second; | 473       ProtocolHandler handler = p->second; | 
| 474       DefaultClientObserver* observer = delegate_->CreateShellObserver(this); | 474       DefaultClientObserver* observer = delegate_->CreateShellObserver(this); | 
| 475       scoped_refptr<ShellIntegration::DefaultProtocolClientWorker> worker; | 475       scoped_refptr<ShellIntegration::DefaultProtocolClientWorker> worker; | 
| 476       worker = delegate_->CreateShellWorker(observer, handler.protocol()); | 476       worker = delegate_->CreateShellWorker(observer, handler.protocol()); | 
| 477       observer->SetWorker(worker); | 477       observer->SetWorker(worker.get()); | 
| 478       default_client_observers_.push_back(observer); | 478       default_client_observers_.push_back(observer); | 
| 479       worker->StartCheckIsDefault(); | 479       worker->StartCheckIsDefault(); | 
| 480     } | 480     } | 
| 481   } | 481   } | 
| 482 } | 482 } | 
| 483 | 483 | 
| 484 int ProtocolHandlerRegistry::GetHandlerIndex(const std::string& scheme) const { | 484 int ProtocolHandlerRegistry::GetHandlerIndex(const std::string& scheme) const { | 
| 485   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 485   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 
| 486   const ProtocolHandler& handler = GetHandlerFor(scheme); | 486   const ProtocolHandler& handler = GetHandlerFor(scheme); | 
| 487   if (handler.IsEmpty()) | 487   if (handler.IsEmpty()) | 
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 875   RegisterProtocolHandler(handler); | 875   RegisterProtocolHandler(handler); | 
| 876   SetDefault(handler); | 876   SetDefault(handler); | 
| 877 } | 877 } | 
| 878 | 878 | 
| 879 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> | 879 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> | 
| 880 ProtocolHandlerRegistry::CreateJobInterceptorFactory() { | 880 ProtocolHandlerRegistry::CreateJobInterceptorFactory() { | 
| 881   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 881   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 
| 882   // this is always created on the UI thread (in profile_io's | 882   // this is always created on the UI thread (in profile_io's | 
| 883   // InitializeOnUIThread. Any method calls must be done | 883   // InitializeOnUIThread. Any method calls must be done | 
| 884   // on the IO thread (this is checked). | 884   // on the IO thread (this is checked). | 
| 885   return scoped_ptr<JobInterceptorFactory>(new JobInterceptorFactory( | 885   return scoped_ptr<JobInterceptorFactory>( | 
| 886       io_thread_delegate_)); | 886       new JobInterceptorFactory(io_thread_delegate_.get())); | 
| 887 } | 887 } | 
| OLD | NEW | 
|---|