Home | History | Annotate | Download | only in common
      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_UI_APP_LIST_SEARCH_COMMON_JSON_RESPONSE_FETCHER_H_
      6 #define CHROME_BROWSER_UI_APP_LIST_SEARCH_COMMON_JSON_RESPONSE_FETCHER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/callback.h"
     12 #include "base/memory/scoped_ptr.h"
     13 #include "base/memory/weak_ptr.h"
     14 #include "net/url_request/url_fetcher_delegate.h"
     15 
     16 class GURL;
     17 
     18 namespace base {
     19 class DictionaryValue;
     20 class Value;
     21 }
     22 
     23 namespace net {
     24 class URLFetcher;
     25 class URLRequestContextGetter;
     26 }
     27 
     28 namespace app_list {
     29 
     30 // A class that fetches a JSON formatted response from a server and uses a
     31 // sandboxed utility process to parse it to a DictionaryValue.
     32 // TODO(rkc): Add the ability to give control of handling http failures to
     33 // the consumers of this class.
     34 class JSONResponseFetcher : public net::URLFetcherDelegate {
     35  public:
     36   // Callback to pass back the parsed json dictionary returned from the server.
     37   // Invoked with NULL if there is an error.
     38   typedef base::Callback<void(scoped_ptr<base::DictionaryValue>)> Callback;
     39 
     40   JSONResponseFetcher(const Callback& callback,
     41                       net::URLRequestContextGetter* context_getter);
     42   virtual ~JSONResponseFetcher();
     43 
     44   // Starts to fetch results for the given |query_url|.
     45   void Start(const GURL& query_url);
     46   void Stop();
     47 
     48  private:
     49   // Callbacks for SafeJsonParser.
     50   void OnJsonParseSuccess(scoped_ptr<base::Value> parsed_json);
     51   void OnJsonParseError(const std::string& error);
     52 
     53   // net::URLFetcherDelegate overrides:
     54   virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
     55 
     56   Callback callback_;
     57   net::URLRequestContextGetter* context_getter_;
     58 
     59   scoped_ptr<net::URLFetcher> fetcher_;
     60   base::WeakPtrFactory<JSONResponseFetcher> weak_factory_;
     61 
     62   DISALLOW_COPY_AND_ASSIGN(JSONResponseFetcher);
     63 };
     64 
     65 }  // namespace app_list
     66 
     67 #endif  // CHROME_BROWSER_UI_APP_LIST_SEARCH_COMMON_JSON_RESPONSE_FETCHER_H_
     68