Home | History | Annotate | Download | only in common
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef WEBKIT_COMMON_RESOURCE_REQUEST_BODY_H_
      6 #define WEBKIT_COMMON_RESOURCE_REQUEST_BODY_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/memory/ref_counted.h"
     12 #include "base/supports_user_data.h"
     13 #include "url/gurl.h"
     14 #include "webkit/common/data_element.h"
     15 #include "webkit/common/webkit_common_export.h"
     16 
     17 namespace base {
     18 class FilePath;
     19 }
     20 
     21 namespace webkit_glue {
     22 
     23 // A struct used to represent upload data. The data field is populated by
     24 // WebURLLoader from the data given as WebHTTPBody.
     25 class WEBKIT_COMMON_EXPORT ResourceRequestBody
     26     : public base::RefCounted<ResourceRequestBody>,
     27       public base::SupportsUserData {
     28  public:
     29   typedef webkit_common::DataElement Element;
     30 
     31   ResourceRequestBody();
     32 
     33   void AppendBytes(const char* bytes, int bytes_len);
     34   void AppendFileRange(const base::FilePath& file_path,
     35                        uint64 offset, uint64 length,
     36                        const base::Time& expected_modification_time);
     37   void AppendBlob(const GURL& blob_url);
     38   void AppendFileSystemFileRange(const GURL& url, uint64 offset, uint64 length,
     39                                  const base::Time& expected_modification_time);
     40 
     41   const std::vector<Element>* elements() const { return &elements_; }
     42   std::vector<Element>* elements_mutable() { return &elements_; }
     43   void swap_elements(std::vector<Element>* elements) {
     44     elements_.swap(*elements);
     45   }
     46 
     47   // Identifies a particular upload instance, which is used by the cache to
     48   // formulate a cache key.  This value should be unique across browser
     49   // sessions.  A value of 0 is used to indicate an unspecified identifier.
     50   void set_identifier(int64 id) { identifier_ = id; }
     51   int64 identifier() const { return identifier_; }
     52 
     53  private:
     54   friend class base::RefCounted<ResourceRequestBody>;
     55   virtual ~ResourceRequestBody();
     56 
     57   std::vector<Element> elements_;
     58   int64 identifier_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(ResourceRequestBody);
     61 };
     62 
     63 }  // namespace webkit_glue
     64 
     65 #endif  // WEBKIT_COMMON_RESOURCE_REQUEST_BODY_H_
     66