| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 replaced_handlers.push_back(*p); | 348 replaced_handlers.push_back(*p); |
| 349 } | 349 } |
| 350 } | 350 } |
| 351 return replaced_handlers; | 351 return replaced_handlers; |
| 352 } | 352 } |
| 353 | 353 |
| 354 void ProtocolHandlerRegistry::ClearDefault(const std::string& scheme) { | 354 void ProtocolHandlerRegistry::ClearDefault(const std::string& scheme) { |
| 355 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 355 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 356 | 356 |
| 357 default_handlers_.erase(scheme); | 357 default_handlers_.erase(scheme); |
| 358 BrowserThread::PostTask( | 358 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 359 BrowserThread::IO, | 359 base::BindOnce(&IOThreadDelegate::ClearDefault, |
| 360 FROM_HERE, | 360 io_thread_delegate_, scheme)); |
| 361 base::Bind(&IOThreadDelegate::ClearDefault, io_thread_delegate_, scheme)); | |
| 362 Save(); | 361 Save(); |
| 363 NotifyChanged(); | 362 NotifyChanged(); |
| 364 } | 363 } |
| 365 | 364 |
| 366 bool ProtocolHandlerRegistry::IsDefault( | 365 bool ProtocolHandlerRegistry::IsDefault( |
| 367 const ProtocolHandler& handler) const { | 366 const ProtocolHandler& handler) const { |
| 368 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 367 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 369 return GetHandlerFor(handler.protocol()) == handler; | 368 return GetHandlerFor(handler.protocol()) == handler; |
| 370 } | 369 } |
| 371 | 370 |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 } | 580 } |
| 582 ProtocolHandlerMap::iterator q = default_handlers_.find(handler.protocol()); | 581 ProtocolHandlerMap::iterator q = default_handlers_.find(handler.protocol()); |
| 583 if (erase_success && q != default_handlers_.end() && q->second == handler) { | 582 if (erase_success && q != default_handlers_.end() && q->second == handler) { |
| 584 // Make the new top handler in the list the default. | 583 // Make the new top handler in the list the default. |
| 585 if (!handlers.empty()) { | 584 if (!handlers.empty()) { |
| 586 // NOTE We pass a copy because SetDefault() modifies handlers. | 585 // NOTE We pass a copy because SetDefault() modifies handlers. |
| 587 SetDefault(ProtocolHandler(handlers[0])); | 586 SetDefault(ProtocolHandler(handlers[0])); |
| 588 } else { | 587 } else { |
| 589 BrowserThread::PostTask( | 588 BrowserThread::PostTask( |
| 590 BrowserThread::IO, FROM_HERE, | 589 BrowserThread::IO, FROM_HERE, |
| 591 base::Bind(&IOThreadDelegate::ClearDefault, io_thread_delegate_, | 590 base::BindOnce(&IOThreadDelegate::ClearDefault, io_thread_delegate_, |
| 592 q->second.protocol())); | 591 q->second.protocol())); |
| 593 | 592 |
| 594 default_handlers_.erase(q); | 593 default_handlers_.erase(q); |
| 595 } | 594 } |
| 596 } | 595 } |
| 597 | 596 |
| 598 if (erase_success && !IsHandledProtocol(handler.protocol())) { | 597 if (erase_success && !IsHandledProtocol(handler.protocol())) { |
| 599 delegate_->DeregisterExternalHandler(handler.protocol()); | 598 delegate_->DeregisterExternalHandler(handler.protocol()); |
| 600 } | 599 } |
| 601 Save(); | 600 Save(); |
| 602 if (erase_success) | 601 if (erase_success) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 616 return LookupHandler(default_handlers_, scheme); | 615 return LookupHandler(default_handlers_, scheme); |
| 617 } | 616 } |
| 618 | 617 |
| 619 void ProtocolHandlerRegistry::Enable() { | 618 void ProtocolHandlerRegistry::Enable() { |
| 620 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 619 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 621 if (enabled_) { | 620 if (enabled_) { |
| 622 return; | 621 return; |
| 623 } | 622 } |
| 624 enabled_ = true; | 623 enabled_ = true; |
| 625 BrowserThread::PostTask( | 624 BrowserThread::PostTask( |
| 626 BrowserThread::IO, | 625 BrowserThread::IO, FROM_HERE, |
| 627 FROM_HERE, | 626 base::BindOnce(&IOThreadDelegate::Enable, io_thread_delegate_)); |
| 628 base::Bind(&IOThreadDelegate::Enable, io_thread_delegate_)); | |
| 629 | 627 |
| 630 ProtocolHandlerMap::const_iterator p; | 628 ProtocolHandlerMap::const_iterator p; |
| 631 for (p = default_handlers_.begin(); p != default_handlers_.end(); ++p) { | 629 for (p = default_handlers_.begin(); p != default_handlers_.end(); ++p) { |
| 632 delegate_->RegisterExternalHandler(p->first); | 630 delegate_->RegisterExternalHandler(p->first); |
| 633 } | 631 } |
| 634 Save(); | 632 Save(); |
| 635 NotifyChanged(); | 633 NotifyChanged(); |
| 636 } | 634 } |
| 637 | 635 |
| 638 void ProtocolHandlerRegistry::Disable() { | 636 void ProtocolHandlerRegistry::Disable() { |
| 639 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 637 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 640 if (!enabled_) { | 638 if (!enabled_) { |
| 641 return; | 639 return; |
| 642 } | 640 } |
| 643 enabled_ = false; | 641 enabled_ = false; |
| 644 BrowserThread::PostTask( | 642 BrowserThread::PostTask( |
| 645 BrowserThread::IO, | 643 BrowserThread::IO, FROM_HERE, |
| 646 FROM_HERE, | 644 base::BindOnce(&IOThreadDelegate::Disable, io_thread_delegate_)); |
| 647 base::Bind(&IOThreadDelegate::Disable, io_thread_delegate_)); | |
| 648 | 645 |
| 649 ProtocolHandlerMap::const_iterator p; | 646 ProtocolHandlerMap::const_iterator p; |
| 650 for (p = default_handlers_.begin(); p != default_handlers_.end(); ++p) { | 647 for (p = default_handlers_.begin(); p != default_handlers_.end(); ++p) { |
| 651 delegate_->DeregisterExternalHandler(p->first); | 648 delegate_->DeregisterExternalHandler(p->first); |
| 652 } | 649 } |
| 653 Save(); | 650 Save(); |
| 654 NotifyChanged(); | 651 NotifyChanged(); |
| 655 } | 652 } |
| 656 | 653 |
| 657 void ProtocolHandlerRegistry::Shutdown() { | 654 void ProtocolHandlerRegistry::Shutdown() { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 715 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 719 ProtocolHandlerMap::const_iterator p = default_handlers_.find( | 716 ProtocolHandlerMap::const_iterator p = default_handlers_.find( |
| 720 handler.protocol()); | 717 handler.protocol()); |
| 721 // If we're not loading, and we are setting a default for a new protocol, | 718 // If we're not loading, and we are setting a default for a new protocol, |
| 722 // register with the OS. | 719 // register with the OS. |
| 723 if (!is_loading_ && p == default_handlers_.end()) | 720 if (!is_loading_ && p == default_handlers_.end()) |
| 724 delegate_->RegisterWithOSAsDefaultClient(handler.protocol(), this); | 721 delegate_->RegisterWithOSAsDefaultClient(handler.protocol(), this); |
| 725 default_handlers_.erase(handler.protocol()); | 722 default_handlers_.erase(handler.protocol()); |
| 726 default_handlers_.insert(std::make_pair(handler.protocol(), handler)); | 723 default_handlers_.insert(std::make_pair(handler.protocol(), handler)); |
| 727 PromoteHandler(handler); | 724 PromoteHandler(handler); |
| 728 BrowserThread::PostTask( | 725 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 729 BrowserThread::IO, | 726 base::BindOnce(&IOThreadDelegate::SetDefault, |
| 730 FROM_HERE, | 727 io_thread_delegate_, handler)); |
| 731 base::Bind(&IOThreadDelegate::SetDefault, io_thread_delegate_, handler)); | |
| 732 } | 728 } |
| 733 | 729 |
| 734 void ProtocolHandlerRegistry::InsertHandler(const ProtocolHandler& handler) { | 730 void ProtocolHandlerRegistry::InsertHandler(const ProtocolHandler& handler) { |
| 735 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 731 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 736 ProtocolHandlerMultiMap::iterator p = | 732 ProtocolHandlerMultiMap::iterator p = |
| 737 protocol_handlers_.find(handler.protocol()); | 733 protocol_handlers_.find(handler.protocol()); |
| 738 | 734 |
| 739 if (p != protocol_handlers_.end()) { | 735 if (p != protocol_handlers_.end()) { |
| 740 p->second.push_back(handler); | 736 p->second.push_back(handler); |
| 741 return; | 737 return; |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 | 913 |
| 918 std::unique_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> | 914 std::unique_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> |
| 919 ProtocolHandlerRegistry::CreateJobInterceptorFactory() { | 915 ProtocolHandlerRegistry::CreateJobInterceptorFactory() { |
| 920 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 916 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 921 // this is always created on the UI thread (in profile_io's | 917 // this is always created on the UI thread (in profile_io's |
| 922 // InitializeOnUIThread. Any method calls must be done | 918 // InitializeOnUIThread. Any method calls must be done |
| 923 // on the IO thread (this is checked). | 919 // on the IO thread (this is checked). |
| 924 return std::unique_ptr<JobInterceptorFactory>( | 920 return std::unique_ptr<JobInterceptorFactory>( |
| 925 new JobInterceptorFactory(io_thread_delegate_.get())); | 921 new JobInterceptorFactory(io_thread_delegate_.get())); |
| 926 } | 922 } |
| OLD | NEW |