summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-24 19:43:37 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-24 19:43:37 +0000
commit5826f3ea7caadda2945b5061b3d757fba9a9e359 (patch)
treeaf463753a6a92c90fa45470d9f1cf60d916b44e7 /webkit
parent584b46b245590ac92ca39ce93bed03d020b44534 (diff)
downloadchromium_src-5826f3ea7caadda2945b5061b3d757fba9a9e359.zip
chromium_src-5826f3ea7caadda2945b5061b3d757fba9a9e359.tar.gz
chromium_src-5826f3ea7caadda2945b5061b3d757fba9a9e359.tar.bz2
Boilerplate implementation of the Pepper URL Loader API.
R=brettw BUG=47222 TEST=none Review URL: http://codereview.chromium.org/2859023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50756 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/glue/plugins/pepper_image_data.h2
-rw-r--r--webkit/glue/plugins/pepper_plugin_module.cc12
-rw-r--r--webkit/glue/plugins/pepper_resource.h6
-rw-r--r--webkit/glue/plugins/pepper_resource_tracker.cc27
-rw-r--r--webkit/glue/plugins/pepper_resource_tracker.h6
-rw-r--r--webkit/glue/plugins/pepper_url_loader.cc173
-rw-r--r--webkit/glue/plugins/pepper_url_loader.h58
-rw-r--r--webkit/glue/plugins/pepper_url_request_info.cc111
-rw-r--r--webkit/glue/plugins/pepper_url_request_info.h36
-rw-r--r--webkit/glue/plugins/pepper_url_response_info.cc59
-rw-r--r--webkit/glue/plugins/pepper_url_response_info.h31
-rw-r--r--webkit/glue/plugins/pepper_var.cc12
-rw-r--r--webkit/glue/plugins/pepper_var.h10
-rw-r--r--webkit/glue/webkit_glue.gypi6
14 files changed, 540 insertions, 9 deletions
diff --git a/webkit/glue/plugins/pepper_image_data.h b/webkit/glue/plugins/pepper_image_data.h
index 8aa792d..7652b80 100644
--- a/webkit/glue/plugins/pepper_image_data.h
+++ b/webkit/glue/plugins/pepper_image_data.h
@@ -19,8 +19,6 @@ class SkBitmap;
namespace pepper {
-class PluginInstance;
-
class ImageData : public Resource {
public:
explicit ImageData(PluginModule* module);
diff --git a/webkit/glue/plugins/pepper_plugin_module.cc b/webkit/glue/plugins/pepper_plugin_module.cc
index 22a9eb2..10ed52e 100644
--- a/webkit/glue/plugins/pepper_plugin_module.cc
+++ b/webkit/glue/plugins/pepper_plugin_module.cc
@@ -18,6 +18,9 @@
#include "third_party/ppapi/c/ppb_image_data.h"
#include "third_party/ppapi/c/ppb_instance.h"
#include "third_party/ppapi/c/ppb_testing.h"
+#include "third_party/ppapi/c/ppb_url_loader.h"
+#include "third_party/ppapi/c/ppb_url_request_info.h"
+#include "third_party/ppapi/c/ppb_url_response_info.h"
#include "third_party/ppapi/c/ppb_var.h"
#include "third_party/ppapi/c/ppp.h"
#include "third_party/ppapi/c/ppp_instance.h"
@@ -29,6 +32,9 @@
#include "webkit/glue/plugins/pepper_image_data.h"
#include "webkit/glue/plugins/pepper_plugin_instance.h"
#include "webkit/glue/plugins/pepper_resource_tracker.h"
+#include "webkit/glue/plugins/pepper_url_loader.h"
+#include "webkit/glue/plugins/pepper_url_request_info.h"
+#include "webkit/glue/plugins/pepper_url_response_info.h"
#include "webkit/glue/plugins/pepper_var.h"
typedef bool (*PPP_InitializeModuleFunc)(PP_Module, PPB_GetInterface);
@@ -143,6 +149,12 @@ const void* GetInterface(const char* name) {
return ImageData::GetInterface();
if (strcmp(name, PPB_DEVICECONTEXT2D_INTERFACE) == 0)
return DeviceContext2D::GetInterface();
+ if (strcmp(name, PPB_URLLOADER_INTERFACE) == 0)
+ return URLLoader::GetInterface();
+ if (strcmp(name, PPB_URLREQUESTINFO_INTERFACE) == 0)
+ return URLRequestInfo::GetInterface();
+ if (strcmp(name, PPB_URLRESPONSEINFO_INTERFACE) == 0)
+ return URLResponseInfo::GetInterface();
if (strcmp(name, PPB_BUFFER_INTERFACE) == 0)
return Buffer::GetInterface();
diff --git a/webkit/glue/plugins/pepper_resource.h b/webkit/glue/plugins/pepper_resource.h
index 6cc880f..dc8de11 100644
--- a/webkit/glue/plugins/pepper_resource.h
+++ b/webkit/glue/plugins/pepper_resource.h
@@ -15,6 +15,9 @@ class Buffer;
class DeviceContext2D;
class ImageData;
class PluginModule;
+class URLLoader;
+class URLRequestInfo;
+class URLResponseInfo;
class Resource : public base::RefCountedThreadSafe<Resource> {
public:
@@ -29,6 +32,9 @@ class Resource : public base::RefCountedThreadSafe<Resource> {
// NULL if the resource does not match the specified type.
virtual DeviceContext2D* AsDeviceContext2D() { return NULL; }
virtual ImageData* AsImageData() { return NULL; }
+ virtual URLLoader* AsURLLoader() { return NULL; }
+ virtual URLRequestInfo* AsURLRequestInfo() { return NULL; }
+ virtual URLResponseInfo* AsURLResponseInfo() { return NULL; }
virtual Buffer* AsBuffer() { return NULL; }
private:
diff --git a/webkit/glue/plugins/pepper_resource_tracker.cc b/webkit/glue/plugins/pepper_resource_tracker.cc
index 335ec29..597d3fb 100644
--- a/webkit/glue/plugins/pepper_resource_tracker.cc
+++ b/webkit/glue/plugins/pepper_resource_tracker.cc
@@ -12,6 +12,9 @@
#include "webkit/glue/plugins/pepper_device_context_2d.h"
#include "webkit/glue/plugins/pepper_image_data.h"
#include "webkit/glue/plugins/pepper_resource.h"
+#include "webkit/glue/plugins/pepper_url_loader.h"
+#include "webkit/glue/plugins/pepper_url_request_info.h"
+#include "webkit/glue/plugins/pepper_url_response_info.h"
namespace pepper {
@@ -66,6 +69,30 @@ scoped_refptr<ImageData> ResourceTracker::GetAsImageData(
return scoped_refptr<ImageData>(resource->AsImageData());
}
+scoped_refptr<URLLoader> ResourceTracker::GetAsURLLoader(
+ PP_Resource res) const {
+ scoped_refptr<Resource> resource = GetResource(res);
+ if (!resource.get())
+ return scoped_refptr<URLLoader>();
+ return scoped_refptr<URLLoader>(resource->AsURLLoader());
+}
+
+scoped_refptr<URLRequestInfo> ResourceTracker::GetAsURLRequestInfo(
+ PP_Resource res) const {
+ scoped_refptr<Resource> resource = GetResource(res);
+ if (!resource.get())
+ return scoped_refptr<URLRequestInfo>();
+ return scoped_refptr<URLRequestInfo>(resource->AsURLRequestInfo());
+}
+
+scoped_refptr<URLResponseInfo> ResourceTracker::GetAsURLResponseInfo(
+ PP_Resource res) const {
+ scoped_refptr<Resource> resource = GetResource(res);
+ if (!resource.get())
+ return scoped_refptr<URLResponseInfo>();
+ return scoped_refptr<URLResponseInfo>(resource->AsURLResponseInfo());
+}
+
scoped_refptr<Buffer> ResourceTracker::GetAsBuffer(
PP_Resource res) const {
scoped_refptr<Resource> resource = GetResource(res);
diff --git a/webkit/glue/plugins/pepper_resource_tracker.h b/webkit/glue/plugins/pepper_resource_tracker.h
index c224d32..6df79c6 100644
--- a/webkit/glue/plugins/pepper_resource_tracker.h
+++ b/webkit/glue/plugins/pepper_resource_tracker.h
@@ -20,6 +20,9 @@ class Buffer;
class DeviceContext2D;
class ImageData;
class Resource;
+class URLLoader;
+class URLRequestInfo;
+class URLResponseInfo;
// This class maintains a global list of all live pepper resources. It allows
// us to check resource ID validity and to map them to a specific module.
@@ -47,6 +50,9 @@ class ResourceTracker {
// resource is invalid or is a different type.
scoped_refptr<DeviceContext2D> GetAsDeviceContext2D(PP_Resource res) const;
scoped_refptr<ImageData> GetAsImageData(PP_Resource res) const;
+ scoped_refptr<URLLoader> GetAsURLLoader(PP_Resource res) const;
+ scoped_refptr<URLRequestInfo> GetAsURLRequestInfo(PP_Resource res) const;
+ scoped_refptr<URLResponseInfo> GetAsURLResponseInfo(PP_Resource res) const;
scoped_refptr<Buffer> GetAsBuffer(PP_Resource res) const;
private:
diff --git a/webkit/glue/plugins/pepper_url_loader.cc b/webkit/glue/plugins/pepper_url_loader.cc
new file mode 100644
index 0000000..26be21d
--- /dev/null
+++ b/webkit/glue/plugins/pepper_url_loader.cc
@@ -0,0 +1,173 @@
+// Copyright (c) 2010 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.
+
+#include "webkit/glue/plugins/pepper_url_loader.h"
+
+#include "base/logging.h"
+#include "third_party/ppapi/c/pp_completion_callback.h"
+#include "third_party/ppapi/c/pp_errors.h"
+#include "third_party/ppapi/c/ppb_url_loader.h"
+#include "webkit/glue/plugins/pepper_plugin_instance.h"
+#include "webkit/glue/plugins/pepper_resource_tracker.h"
+#include "webkit/glue/plugins/pepper_url_request_info.h"
+#include "webkit/glue/plugins/pepper_url_response_info.h"
+
+namespace pepper {
+
+namespace {
+
+PP_Resource Create(PP_Instance instance_id) {
+ PluginInstance* instance = PluginInstance::FromPPInstance(instance_id);
+ if (!instance)
+ return 0;
+
+ URLLoader* loader = new URLLoader(instance);
+ loader->AddRef(); // AddRef for the caller.
+
+ return loader->GetResource();
+}
+
+bool IsURLLoader(PP_Resource resource) {
+ return !!ResourceTracker::Get()->GetAsURLLoader(resource).get();
+}
+
+int32_t Open(PP_Resource loader_id,
+ PP_Resource request_id,
+ PP_CompletionCallback callback) {
+ scoped_refptr<URLLoader> loader(
+ ResourceTracker::Get()->GetAsURLLoader(loader_id));
+ if (!loader.get())
+ return PP_Error_BadResource;
+
+ scoped_refptr<URLRequestInfo> request(
+ ResourceTracker::Get()->GetAsURLRequestInfo(request_id));
+ if (!request.get())
+ return PP_Error_BadResource;
+
+ return loader->Open(request, callback);
+}
+
+int32_t FollowRedirect(PP_Resource loader_id,
+ PP_CompletionCallback callback) {
+ scoped_refptr<URLLoader> loader(
+ ResourceTracker::Get()->GetAsURLLoader(loader_id));
+ if (!loader.get())
+ return PP_Error_BadResource;
+
+ return loader->FollowRedirect(callback);
+}
+
+bool GetUploadProgress(PP_Resource loader_id,
+ int64_t* bytes_sent,
+ int64_t* total_bytes_to_be_sent) {
+ scoped_refptr<URLLoader> loader(
+ ResourceTracker::Get()->GetAsURLLoader(loader_id));
+ if (!loader.get())
+ return false;
+
+ *bytes_sent = loader->bytes_sent();
+ *total_bytes_to_be_sent = loader->total_bytes_to_be_sent();
+ return true;
+}
+
+bool GetDownloadProgress(PP_Resource loader_id,
+ int64_t* bytes_received,
+ int64_t* total_bytes_to_be_received) {
+ scoped_refptr<URLLoader> loader(
+ ResourceTracker::Get()->GetAsURLLoader(loader_id));
+ if (!loader.get())
+ return false;
+
+ *bytes_received = loader->bytes_received();
+ *total_bytes_to_be_received = loader->total_bytes_to_be_received();
+ return true;
+}
+
+PP_Resource GetResponseInfo(PP_Resource loader_id) {
+ scoped_refptr<URLLoader> loader(
+ ResourceTracker::Get()->GetAsURLLoader(loader_id));
+ if (!loader.get())
+ return 0;
+
+ URLResponseInfo* response_info = loader->response_info();
+ if (!response_info)
+ return 0;
+ response_info->AddRef(); // AddRef for the caller.
+
+ return response_info->GetResource();
+}
+
+int32_t ReadResponseBody(PP_Resource loader_id,
+ char* buffer,
+ int32_t bytes_to_read,
+ PP_CompletionCallback callback) {
+ scoped_refptr<URLLoader> loader(
+ ResourceTracker::Get()->GetAsURLLoader(loader_id));
+ if (!loader.get())
+ return PP_Error_BadResource;
+
+ return loader->ReadResponseBody(buffer, bytes_to_read, callback);
+}
+
+void Close(PP_Resource loader_id) {
+ scoped_refptr<URLLoader> loader(
+ ResourceTracker::Get()->GetAsURLLoader(loader_id));
+ if (!loader.get())
+ return;
+
+ loader->Close();
+}
+
+const PPB_URLLoader ppb_urlloader = {
+ &Create,
+ &IsURLLoader,
+ &Open,
+ &FollowRedirect,
+ &GetUploadProgress,
+ &GetDownloadProgress,
+ &GetResponseInfo,
+ &ReadResponseBody,
+ &Close
+};
+
+} // namespace
+
+URLLoader::URLLoader(PluginInstance* instance)
+ : Resource(instance->module()),
+ bytes_sent_(0),
+ total_bytes_to_be_sent_(0),
+ bytes_received_(0),
+ total_bytes_to_be_received_(0) {
+}
+
+URLLoader::~URLLoader() {
+}
+
+int32_t URLLoader::Open(URLRequestInfo* request,
+ PP_CompletionCallback callback) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me.
+ return PP_Error_Failed;
+}
+
+int32_t URLLoader::FollowRedirect(PP_CompletionCallback callback) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me.
+ return PP_Error_Failed;
+}
+
+int32_t URLLoader::ReadResponseBody(char* buffer, int32_t bytes_to_read,
+ PP_CompletionCallback callback) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me.
+ return PP_Error_Failed;
+}
+
+void URLLoader::Close() {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me.
+}
+
+// static
+const PPB_URLLoader* URLLoader::GetInterface() {
+ return &ppb_urlloader;
+}
+
+} // namespace pepper
diff --git a/webkit/glue/plugins/pepper_url_loader.h b/webkit/glue/plugins/pepper_url_loader.h
new file mode 100644
index 0000000..9ba1d00b
--- /dev/null
+++ b/webkit/glue/plugins/pepper_url_loader.h
@@ -0,0 +1,58 @@
+// Copyright (c) 2010 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 WEBKIT_GLUE_PLUGINS_PEPPER_URL_LOADER_H_
+#define WEBKIT_GLUE_PLUGINS_PEPPER_URL_LOADER_H_
+
+#include "webkit/glue/plugins/pepper_resource.h"
+
+typedef struct _pp_CompletionCallback PP_CompletionCallback;
+typedef struct _ppb_URLLoader PPB_URLLoader;
+
+namespace pepper {
+
+class PluginInstance;
+class URLRequestInfo;
+class URLResponseInfo;
+
+class URLLoader : public Resource {
+ public:
+ explicit URLLoader(PluginInstance* instance);
+ virtual ~URLLoader();
+
+ // Returns a pointer to the interface implementing PPB_URLLoader that is
+ // exposed to the plugin.
+ static const PPB_URLLoader* GetInterface();
+
+ // Resource overrides.
+ URLLoader* AsURLLoader() { return this; }
+
+ // PPB_URLLoader implementation.
+ int32_t Open(URLRequestInfo* request, PP_CompletionCallback callback);
+ int32_t FollowRedirect(PP_CompletionCallback callback);
+ int32_t ReadResponseBody(char* buffer, int32_t bytes_to_read,
+ PP_CompletionCallback callback);
+ void Close();
+
+ URLResponseInfo* response_info() const { return response_info_; }
+
+ // Progress counters:
+ int64_t bytes_sent() const { return bytes_sent_; }
+ int64_t total_bytes_to_be_sent() const { return total_bytes_to_be_sent_; }
+ int64_t bytes_received() const { return bytes_received_; }
+ int64_t total_bytes_to_be_received() const {
+ return total_bytes_to_be_received_;
+ }
+
+ private:
+ scoped_refptr<URLResponseInfo> response_info_;
+ int64_t bytes_sent_;
+ int64_t total_bytes_to_be_sent_;
+ int64_t bytes_received_;
+ int64_t total_bytes_to_be_received_;
+};
+
+} // namespace pepper
+
+#endif // WEBKIT_GLUE_PLUGINS_PEPPER_URL_LOADER_H_
diff --git a/webkit/glue/plugins/pepper_url_request_info.cc b/webkit/glue/plugins/pepper_url_request_info.cc
new file mode 100644
index 0000000..9eef1f9
--- /dev/null
+++ b/webkit/glue/plugins/pepper_url_request_info.cc
@@ -0,0 +1,111 @@
+// Copyright (c) 2010 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.
+
+#include "webkit/glue/plugins/pepper_url_request_info.h"
+
+#include "base/logging.h"
+#include "third_party/ppapi/c/pp_var.h"
+#include "webkit/glue/plugins/pepper_plugin_module.h"
+#include "webkit/glue/plugins/pepper_resource_tracker.h"
+#include "webkit/glue/plugins/pepper_string.h"
+#include "webkit/glue/plugins/pepper_var.h"
+
+namespace pepper {
+
+namespace {
+
+PP_Resource Create(PP_Module module_id) {
+ PluginModule* module = PluginModule::FromPPModule(module_id);
+ if (!module)
+ return 0;
+
+ URLRequestInfo* request = new URLRequestInfo(module);
+ request->AddRef(); // AddRef for the caller.
+
+ return request->GetResource();
+}
+
+bool IsURLRequestInfo(PP_Resource resource) {
+ return !!ResourceTracker::Get()->GetAsURLRequestInfo(resource).get();
+}
+
+bool SetProperty(PP_Resource request_id,
+ PP_URLRequestProperty property,
+ PP_Var var) {
+ scoped_refptr<URLRequestInfo> request(
+ ResourceTracker::Get()->GetAsURLRequestInfo(request_id));
+ if (!request.get())
+ return false;
+
+ if (var.type == PP_VarType_Bool)
+ return request->SetBooleanProperty(property, var.value.as_bool);
+
+ if (var.type == PP_VarType_String)
+ return request->SetStringProperty(property, GetString(var)->value());
+
+ return false;
+}
+
+bool AppendDataToBody(PP_Resource request_id, PP_Var var) {
+ scoped_refptr<URLRequestInfo> request(
+ ResourceTracker::Get()->GetAsURLRequestInfo(request_id));
+ if (!request.get())
+ return false;
+
+ String* data = GetString(var);
+ if (!data)
+ return false;
+
+ return request->AppendDataToBody(data->value());
+}
+
+bool AppendFileToBody(PP_Resource request_id,
+ PP_Resource file_ref_id,
+ int64_t start_offset,
+ int64_t number_of_bytes,
+ PP_Time expected_last_modified_time) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me!
+ return false;
+}
+
+const PPB_URLRequestInfo ppb_urlrequestinfo = {
+ &Create,
+ &IsURLRequestInfo,
+ &SetProperty,
+ &AppendDataToBody,
+ &AppendFileToBody
+};
+
+} // namespace
+
+URLRequestInfo::URLRequestInfo(PluginModule* module)
+ : Resource(module) {
+}
+
+URLRequestInfo::~URLRequestInfo() {
+}
+
+// static
+const PPB_URLRequestInfo* URLRequestInfo::GetInterface() {
+ return &ppb_urlrequestinfo;
+}
+
+bool URLRequestInfo::SetBooleanProperty(PP_URLRequestProperty property,
+ bool value) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me!
+ return false;
+}
+
+bool URLRequestInfo::SetStringProperty(PP_URLRequestProperty property,
+ const std::string& value) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me!
+ return false;
+}
+
+bool URLRequestInfo::AppendDataToBody(const std::string& data) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me!
+ return false;
+}
+
+} // namespace pepper
diff --git a/webkit/glue/plugins/pepper_url_request_info.h b/webkit/glue/plugins/pepper_url_request_info.h
new file mode 100644
index 0000000..4a63cee
--- /dev/null
+++ b/webkit/glue/plugins/pepper_url_request_info.h
@@ -0,0 +1,36 @@
+// Copyright (c) 2010 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 WEBKIT_GLUE_PLUGINS_PEPPER_URL_REQUEST_INFO_H_
+#define WEBKIT_GLUE_PLUGINS_PEPPER_URL_REQUEST_INFO_H_
+
+#include <string>
+
+#include "third_party/ppapi/c/ppb_url_request_info.h"
+#include "webkit/glue/plugins/pepper_resource.h"
+
+namespace pepper {
+
+class URLRequestInfo : public Resource {
+ public:
+ explicit URLRequestInfo(PluginModule* module);
+ virtual ~URLRequestInfo();
+
+ // Returns a pointer to the interface implementing PPB_URLRequestInfo that is
+ // exposed to the plugin.
+ static const PPB_URLRequestInfo* GetInterface();
+
+ // Resource overrides.
+ URLRequestInfo* AsURLRequestInfo() { return this; }
+
+ // PPB_URLRequestInfo implementation.
+ bool SetBooleanProperty(PP_URLRequestProperty property, bool value);
+ bool SetStringProperty(PP_URLRequestProperty property,
+ const std::string& value);
+ bool AppendDataToBody(const std::string& data);
+};
+
+} // namespace pepper
+
+#endif // WEBKIT_GLUE_PLUGINS_PEPPER_URL_REQUEST_INFO_H_
diff --git a/webkit/glue/plugins/pepper_url_response_info.cc b/webkit/glue/plugins/pepper_url_response_info.cc
new file mode 100644
index 0000000..506eb47
--- /dev/null
+++ b/webkit/glue/plugins/pepper_url_response_info.cc
@@ -0,0 +1,59 @@
+// Copyright (c) 2010 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.
+
+#include "webkit/glue/plugins/pepper_url_response_info.h"
+
+#include "base/logging.h"
+#include "third_party/ppapi/c/pp_var.h"
+#include "webkit/glue/plugins/pepper_resource_tracker.h"
+
+namespace pepper {
+
+namespace {
+
+bool IsURLResponseInfo(PP_Resource resource) {
+ return !!ResourceTracker::Get()->GetAsURLResponseInfo(resource).get();
+}
+
+PP_Var GetProperty(PP_Resource response_id,
+ PP_URLResponseProperty property) {
+ scoped_refptr<URLResponseInfo> response(
+ ResourceTracker::Get()->GetAsURLResponseInfo(response_id));
+ if (!response.get())
+ return PP_MakeVoid();
+
+ return response->GetProperty(property);
+}
+
+PP_Resource GetBody(PP_Resource response_id) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me!
+ return 0;
+}
+
+const PPB_URLResponseInfo ppb_urlresponseinfo = {
+ &IsURLResponseInfo,
+ &GetProperty,
+ &GetBody
+};
+
+} // namespace
+
+URLResponseInfo::URLResponseInfo(PluginModule* module)
+ : Resource(module) {
+}
+
+URLResponseInfo::~URLResponseInfo() {
+}
+
+// static
+const PPB_URLResponseInfo* URLResponseInfo::GetInterface() {
+ return &ppb_urlresponseinfo;
+}
+
+PP_Var URLResponseInfo::GetProperty(PP_URLResponseProperty property) {
+ NOTIMPLEMENTED(); // TODO(darin): Implement me!
+ return PP_MakeVoid();
+}
+
+} // namespace pepper
diff --git a/webkit/glue/plugins/pepper_url_response_info.h b/webkit/glue/plugins/pepper_url_response_info.h
new file mode 100644
index 0000000..f4fe5a4
--- /dev/null
+++ b/webkit/glue/plugins/pepper_url_response_info.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2010 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 WEBKIT_GLUE_PLUGINS_PEPPER_URL_RESPONSE_INFO_H_
+#define WEBKIT_GLUE_PLUGINS_PEPPER_URL_RESPONSE_INFO_H_
+
+#include "third_party/ppapi/c/ppb_url_response_info.h"
+#include "webkit/glue/plugins/pepper_resource.h"
+
+namespace pepper {
+
+class URLResponseInfo : public Resource {
+ public:
+ explicit URLResponseInfo(PluginModule* module);
+ virtual ~URLResponseInfo();
+
+ // Returns a pointer to the interface implementing PPB_URLResponseInfo that
+ // is exposed to the plugin.
+ static const PPB_URLResponseInfo* GetInterface();
+
+ // Resource overrides.
+ URLResponseInfo* AsURLResponseInfo() { return this; }
+
+ // PPB_URLResponseInfo implementation.
+ PP_Var GetProperty(PP_URLResponseProperty property);
+};
+
+} // namespace pepper
+
+#endif // WEBKIT_GLUE_PLUGINS_PEPPER_URL_RESPONSE_INFO_H_
diff --git a/webkit/glue/plugins/pepper_var.cc b/webkit/glue/plugins/pepper_var.cc
index 68f4439..a911575 100644
--- a/webkit/glue/plugins/pepper_var.cc
+++ b/webkit/glue/plugins/pepper_var.cc
@@ -73,12 +73,6 @@ String* GetStringUnchecked(PP_Var var) {
return reinterpret_cast<String*>(var.value.as_id);
}
-String* GetString(PP_Var var) {
- if (var.type != PP_VarType_String)
- return NULL;
- return GetStringUnchecked(var);
-}
-
NPObject* GetNPObjectUnchecked(PP_Var var) {
return reinterpret_cast<NPObject*>(var.value.as_id);
}
@@ -845,4 +839,10 @@ NPObject* GetNPObject(PP_Var var) {
return GetNPObjectUnchecked(var);
}
+String* GetString(PP_Var var) {
+ if (var.type != PP_VarType_String)
+ return NULL;
+ return GetStringUnchecked(var);
+}
+
} // namespace pepper
diff --git a/webkit/glue/plugins/pepper_var.h b/webkit/glue/plugins/pepper_var.h
index 2d0c2e4..b78f388 100644
--- a/webkit/glue/plugins/pepper_var.h
+++ b/webkit/glue/plugins/pepper_var.h
@@ -13,6 +13,8 @@ typedef void* NPIdentifier;
namespace pepper {
+class String;
+
// There's no class implementing Var since it could represent a number of
// objects. Instead, we just expose a getter for the interface implemented in
// the .cc file here.
@@ -24,9 +26,15 @@ PP_Var NPObjectToPPVar(NPObject* object);
// Returns the NPObject corresponding to the PP_Var. This pointer has not been
// retained, so you should not call WebBindings::releaseObject unless you first
-// call WebBindings::retainObject.
+// call WebBindings::retainObject. Returns NULL if the PP_Var is not an object
+// type.
NPObject* GetNPObject(PP_Var var);
+// Returns the String corresponding to the PP_Var. This pointer has not been
+// AddRef'd, so you should not call Release! Returns NULL if the PP_Var is not
+// a string type.
+String* GetString(PP_Var var);
+
} // namespace pepper
#endif // WEBKIT_GLUE_PLUGINS_PEPPER_VAR_H_
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index 162c8d9fb..8d712ae 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -177,6 +177,12 @@
'plugins/pepper_resource_tracker.h',
'plugins/pepper_resource.cc',
'plugins/pepper_resource.h',
+ 'plugins/pepper_url_loader.cc',
+ 'plugins/pepper_url_loader.h',
+ 'plugins/pepper_url_request_info.cc',
+ 'plugins/pepper_url_request_info.h',
+ 'plugins/pepper_url_response_info.cc',
+ 'plugins/pepper_url_response_info.h',
'plugins/pepper_var.cc',
'plugins/pepper_var.h',
'plugins/pepper_webplugin_impl.cc',