summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-16 17:27:35 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-16 17:27:35 +0000
commita5d8a66a18de9c292c7497926067fda608aa78ca (patch)
tree4e60bd9a67501e0cc960656874f4c3b9c7348cc4 /webkit
parent3ad259a1a51b273f9960c82285fb8a21e70afe41 (diff)
downloadchromium_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.cc5
-rw-r--r--webkit/glue/plugins/pepper_url_response_info.cc65
-rw-r--r--webkit/glue/plugins/pepper_url_response_info.h14
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