- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / web_resource / json_asynchronous_unpacker.h
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.
4
5 #ifndef CHROME_BROWSER_WEB_RESOURCE_JSON_ASYNCHRONOUS_UNPACKER_H_
6 #define CHROME_BROWSER_WEB_RESOURCE_JSON_ASYNCHRONOUS_UNPACKER_H_
7
8 #include <string>
9
10 #include "base/values.h"
11
12 // A delegate interface for users of JSONAsynchronousUnpacker.
13 class JSONAsynchronousUnpackerDelegate {
14  public:
15   virtual ~JSONAsynchronousUnpackerDelegate() {}
16
17   // This will be called when the response is parsed properly. |parsed_json|
18   // contains the decoded information.
19   virtual void OnUnpackFinished(const DictionaryValue& parsed_json) = 0;
20
21   // This will be called if there is an error while parsing the data.
22   virtual void OnUnpackError(const std::string& error_message) = 0;
23 };
24
25 // This class coordinates a web resource unpack and parse task which is run
26 // asynchronously.  Results are sent back to the delegate via one of its
27 // OnUnpack<xxx> methods.
28 class JSONAsynchronousUnpacker {
29  public:
30   // Creates a WebResourceServiceUnpacker appropriate for the platform. The
31   // delegate must be kept around until one of the delegate methods is called.
32   // In case the delegate is no longer valid, ClearDelegate() must be called.
33   static JSONAsynchronousUnpacker*
34       Create(JSONAsynchronousUnpackerDelegate* delegate);
35
36   virtual ~JSONAsynchronousUnpacker() {}
37
38   // Start the decoding. The concrete implementation should delete itself after
39   // calling the delegate method.
40   virtual void Start(const std::string& json_data) = 0;
41
42   // If the delegate is going away it needs to inform the unpacker about it.
43   void ClearDelegate() {
44     delegate_ = NULL;
45   };
46
47  protected:
48   explicit JSONAsynchronousUnpacker(JSONAsynchronousUnpackerDelegate* delegate)
49       : delegate_(delegate) {
50   }
51
52   JSONAsynchronousUnpackerDelegate* delegate_;
53 };
54
55 #endif  // CHROME_BROWSER_WEB_RESOURCE_JSON_ASYNCHRONOUS_UNPACKER_H_