• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
~JSONAsynchronousUnpackerDelegate()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 
~JSONAsynchronousUnpacker()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.
ClearDelegate()43   void ClearDelegate() {
44     delegate_ = NULL;
45   };
46 
47  protected:
JSONAsynchronousUnpacker(JSONAsynchronousUnpackerDelegate * delegate)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_
56