| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/buffered_resource_loader.h" | 5 #include "media/blink/buffered_resource_loader.h" |
| 6 | 6 |
| 7 #include "base/bits.h" | 7 #include "base/bits.h" |
| 8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "content/public/common/url_constants.h" | |
| 13 #include "content/renderer/media/cache_util.h" | |
| 14 #include "media/base/media_log.h" | 12 #include "media/base/media_log.h" |
| 13 #include "media/blink/cache_util.h" |
| 15 #include "net/http/http_byte_range.h" | 14 #include "net/http/http_byte_range.h" |
| 16 #include "net/http/http_request_headers.h" | 15 #include "net/http/http_request_headers.h" |
| 17 #include "third_party/WebKit/public/platform/WebString.h" | 16 #include "third_party/WebKit/public/platform/WebString.h" |
| 18 #include "third_party/WebKit/public/platform/WebURLError.h" | 17 #include "third_party/WebKit/public/platform/WebURLError.h" |
| 19 #include "third_party/WebKit/public/platform/WebURLResponse.h" | 18 #include "third_party/WebKit/public/platform/WebURLResponse.h" |
| 20 #include "third_party/WebKit/public/web/WebKit.h" | 19 #include "third_party/WebKit/public/web/WebKit.h" |
| 21 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h" | 20 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h" |
| 22 | 21 |
| 23 using blink::WebFrame; | 22 using blink::WebFrame; |
| 24 using blink::WebString; | 23 using blink::WebString; |
| 25 using blink::WebURLError; | 24 using blink::WebURLError; |
| 26 using blink::WebURLLoader; | 25 using blink::WebURLLoader; |
| 27 using blink::WebURLLoaderOptions; | 26 using blink::WebURLLoaderOptions; |
| 28 using blink::WebURLRequest; | 27 using blink::WebURLRequest; |
| 29 using blink::WebURLResponse; | 28 using blink::WebURLResponse; |
| 30 | 29 |
| 31 namespace content { | 30 namespace media { |
| 32 | 31 |
| 33 static const int kHttpOK = 200; | 32 static const int kHttpOK = 200; |
| 34 static const int kHttpPartialContent = 206; | 33 static const int kHttpPartialContent = 206; |
| 35 | 34 |
| 36 // Define the number of bytes in a megabyte. | 35 // Define the number of bytes in a megabyte. |
| 37 static const int kMegabyte = 1024 * 1024; | 36 static const int kMegabyte = 1024 * 1024; |
| 38 | 37 |
| 39 // Minimum capacity of the buffer in forward or backward direction. | 38 // Minimum capacity of the buffer in forward or backward direction. |
| 40 // | 39 // |
| 41 // 2MB is an arbitrary limit; it just seems to be "good enough" in practice. | 40 // 2MB is an arbitrary limit; it just seems to be "good enough" in practice. |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 } | 95 } |
| 97 | 96 |
| 98 BufferedResourceLoader::BufferedResourceLoader( | 97 BufferedResourceLoader::BufferedResourceLoader( |
| 99 const GURL& url, | 98 const GURL& url, |
| 100 CORSMode cors_mode, | 99 CORSMode cors_mode, |
| 101 int64 first_byte_position, | 100 int64 first_byte_position, |
| 102 int64 last_byte_position, | 101 int64 last_byte_position, |
| 103 DeferStrategy strategy, | 102 DeferStrategy strategy, |
| 104 int bitrate, | 103 int bitrate, |
| 105 float playback_rate, | 104 float playback_rate, |
| 106 media::MediaLog* media_log) | 105 MediaLog* media_log) |
| 107 : buffer_(kMinBufferCapacity, kMinBufferCapacity), | 106 : buffer_(kMinBufferCapacity, kMinBufferCapacity), |
| 108 loader_failed_(false), | 107 loader_failed_(false), |
| 109 defer_strategy_(strategy), | 108 defer_strategy_(strategy), |
| 110 might_be_reused_from_cache_in_future_(true), | 109 might_be_reused_from_cache_in_future_(true), |
| 111 range_supported_(false), | 110 range_supported_(false), |
| 112 saved_forward_capacity_(0), | 111 saved_forward_capacity_(0), |
| 113 url_(url), | 112 url_(url), |
| 114 cors_mode_(cors_mode), | 113 cors_mode_(cors_mode), |
| 115 first_byte_position_(first_byte_position), | 114 first_byte_position_(first_byte_position), |
| 116 last_byte_position_(last_byte_position), | 115 last_byte_position_(last_byte_position), |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 if (start_cb_.is_null()) | 368 if (start_cb_.is_null()) |
| 370 return; | 369 return; |
| 371 | 370 |
| 372 uint32 reasons = GetReasonsForUncacheability(response); | 371 uint32 reasons = GetReasonsForUncacheability(response); |
| 373 might_be_reused_from_cache_in_future_ = reasons == 0; | 372 might_be_reused_from_cache_in_future_ = reasons == 0; |
| 374 UMA_HISTOGRAM_BOOLEAN("Media.CacheUseful", reasons == 0); | 373 UMA_HISTOGRAM_BOOLEAN("Media.CacheUseful", reasons == 0); |
| 375 int shift = 0; | 374 int shift = 0; |
| 376 int max_enum = base::bits::Log2Ceiling(kMaxReason); | 375 int max_enum = base::bits::Log2Ceiling(kMaxReason); |
| 377 while (reasons) { | 376 while (reasons) { |
| 378 DCHECK_LT(shift, max_enum); // Sanity check. | 377 DCHECK_LT(shift, max_enum); // Sanity check. |
| 379 if (reasons & 0x1) | 378 if (reasons & 0x1) { |
| 380 UMA_HISTOGRAM_ENUMERATION("Media.UncacheableReason", shift, max_enum); | 379 UMA_HISTOGRAM_ENUMERATION("Media.UncacheableReason", |
| 380 shift, |
| 381 max_enum); // PRESUBMIT_IGNORE_UMA_MAX |
| 382 } |
| 383 |
| 381 reasons >>= 1; | 384 reasons >>= 1; |
| 382 ++shift; | 385 ++shift; |
| 383 } | 386 } |
| 384 | 387 |
| 385 // Expected content length can be |kPositionNotSpecified|, in that case | 388 // Expected content length can be |kPositionNotSpecified|, in that case |
| 386 // |content_length_| is not specified and this is a streaming response. | 389 // |content_length_| is not specified and this is a streaming response. |
| 387 content_length_ = response.expectedContentLength(); | 390 content_length_ = response.expectedContentLength(); |
| 388 | 391 |
| 389 // We make a strong assumption that when we reach here we have either | 392 // We make a strong assumption that when we reach here we have either |
| 390 // received a response from HTTP/HTTPS protocol or the request was | 393 // received a response from HTTP/HTTPS protocol or the request was |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 } | 780 } |
| 778 | 781 |
| 779 void BufferedResourceLoader::Log() { | 782 void BufferedResourceLoader::Log() { |
| 780 media_log_->AddEvent( | 783 media_log_->AddEvent( |
| 781 media_log_->CreateBufferedExtentsChangedEvent( | 784 media_log_->CreateBufferedExtentsChangedEvent( |
| 782 offset_ - buffer_.backward_bytes(), | 785 offset_ - buffer_.backward_bytes(), |
| 783 offset_, | 786 offset_, |
| 784 offset_ + buffer_.forward_bytes())); | 787 offset_ + buffer_.forward_bytes())); |
| 785 } | 788 } |
| 786 | 789 |
| 787 } // namespace content | 790 } // namespace media |
| OLD | NEW |