diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 17:27:35 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 17:27:35 +0000 |
commit | a5d8a66a18de9c292c7497926067fda608aa78ca (patch) | |
tree | 4e60bd9a67501e0cc960656874f4c3b9c7348cc4 /webkit | |
parent | 3ad259a1a51b273f9960c82285fb8a21e70afe41 (diff) | |
download | chromium_src-a5d8a66a18de9c292c7497926067fda608aa78ca.zip chromium_src-a5d8a66a18de9c292c7497926067fda608aa78ca.tar.gz chromium_src-a5d8a66a18de9c292c7497926067fda608aa78ca.tar.bz2 |
Implement some of URLResponseInfo properties.
R=brettw
BUG=47222
TEST=none
Originally reviewed at: http://codereview.chromium.org/3032002
Review URL: http://codereview.chromium.org/3014009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52697 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/glue/plugins/pepper_url_loader.cc | 5 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_response_info.cc | 65 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_response_info.h | 14 |
3 files changed, 78 insertions, 6 deletions
diff --git a/webkit/glue/plugins/pepper_url_loader.cc b/webkit/glue/plugins/pepper_url_loader.cc index c20d8e8..617cbc2 100644 --- a/webkit/glue/plugins/pepper_url_loader.cc +++ b/webkit/glue/plugins/pepper_url_loader.cc @@ -246,7 +246,10 @@ void URLLoader::didSendData(WebURLLoader* loader, void URLLoader::didReceiveResponse(WebURLLoader* loader, const WebURLResponse& response) { - // TODO(darin): Initialize response_info_. + scoped_refptr<URLResponseInfo> response_info(new URLResponseInfo(module())); + if (response_info->Initialize(response)) + response_info_ = response_info; + RunCallback(PP_OK); } diff --git a/webkit/glue/plugins/pepper_url_response_info.cc b/webkit/glue/plugins/pepper_url_response_info.cc index ed92c6c..b5db4bc5 100644 --- a/webkit/glue/plugins/pepper_url_response_info.cc +++ b/webkit/glue/plugins/pepper_url_response_info.cc @@ -6,11 +6,37 @@ #include "base/logging.h" #include "third_party/ppapi/c/pp_var.h" +#include "third_party/WebKit/WebKit/chromium/public/WebHTTPHeaderVisitor.h" +#include "third_party/WebKit/WebKit/chromium/public/WebString.h" +#include "third_party/WebKit/WebKit/chromium/public/WebURL.h" +#include "third_party/WebKit/WebKit/chromium/public/WebURLResponse.h" +#include "webkit/glue/plugins/pepper_file_ref.h" +#include "webkit/glue/plugins/pepper_var.h" + +using WebKit::WebHTTPHeaderVisitor; +using WebKit::WebString; +using WebKit::WebURLResponse; namespace pepper { namespace { +class HeaderFlattener : public WebHTTPHeaderVisitor { + public: + const std::string& buffer() const { return buffer_; } + + virtual void visitHeader(const WebString& name, const WebString& value) { + if (!buffer_.empty()) + buffer_.append("\n"); + buffer_.append(name.utf8()); + buffer_.append(": "); + buffer_.append(value.utf8()); + } + + private: + std::string buffer_; +}; + bool IsURLResponseInfo(PP_Resource resource) { return !!Resource::GetAs<URLResponseInfo>(resource).get(); } @@ -26,8 +52,17 @@ PP_Var GetProperty(PP_Resource response_id, } PP_Resource GetBody(PP_Resource response_id) { - NOTIMPLEMENTED(); // TODO(darin): Implement me! - return 0; + scoped_refptr<URLResponseInfo> response( + Resource::GetAs<URLResponseInfo>(response_id)); + if (!response.get()) + return 0; + + FileRef* body = response->body(); + if (!body) + return 0; + body->AddRef(); // AddRef for the caller. + + return body->GetResource(); } const PPB_URLResponseInfo ppb_urlresponseinfo = { @@ -39,7 +74,8 @@ const PPB_URLResponseInfo ppb_urlresponseinfo = { } // namespace URLResponseInfo::URLResponseInfo(PluginModule* module) - : Resource(module) { + : Resource(module), + status_code_(-1) { } URLResponseInfo::~URLResponseInfo() { @@ -51,8 +87,27 @@ const PPB_URLResponseInfo* URLResponseInfo::GetInterface() { } PP_Var URLResponseInfo::GetProperty(PP_URLResponseProperty property) { - NOTIMPLEMENTED(); // TODO(darin): Implement me! - return PP_MakeVoid(); + switch (property) { + case PP_URLRESPONSEPROPERTY_URL: + return StringToPPVar(url_); + case PP_URLRESPONSEPROPERTY_STATUSCODE: + return PP_MakeInt32(status_code_); + case PP_URLRESPONSEPROPERTY_HEADERS: + return StringToPPVar(headers_); + default: + NOTIMPLEMENTED(); // TODO(darin): Implement me! + return PP_MakeVoid(); + } +} + +bool URLResponseInfo::Initialize(const WebURLResponse& response) { + url_ = response.url().spec(); + status_code_ = response.httpStatusCode(); + + HeaderFlattener flattener; + response.visitHTTPHeaderFields(&flattener); + headers_ = flattener.buffer(); + return true; } } // namespace pepper diff --git a/webkit/glue/plugins/pepper_url_response_info.h b/webkit/glue/plugins/pepper_url_response_info.h index cc931d6..8874919 100644 --- a/webkit/glue/plugins/pepper_url_response_info.h +++ b/webkit/glue/plugins/pepper_url_response_info.h @@ -10,6 +10,10 @@ #include "third_party/ppapi/c/ppb_url_response_info.h" #include "webkit/glue/plugins/pepper_resource.h" +namespace WebKit { +class WebURLResponse; +} + namespace pepper { class URLResponseInfo : public Resource { @@ -26,6 +30,16 @@ class URLResponseInfo : public Resource { // PPB_URLResponseInfo implementation. PP_Var GetProperty(PP_URLResponseProperty property); + + bool Initialize(const WebKit::WebURLResponse& response); + + FileRef* body() { return body_; } + + private: + std::string url_; + std::string headers_; + int32_t status_code_; + scoped_refptr<FileRef> body_; }; } // namespace pepper |