Index: chrome/browser/chromeos/policy/upload_job_impl.cc |
diff --git a/chrome/browser/chromeos/policy/upload_job_impl.cc b/chrome/browser/chromeos/policy/upload_job_impl.cc |
index f1a4783040c9f6d73659bc901711d06511f9ffdb..4b8c966884869d12fa52ffa649a4f7f6b8546460 100644 |
--- a/chrome/browser/chromeos/policy/upload_job_impl.cc |
+++ b/chrome/browser/chromeos/policy/upload_job_impl.cc |
@@ -13,6 +13,7 @@ |
#include "base/strings/stringprintf.h" |
#include "google_apis/gaia/gaia_constants.h" |
#include "google_apis/gaia/google_service_auth_error.h" |
+#include "net/base/mime_util.h" |
#include "net/http/http_status_code.h" |
#include "net/url_request/url_request_status.h" |
@@ -20,41 +21,18 @@ namespace policy { |
namespace { |
-// Defines the characters that might appear in strings generated by |
-// GenerateRandomString(). |
-const char kAlphaNum[] = |
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |
- |
// Format for bearer tokens in HTTP requests to access OAuth 2.0 protected |
// resources. |
const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; |
-// Prefix added to a randomly generated string when choosing the MIME boundary. |
-const char kMultipartBoundaryPrefix[] = "----**--"; |
- |
-// Postfix added to a randomly generated string when choosing the MIME boundary. |
-const char kMultipartBoundaryPostfix[] = "--**----"; |
- |
// Value the "Content-Type" field will be set to in the POST request. |
const char kUploadContentType[] = "multipart/form-data"; |
-// Number of retries when randomly generating a MIME boundary. |
-const int kMimeBoundaryRetries = 3; |
- |
-// Length of the random string for the MIME boundary. |
-const int kMimeBoundarySize = 32; |
- |
// Number of upload retries. |
const int kMaxRetries = 1; |
-// Generates a random alphanumeric string of length |length|. |
-std::string GenerateRandomString(size_t length) { |
- std::string random; |
- random.reserve(length); |
- for (size_t i = 0; i < length; i++) |
- random.push_back(kAlphaNum[base::RandGenerator(sizeof(kAlphaNum) - 1)]); |
- return random; |
-} |
+// Max size of MIME boundary according to RFC 1341, section 7.2.1. |
+const size_t kMaxMimeBoundarySize = 70; |
bartfab (slow)
2016/01/05 14:20:45
Nit: #include <stddef.h>
Łukasz Anforowicz
2016/01/05 19:16:48
Done.
|
} // namespace |
@@ -147,18 +125,9 @@ size_t DataSegment::GetDataSize() const { |
return data_->size(); |
} |
-std::string UploadJobImpl::RandomMimeBoundaryGenerator::GenerateBoundary( |
- size_t length) const { |
- std::string boundary; |
- boundary.reserve(length); |
- DCHECK_GT(length, sizeof(kMultipartBoundaryPrefix) + |
- sizeof(kMultipartBoundaryPostfix)); |
- const size_t random_part_length = length - sizeof(kMultipartBoundaryPrefix) - |
- sizeof(kMultipartBoundaryPostfix); |
- boundary.append(kMultipartBoundaryPrefix); |
- boundary.append(GenerateRandomString(random_part_length)); |
- boundary.append(kMultipartBoundaryPostfix); |
- return boundary; |
+std::string UploadJobImpl::RandomMimeBoundaryGenerator::GenerateBoundary() |
+ const { |
+ return net::GenerateMimeMultipartBoundary(); |
} |
UploadJobImpl::UploadJobImpl( |
@@ -236,30 +205,8 @@ bool UploadJobImpl::SetUpMultipart() { |
return false; |
} |
- // Generates random MIME boundaries and tests if they appear in any of the |
- // data segments. Tries up to |kMimeBoundaryRetries| times to find a MIME |
- // boundary that does not appear within any data segment. |
- bool found = false; |
- int retry = 0; |
- do { |
- found = true; |
- mime_boundary_.reset(new std::string( |
- boundary_generator_->GenerateBoundary(kMimeBoundarySize))); |
- for (const auto& data_segment : data_segments_) { |
- if (data_segment->CheckIfDataContains(*mime_boundary_)) { |
- found = false; |
- break; |
- } |
- } |
- ++retry; |
- } while (!found && retry <= kMimeBoundaryRetries); |
- |
- // Notify the delegate that content encoding failed. |
- if (!found) { |
- delegate_->OnFailure(CONTENT_ENCODING_ERROR); |
bartfab (slow)
2016/01/05 14:20:45
Nit: Remove CONTENT_ENCODING_ERROR from upload_job
Łukasz Anforowicz
2016/01/05 19:16:48
Done.
|
- mime_boundary_.reset(); |
- return false; |
- } |
+ mime_boundary_.reset( |
+ new std::string(boundary_generator_->GenerateBoundary())); |
// Estimate an upper bound for the total message size to make memory |
// allocation more efficient. It is not an error if this turns out to be too |
@@ -268,7 +215,7 @@ bool UploadJobImpl::SetUpMultipart() { |
for (const auto& data_segment : data_segments_) { |
for (const auto& entry : data_segment->GetHeaderEntries()) |
size += entry.first.size() + entry.second.size(); |
- size += kMimeBoundarySize + data_segment->GetName().size() + |
+ size += kMaxMimeBoundarySize + data_segment->GetName().size() + |
data_segment->GetFilename().size() + data_segment->GetDataSize(); |
// Add some extra space for all the constants and control characters. |
size += 128; |