1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef COMPONENTS_DOMAIN_RELIABILITY_SERVICE_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define COMPONENTS_DOMAIN_RELIABILITY_SERVICE_H_ 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string> 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/callback_forward.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/macros.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/ref_counted.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/single_thread_task_runner.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/domain_reliability/clear_mode.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/domain_reliability/domain_reliability_export.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass PrefService; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace base { 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Value; 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace base 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace net { 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class URLRequestContextGetter; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace net 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace domain_reliability { 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DomainReliabilityMonitor; 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// DomainReliabilityService is a KeyedService that manages a Monitor that lives 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// on another thread (as provided by the URLRequestContextGetter's task runner) 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// and proxies (selected) method calls to it. Destruction of the Monitor (on 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// that thread) is the responsibility of the caller. 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DOMAIN_RELIABILITY_EXPORT DomainReliabilityService 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : public KeyedService { 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Creates a DomainReliabilityService that will contain a Monitor with the 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // given upload reporter string. 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static DomainReliabilityService* Create( 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& upload_reporter_string); 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~DomainReliabilityService(); 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Initializes the Service: given the task runner on which Monitor methods 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // should be called, creates the Monitor and returns it. Can be called at 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // most once, and must be called before any of the below methods can be 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // called. The caller is responsible for destroying the Monitor on the given 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // task runner when it is no longer needed. 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual scoped_ptr<DomainReliabilityMonitor> CreateMonitor( 53ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch scoped_refptr<base::SingleThreadTaskRunner> network_task_runner) = 0; 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Clears browsing data on the associated Monitor. |Init()| must have been 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // called first. 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void ClearBrowsingData(DomainReliabilityClearMode clear_mode, 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::Closure& callback) = 0; 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void GetWebUIData( 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Callback<void(scoped_ptr<base::Value>)>& callback) 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const = 0; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) protected: 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DomainReliabilityService(); 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DomainReliabilityService); 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace domain_reliability 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // COMPONENTS_DOMAIN_RELIABILITY_SERVICE_H_ 74