1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/domain_reliability/service.h" 6 7 #include "base/bind.h" 8 #include "base/callback.h" 9 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/single_thread_task_runner.h" 11 #include "base/task_runner_util.h" 12 #include "components/domain_reliability/monitor.h" 13 #include "net/url_request/url_request_context_getter.h" 14 15 namespace domain_reliability { 16 17 namespace { 18 19 scoped_ptr<base::Value> GetWebUIDataOnNetworkTaskRunner( 20 base::WeakPtr<DomainReliabilityMonitor> monitor) { 21 if (!monitor) { 22 base::DictionaryValue* dict = new base::DictionaryValue(); 23 dict->SetString("error", "no_monitor"); 24 return scoped_ptr<base::Value>(dict); 25 } 26 27 return monitor->GetWebUIData(); 28 } 29 30 } // namespace 31 32 class DomainReliabilityServiceImpl : public DomainReliabilityService { 33 public: 34 explicit DomainReliabilityServiceImpl( 35 const std::string& upload_reporter_string) 36 : upload_reporter_string_(upload_reporter_string) {} 37 38 virtual ~DomainReliabilityServiceImpl() {} 39 40 // DomainReliabilityService implementation: 41 42 virtual scoped_ptr<DomainReliabilityMonitor> CreateMonitor( 43 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner) 44 OVERRIDE { 45 DCHECK(!network_task_runner_.get()); 46 47 scoped_ptr<DomainReliabilityMonitor> monitor( 48 new DomainReliabilityMonitor(upload_reporter_string_, 49 base::MessageLoopProxy::current(), 50 network_task_runner)); 51 52 monitor_ = monitor->MakeWeakPtr(); 53 network_task_runner_ = network_task_runner; 54 55 return monitor.Pass(); 56 } 57 58 virtual void ClearBrowsingData(DomainReliabilityClearMode clear_mode, 59 const base::Closure& callback) OVERRIDE { 60 DCHECK(network_task_runner_.get()); 61 62 network_task_runner_->PostTaskAndReply( 63 FROM_HERE, 64 base::Bind(&DomainReliabilityMonitor::ClearBrowsingData, 65 monitor_, 66 clear_mode), 67 callback); 68 } 69 70 virtual void GetWebUIData( 71 const base::Callback<void(scoped_ptr<base::Value>)>& callback) 72 const OVERRIDE { 73 DCHECK(network_task_runner_.get()); 74 75 PostTaskAndReplyWithResult( 76 network_task_runner_.get(), 77 FROM_HERE, 78 base::Bind(&GetWebUIDataOnNetworkTaskRunner, monitor_), 79 callback); 80 } 81 82 private: 83 std::string upload_reporter_string_; 84 base::WeakPtr<DomainReliabilityMonitor> monitor_; 85 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; 86 }; 87 88 // static 89 DomainReliabilityService* DomainReliabilityService::Create( 90 const std::string& upload_reporter_string) { 91 return new DomainReliabilityServiceImpl(upload_reporter_string); 92 } 93 94 DomainReliabilityService::~DomainReliabilityService() {} 95 96 DomainReliabilityService::DomainReliabilityService() {} 97 98 } // namespace domain_reliability 99