12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_WEBSTORE_DATA_FETCHER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_WEBSTORE_DATA_FETCHER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h"
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Value;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLFetcher;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLRequestContextGetter;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebstoreDataFetcherDelegate;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// WebstoreDataFetcher fetches web store data and parses it into a
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// DictionaryValue.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebstoreDataFetcher : public base::SupportsWeakPtr<WebstoreDataFetcher>,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            public net::URLFetcherDelegate {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebstoreDataFetcher(WebstoreDataFetcherDelegate* delegate,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      net::URLRequestContextGetter* request_context,
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      const GURL& referrer_url,
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      const std::string webstore_item_id);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~WebstoreDataFetcher();
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Start();
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void set_max_auto_retries(int max_retries) {
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    max_auto_retries_ = max_retries;
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnJsonParseSuccess(scoped_ptr<base::Value> parsed_json);
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnJsonParseFailure(const std::string& error);
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // net::URLFetcherDelegate overrides:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebstoreDataFetcherDelegate* delegate_;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  net::URLRequestContextGetter* request_context_;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL referrer_url_;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string id_;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // For fetching webstore JSON data.
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<net::URLFetcher> webstore_data_url_fetcher_;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Maximum auto retry times on server 5xx error or ERR_NETWORK_CHANGED.
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Default is 0 which means to use the URLFetcher default behavior.
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int max_auto_retries_;
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebstoreDataFetcher);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_WEBSTORE_DATA_FETCHER_H_
70