Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(463)

Unified Diff: webkit/glue/media/simple_data_source.cc

Issue 8570010: Moving media-related files from webkit/glue/ to webkit/media/. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: minor fixes Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/glue/media/simple_data_source.h ('k') | webkit/glue/media/simple_data_source_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/media/simple_data_source.cc
diff --git a/webkit/glue/media/simple_data_source.cc b/webkit/glue/media/simple_data_source.cc
deleted file mode 100644
index 09736a53230578b3c8eb4b7722868729dc7008f3..0000000000000000000000000000000000000000
--- a/webkit/glue/media/simple_data_source.cc
+++ /dev/null
@@ -1,361 +0,0 @@
-// 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.
-
-#include "webkit/glue/media/simple_data_source.h"
-
-#include "base/bind.h"
-#include "base/message_loop.h"
-#include "base/process_util.h"
-#include "media/base/filter_host.h"
-#include "media/base/media_log.h"
-#include "net/base/data_url.h"
-#include "net/base/load_flags.h"
-#include "net/http/http_request_headers.h"
-#include "net/url_request/url_request_status.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebKitPlatformSupport.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoaderOptions.h"
-#include "webkit/glue/media/web_data_source_factory.h"
-#include "webkit/glue/webkit_glue.h"
-
-using WebKit::WebString;
-using WebKit::WebURLLoaderOptions;
-
-namespace webkit_glue {
-
-static const char kDataScheme[] = "data";
-
-static WebDataSource* NewSimpleDataSource(MessageLoop* render_loop,
- WebKit::WebFrame* frame,
- media::MediaLog* media_log) {
- return new SimpleDataSource(render_loop, frame);
-}
-
-// static
-media::DataSourceFactory* SimpleDataSource::CreateFactory(
- MessageLoop* render_loop,
- WebKit::WebFrame* frame,
- media::MediaLog* media_log,
- const WebDataSourceBuildObserverHack& build_observer) {
- return new WebDataSourceFactory(render_loop, frame, media_log,
- &NewSimpleDataSource, build_observer);
-}
-
-SimpleDataSource::SimpleDataSource(
- MessageLoop* render_loop,
- WebKit::WebFrame* frame)
- : render_loop_(render_loop),
- frame_(frame),
- size_(-1),
- single_origin_(true),
- state_(UNINITIALIZED),
- keep_test_loader_(false) {
- DCHECK(render_loop);
-}
-
-SimpleDataSource::~SimpleDataSource() {
- base::AutoLock auto_lock(lock_);
- DCHECK(state_ == UNINITIALIZED || state_ == STOPPED);
-}
-
-void SimpleDataSource::set_host(media::FilterHost* host) {
- DataSource::set_host(host);
-
- base::AutoLock auto_lock(lock_);
- if (state_ == INITIALIZED) {
- UpdateHostState();
- }
-}
-
-void SimpleDataSource::Stop(const base::Closure& callback) {
- base::AutoLock auto_lock(lock_);
- state_ = STOPPED;
- if (!callback.is_null())
- callback.Run();
-
- // Post a task to the render thread to cancel loading the resource.
- render_loop_->PostTask(FROM_HERE,
- base::Bind(&SimpleDataSource::CancelTask, this));
-}
-
-void SimpleDataSource::Initialize(
- const std::string& url,
- const media::PipelineStatusCB& callback) {
- // Reference to prevent destruction while inside the |initialize_cb_|
- // call. This is a temporary fix to prevent crashes caused by holding the
- // lock and running the destructor.
- scoped_refptr<SimpleDataSource> destruction_guard(this);
- {
- base::AutoLock auto_lock(lock_);
- DCHECK_EQ(state_, UNINITIALIZED);
- DCHECK(!callback.is_null());
- state_ = INITIALIZING;
- initialize_cb_ = callback;
-
- // Validate the URL.
- url_ = GURL(url);
- if (!url_.is_valid() || !IsProtocolSupportedForMedia(url_)) {
- DoneInitialization_Locked(false);
- return;
- }
-
- // Post a task to the render thread to start loading the resource.
- render_loop_->PostTask(FROM_HERE,
- base::Bind(&SimpleDataSource::StartTask, this));
- }
-}
-
-void SimpleDataSource::CancelInitialize() {
- base::AutoLock auto_lock(lock_);
- DCHECK(!initialize_cb_.is_null());
- state_ = STOPPED;
- initialize_cb_.Reset();
-
- // Post a task to the render thread to cancel loading the resource.
- render_loop_->PostTask(FROM_HERE,
- base::Bind(&SimpleDataSource::CancelTask, this));
-}
-
-void SimpleDataSource::Read(int64 position,
- size_t size,
- uint8* data,
- const DataSource::ReadCallback& read_callback) {
- DCHECK_GE(size_, 0);
- if (position >= size_) {
- read_callback.Run(0);
- } else {
- size_t copied = std::min(size, static_cast<size_t>(size_ - position));
- memcpy(data, data_.c_str() + position, copied);
- read_callback.Run(copied);
- }
-}
-
-bool SimpleDataSource::GetSize(int64* size_out) {
- *size_out = size_;
- return true;
-}
-
-bool SimpleDataSource::IsStreaming() {
- return false;
-}
-
-void SimpleDataSource::SetPreload(media::Preload preload) {
-}
-
-void SimpleDataSource::SetBitrate(int bitrate) {
-}
-
-void SimpleDataSource::SetURLLoaderForTest(WebKit::WebURLLoader* mock_loader) {
- url_loader_.reset(mock_loader);
- keep_test_loader_ = true;
-}
-
-void SimpleDataSource::willSendRequest(
- WebKit::WebURLLoader* loader,
- WebKit::WebURLRequest& newRequest,
- const WebKit::WebURLResponse& redirectResponse) {
- DCHECK(MessageLoop::current() == render_loop_);
- base::AutoLock auto_lock(lock_);
-
- // Only allow |single_origin_| if we haven't seen a different origin yet.
- if (single_origin_)
- single_origin_ = url_.GetOrigin() == GURL(newRequest.url()).GetOrigin();
-
- url_ = newRequest.url();
-}
-
-void SimpleDataSource::didSendData(
- WebKit::WebURLLoader* loader,
- unsigned long long bytesSent,
- unsigned long long totalBytesToBeSent) {
- NOTIMPLEMENTED();
-}
-
-void SimpleDataSource::didReceiveResponse(
- WebKit::WebURLLoader* loader,
- const WebKit::WebURLResponse& response) {
- DCHECK(MessageLoop::current() == render_loop_);
- size_ = response.expectedContentLength();
-}
-
-void SimpleDataSource::didDownloadData(
- WebKit::WebURLLoader* loader,
- int dataLength) {
- NOTIMPLEMENTED();
-}
-
-void SimpleDataSource::didReceiveData(
- WebKit::WebURLLoader* loader,
- const char* data,
- int data_length,
- int encoded_data_length) {
- DCHECK(MessageLoop::current() == render_loop_);
- data_.append(data, data_length);
-}
-
-void SimpleDataSource::didReceiveCachedMetadata(
- WebKit::WebURLLoader* loader,
- const char* data,
- int dataLength) {
- NOTIMPLEMENTED();
-}
-
-void SimpleDataSource::didFinishLoading(
- WebKit::WebURLLoader* loader,
- double finishTime) {
- DCHECK(MessageLoop::current() == render_loop_);
- // Reference to prevent destruction while inside the |initialize_cb_|
- // call. This is a temporary fix to prevent crashes caused by holding the
- // lock and running the destructor.
- scoped_refptr<SimpleDataSource> destruction_guard(this);
- {
- base::AutoLock auto_lock(lock_);
- // It's possible this gets called after Stop(), in which case |host_| is no
- // longer valid.
- if (state_ == STOPPED)
- return;
-
- // Otherwise we should be initializing and have created a WebURLLoader.
- DCHECK_EQ(state_, INITIALIZING);
-
- // If we don't get a content length or the request has failed, report it
- // as a network error.
- if (size_ == -1)
- size_ = data_.length();
- DCHECK(static_cast<size_t>(size_) == data_.length());
-
- DoneInitialization_Locked(true);
- }
-}
-
-void SimpleDataSource::didFail(
- WebKit::WebURLLoader* loader,
- const WebKit::WebURLError& error) {
- DCHECK(MessageLoop::current() == render_loop_);
- // Reference to prevent destruction while inside the |initialize_cb_|
- // call. This is a temporary fix to prevent crashes caused by holding the
- // lock and running the destructor.
- scoped_refptr<SimpleDataSource> destruction_guard(this);
- {
- base::AutoLock auto_lock(lock_);
- // It's possible this gets called after Stop(), in which case |host_| is no
- // longer valid.
- if (state_ == STOPPED)
- return;
-
- // Otherwise we should be initializing and have created a WebURLLoader.
- DCHECK_EQ(state_, INITIALIZING);
-
- // If we don't get a content length or the request has failed, report it
- // as a network error.
- if (size_ == -1)
- size_ = data_.length();
- DCHECK(static_cast<size_t>(size_) == data_.length());
-
- DoneInitialization_Locked(false);
- }
-}
-
-bool SimpleDataSource::HasSingleOrigin() {
- DCHECK(MessageLoop::current() == render_loop_);
- return single_origin_;
-}
-
-void SimpleDataSource::Abort() {
- DCHECK(MessageLoop::current() == render_loop_);
- frame_ = NULL;
-}
-
-void SimpleDataSource::StartTask() {
- DCHECK(MessageLoop::current() == render_loop_);
- // Reference to prevent destruction while inside the |initialize_cb_|
- // call. This is a temporary fix to prevent crashes caused by holding the
- // lock and running the destructor.
- scoped_refptr<SimpleDataSource> destruction_guard(this);
- {
- base::AutoLock auto_lock(lock_);
-
- // We may have stopped.
- if (state_ == STOPPED)
- return;
-
- CHECK(frame_);
-
- DCHECK_EQ(state_, INITIALIZING);
-
- if (url_.SchemeIs(kDataScheme)) {
- // If this using data protocol, we just need to decode it.
- std::string mime_type, charset;
- bool success = net::DataURL::Parse(url_, &mime_type, &charset, &data_);
-
- // Don't care about the mime-type just proceed if decoding was successful.
- size_ = data_.length();
- DoneInitialization_Locked(success);
- } else {
- // Prepare the request.
- WebKit::WebURLRequest request(url_);
- request.setTargetType(WebKit::WebURLRequest::TargetIsMedia);
-
- frame_->setReferrerForRequest(request, WebKit::WebURL());
-
- // Disable compression, compression for audio/video doesn't make sense...
- request.setHTTPHeaderField(
- WebString::fromUTF8(net::HttpRequestHeaders::kAcceptEncoding),
- WebString::fromUTF8("identity;q=1, *;q=0"));
-
- // This flag is for unittests as we don't want to reset |url_loader|
- if (!keep_test_loader_) {
- WebURLLoaderOptions options;
- options.allowCredentials = true;
- options.crossOriginRequestPolicy =
- WebURLLoaderOptions::CrossOriginRequestPolicyAllow;
- url_loader_.reset(frame_->createAssociatedURLLoader(options));
- }
-
- // Start the resource loading.
- url_loader_->loadAsynchronously(request, this);
- }
- }
-}
-
-void SimpleDataSource::CancelTask() {
- DCHECK(MessageLoop::current() == render_loop_);
- base::AutoLock auto_lock(lock_);
- DCHECK_EQ(state_, STOPPED);
-
- // Cancel any pending requests.
- if (url_loader_.get()) {
- url_loader_->cancel();
- url_loader_.reset();
- }
-}
-
-void SimpleDataSource::DoneInitialization_Locked(bool success) {
- lock_.AssertAcquired();
- media::PipelineStatus status = media::PIPELINE_ERROR_NETWORK;
- if (success) {
- state_ = INITIALIZED;
-
- UpdateHostState();
- status = media::PIPELINE_OK;
- } else {
- state_ = UNINITIALIZED;
- url_loader_.reset();
- }
-
- initialize_cb_.Run(status);
- initialize_cb_.Reset();
-}
-
-void SimpleDataSource::UpdateHostState() {
- if (host()) {
- host()->SetTotalBytes(size_);
- host()->SetBufferedBytes(size_);
- // If scheme is file or data, say we are loaded.
- host()->SetLoaded(url_.SchemeIsFile() || url_.SchemeIs(kDataScheme));
- }
-}
-
-} // namespace webkit_glue
« no previous file with comments | « webkit/glue/media/simple_data_source.h ('k') | webkit/glue/media/simple_data_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698