diff options
author | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-22 18:31:42 +0000 |
---|---|---|
committer | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-22 18:31:42 +0000 |
commit | 756fbde6911d40d376680c7ab9b576620f64c108 (patch) | |
tree | db279a9daa90a0842a5eb035ffd6ec796ae851d2 /webkit/child/multipart_response_delegate.h | |
parent | 3b06f2ae871249581d6b4aeb47921f102b638156 (diff) | |
download | chromium_src-756fbde6911d40d376680c7ab9b576620f64c108.zip chromium_src-756fbde6911d40d376680c7ab9b576620f64c108.tar.gz chromium_src-756fbde6911d40d376680c7ab9b576620f64c108.tar.bz2 |
Move webkitplatformsupport_impl and related from glue to child
Picking up Ananta's change.
Move the webkitplatformsupport_impl.cc/.h files out of webkit\glue to
webkit\child.
This requires moving the following files out of webkit\glue to webkit\child:
1. weburlloader_impl.cc/.h
2. weburlrequest_extradata_impl.cc/.h
3. websocketstreamhandle_impl.cc/.h
4. weburlresponse_extradata_impl.cc/.h
5. websocketstreamhandle_delegate.h
6. ftp_directory_listing_response_delegate.cc/.h
7. multipart_response_delegate.cc/.h
8. multipart_response_delegate_unittest.cc
9. resource_loader_bridge.cc/.h
The following files have been moved to webkit\common:
2. resource_type.cc/.h
Move MemoryUsageKB out of webkit_glue.cc/h to webkit/child/webkit_child_helpers.
I added an include rule to content\common\DEPS to allow including
webkit\child\websocketstreamhandle_delegate.h. This will be removed in a
followup.
TBR=jam@chromium.org, jamesr@chromium.org, jschuh@chromium.org
BUG=237249
Review URL: https://codereview.chromium.org/19673002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212927 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/child/multipart_response_delegate.h')
-rw-r--r-- | webkit/child/multipart_response_delegate.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/webkit/child/multipart_response_delegate.h b/webkit/child/multipart_response_delegate.h new file mode 100644 index 0000000..f85c1cf --- /dev/null +++ b/webkit/child/multipart_response_delegate.h @@ -0,0 +1,153 @@ +// Copyright (c) 2011 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. +// +// A delegate class of WebURLLoaderImpl that handles multipart/x-mixed-replace +// data. We special case multipart/x-mixed-replace because WebCore expects a +// separate didReceiveResponse for each new message part. +// +// Most of the logic and edge case handling are based on the Mozilla's +// implementation in netwerk/streamconv/converters/nsMultiMixedConv.cpp. +// This seems like a derivative work, so here's the original license: + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef WEBKIT_CHILD_MULTIPART_RESPONSE_DELEGATE_H_ +#define WEBKIT_CHILD_MULTIPART_RESPONSE_DELEGATE_H_ + +#include <string> + +#include "base/basictypes.h" +#include "third_party/WebKit/public/platform/WebURLResponse.h" +#include "webkit/child/webkit_child_export.h" + +namespace WebKit { +class WebURLLoader; +class WebURLLoaderClient; +} + +namespace webkit_glue { + +// Used by unit tests to access private members. +class MultipartResponseDelegateTester; + +class WEBKIT_CHILD_EXPORT MultipartResponseDelegate { + public: + MultipartResponseDelegate(WebKit::WebURLLoaderClient* client, + WebKit::WebURLLoader* loader, + const WebKit::WebURLResponse& response, + const std::string& boundary); + + // Passed through from ResourceHandleInternal + void OnReceivedData(const char* data, int data_len, int encoded_data_length); + void OnCompletedRequest(); + + // The request has been canceled, so stop making calls to the client. + void Cancel() { + client_ = NULL; + loader_ = NULL; + } + + // Returns the multi part boundary string from the Content-type header + // in the response. + // Returns true on success. + static bool ReadMultipartBoundary(const WebKit::WebURLResponse& response, + std::string* multipart_boundary); + + // Returns the lower and higher content ranges from an individual multipart + // in a multipart response. + // Returns true on success. + static bool ReadContentRanges( + const WebKit::WebURLResponse& response, + int64* content_range_lower_bound, + int64* content_range_upper_bound, + int64* content_range_instance_size); + + private: + friend class MultipartResponseDelegateTester; // For unittests. + + // Pointers to the client and associated loader so we can make callbacks as + // we parse pieces of data. + WebKit::WebURLLoaderClient* client_; + WebKit::WebURLLoader* loader_; + + // The original resource response for this request. We use this as a + // starting point for each parts response. + WebKit::WebURLResponse original_response_; + + // Checks to see if data[pos] character is a line break; handles crlf, lflf, + // lf, or cr. Returns the number of characters to skip over (0, 1 or 2). + int PushOverLine(const std::string& data, size_t pos); + + // Tries to parse http headers from the start of data_. Returns true if it + // succeeds and sends a didReceiveResponse to m_client. Returns false if + // the header is incomplete (in which case we just wait for more data). + bool ParseHeaders(); + + // Find the next boundary in data_. Returns std::string::npos if there's no + // full token. + size_t FindBoundary(); + + // Transferred data size accumulated between client callbacks. + int encoded_data_length_; + + // A temporary buffer to hold data between reads for multipart data that + // gets split in the middle of a header. + std::string data_; + + // Multipart boundary token + std::string boundary_; + + // true until we get our first on received data call + bool first_received_data_; + + // true if we're truncated in the middle of a header + bool processing_headers_; + + // true when we're done sending information. At that point, we stop + // processing AddData requests. + bool stop_sending_; + + // true after we've sent our first response to the WebURLLoaderClient. + bool has_sent_first_response_; + + DISALLOW_COPY_AND_ASSIGN(MultipartResponseDelegate); +}; + +} // namespace webkit_glue + +#endif // WEBKIT_CHILD_MULTIPART_RESPONSE_DELEGATE_H_ |