Add basic Pepper URLLoader implementation.

R=jam
BUG=47222
TEST=none

Review URL: http://codereview.chromium.org/2861036

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51228 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/webkit/glue/plugins/pepper_url_request_info.cc b/webkit/glue/plugins/pepper_url_request_info.cc
index 0f48a7b5..a95af650 100644
--- a/webkit/glue/plugins/pepper_url_request_info.cc
+++ b/webkit/glue/plugins/pepper_url_request_info.cc
@@ -5,11 +5,16 @@
 #include "webkit/glue/plugins/pepper_url_request_info.h"
 
 #include "base/logging.h"
+#include "googleurl/src/gurl.h"
 #include "third_party/ppapi/c/pp_var.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebURL.h"
+#include "webkit/glue/plugins/pepper_file_ref.h"
 #include "webkit/glue/plugins/pepper_plugin_module.h"
 #include "webkit/glue/plugins/pepper_string.h"
 #include "webkit/glue/plugins/pepper_var.h"
 
+using WebKit::WebString;
+
 namespace pepper {
 
 namespace {
@@ -64,8 +69,19 @@
                       int64_t start_offset,
                       int64_t number_of_bytes,
                       PP_Time expected_last_modified_time) {
-  NOTIMPLEMENTED();  // TODO(darin): Implement me!
-  return false;
+  scoped_refptr<URLRequestInfo> request(
+      Resource::GetAs<URLRequestInfo>(request_id));
+  if (!request.get())
+    return false;
+
+  scoped_refptr<FileRef> file_ref(Resource::GetAs<FileRef>(file_ref_id));
+  if (!file_ref.get())
+    return false;
+
+  return request->AppendFileToBody(file_ref,
+                                   start_offset,
+                                   number_of_bytes,
+                                   expected_last_modified_time);
 }
 
 const PPB_URLRequestInfo ppb_urlrequestinfo = {
@@ -80,6 +96,7 @@
 
 URLRequestInfo::URLRequestInfo(PluginModule* module)
     : Resource(module) {
+  web_request_.initialize();
 }
 
 URLRequestInfo::~URLRequestInfo() {
@@ -98,7 +115,19 @@
 
 bool URLRequestInfo::SetStringProperty(PP_URLRequestProperty property,
                                        const std::string& value) {
-  NOTIMPLEMENTED();  // TODO(darin): Implement me!
+  // TODO(darin): Validate input.  Perhaps at a different layer?
+  switch (property) {
+    case PP_URLRequestProperty_URL:
+      web_request_.setURL(GURL(value));
+      return true;
+    case PP_URLRequestProperty_Method:
+      web_request_.setHTTPMethod(WebString::fromUTF8(value));
+      return true;
+    case PP_URLRequestProperty_Headers:
+      // TODO(darin): Support extra request headers
+      NOTIMPLEMENTED();
+      return false;
+  }
   return false;
 }
 
@@ -107,4 +136,12 @@
   return false;
 }
 
+bool URLRequestInfo::AppendFileToBody(FileRef* file_ref,
+                                      int64_t start_offset,
+                                      int64_t number_of_bytes,
+                                      PP_Time expected_last_modified_time) {
+  NOTIMPLEMENTED();  // TODO(darin): Implement me!
+  return false;
+}
+
 }  // namespace pepper