1// Copyright 2013 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#ifndef CHROME_BROWSER_PROFILE_RESETTER_BRANDCODE_CONFIG_FETCHER_H_
6#define CHROME_BROWSER_PROFILE_RESETTER_BRANDCODE_CONFIG_FETCHER_H_
7
8#include "base/basictypes.h"
9#include "base/callback.h"
10#include "base/timer/timer.h"
11#include "net/url_request/url_fetcher_delegate.h"
12
13class BrandcodedDefaultSettings;
14class GURL;
15
16// BrandcodeConfigFetcher fetches and parses the xml containing the brandcoded
17// default settings. Caller should provide a FetchCallback.
18class BrandcodeConfigFetcher : public net::URLFetcherDelegate {
19 public:
20  typedef base::Callback<void ()> FetchCallback;
21
22  BrandcodeConfigFetcher(const FetchCallback& callback,
23                         const GURL& url,
24                         const std::string& brandcode);
25  virtual ~BrandcodeConfigFetcher();
26
27  bool IsActive() const { return config_fetcher_; }
28
29  scoped_ptr<BrandcodedDefaultSettings> GetSettings() {
30    return default_settings_.Pass();
31  }
32
33  // Sets the new callback. The previous one won't be called.
34  void SetCallback(const FetchCallback& callback);
35
36 private:
37  // net::URLFetcherDelegate:
38  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
39
40  void OnDownloadTimeout();
41
42  // Timer that enforces a timeout on the attempt to download the
43  // config file.
44  base::OneShotTimer<BrandcodeConfigFetcher> download_timer_;
45
46  // |fetch_callback_| called when fetching succeeded or failed.
47  FetchCallback fetch_callback_;
48
49  // Helper to fetch the online config file.
50  scoped_ptr<net::URLFetcher> config_fetcher_;
51
52  // Fetched settings.
53  scoped_ptr<BrandcodedDefaultSettings> default_settings_;
54
55  DISALLOW_COPY_AND_ASSIGN(BrandcodeConfigFetcher);
56};
57
58#endif  // CHROME_BROWSER_PROFILE_RESETTER_BRANDCODE_CONFIG_FETCHER_H_
59