17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_PROFILE_RESETTER_BRANDCODE_CONFIG_FETCHER_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_PROFILE_RESETTER_BRANDCODE_CONFIG_FETCHER_H_
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/basictypes.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/timer/timer.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/url_request/url_fetcher_delegate.h"
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass BrandcodedDefaultSettings;
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass GURL;
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// BrandcodeConfigFetcher fetches and parses the xml containing the brandcoded
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// default settings. Caller should provide a FetchCallback.
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass BrandcodeConfigFetcher : public net::URLFetcherDelegate {
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  typedef base::Callback<void ()> FetchCallback;
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  BrandcodeConfigFetcher(const FetchCallback& callback,
2358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch                         const GURL& url,
2458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch                         const std::string& brandcode);
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual ~BrandcodeConfigFetcher();
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool IsActive() const { return config_fetcher_; }
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<BrandcodedDefaultSettings> GetSettings() {
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return default_settings_.Pass();
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Sets the new callback. The previous one won't be called.
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SetCallback(const FetchCallback& callback);
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // net::URLFetcherDelegate:
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void OnDownloadTimeout();
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Timer that enforces a timeout on the attempt to download the
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // config file.
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::OneShotTimer<BrandcodeConfigFetcher> download_timer_;
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // |fetch_callback_| called when fetching succeeded or failed.
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FetchCallback fetch_callback_;
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Helper to fetch the online config file.
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<net::URLFetcher> config_fetcher_;
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Fetched settings.
537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<BrandcodedDefaultSettings> default_settings_;
547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(BrandcodeConfigFetcher);
567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // CHROME_BROWSER_PROFILE_RESETTER_BRANDCODE_CONFIG_FETCHER_H_
59