15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/waitable_event.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/custom_handlers/protocol_handler.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/pref_names.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_renderer_host.h" 250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/base/request_priority.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AssertInterceptedIO( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestJobFactory* interceptor) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContext context; 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<net::URLRequest> request(context.CreateRequest( 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) url, net::DEFAULT_PRIORITY, NULL, NULL)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::URLRequestJob> job = 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor->MaybeCreateJobWithProtocolHandler( 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) url.scheme(), request.get(), context.network_delegate()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(job.get() != NULL); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AssertIntercepted( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestJobFactory* interceptor) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::IO, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(AssertInterceptedIO, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(interceptor))); 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// FakeURLRequestJobFactory returns NULL for all job creation requests and false 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// for all IsHandled*() requests. FakeURLRequestJobFactory can be chained to 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ProtocolHandlerRegistry::JobInterceptorFactory so the result of 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MaybeCreateJobWithProtocolHandler() indicates whether the 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ProtocolHandlerRegistry properly handled a job creation request. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FakeURLRequestJobFactory : public net::URLRequestJobFactory { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // net::URLRequestJobFactory implementation: 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler( 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& scheme, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequest* request, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::NetworkDelegate* network_delegate) const OVERRIDE { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsHandledURL(const GURL& url) const OVERRIDE { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 78b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE { 79b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return true; 80b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AssertWillHandleIO( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expected, 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProtocolHandlerRegistry::JobInterceptorFactory* interceptor) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor->Chain(scoped_ptr<net::URLRequestJobFactory>( 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new FakeURLRequestJobFactory())); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(expected, interceptor->IsHandledProtocol(scheme)); 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) interceptor->Chain(scoped_ptr<net::URLRequestJobFactory>()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AssertWillHandle( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expected, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProtocolHandlerRegistry::JobInterceptorFactory* interceptor) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::IO, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(AssertWillHandleIO, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheme, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(interceptor))); 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)base::DictionaryValue* GetProtocolHandlerValue(std::string protocol, 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string url) { 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::DictionaryValue* value = new base::DictionaryValue(); 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) value->SetString("protocol", protocol); 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) value->SetString("url", url); 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return value; 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)base::DictionaryValue* GetProtocolHandlerValueWithDefault(std::string protocol, 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string url, 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool is_default) { 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::DictionaryValue* value = GetProtocolHandlerValue(protocol, url); 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) value->SetBoolean("default", is_default); 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return value; 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeDelegate : public ProtocolHandlerRegistry::Delegate { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeDelegate() : force_os_failure_(false) {} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeDelegate() { } 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RegisterExternalHandler(const std::string& protocol) OVERRIDE { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registered_protocols_.find(protocol) == registered_protocols_.end()); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registered_protocols_.insert(protocol); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DeregisterExternalHandler(const std::string& protocol) OVERRIDE { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registered_protocols_.erase(protocol); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ShellIntegration::DefaultProtocolClientWorker* CreateShellWorker( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShellIntegration::DefaultWebClientObserver* observer, 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& protocol) OVERRIDE; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ProtocolHandlerRegistry::DefaultClientObserver* CreateShellObserver( 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProtocolHandlerRegistry* registry) OVERRIDE; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RegisterWithOSAsDefaultClient( 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& protocol, 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProtocolHandlerRegistry* reg) OVERRIDE { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::Delegate::RegisterWithOSAsDefaultClient(protocol, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reg); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(IsFakeRegisteredWithOS(protocol)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsExternalHandlerRegistered( 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& protocol) OVERRIDE { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return registered_protocols_.find(protocol) != registered_protocols_.end(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFakeRegisteredWithOS(const std::string& protocol) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return os_registered_protocols_.find(protocol) != 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os_registered_protocols_.end(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FakeRegisterWithOS(const std::string& protocol) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os_registered_protocols_.insert(protocol); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Reset() { 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registered_protocols_.clear(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os_registered_protocols_.clear(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) force_os_failure_ = false; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_force_os_failure(bool force) { force_os_failure_ = force; } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool force_os_failure() { return force_os_failure_; } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> registered_protocols_; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> os_registered_protocols_; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool force_os_failure_; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeClientObserver 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ProtocolHandlerRegistry::DefaultClientObserver { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeClientObserver(ProtocolHandlerRegistry* registry, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeDelegate* registry_delegate) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ProtocolHandlerRegistry::DefaultClientObserver(registry), 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_(registry_delegate) {} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetDefaultWebClientUIState( 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::DefaultWebClientUIState state) OVERRIDE { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::DefaultClientObserver::SetDefaultWebClientUIState( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state == ShellIntegration::STATE_IS_DEFAULT) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->FakeRegisterWithOS(worker_->protocol()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state != ShellIntegration::STATE_PROCESSING) { 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Quit(); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeDelegate* delegate_; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeProtocolClientWorker 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ShellIntegration::DefaultProtocolClientWorker { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeProtocolClientWorker(ShellIntegration::DefaultWebClientObserver* observer, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& protocol, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool force_failure) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ShellIntegration::DefaultProtocolClientWorker(observer, protocol), 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) force_failure_(force_failure) {} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeProtocolClientWorker() {} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ShellIntegration::DefaultWebClientState CheckIsDefault() OVERRIDE { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (force_failure_) { 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ShellIntegration::NOT_DEFAULT; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ShellIntegration::IS_DEFAULT; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SetAsDefault(bool interactive_permitted) OVERRIDE { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool force_failure_; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProtocolHandlerRegistry::DefaultClientObserver* 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeDelegate::CreateShellObserver(ProtocolHandlerRegistry* registry) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new FakeClientObserver(registry, this); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellIntegration::DefaultProtocolClientWorker* FakeDelegate::CreateShellWorker( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShellIntegration::DefaultWebClientObserver* observer, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& protocol) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new FakeProtocolClientWorker(observer, protocol, force_os_failure_); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NotificationCounter : public content::NotificationObserver { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) explicit NotificationCounter(content::BrowserContext* context) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : events_(0), 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_() { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.Add(this, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED, 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::Source<content::BrowserContext>(context)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int events() { return events_; } 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool notified() { return events_ > 0; } 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Clear() { events_ = 0; } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++events_; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int events_; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar notification_registrar_; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QueryProtocolHandlerOnChange 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public content::NotificationObserver { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) QueryProtocolHandlerOnChange(content::BrowserContext* context, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : local_registry_(registry), 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) called_(false), 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_() { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.Add(this, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED, 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::Source<content::BrowserContext>(context)); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> output; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) local_registry_->GetRegisteredProtocols(&output); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) called_ = true; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* local_registry_; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool called_; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar notification_registrar_; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLRequest DCHECKS that the current MessageLoop is IO. It does this because 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it can't check the thread id (since net can't depend on content.) We want 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to harness our tests so all threads use the same loop allowing us to 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// guarantee all messages are processed.) By overriding the IsType method 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// we basically ignore the supplied message loop type, and instead infer 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// our type based on the current thread. GO DEPENDENCY INJECTION! 30190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class TestMessageLoop : public base::MessageLoop { 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestMessageLoop() {} 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestMessageLoop() {} 30590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool IsType(base::MessageLoop::Type type) const OVERRIDE { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case base::MessageLoop::TYPE_UI: 30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return BrowserThread::CurrentlyOn(BrowserThread::UI); 30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case base::MessageLoop::TYPE_IO: 31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return BrowserThread::CurrentlyOn(BrowserThread::IO); 311bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#if defined(OS_ANDROID) 312bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch case base::MessageLoop::TYPE_JAVA: // fall-through 313bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // defined(OS_ANDROID) 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case base::MessageLoop::TYPE_CUSTOM: 31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) case base::MessageLoop::TYPE_DEFAULT: 31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return !BrowserThread::CurrentlyOn(BrowserThread::UI) && 31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) !BrowserThread::CurrentlyOn(BrowserThread::IO); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProtocolHandlerRegistryTest : public testing::Test { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistryTest() 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &loop_), 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &loop_), 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread_(BrowserThread::IO, &loop_), 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_protocol_handler_(CreateProtocolHandler("test", "test")) {} 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeDelegate* delegate() const { return delegate_; } 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry() { return registry_.get(); } 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile() const { return profile_.get(); } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandler& test_protocol_handler() const { 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test_protocol_handler_; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler CreateProtocolHandler(const std::string& protocol, 341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& url) { 342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return ProtocolHandler::CreateProtocolHandler(protocol, url); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler CreateProtocolHandler(const std::string& protocol, 346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& name) { 347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return CreateProtocolHandler(protocol, GURL("http://" + name + "/%s")); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecreateRegistry(bool initialize) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TeadDownRegistry(); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUpRegistry(initialize); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int InPrefHandlerCount() { 35646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::ListValue* in_pref_handlers = 35746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile()->GetPrefs()->GetList(prefs::kRegisteredProtocolHandlers); 35846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return static_cast<int>(in_pref_handlers->GetSize()); 35946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 36046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 36146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int InMemoryHandlerCount() { 36246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int in_memory_handler_count = 0; 36346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerMultiMap::iterator it = 36446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->protocol_handlers_.begin(); 36546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (; it != registry()->protocol_handlers_.end(); ++it) 36646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) in_memory_handler_count += it->second.size(); 36746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return in_memory_handler_count; 36846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 36946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 37046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int InPrefIgnoredHandlerCount() { 37146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::ListValue* in_pref_ignored_handlers = 37246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile()->GetPrefs()->GetList(prefs::kIgnoredProtocolHandlers); 37346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return static_cast<int>(in_pref_ignored_handlers->GetSize()); 37446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 37546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 37646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int InMemoryIgnoredHandlerCount() { 37746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int in_memory_ignored_handler_count = 0; 37846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerList::iterator it = 37946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->ignored_protocol_handlers_.begin(); 38046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (; it != registry()->ignored_protocol_handlers_.end(); ++it) 38146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) in_memory_ignored_handler_count++; 38246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return in_memory_ignored_handler_count; 38346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 38446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a new registry, initializing it if |initialize| is true. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caller assumes ownership for the object 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetUpRegistry(bool initialize) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = new FakeDelegate(); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_.reset(new ProtocolHandlerRegistry(profile(), delegate())); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (initialize) registry_->InitProtocolSettings(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TeadDownRegistry() { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->Shutdown(); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_.reset(); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registry owns the delegate_ it handles deletion of that object. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile()); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(profile_->GetPrefs()); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUpRegistry(true); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_protocol_handler_ = 404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("test", GURL("http://test.com/%s")); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TeadDownRegistry(); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMessageLoop loop_; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread io_thread_; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeDelegate* delegate_; // Registry assumes ownership of delegate_. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ProtocolHandlerRegistry> registry_; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler test_protocol_handler_; 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ProtocolHandlerRegistryTest tests are flaky on Linux & ChromeOS. 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/133023 4260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_LINUX) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_AcceptProtocolHandlerHandlesProtocol \ 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_AcceptProtocolHandlerHandlesProtocol 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_DeniedProtocolIsntHandledUntilAccepted \ 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_DeniedProtocolIsntHandledUntilAccepted 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestStartsAsDefault DISABLED_TestStartsAsDefault 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestRemoveHandlerRemovesDefault \ 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TestRemoveHandlerRemovesDefault 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestClearDefaultGetsPropagatedToIO \ 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TestClearDefaultGetsPropagatedToIO 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestIsHandledProtocolWorksOnIOThread \ 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TestIsHandledProtocolWorksOnIOThread 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestInstallDefaultHandler \ 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TestInstallDefaultHandler 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_AcceptProtocolHandlerHandlesProtocol \ 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AcceptProtocolHandlerHandlesProtocol 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_DeniedProtocolIsntHandledUntilAccepted \ 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeniedProtocolIsntHandledUntilAccepted 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestStartsAsDefault TestStartsAsDefault 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestRemoveHandlerRemovesDefault TestRemoveHandlerRemovesDefault 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestClearDefaultGetsPropagatedToIO \ 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestClearDefaultGetsPropagatedToIO 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestIsHandledProtocolWorksOnIOThread \ 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestIsHandledProtocolWorksOnIOThread 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestInstallDefaultHandler TestInstallDefaultHandler 4520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif // defined(OS_LINUX) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_AcceptProtocolHandlerHandlesProtocol) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("test")); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsHandledProtocol("test")); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_DeniedProtocolIsntHandledUntilAccepted) { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnDenyRegisterProtocolHandler(test_protocol_handler()); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("test")); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsHandledProtocol("test")); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, ClearDefaultMakesProtocolNotHandled) { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->ClearDefault("test"); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("test")); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->GetHandlerFor("test").IsEmpty()); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, DisableDeregistersProtocolHandlers) { 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(delegate()->IsExternalHandlerRegistered("test")); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(delegate()->IsExternalHandlerRegistered("test")); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Disable(); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(delegate()->IsExternalHandlerRegistered("test")); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Enable(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(delegate()->IsExternalHandlerRegistered("test")); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, IgnoreProtocolHandler) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnIgnoreRegisterProtocolHandler(test_protocol_handler()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsIgnored(test_protocol_handler())); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveIgnoredHandler(test_protocol_handler()); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsIgnored(test_protocol_handler())); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, IgnoreEquivalentProtocolHandler) { 496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", GURL("http://test/%s")); 497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", GURL("http://test/%s")); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnIgnoreRegisterProtocolHandler(ph1); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsIgnored(ph1)); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->HasIgnoredEquivalent(ph2)); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveIgnoredHandler(ph1); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsIgnored(ph1)); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->HasIgnoredEquivalent(ph2)); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, SaveAndLoad) { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler stuff_protocol_handler( 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateProtocolHandler("stuff", "stuff")); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnIgnoreRegisterProtocolHandler(stuff_protocol_handler); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsHandledProtocol("test")); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsIgnored(stuff_protocol_handler)); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate()->Reset(); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecreateRegistry(true); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsHandledProtocol("test")); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsIgnored(stuff_protocol_handler)); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestEnabledDisabled) { 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Disable(); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->enabled()); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Enable(); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->enabled()); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisallowRegisteringExternallyHandledProtocols) { 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate()->RegisterExternalHandler("test"); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->CanSchemeBeOverridden("test")); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, RemovingHandlerMeansItCanBeAddedAgain) { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->CanSchemeBeOverridden("test")); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(test_protocol_handler()); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->CanSchemeBeOverridden("test")); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, MAYBE_TestStartsAsDefault) { 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(test_protocol_handler()); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(test_protocol_handler())); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestClearDefault) { 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->ClearDefault("test"); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(ph1)); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(ph2)); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestGetHandlerFor) { 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph2, registry()->GetHandlerFor("test")); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsHandledProtocol("test")); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestMostRecentHandlerIsDefault) { 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(ph1)); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph2)); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestOnAcceptRegisterProtocolHandler) { 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph1)); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(ph2)); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(ph1)); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph2)); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestDefaultSaveLoad) { 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnDenyRegisterProtocolHandler(ph1); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnDenyRegisterProtocolHandler(ph2); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Disable(); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecreateRegistry(true); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->enabled()); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Enable(); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(ph1)); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph2)); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecreateRegistry(true); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->enabled()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestRemoveHandler) { 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph1); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsRegistered(ph1)); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("test")); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestIsRegistered) { 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsRegistered(ph1)); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestIsEquivalentRegistered) { 634cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", GURL("http://test/%s")); 635cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", GURL("http://test/%s")); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsRegistered(ph1)); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->HasRegisteredEquivalent(ph2)); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestSilentlyRegisterHandler) { 643cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", GURL("http://test/1/%s")); 644cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", GURL("http://test/2/%s")); 645cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph3 = CreateProtocolHandler("ignore", GURL("http://test/%s")); 646cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph4 = CreateProtocolHandler("ignore", GURL("http://test/%s")); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->SilentlyHandleRegisterHandlerRequest(ph1)); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsRegistered(ph1)); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsRegistered(ph1)); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->SilentlyHandleRegisterHandlerRequest(ph2)); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsRegistered(ph1)); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsRegistered(ph2)); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->SilentlyHandleRegisterHandlerRequest(ph3)); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsRegistered(ph3)); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnIgnoreRegisterProtocolHandler(ph3); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsRegistered(ph3)); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsIgnored(ph3)); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->SilentlyHandleRegisterHandlerRequest(ph4)); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsRegistered(ph4)); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->HasIgnoredEquivalent(ph4)); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, MAYBE_TestRemoveHandlerRemovesDefault) { 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph3 = CreateProtocolHandler("test", "test3"); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph3); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph1); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(ph1)); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestGetHandlersFor) { 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("test", "test2"); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph3 = CreateProtocolHandler("test", "test3"); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph3); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerList handlers = 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetHandlersFor("test"); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(3), handlers.size()); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph3, handlers[0]); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph2, handlers[1]); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph1, handlers[2]); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestGetRegisteredProtocols) { 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> protocols; 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetRegisteredProtocols(&protocols); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(0), protocols.size()); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetHandlersFor("test"); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocols.clear(); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetRegisteredProtocols(&protocols); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(0), protocols.size()); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestIsHandledProtocol) { 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetHandlersFor("test"); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("test")); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestNotifications) { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationCounter counter(profile()); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(counter.notified()); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) counter.Clear(); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Disable(); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(counter.notified()); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) counter.Clear(); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Enable(); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(counter.notified()); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) counter.Clear(); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph1); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(counter.notified()); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) counter.Clear(); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestReentrantNotifications) { 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryProtocolHandlerOnChange queryer(profile(), registry()); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(queryer.called_); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestProtocolsWithNoDefaultAreHandled) { 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->ClearDefault("test"); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> handled_protocols; 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetRegisteredProtocols(&handled_protocols); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(1), handled_protocols.size()); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("test", handled_protocols[0]); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestDisablePreventsHandling) { 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("test", "test1"); 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsHandledProtocol("test")); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Disable(); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("test")); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(smckay): This is much more appropriately an integration 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test. Make that so, then update the 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ShellIntegretion{Delegate,Observer,Worker} test classes we use to fully 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// isolate this test from the FILE thread. 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestOSRegistration) { 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph_do1 = CreateProtocolHandler("do", "test1"); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph_do2 = CreateProtocolHandler("do", "test2"); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph_dont = CreateProtocolHandler("dont", "test"); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(delegate()->IsFakeRegisteredWithOS("do")); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(delegate()->IsFakeRegisteredWithOS("dont")); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph_do1); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnDenyRegisterProtocolHandler(ph_dont); 77890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); // FILE thread needs to run. 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(delegate()->IsFakeRegisteredWithOS("do")); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(delegate()->IsFakeRegisteredWithOS("dont")); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should not register with the OS, if it does the delegate 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will assert for us. We don't need to wait for the message loop 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as it should not go through to the shell worker. 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph_do2); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(benwells): When Linux support is more reliable and 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbut.com/88255 is fixed this test will pass. 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestOSRegistrationFailure DISABLED_TestOSRegistrationFailure 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestOSRegistrationFailure TestOSRegistrationFailure 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(smckay): This is much more appropriately an integration 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test. Make that so, then update the 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ShellIntegretion{Delegate,Observer,Worker} test classes we use to fully 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// isolate this test from the FILE thread. 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, MAYBE_TestOSRegistrationFailure) { 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph_do = CreateProtocolHandler("do", "test1"); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph_dont = CreateProtocolHandler("dont", "test"); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("do")); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("dont")); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph_do); 80890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); // FILE thread needs to run. 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate()->set_force_os_failure(true); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph_dont); 81190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); // FILE thread needs to run. 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsHandledProtocol("do")); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(1), registry()->GetHandlersFor("do").size()); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(registry()->IsHandledProtocol("dont")); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(1), registry()->GetHandlersFor("dont").size()); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestMaybeCreateTaskWorksFromIOThread) { 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("mailto", "test1"); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url("mailto:someone@something.com"); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<net::URLRequestJobFactory> interceptor( 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry()->CreateJobInterceptorFactory()); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertIntercepted(url, interceptor.get()); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_TestIsHandledProtocolWorksOnIOThread) { 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme("mailto"); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler(scheme, "test1"); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> interceptor( 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry()->CreateJobInterceptorFactory()); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertWillHandle(scheme, true, interceptor.get()); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestRemovingDefaultFallsBackToOldDefault) { 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("mailto", "test1"); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("mailto", "test2"); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph3 = CreateProtocolHandler("mailto", "test3"); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph3); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph3)); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph3); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph2)); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph3); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph3)); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph2); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph3)); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph3); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(ph1)); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestRemovingDefaultDoesntChangeHandlers) { 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler("mailto", "test1"); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph2 = CreateProtocolHandler("mailto", "test2"); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph3 = CreateProtocolHandler("mailto", "test3"); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph3); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph3); 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerList handlers = 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetHandlersFor("mailto"); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(2), handlers.size()); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph2, handlers[0]); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph1, handlers[1]); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, MAYBE_TestClearDefaultGetsPropagatedToIO) { 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string scheme("mailto"); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler(scheme, "test1"); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->ClearDefault(scheme); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> interceptor( 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry()->CreateJobInterceptorFactory()); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertWillHandle(scheme, false, interceptor.get()); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestLoadEnabledGetsPropogatedToIO) { 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string mailto("mailto"); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ph1 = CreateProtocolHandler(mailto, "MailtoHandler"); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> interceptor( 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry()->CreateJobInterceptorFactory()); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertWillHandle(mailto, true, interceptor.get()); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->Disable(); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertWillHandle(mailto, false, interceptor.get()); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestReplaceHandler) { 899cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph1 = 900cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/%s")); 901cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph2 = 902cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/updated-url/%s")); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->AttemptReplace(ph2)); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandler& handler(registry()->GetHandlerFor("mailto")); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(handler.url(), ph2.url()); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestReplaceNonDefaultHandler) { 910cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph1 = 911cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/%s")); 912cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph2 = 913cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/updated-url/%s")); 914cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph3 = 915cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://else.com/%s")); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph3); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->AttemptReplace(ph2)); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandler& handler(registry()->GetHandlerFor("mailto")); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(handler.url(), ph3.url()); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestReplaceRemovesStaleHandlers) { 924cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph1 = 925cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/%s")); 926cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph2 = 927cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/updated-url/%s")); 928cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph3 = 929cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/third/%s")); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph1); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(ph2); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should replace the previous two handlers. 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->AttemptReplace(ph3)); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandler& handler(registry()->GetHandlerFor("mailto")); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(handler.url(), ph3.url()); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->RemoveHandler(ph3); 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(registry()->GetHandlerFor("mailto").IsEmpty()); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestIsSameOrigin) { 942cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph1 = 943cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/%s")); 944cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph2 = 945cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://test.com/updated-url/%s")); 946cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProtocolHandler ph3 = 947cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("mailto", GURL("http://other.com/%s")); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph1.url().GetOrigin() == ph2.url().GetOrigin(), 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph1.IsSameOrigin(ph2)); 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph1.url().GetOrigin() == ph2.url().GetOrigin(), 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph2.IsSameOrigin(ph1)); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph2.url().GetOrigin() == ph3.url().GetOrigin(), 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph2.IsSameOrigin(ph3)); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ph3.url().GetOrigin() == ph2.url().GetOrigin(), 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph3.IsSameOrigin(ph2)); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, MAYBE_TestInstallDefaultHandler) { 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecreateRegistry(false); 960cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) registry()->AddPredefinedHandler( 961cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateProtocolHandler("test", GURL("http://test.com/%s"))); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->InitProtocolSettings(); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> protocols; 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry()->GetRegisteredProtocols(&protocols); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(static_cast<size_t>(1), protocols.size()); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 96746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 96846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define URL_p1u1 "http://p1u1.com/%s" 96946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define URL_p1u2 "http://p1u2.com/%s" 97046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define URL_p1u3 "http://p1u3.com/%s" 97146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define URL_p2u1 "http://p2u1.com/%s" 97246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define URL_p2u2 "http://p2u2.com/%s" 97346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define URL_p3u1 "http://p3u1.com/%s" 97446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 97546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestPrefPolicyOverlapRegister) { 97646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ListValue handlers_registered_by_pref; 97746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ListValue handlers_registered_by_policy; 97846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 97946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_registered_by_pref.Append( 98046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetProtocolHandlerValueWithDefault("p1", URL_p1u2, true)); 98146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_registered_by_pref.Append( 98246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetProtocolHandlerValueWithDefault("p1", URL_p1u1, true)); 98346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_registered_by_pref.Append( 98446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetProtocolHandlerValueWithDefault("p1", URL_p1u2, false)); 98546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 98646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_registered_by_policy.Append( 98746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetProtocolHandlerValueWithDefault("p1", URL_p1u1, false)); 98846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_registered_by_policy.Append( 98946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetProtocolHandlerValueWithDefault("p3", URL_p3u1, true)); 99046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 99146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile()->GetPrefs()->Set(prefs::kRegisteredProtocolHandlers, 99246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_registered_by_pref); 99346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile()->GetPrefs()->Set(prefs::kPolicyRegisteredProtocolHandlers, 99446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_registered_by_policy); 99546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->InitProtocolSettings(); 99646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 99746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Duplicate p1u2 eliminated in memory but not yet saved in pref 99846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p1u1 = CreateProtocolHandler("p1", GURL(URL_p1u1)); 99946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p1u2 = CreateProtocolHandler("p1", GURL(URL_p1u2)); 100046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefHandlerCount(), 3); 100146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryHandlerCount(), 3); 100246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(p1u1)); 100346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(p1u2)); 100446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 100546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p2u1 = CreateProtocolHandler("p2", GURL(URL_p2u1)); 100646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->OnDenyRegisterProtocolHandler(p2u1); 100746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 100846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Duplicate p1u2 saved in pref and a new handler added to pref and memory 100946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefHandlerCount(), 3); 101046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryHandlerCount(), 4); 101146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(p2u1)); 101246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 101346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveHandler(p1u1); 101446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 101546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p1u1 removed from user pref but not from memory due to policy. 101646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefHandlerCount(), 2); 101746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryHandlerCount(), 4); 101846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(p1u1)); 101946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 102046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p3u1 = CreateProtocolHandler("p3", GURL(URL_p3u1)); 102146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveHandler(p3u1); 102246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 102346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p3u1 not removed from memory due to policy and it was never in pref. 102446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefHandlerCount(), 2); 102546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryHandlerCount(), 4); 102646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(p3u1)); 102746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 102846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveHandler(p1u2); 102946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 103046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p1u2 removed from user pref and memory. 103146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefHandlerCount(), 1); 103246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryHandlerCount(), 3); 103346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(p1u1)); 103446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 103546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p1u3 = CreateProtocolHandler("p1", GURL(URL_p1u3)); 103646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->OnAcceptRegisterProtocolHandler(p1u3); 103746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 103846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p1u3 added to pref and memory. 103946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefHandlerCount(), 2); 104046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryHandlerCount(), 4); 104146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(p1u1)); 104246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(p1u3)); 104346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 104446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveHandler(p1u3); 104546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 104646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p1u3 the default handler for p1 removed from user pref and memory. 104746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefHandlerCount(), 1); 104846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryHandlerCount(), 3); 104946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(p1u3)); 105046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(p1u1)); 105146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(registry()->IsDefault(p3u1)); 105246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_FALSE(registry()->IsDefault(p2u1)); 105346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 105446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 105546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ProtocolHandlerRegistryTest, TestPrefPolicyOverlapIgnore) { 105646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ListValue handlers_ignored_by_pref; 105746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ListValue handlers_ignored_by_policy; 105846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 105946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_pref.Append(GetProtocolHandlerValue("p1", URL_p1u1)); 106046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_pref.Append(GetProtocolHandlerValue("p1", URL_p1u2)); 106146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_pref.Append(GetProtocolHandlerValue("p1", URL_p1u2)); 106246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_pref.Append(GetProtocolHandlerValue("p3", URL_p3u1)); 106346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 106446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_policy.Append(GetProtocolHandlerValue("p1", URL_p1u2)); 106546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_policy.Append(GetProtocolHandlerValue("p1", URL_p1u3)); 106646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_policy.Append(GetProtocolHandlerValue("p2", URL_p2u1)); 106746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 106846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile()->GetPrefs()->Set(prefs::kIgnoredProtocolHandlers, 106946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_pref); 107046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) profile()->GetPrefs()->Set(prefs::kPolicyIgnoredProtocolHandlers, 107146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) handlers_ignored_by_policy); 107246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->InitProtocolSettings(); 107346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 107446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Duplicate p1u2 eliminated in memory but not yet saved in pref 107546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 4); 107646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 5); 107746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 107846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p2u2 = CreateProtocolHandler("p2", GURL(URL_p2u2)); 107946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->OnIgnoreRegisterProtocolHandler(p2u2); 108046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 108146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Duplicate p1u2 eliminated in pref, p2u2 added to pref and memory. 108246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 4); 108346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 6); 108446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 108546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p2u1 = CreateProtocolHandler("p2", GURL(URL_p2u1)); 108646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveIgnoredHandler(p2u1); 108746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 108846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p2u1 installed by policy so cant be removed. 108946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 4); 109046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 6); 109146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 109246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p1u2 = CreateProtocolHandler("p1", GURL(URL_p1u2)); 109346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveIgnoredHandler(p1u2); 109446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 109546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p1u2 installed by policy and pref so it is removed from pref and not from 109646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // memory. 109746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 3); 109846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 6); 109946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 110046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ProtocolHandler p1u1 = CreateProtocolHandler("p1", GURL(URL_p1u1)); 110146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveIgnoredHandler(p1u1); 110246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 110346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p1u1 installed by pref so it is removed from pref and memory. 110446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 2); 110546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 5); 110646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 110746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveIgnoredHandler(p2u2); 110846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 110946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p2u2 installed by user so it is removed from pref and memory. 111046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 1); 111146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 4); 111246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 111346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->OnIgnoreRegisterProtocolHandler(p2u1); 111446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 111546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p2u1 installed by user but it is already installed by policy, so it is 111646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // added to pref. 111746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 2); 111846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 4); 111946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 112046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry()->RemoveIgnoredHandler(p2u1); 112146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 112246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // p2u1 installed by user and policy, so it is removed from pref alone. 112346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InPrefIgnoredHandlerCount(), 1); 112446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(InMemoryIgnoredHandlerCount(), 4); 112546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 1126