1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALL_HELPER_H_
6 #define CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALL_HELPER_H_
10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "chrome/browser/bitmap_fetcher/bitmap_fetcher_delegate.h"
13 #include "third_party/skia/include/core/SkBitmap.h"
17 class DictionaryValue
;
26 class URLRequestContextGetter
;
29 namespace safe_json_parser
{
33 namespace extensions
{
35 // This is a class to help dealing with webstore-provided data. It manages
36 // sending work to the utility process for parsing manifests and
37 // fetching/decoding icon data. Clients must implement the
38 // WebstoreInstallHelper::Delegate interface to receive the parsed data.
39 class WebstoreInstallHelper
: public base::RefCounted
<WebstoreInstallHelper
>,
40 public chrome::BitmapFetcherDelegate
{
44 enum InstallHelperResultCode
{
50 // Called when we've successfully parsed the manifest and decoded the icon
51 // in the utility process. Ownership of parsed_manifest is transferred.
52 virtual void OnWebstoreParseSuccess(
53 const std::string
& id
,
55 base::DictionaryValue
* parsed_manifest
) = 0;
57 // Called to indicate a parse failure. The |result_code| parameter should
58 // indicate whether the problem was with the manifest or icon.
59 virtual void OnWebstoreParseFailure(
60 const std::string
& id
,
61 InstallHelperResultCode result_code
,
62 const std::string
& error_message
) = 0;
65 virtual ~Delegate() {}
68 // It is legal for |icon_url| to be empty.
69 WebstoreInstallHelper(Delegate
* delegate
,
70 const std::string
& id
,
71 const std::string
& manifest
,
73 net::URLRequestContextGetter
* context_getter
);
77 friend class base::RefCounted
<WebstoreInstallHelper
>;
79 ~WebstoreInstallHelper() override
;
81 // Callbacks for the SafeJsonParser.
82 void OnJSONParseSucceeded(scoped_ptr
<base::Value
> result
);
83 void OnJSONParseFailed(const std::string
& error_message
);
85 // Implementing the chrome::BitmapFetcherDelegate interface.
86 void OnFetchComplete(const GURL
& url
, const SkBitmap
* image
) override
;
88 void ReportResultsIfComplete();
90 // The client who we'll report results back to.
93 // The extension id of the manifest we're parsing.
96 // The manifest to parse.
97 std::string manifest_
;
99 scoped_refptr
<safe_json_parser::SafeJsonParser
> json_parser_
;
101 // If |icon_url_| is non-empty, it needs to be fetched and decoded into an
104 net::URLRequestContextGetter
* context_getter_
; // Only usable on UI thread.
105 scoped_ptr
<chrome::BitmapFetcher
> icon_fetcher_
;
107 // Flags for whether we're done doing icon decoding and manifest parsing.
108 bool icon_decode_complete_
;
109 bool manifest_parse_complete_
;
111 // The results of successful decoding/parsing.
113 scoped_ptr
<base::DictionaryValue
> parsed_manifest_
;
115 // A details string for keeping track of any errors.
118 // A code to distinguish between an error with the icon, and an error with the
120 Delegate::InstallHelperResultCode parse_error_
;
123 } // namespace extensions
125 #endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALL_HELPER_H_