1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_TIMEZONE_TIMEZONE_PROVIDER_H_ 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define CHROME_BROWSER_CHROMEOS_TIMEZONE_TIMEZONE_PROVIDER_H_ 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/macros.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/ref_counted.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/scoped_ptr.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/scoped_vector.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/weak_ptr.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/threading/thread_checker.h" 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/time/time.h" 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/timezone/timezone_request.h" 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "url/gurl.h" 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace net { 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass URLRequestContextGetter; 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace chromeos { 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct Geoposition; 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// This class implements Google TimeZone API. 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Note: this should probably be a singleton to monitor requests rate. 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// But as it is used only from WizardController, it can be owned by it for now. 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TimeZoneProvider { 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TimeZoneProvider(net::URLRequestContextGetter* url_context_getter, 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const GURL& url); 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~TimeZoneProvider(); 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Initiates new request (See TimeZoneRequest for parameters description.) 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void RequestTimezone(const Geoposition& position, 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool sensor, 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::TimeDelta timeout, 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TimeZoneRequest::TimeZoneResponseCallback callback); 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) friend class TestTimeZoneAPIURLFetcherCallback; 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Deletes request from requests_. 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnTimezoneResponse(TimeZoneRequest* request, 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TimeZoneRequest::TimeZoneResponseCallback callback, 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<TimeZoneResponseData> timezone, 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool server_error); 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<net::URLRequestContextGetter> url_context_getter_; 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const GURL url_; 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Requests in progress. 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TimeZoneProvider owns all requests, so this vector is deleted on destroy. 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ScopedVector<TimeZoneRequest> requests_; 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Creation and destruction should happen on the same thread. 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::ThreadChecker thread_checker_; 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(TimeZoneProvider); 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace chromeos 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_TIMEZONE_TIMEZONE_PROVIDER_H_ 67