diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 19:43:37 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 19:43:37 +0000 |
commit | 5826f3ea7caadda2945b5061b3d757fba9a9e359 (patch) | |
tree | af463753a6a92c90fa45470d9f1cf60d916b44e7 /webkit | |
parent | 584b46b245590ac92ca39ce93bed03d020b44534 (diff) | |
download | chromium_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.h | 2 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_plugin_module.cc | 12 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_resource.h | 6 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_resource_tracker.cc | 27 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_resource_tracker.h | 6 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_loader.cc | 173 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_loader.h | 58 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_request_info.cc | 111 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_request_info.h | 36 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_response_info.cc | 59 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_response_info.h | 31 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_var.cc | 12 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_var.h | 10 | ||||
-rw-r--r-- | webkit/glue/webkit_glue.gypi | 6 |
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', |