root/chrome/renderer/extensions/pepper_request_proxy.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_RENDERER_EXTENSIONS_PEPPER_REQUEST_PROXY_H_
#define CHROME_RENDERER_EXTENSIONS_PEPPER_REQUEST_PROXY_H_

#include <map>
#include <string>

#include "base/callback.h"

namespace base {
class ListValue;
}

namespace v8 {
class Isolate;
}

namespace extensions {

class ChromeV8Context;

// A proxy that forwards pepper apps API calls through the Javascript API
// bindings.
class PepperRequestProxy {
 public:
  // A callback to be called with the result of an API call. If |success| is
  // true, |response| will contain the response value. Otherwise, |error| will
  // contain the error message.
  typedef base::Callback<void(bool success,
                              const base::ListValue& response,
                              const std::string& error)> ResponseCallback;

  explicit PepperRequestProxy(ChromeV8Context* context);
  ~PepperRequestProxy();

  // Starts an API request. Returns whether the call was successful. On failure,
  // |error| will contain the error message. |callback| will only be called on
  // success.
  bool StartRequest(const ResponseCallback& callback,
                    const std::string& request_name,
                    const base::ListValue& args,
                    std::string* error);

  void OnResponseReceived(int request_id,
                          bool success,
                          const base::ListValue& args,
                          const std::string& error);

 private:
  typedef std::map<int, ResponseCallback> PendingRequestMap;

  // Non-owning pointer.
  ChromeV8Context* context_;
  // Non-owning pointer.
  v8::Isolate* isolate_;
  PendingRequestMap pending_request_map_;
  int next_request_id_;
};

}  // namespace extensions

#endif  // CHROME_RENDERER_EXTENSIONS_PEPPER_REQUEST_PROXY_H_

/* [<][>][^][v][top][bottom][index][help] */