190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_COMMON_JSON_RESPONSE_FETCHER_H_ 6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_SEARCH_COMMON_JSON_RESPONSE_FETCHER_H_ 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string> 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/basictypes.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/callback.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/weak_ptr.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class GURL; 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace base { 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class DictionaryValue; 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Value; 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace net { 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class URLFetcher; 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class URLRequestContextGetter; 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace app_list { 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// A class that fetches a JSON formatted response from a server and uses a 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// sandboxed utility process to parse it to a DictionaryValue. 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TODO(rkc): Add the ability to give control of handling http failures to 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// the consumers of this class. 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class JSONResponseFetcher : public net::URLFetcherDelegate { 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Callback to pass back the parsed json dictionary returned from the server. 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Invoked with NULL if there is an error. 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef base::Callback<void(scoped_ptr<base::DictionaryValue>)> Callback; 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) JSONResponseFetcher(const Callback& callback, 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::URLRequestContextGetter* context_getter); 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual ~JSONResponseFetcher(); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Starts to fetch results for the given |query_url|. 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void Start(const GURL& query_url); 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void Stop(); 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private: 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Callbacks for SafeJsonParser. 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnJsonParseSuccess(scoped_ptr<base::Value> parsed_json); 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnJsonParseError(const std::string& error); 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // net::URLFetcherDelegate overrides: 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Callback callback_; 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) net::URLRequestContextGetter* context_getter_; 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<net::URLFetcher> fetcher_; 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::WeakPtrFactory<JSONResponseFetcher> weak_factory_; 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(JSONResponseFetcher); 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace app_list 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_COMMON_JSON_RESPONSE_FETCHER_H_ 68