Import Cobalt 11.107787
diff --git a/src/cobalt/accessibility/screen_reader_tests.cc b/src/cobalt/accessibility/screen_reader_tests.cc
index 714f243..611d7ed 100644
--- a/src/cobalt/accessibility/screen_reader_tests.cc
+++ b/src/cobalt/accessibility/screen_reader_tests.cc
@@ -173,9 +173,9 @@
base::Bind(&LiveRegionMutationTest::OnError, base::Unretained(this)),
base::Bind(&LiveRegionMutationTest::OnClose, base::Unretained(this)),
base::Closure(), /* window_minimize_callback */
- NULL /* media_module */, &network_module, kDefaultViewportSize,
- kDefaultVideoPixelRatio, &resource_provider, kRefreshRate,
- web_module_options);
+ NULL /* can_play_type_handler */, NULL /* web_media_player_factory */,
+ &network_module, kDefaultViewportSize, kDefaultVideoPixelRatio,
+ &resource_provider, kRefreshRate, web_module_options);
// Wait for the test to quit.
quit_event_.Wait();
diff --git a/src/cobalt/browser/browser_module.cc b/src/cobalt/browser/browser_module.cc
index 4768d1a..3ad8844 100644
--- a/src/cobalt/browser/browser_module.cc
+++ b/src/cobalt/browser/browser_module.cc
@@ -223,6 +223,7 @@
new ResourceProviderArrayBufferAllocator(GetResourceProvider())),
array_buffer_cache_(new dom::ArrayBuffer::Cache(3 * 1024 * 1024)),
#endif // defined(ENABLE_GPU_ARRAY_BUFFER_ALLOCATOR)
+ can_play_type_handler_(media::MediaModule::CreateCanPlayTypeHandler()),
network_module_(&storage_manager_, event_dispatcher_,
options_.network_module_options),
web_module_loaded_(true /* manually_reset */,
@@ -255,6 +256,7 @@
render_timeout_count_(0),
#endif
on_error_retry_count_(0),
+ waiting_for_error_retry_(false),
will_quit_(false),
application_state_(initial_application_state),
splash_screen_cache_(new SplashScreenCache()),
@@ -354,9 +356,7 @@
BrowserModule::~BrowserModule() {
DCHECK_EQ(MessageLoop::current(), self_message_loop_);
- if (on_error_retry_timer_.IsRunning()) {
- on_error_retry_timer_.Stop();
- }
+ on_error_retry_timer_.Stop();
#if SB_HAS(CORE_DUMP_HANDLER_SUPPORT)
SbCoreDumpUnregisterHandler(BrowserModule::CoreDumpHandler, this);
#endif
@@ -384,9 +384,10 @@
return;
}
- if (on_error_retry_timer_.IsRunning()) {
- on_error_retry_timer_.Stop();
- }
+ // Clear error handling once we're told to navigate, either because it's the
+ // retry from the error or something decided we should navigate elsewhere.
+ on_error_retry_timer_.Stop();
+ waiting_for_error_retry_ = false;
// Navigations aren't allowed if the app is suspended. If this is the case,
// simply set the pending navigate url, which will cause the navigation to
@@ -483,8 +484,9 @@
base::Bind(&BrowserModule::OnError, base::Unretained(this)),
base::Bind(&BrowserModule::OnWindowClose, base::Unretained(this)),
base::Bind(&BrowserModule::OnWindowMinimize, base::Unretained(this)),
- media_module_.get(), &network_module_, viewport_size, video_pixel_ratio,
- GetResourceProvider(), kLayoutMaxRefreshFrequencyInHz, options));
+ can_play_type_handler_.get(), media_module_.get(), &network_module_,
+ viewport_size, video_pixel_ratio, GetResourceProvider(),
+ kLayoutMaxRefreshFrequencyInHz, options));
lifecycle_observers_.AddObserver(web_module_.get());
if (!web_module_recreated_callback_.is_null()) {
web_module_recreated_callback_.Run();
@@ -891,6 +893,7 @@
void BrowserModule::OnErrorRetry() {
++on_error_retry_count_;
on_error_retry_time_ = base::TimeTicks::Now();
+ waiting_for_error_retry_ = true;
TryURLHandlers(
GURL("h5vcc://network-failure?retry-url=" + pending_navigate_url_));
}
@@ -1236,7 +1239,7 @@
if (web_module_) {
web_module_->SetCamera3D(input_device_manager_->camera_3d());
- web_module_->SetMediaModule(media_module_.get());
+ web_module_->SetWebMediaPlayerFactory(media_module_.get());
web_module_->SetSize(size, video_pixel_ratio);
}
}
@@ -1335,8 +1338,8 @@
TRACE_EVENT0("cobalt::browser",
"BrowserModule::StartOrResumeInternalPostStateUpdate");
// If there's a navigation that's pending, then attempt to navigate to its
- // specified URL now.
- if (!pending_navigate_url_.empty()) {
+ // specified URL now, unless we're still waiting for an error retry.
+ if (!pending_navigate_url_.empty() && !waiting_for_error_retry_) {
Navigate(GURL(pending_navigate_url_));
}
}
diff --git a/src/cobalt/browser/browser_module.h b/src/cobalt/browser/browser_module.h
index 2ecdbcf..f3cf4a2 100644
--- a/src/cobalt/browser/browser_module.h
+++ b/src/cobalt/browser/browser_module.h
@@ -44,6 +44,8 @@
#include "cobalt/dom/wheel_event_init.h"
#include "cobalt/input/input_device_manager.h"
#include "cobalt/layout/layout_manager.h"
+#include "cobalt/media/can_play_type_handler.h"
+#include "cobalt/media/media_module.h"
#include "cobalt/network/network_module.h"
#include "cobalt/render_tree/resource_provider.h"
#include "cobalt/render_tree/resource_provider_stub.h"
@@ -390,6 +392,9 @@
// Controls all media playback related objects/resources.
scoped_ptr<media::MediaModule> media_module_;
+ // Allows checking if particular media type can be played.
+ scoped_ptr<media::CanPlayTypeHandler> can_play_type_handler_;
+
// Sets up the network component for requesting internet resources.
network::NetworkModule network_module_;
@@ -496,6 +501,11 @@
// when it is not already active.
base::OneShotTimer<BrowserModule> on_error_retry_timer_;
+ // Set when we've posted a system error for network failure until we receive
+ // the next navigation. This is used to suppress retrying the current URL on
+ // resume until the error retry occurs.
+ bool waiting_for_error_retry_;
+
// Set when the application is about to quit. May be set from a thread other
// than the one hosting this object, and read from another.
bool will_quit_;
diff --git a/src/cobalt/browser/debug_console.cc b/src/cobalt/browser/debug_console.cc
index 5c594a1..b660c60 100644
--- a/src/cobalt/browser/debug_console.cc
+++ b/src/cobalt/browser/debug_console.cc
@@ -188,15 +188,15 @@
base::Bind(&CreateDebugHub,
base::Bind(&DebugConsole::GetMode, base::Unretained(this)),
get_debug_server_callback);
- web_module_.reset(
- new WebModule(GURL(kInitialDebugConsoleUrl), initial_application_state,
- render_tree_produced_callback,
- base::Bind(&DebugConsole::OnError, base::Unretained(this)),
- WebModule::CloseCallback(), /* window_close_callback */
- base::Closure(), /* window_minimize_callback */
- &stub_media_module_, network_module, window_dimensions,
- 1.f /*video_pixel_ratio*/, resource_provider,
- layout_refresh_rate, web_module_options));
+ web_module_.reset(new WebModule(
+ GURL(kInitialDebugConsoleUrl), initial_application_state,
+ render_tree_produced_callback,
+ base::Bind(&DebugConsole::OnError, base::Unretained(this)),
+ WebModule::CloseCallback(), /* window_close_callback */
+ base::Closure(), /* window_minimize_callback */
+ NULL /* can_play_type_handler */, NULL /* web_media_player_factory */,
+ network_module, window_dimensions, 1.f /*video_pixel_ratio*/,
+ resource_provider, layout_refresh_rate, web_module_options));
}
DebugConsole::~DebugConsole() {}
diff --git a/src/cobalt/browser/debug_console.h b/src/cobalt/browser/debug_console.h
index 6ed291d..d01403f 100644
--- a/src/cobalt/browser/debug_console.h
+++ b/src/cobalt/browser/debug_console.h
@@ -26,7 +26,6 @@
#include "cobalt/browser/web_module.h"
#include "cobalt/debug/debug_hub.h"
#include "cobalt/dom/keyboard_event_init.h"
-#include "cobalt/media/media_module_stub.h"
#include "googleurl/src/gurl.h"
namespace cobalt {
@@ -86,8 +85,6 @@
LOG(ERROR) << error;
}
- media::MediaModuleStub stub_media_module_;
-
// The current console visibility mode. The mutex is required since the debug
// console's visibility mode may be accessed from both the WebModule thread
// and the DebugConsole's host thread.
diff --git a/src/cobalt/browser/splash_screen.cc b/src/cobalt/browser/splash_screen.cc
index 811baa0..0c4026b 100644
--- a/src/cobalt/browser/splash_screen.cc
+++ b/src/cobalt/browser/splash_screen.cc
@@ -100,9 +100,9 @@
*url_to_pass, initial_application_state, render_tree_produced_callback_,
base::Bind(&OnError), on_window_close,
base::Closure(), // window_minimize_callback
- &stub_media_module_, network_module, window_dimensions,
- 1.f /*video_pixel_ratio*/, resource_provider, layout_refresh_rate,
- web_module_options));
+ NULL /* can_play_type_handler */, NULL /* web_media_player_factory */,
+ network_module, window_dimensions, 1.f /*video_pixel_ratio*/,
+ resource_provider, layout_refresh_rate, web_module_options));
}
SplashScreen::~SplashScreen() {
diff --git a/src/cobalt/browser/splash_screen.h b/src/cobalt/browser/splash_screen.h
index f9315d2..bc21bbe 100644
--- a/src/cobalt/browser/splash_screen.h
+++ b/src/cobalt/browser/splash_screen.h
@@ -23,7 +23,6 @@
#include "cobalt/browser/lifecycle_observer.h"
#include "cobalt/browser/splash_screen_cache.h"
#include "cobalt/browser/web_module.h"
-#include "cobalt/media/media_module_stub.h"
#include "googleurl/src/gurl.h"
namespace cobalt {
@@ -80,8 +79,6 @@
void OnWindowClosed();
void OnWindowClosedInternal();
- media::MediaModuleStub stub_media_module_;
-
WebModule::OnRenderTreeProducedCallback render_tree_produced_callback_;
scoped_ptr<WebModule> web_module_;
diff --git a/src/cobalt/browser/web_module.cc b/src/cobalt/browser/web_module.cc
index 136d23f..0696278 100644
--- a/src/cobalt/browser/web_module.cc
+++ b/src/cobalt/browser/web_module.cc
@@ -183,7 +183,8 @@
void SetSize(math::Size window_dimensions, float video_pixel_ratio);
void SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
- void SetMediaModule(media::MediaModule* media_module);
+ void SetWebMediaPlayerFactory(
+ media::WebMediaPlayerFactory* web_media_player_factory);
void SetImageCacheCapacity(int64_t bytes);
void SetRemoteTypefaceCacheCapacity(int64_t bytes);
void SetJavascriptGcThreshold(int64_t bytes);
@@ -525,8 +526,9 @@
dom_parser_.get(), fetcher_factory_.get(), &resource_provider_,
animated_image_tracker_.get(), image_cache_.get(),
reduced_image_cache_capacity_manager_.get(), remote_typeface_cache_.get(),
- mesh_cache_.get(), local_storage_database_.get(), data.media_module,
- data.media_module, execution_state_.get(), script_runner_.get(),
+ mesh_cache_.get(), local_storage_database_.get(),
+ data.can_play_type_handler, data.web_media_player_factory,
+ execution_state_.get(), script_runner_.get(),
global_environment_->script_value_factory(), media_source_registry_.get(),
web_module_stat_tracker_->dom_stat_tracker(), data.initial_url,
data.network_module->GetUserAgent(),
@@ -556,9 +558,9 @@
DCHECK(window_weak_);
environment_settings_.reset(new dom::DOMSettings(
- kDOMMaxElementDepth, fetcher_factory_.get(), data.network_module,
- data.media_module, window_, media_source_registry_.get(),
- blob_registry_.get(), data.media_module, javascript_engine_.get(),
+ kDOMMaxElementDepth, fetcher_factory_.get(), data.network_module, window_,
+ media_source_registry_.get(), blob_registry_.get(),
+ data.can_play_type_handler, javascript_engine_.get(),
global_environment_.get(), &mutation_observer_task_manager_,
data.options.dom_settings_options));
DCHECK(environment_settings_);
@@ -859,11 +861,9 @@
window_->SetCamera3D(camera_3d);
}
-void WebModule::Impl::SetMediaModule(media::MediaModule* media_module) {
- window_->set_can_play_type_handler(media_module);
- window_->set_web_media_player_factory(media_module);
- environment_settings_->set_media_module(media_module);
- environment_settings_->set_can_play_type_handler(media_module);
+void WebModule::Impl::SetWebMediaPlayerFactory(
+ media::WebMediaPlayerFactory* web_media_player_factory) {
+ window_->set_web_media_player_factory(web_media_player_factory);
}
void WebModule::Impl::SetApplicationState(base::ApplicationState state) {
@@ -1044,16 +1044,18 @@
const OnErrorCallback& error_callback,
const CloseCallback& window_close_callback,
const base::Closure& window_minimize_callback,
- media::MediaModule* media_module, network::NetworkModule* network_module,
- const math::Size& window_dimensions, float video_pixel_ratio,
- render_tree::ResourceProvider* resource_provider, float layout_refresh_rate,
- const Options& options)
+ media::CanPlayTypeHandler* can_play_type_handler,
+ media::WebMediaPlayerFactory* web_media_player_factory,
+ network::NetworkModule* network_module, const math::Size& window_dimensions,
+ float video_pixel_ratio, render_tree::ResourceProvider* resource_provider,
+ float layout_refresh_rate, const Options& options)
: thread_(options.name.c_str()) {
ConstructionData construction_data(
initial_url, initial_application_state, render_tree_produced_callback,
error_callback, window_close_callback, window_minimize_callback,
- media_module, network_module, window_dimensions, video_pixel_ratio,
- resource_provider, kDOMMaxElementDepth, layout_refresh_rate, options);
+ can_play_type_handler, web_media_player_factory, network_module,
+ window_dimensions, video_pixel_ratio, resource_provider,
+ kDOMMaxElementDepth, layout_refresh_rate, options);
// Start the dedicated thread and create the internal implementation
// object on that thread.
@@ -1254,10 +1256,12 @@
base::Unretained(impl_.get()), camera_3d));
}
-void WebModule::SetMediaModule(media::MediaModule* media_module) {
+void WebModule::SetWebMediaPlayerFactory(
+ media::WebMediaPlayerFactory* web_media_player_factory) {
message_loop()->PostTask(
- FROM_HERE, base::Bind(&WebModule::Impl::SetMediaModule,
- base::Unretained(impl_.get()), media_module));
+ FROM_HERE,
+ base::Bind(&WebModule::Impl::SetWebMediaPlayerFactory,
+ base::Unretained(impl_.get()), web_media_player_factory));
}
void WebModule::SetImageCacheCapacity(int64_t bytes) {
diff --git a/src/cobalt/browser/web_module.h b/src/cobalt/browser/web_module.h
index 494e786..e16a184 100644
--- a/src/cobalt/browser/web_module.h
+++ b/src/cobalt/browser/web_module.h
@@ -49,7 +49,8 @@
#include "cobalt/layout/layout_manager.h"
#include "cobalt/loader/fetcher_factory.h"
#include "cobalt/math/size.h"
-#include "cobalt/media/media_module.h"
+#include "cobalt/media/can_play_type_handler.h"
+#include "cobalt/media/web_media_player_factory.h"
#include "cobalt/network/network_module.h"
#include "cobalt/render_tree/resource_provider.h"
#include "cobalt/script/global_environment.h"
@@ -210,7 +211,8 @@
const OnErrorCallback& error_callback,
const CloseCallback& window_close_callback,
const base::Closure& window_minimize_callback,
- media::MediaModule* media_module,
+ media::CanPlayTypeHandler* can_play_type_handler,
+ media::WebMediaPlayerFactory* web_media_player_factory,
network::NetworkModule* network_module,
const math::Size& window_dimensions, float video_pixel_ratio,
render_tree::ResourceProvider* resource_provider,
@@ -263,7 +265,8 @@
void SetSize(const math::Size& window_dimensions, float video_pixel_ratio);
void SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
- void SetMediaModule(media::MediaModule* media_module);
+ void SetWebMediaPlayerFactory(
+ media::WebMediaPlayerFactory* web_media_player_factory);
void SetImageCacheCapacity(int64_t bytes);
void SetRemoteTypefaceCacheCapacity(int64_t bytes);
void SetJavascriptGcThreshold(int64_t bytes);
@@ -291,7 +294,8 @@
const OnErrorCallback& error_callback,
const CloseCallback& window_close_callback,
const base::Closure& window_minimize_callback,
- media::MediaModule* media_module,
+ media::CanPlayTypeHandler* can_play_type_handler,
+ media::WebMediaPlayerFactory* web_media_player_factory,
network::NetworkModule* network_module,
const math::Size& window_dimensions, float video_pixel_ratio,
render_tree::ResourceProvider* resource_provider,
@@ -303,7 +307,8 @@
error_callback(error_callback),
window_close_callback(window_close_callback),
window_minimize_callback(window_minimize_callback),
- media_module(media_module),
+ can_play_type_handler(can_play_type_handler),
+ web_media_player_factory(web_media_player_factory),
network_module(network_module),
window_dimensions(window_dimensions),
video_pixel_ratio(video_pixel_ratio),
@@ -318,7 +323,8 @@
OnErrorCallback error_callback;
const CloseCallback& window_close_callback;
const base::Closure& window_minimize_callback;
- media::MediaModule* media_module;
+ media::CanPlayTypeHandler* can_play_type_handler;
+ media::WebMediaPlayerFactory* web_media_player_factory;
network::NetworkModule* network_module;
math::Size window_dimensions;
float video_pixel_ratio;
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index 237f406..d5f2b2e 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-104700
\ No newline at end of file
+107787
\ No newline at end of file
diff --git a/src/cobalt/dom/custom_event_test.cc b/src/cobalt/dom/custom_event_test.cc
index 5351d97..5c3447b 100644
--- a/src/cobalt/dom/custom_event_test.cc
+++ b/src/cobalt/dom/custom_event_test.cc
@@ -26,7 +26,6 @@
#include "cobalt/dom/window.h"
#include "cobalt/dom_parser/parser.h"
#include "cobalt/loader/fetcher_factory.h"
-#include "cobalt/media/media_module_stub.h"
#include "cobalt/media_session/media_session.h"
#include "cobalt/network/network_module.h"
#include "cobalt/script/global_environment.h"
@@ -59,14 +58,12 @@
dom_parser_(new dom_parser::Parser(mock_error_callback_)),
fetcher_factory_(new loader::FetcherFactory(&network_module_)),
local_storage_database_(NULL),
- stub_media_module_(new media::MediaModuleStub()),
url_("about:blank"),
window_(new Window(
1920, 1080, 1.f, base::kApplicationStateStarted, css_parser_.get(),
dom_parser_.get(), fetcher_factory_.get(), NULL, NULL, NULL, NULL,
- NULL, NULL, &local_storage_database_, stub_media_module_.get(),
- stub_media_module_.get(), NULL, NULL, NULL, NULL, NULL, url_, "",
- "en-US", base::Callback<void(const GURL&)>(),
+ NULL, NULL, &local_storage_database_, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, url_, "", "en-US", base::Callback<void(const GURL&)>(),
base::Bind(&MockErrorCallback::Run,
base::Unretained(&mock_error_callback_)),
NULL, network_bridge::PostSender(),
@@ -96,7 +93,6 @@
network::NetworkModule network_module_;
scoped_ptr<loader::FetcherFactory> fetcher_factory_;
dom::LocalStorageDatabase local_storage_database_;
- scoped_ptr<media::MediaModule> stub_media_module_;
GURL url_;
const scoped_refptr<Window> window_;
};
diff --git a/src/cobalt/dom/dom_settings.cc b/src/cobalt/dom/dom_settings.cc
index 2bdaa40..806b912 100644
--- a/src/cobalt/dom/dom_settings.cc
+++ b/src/cobalt/dom/dom_settings.cc
@@ -22,8 +22,7 @@
DOMSettings::DOMSettings(
const int max_dom_element_depth, loader::FetcherFactory* fetcher_factory,
- network::NetworkModule* network_module, media::MediaModule* media_module,
- const scoped_refptr<Window>& window,
+ network::NetworkModule* network_module, const scoped_refptr<Window>& window,
MediaSourceRegistry* media_source_registry, Blob::Registry* blob_registry,
media::CanPlayTypeHandler* can_play_type_handler,
script::JavaScriptEngine* engine,
@@ -34,7 +33,6 @@
microphone_options_(options.microphone_options),
fetcher_factory_(fetcher_factory),
network_module_(network_module),
- media_module_(media_module),
window_(window),
array_buffer_allocator_(options.array_buffer_allocator),
array_buffer_cache_(options.array_buffer_cache),
diff --git a/src/cobalt/dom/dom_settings.h b/src/cobalt/dom/dom_settings.h
index c6b8895..afa242d 100644
--- a/src/cobalt/dom/dom_settings.h
+++ b/src/cobalt/dom/dom_settings.h
@@ -22,7 +22,6 @@
#include "cobalt/dom/mutation_observer_task_manager.h"
#include "cobalt/dom/url_registry.h"
#include "cobalt/media/can_play_type_handler.h"
-#include "cobalt/media/media_module.h"
#include "cobalt/script/environment_settings.h"
#include "cobalt/speech/microphone.h"
@@ -67,7 +66,6 @@
DOMSettings(const int max_dom_element_depth,
loader::FetcherFactory* fetcher_factory,
network::NetworkModule* network_module,
- media::MediaModule* media_module,
const scoped_refptr<Window>& window,
MediaSourceRegistry* media_source_registry,
Blob::Registry* blob_registry,
@@ -100,10 +98,6 @@
network_module_ = network_module;
}
network::NetworkModule* network_module() const { return network_module_; }
- media::MediaModule* media_module() const { return media_module_; }
- void set_media_module(media::MediaModule* media_module) {
- media_module_ = media_module;
- }
script::JavaScriptEngine* javascript_engine() const {
return javascript_engine_;
}
@@ -116,10 +110,6 @@
media::CanPlayTypeHandler* can_play_type_handler() const {
return can_play_type_handler_;
}
- void set_can_play_type_handler(
- media::CanPlayTypeHandler* can_play_type_handler) {
- can_play_type_handler_ = can_play_type_handler;
- }
MutationObserverTaskManager* mutation_observer_task_manager() const {
return mutation_observer_task_manager_;
}
@@ -133,7 +123,6 @@
const speech::Microphone::Options microphone_options_;
loader::FetcherFactory* fetcher_factory_;
network::NetworkModule* network_module_;
- media::MediaModule* media_module_;
scoped_refptr<Window> window_;
ArrayBuffer::Allocator* array_buffer_allocator_;
ArrayBuffer::Cache* array_buffer_cache_;
diff --git a/src/cobalt/dom/error_event_test.cc b/src/cobalt/dom/error_event_test.cc
index c6c6f76..a115fb8 100644
--- a/src/cobalt/dom/error_event_test.cc
+++ b/src/cobalt/dom/error_event_test.cc
@@ -26,7 +26,6 @@
#include "cobalt/dom/window.h"
#include "cobalt/dom_parser/parser.h"
#include "cobalt/loader/fetcher_factory.h"
-#include "cobalt/media/media_module_stub.h"
#include "cobalt/media_session/media_session.h"
#include "cobalt/network/network_module.h"
#include "cobalt/script/global_environment.h"
@@ -59,14 +58,12 @@
dom_parser_(new dom_parser::Parser(mock_error_callback_)),
fetcher_factory_(new loader::FetcherFactory(&network_module_)),
local_storage_database_(NULL),
- stub_media_module_(new media::MediaModuleStub()),
url_("about:blank"),
window_(new Window(
1920, 1080, 1.f, base::kApplicationStateStarted, css_parser_.get(),
dom_parser_.get(), fetcher_factory_.get(), NULL, NULL, NULL, NULL,
- NULL, NULL, &local_storage_database_, stub_media_module_.get(),
- stub_media_module_.get(), NULL, NULL, NULL, NULL, NULL, url_, "",
- "en-US", base::Callback<void(const GURL&)>(),
+ NULL, NULL, &local_storage_database_, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, url_, "", "en-US", base::Callback<void(const GURL&)>(),
base::Bind(&MockErrorCallback::Run,
base::Unretained(&mock_error_callback_)),
NULL, network_bridge::PostSender(),
@@ -96,7 +93,6 @@
network::NetworkModule network_module_;
scoped_ptr<loader::FetcherFactory> fetcher_factory_;
dom::LocalStorageDatabase local_storage_database_;
- scoped_ptr<media::MediaModule> stub_media_module_;
GURL url_;
const scoped_refptr<Window> window_;
};
diff --git a/src/cobalt/dom/html_element_context.h b/src/cobalt/dom/html_element_context.h
index d7054db..7847423 100644
--- a/src/cobalt/dom/html_element_context.h
+++ b/src/cobalt/dom/html_element_context.h
@@ -77,10 +77,6 @@
media::CanPlayTypeHandler* can_play_type_handler() {
return can_play_type_handler_;
}
- void set_can_play_type_handler(
- media::CanPlayTypeHandler* can_play_type_handler) {
- can_play_type_handler_ = can_play_type_handler;
- }
media::WebMediaPlayerFactory* web_media_player_factory() {
return web_media_player_factory_;
}
diff --git a/src/cobalt/dom/html_media_element.cc b/src/cobalt/dom/html_media_element.cc
index 7f719c0..006be93 100644
--- a/src/cobalt/dom/html_media_element.cc
+++ b/src/cobalt/dom/html_media_element.cc
@@ -207,11 +207,7 @@
std::string HTMLMediaElement::CanPlayType(const std::string& mime_type,
const std::string& key_system) {
- if (!html_element_context()->can_play_type_handler()) {
- DLOG(ERROR) << __FUNCTION__ << "(" << mime_type << ", " << key_system
- << "): Media playback in PRELOADING is not supported.";
- return "";
- }
+ DCHECK(html_element_context()->can_play_type_handler());
#if defined(COBALT_MEDIA_SOURCE_2016)
DLOG_IF(ERROR, !key_system.empty())
diff --git a/src/cobalt/dom/testing/stub_window.h b/src/cobalt/dom/testing/stub_window.h
index 02ac023..10e3e53 100644
--- a/src/cobalt/dom/testing/stub_window.h
+++ b/src/cobalt/dom/testing/stub_window.h
@@ -25,7 +25,6 @@
#include "cobalt/dom/window.h"
#include "cobalt/dom_parser/parser.h"
#include "cobalt/loader/fetcher_factory.h"
-#include "cobalt/media/media_module_stub.h"
#include "cobalt/media_session/media_session.h"
#include "cobalt/network/network_module.h"
#include "cobalt/script/global_environment.h"
@@ -46,7 +45,6 @@
dom_parser_(new dom_parser::Parser(base::Bind(&StubErrorCallback))),
fetcher_factory_(new loader::FetcherFactory(&network_module_)),
local_storage_database_(NULL),
- stub_media_module_(new media::MediaModuleStub()),
url_("about:blank"),
dom_stat_tracker_(new dom::DomStatTracker("StubWindow")) {
engine_ = script::JavaScriptEngine::CreateEngine();
@@ -54,8 +52,7 @@
window_ = new dom::Window(
1920, 1080, 1.f, base::kApplicationStateStarted, css_parser_.get(),
dom_parser_.get(), fetcher_factory_.get(), NULL, NULL, NULL, NULL, NULL,
- NULL, &local_storage_database_, stub_media_module_.get(),
- stub_media_module_.get(), NULL, NULL, NULL, NULL,
+ NULL, &local_storage_database_, NULL, NULL, NULL, NULL, NULL, NULL,
dom_stat_tracker_.get(), url_, "", "en-US",
base::Callback<void(const GURL&)>(), base::Bind(&StubErrorCallback),
NULL, network_bridge::PostSender(),
@@ -82,7 +79,6 @@
network::NetworkModule network_module_;
scoped_ptr<loader::FetcherFactory> fetcher_factory_;
dom::LocalStorageDatabase local_storage_database_;
- scoped_ptr<media::MediaModule> stub_media_module_;
GURL url_;
scoped_ptr<dom::DomStatTracker> dom_stat_tracker_;
script::EnvironmentSettings environment_settings_;
diff --git a/src/cobalt/dom/window.h b/src/cobalt/dom/window.h
index 19ab51d..080aa88 100644
--- a/src/cobalt/dom/window.h
+++ b/src/cobalt/dom/window.h
@@ -304,11 +304,6 @@
void SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
- void set_can_play_type_handler(
- media::CanPlayTypeHandler* can_play_type_handler) {
- html_element_context_->set_can_play_type_handler(can_play_type_handler);
- }
-
void set_web_media_player_factory(
media::WebMediaPlayerFactory* web_media_player_factory) {
html_element_context_->set_web_media_player_factory(
diff --git a/src/cobalt/dom/window_test.cc b/src/cobalt/dom/window_test.cc
index dc7b5e4..f1ca6f4 100644
--- a/src/cobalt/dom/window_test.cc
+++ b/src/cobalt/dom/window_test.cc
@@ -24,7 +24,6 @@
#include "cobalt/dom/screen.h"
#include "cobalt/dom_parser/parser.h"
#include "cobalt/loader/fetcher_factory.h"
-#include "cobalt/media/media_module_stub.h"
#include "cobalt/media_session/media_session.h"
#include "cobalt/network/network_module.h"
#include "cobalt/network_bridge/net_poster.h"
@@ -48,14 +47,12 @@
dom_parser_(new dom_parser::Parser(mock_error_callback_)),
fetcher_factory_(new loader::FetcherFactory(&network_module_)),
local_storage_database_(NULL),
- stub_media_module_(new media::MediaModuleStub()),
url_("about:blank"),
window_(new Window(
1920, 1080, 1.f, base::kApplicationStateStarted, css_parser_.get(),
dom_parser_.get(), fetcher_factory_.get(), NULL, NULL, NULL, NULL,
- NULL, NULL, &local_storage_database_, stub_media_module_.get(),
- stub_media_module_.get(), NULL, NULL, NULL, NULL, NULL, url_, "",
- "en-US", base::Callback<void(const GURL &)>(),
+ NULL, NULL, &local_storage_database_, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, url_, "", "en-US", base::Callback<void(const GURL &)>(),
base::Bind(&MockErrorCallback::Run,
base::Unretained(&mock_error_callback_)),
NULL, network_bridge::PostSender(),
@@ -74,7 +71,6 @@
network::NetworkModule network_module_;
scoped_ptr<loader::FetcherFactory> fetcher_factory_;
dom::LocalStorageDatabase local_storage_database_;
- scoped_ptr<media::MediaModule> stub_media_module_;
GURL url_;
scoped_refptr<Window> window_;
};
diff --git a/src/cobalt/layout_tests/layout_snapshot.cc b/src/cobalt/layout_tests/layout_snapshot.cc
index c7afe79..6818552 100644
--- a/src/cobalt/layout_tests/layout_snapshot.cc
+++ b/src/cobalt/layout_tests/layout_snapshot.cc
@@ -20,7 +20,6 @@
#include "base/run_loop.h"
#include "base/synchronization/waitable_event.h"
#include "cobalt/browser/web_module.h"
-#include "cobalt/media/media_module_stub.h"
#include "cobalt/network/network_module.h"
#include "cobalt/render_tree/resource_provider.h"
@@ -64,10 +63,6 @@
net_options.require_https = false;
network::NetworkModule network_module(net_options);
- // We do not support a media module in this mode.
- scoped_ptr<media::MediaModule> stub_media_module(
- new media::MediaModuleStub());
-
// Use 128M of image cache to minimize the effect of image loading.
const size_t kImageCacheCapacity = 128 * 1024 * 1024;
@@ -87,7 +82,8 @@
MessageLoop::current()),
base::Bind(&WebModuleErrorCallback, &run_loop, MessageLoop::current()),
browser::WebModule::CloseCallback() /* window_close_callback */,
- base::Closure() /* window_minimize_callback */, stub_media_module.get(),
+ base::Closure() /* window_minimize_callback */,
+ NULL /* can_play_type_handler */, NULL /* web_media_player_factory */,
&network_module, viewport_size, 1.f, resource_provider, 60.0f,
web_module_options);
diff --git a/src/cobalt/layout_tests/web_platform_tests.cc b/src/cobalt/layout_tests/web_platform_tests.cc
index 2e3a63b..aab3f5f 100644
--- a/src/cobalt/layout_tests/web_platform_tests.cc
+++ b/src/cobalt/layout_tests/web_platform_tests.cc
@@ -159,6 +159,8 @@
options.output_resolution_override = kDefaultViewportSize;
scoped_ptr<media::MediaModule> media_module(
media::MediaModule::Create(NULL, &resource_provider, options));
+ scoped_ptr<media::CanPlayTypeHandler> can_play_type_handler(
+ media::MediaModule::CreateCanPlayTypeHandler());
dom::CspDelegateFactory::GetInstance()->OverrideCreator(
dom::kCspEnforcementEnable, CspDelegatePermissive::Create);
@@ -178,9 +180,9 @@
MessageLoop::current()),
base::Bind(&WebModuleErrorCallback, &run_loop, MessageLoop::current()),
browser::WebModule::CloseCallback() /* window_close_callback */,
- base::Closure() /* window_minimize_callback */, media_module.get(),
- &network_module, kDefaultViewportSize, 1.f, &resource_provider, 60.0f,
- web_module_options);
+ base::Closure() /* window_minimize_callback */,
+ can_play_type_handler.get(), media_module.get(), &network_module,
+ kDefaultViewportSize, 1.f, &resource_provider, 60.0f, web_module_options);
run_loop.Run();
const std::string extract_results =
"document.getElementById(\"__testharness__results__\").textContent;";
diff --git a/src/cobalt/media/base/sbplayer_pipeline.cc b/src/cobalt/media/base/sbplayer_pipeline.cc
index eb5397c..d32d468 100644
--- a/src/cobalt/media/base/sbplayer_pipeline.cc
+++ b/src/cobalt/media/base/sbplayer_pipeline.cc
@@ -52,6 +52,7 @@
namespace {
+static const int kRetryDelayAtSuspendInMilliseconds = 100;
const char kVideoDumpFileName[] = "video_content.dmp";
// Used to post parameters to SbPlayerPipeline::StartTask() as the number of
@@ -600,10 +601,15 @@
DCHECK(audio_stream_);
DCHECK(video_stream_);
+ if (stopped_) {
+ return;
+ }
+
if (suspended_) {
- message_loop_->PostTask(
+ message_loop_->PostDelayedTask(
FROM_HERE,
- base::Bind(&SbPlayerPipeline::CreatePlayer, this, drm_system));
+ base::Bind(&SbPlayerPipeline::CreatePlayer, this, drm_system),
+ TimeDelta::FromMilliseconds(kRetryDelayAtSuspendInMilliseconds));
return;
}
@@ -668,9 +674,10 @@
}
if (suspended_) {
- message_loop_->PostTask(
+ message_loop_->PostDelayedTask(
FROM_HERE,
- base::Bind(&SbPlayerPipeline::OnDemuxerInitialized, this, status));
+ base::Bind(&SbPlayerPipeline::OnDemuxerInitialized, this, status),
+ TimeDelta::FromMilliseconds(kRetryDelayAtSuspendInMilliseconds));
return;
}
diff --git a/src/cobalt/media/base/starboard_player.cc b/src/cobalt/media/base/starboard_player.cc
index 5189de8..e5b6f4f 100644
--- a/src/cobalt/media/base/starboard_player.cc
+++ b/src/cobalt/media/base/starboard_player.cc
@@ -146,7 +146,6 @@
}
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
return;
}
@@ -201,7 +200,6 @@
void StarboardPlayer::SetBounds(int z_index, const gfx::Rect& rect) {
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
pending_set_bounds_z_index_ = z_index;
pending_set_bounds_rect_ = rect;
return;
@@ -218,7 +216,6 @@
seek_pending_ = true;
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
return;
}
@@ -232,7 +229,6 @@
decoder_buffer_cache_.ClearAll();
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
preroll_timestamp_ = time;
return;
}
@@ -257,7 +253,6 @@
volume_ = volume;
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
return;
}
@@ -271,7 +266,6 @@
playback_rate_ = playback_rate;
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
return;
}
@@ -289,8 +283,6 @@
base::AutoLock auto_lock(lock_);
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
-
if (video_frames_decoded) {
*video_frames_decoded = cached_video_frames_decoded_;
}
@@ -323,7 +315,6 @@
// Check if the player is already suspended.
if (state_ == kSuspended) {
- DCHECK(!SbPlayerIsValid(player_));
return;
}
@@ -356,8 +347,6 @@
return;
}
- DCHECK(!SbPlayerIsValid(player_));
-
decoder_buffer_cache_.StartResuming();
CreatePlayer();
diff --git a/src/cobalt/media/can_play_type_handler.h b/src/cobalt/media/can_play_type_handler.h
index fe081a6..eddad62 100644
--- a/src/cobalt/media/can_play_type_handler.h
+++ b/src/cobalt/media/can_play_type_handler.h
@@ -22,12 +22,12 @@
class CanPlayTypeHandler {
public:
+ virtual ~CanPlayTypeHandler() {}
virtual std::string CanPlayType(const std::string& mime_type,
const std::string& key_system) = 0;
protected:
CanPlayTypeHandler() {}
- ~CanPlayTypeHandler() {}
private:
DISALLOW_COPY_AND_ASSIGN(CanPlayTypeHandler);
diff --git a/src/cobalt/media/media.gyp b/src/cobalt/media/media.gyp
index c287bdb..cb21ecc 100644
--- a/src/cobalt/media/media.gyp
+++ b/src/cobalt/media/media.gyp
@@ -26,8 +26,6 @@
'fetcher_buffered_data_source.h',
'media_module.cc',
'media_module.h',
- 'media_module_stub.cc',
- 'media_module_stub.h',
'shell_video_data_allocator_common.cc',
'shell_video_data_allocator_common.h',
'web_media_player_factory.h',
diff --git a/src/cobalt/media/media2.gyp b/src/cobalt/media/media2.gyp
index 982b364..79fc225 100644
--- a/src/cobalt/media/media2.gyp
+++ b/src/cobalt/media/media2.gyp
@@ -29,8 +29,6 @@
'fetcher_buffered_data_source.h',
'media_module.cc',
'media_module.h',
- 'media_module_stub.cc',
- 'media_module_stub.h',
'media_module_starboard.cc',
'base/audio_codecs.cc',
diff --git a/src/cobalt/media/media_module.h b/src/cobalt/media/media_module.h
index 7d21976..9391c89 100644
--- a/src/cobalt/media/media_module.h
+++ b/src/cobalt/media/media_module.h
@@ -52,8 +52,7 @@
#endif // !defined(COBALT_MEDIA_SOURCE_2016)
// TODO: Collapse MediaModule into ShellMediaPlatform.
-class MediaModule : public CanPlayTypeHandler,
- public WebMediaPlayerFactory,
+class MediaModule : public WebMediaPlayerFactory,
public WebMediaPlayerDelegate {
public:
struct Options {
@@ -75,6 +74,9 @@
static math::Size CalculateOutputResolution(
system_window::SystemWindow* system_window,
const base::optional<math::Size>& output_resolution_override);
+ // MediaModule implementation should implement this function to allow creation
+ // of CanPlayTypeHandler.
+ static scoped_ptr<CanPlayTypeHandler> CreateCanPlayTypeHandler();
virtual ~MediaModule() {}
diff --git a/src/cobalt/media/media_module_starboard.cc b/src/cobalt/media/media_module_starboard.cc
index 558bdfb..6642d2f 100644
--- a/src/cobalt/media/media_module_starboard.cc
+++ b/src/cobalt/media/media_module_starboard.cc
@@ -44,15 +44,8 @@
typedef ::media::ShellMediaPlatformStarboard ShellMediaPlatformStarboard;
#endif // !defined(COBALT_MEDIA_SOURCE_2016)
-class MediaModuleStarboard : public MediaModule {
+class CanPlayTypeHandlerStarboard : public CanPlayTypeHandler {
public:
- MediaModuleStarboard(system_window::SystemWindow* system_window,
- render_tree::ResourceProvider* resource_provider,
- const Options& options)
- : options_(options),
- system_window_(system_window),
- media_platform_(resource_provider) {}
-
std::string CanPlayType(const std::string& mime_type,
const std::string& key_system) OVERRIDE {
SbMediaSupportType type =
@@ -68,6 +61,17 @@
NOTREACHED();
return "";
}
+};
+
+class MediaModuleStarboard : public MediaModule {
+ public:
+ MediaModuleStarboard(system_window::SystemWindow* system_window,
+ render_tree::ResourceProvider* resource_provider,
+ const Options& options)
+ : options_(options),
+ system_window_(system_window),
+ media_platform_(resource_provider) {}
+
scoped_ptr<WebMediaPlayer> CreateWebMediaPlayer(
WebMediaPlayerClient* client) OVERRIDE {
TRACK_MEMORY_SCOPE("Media");
@@ -124,5 +128,9 @@
new MediaModuleStarboard(system_window, resource_provider, options));
}
+scoped_ptr<CanPlayTypeHandler> MediaModule::CreateCanPlayTypeHandler() {
+ return make_scoped_ptr<CanPlayTypeHandler>(new CanPlayTypeHandlerStarboard);
+}
+
} // namespace media
} // namespace cobalt
diff --git a/src/cobalt/media/media_module_stub.h b/src/cobalt/media/media_module_stub.h
deleted file mode 100644
index d5d3d4e..0000000
--- a/src/cobalt/media/media_module_stub.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef COBALT_MEDIA_MEDIA_MODULE_STUB_H_
-#define COBALT_MEDIA_MEDIA_MODULE_STUB_H_
-
-#include <string>
-
-#include "cobalt/media/media_module.h"
-
-namespace cobalt {
-namespace media {
-
-#if !defined(COBALT_MEDIA_SOURCE_2016)
-typedef ::media::WebMediaPlayerClient WebMediaPlayerClient;
-#endif // !defined(WebMediaPlayerDelegate)
-
-class MediaModuleStub : public MediaModule {
- public:
- MediaModuleStub() {}
-
- std::string CanPlayType(const std::string& mime_type,
- const std::string& key_system) OVERRIDE;
- scoped_ptr<WebMediaPlayer> CreateWebMediaPlayer(
- WebMediaPlayerClient* client) OVERRIDE;
-};
-
-} // namespace media
-} // namespace cobalt
-
-#endif // COBALT_MEDIA_MEDIA_MODULE_STUB_H_
diff --git a/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc b/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc
index 3487dd7..b021729 100644
--- a/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc
+++ b/src/cobalt/network/starboard/user_agent_string_factory_starboard.cc
@@ -27,7 +27,8 @@
#if SB_API_VERSION == SB_EXPERIMENTAL_API_VERSION
const char kStarboardStabilitySuffix[] = "-Experimental";
-#elif SB_API_VERSION >= SB_RELEASE_CANDIDATE_API_VERSION && \
+#elif defined(SB_RELEASE_CANDIDATE_API_VERSION) && \
+ SB_API_VERSION >= SB_RELEASE_CANDIDATE_API_VERSION && \
SB_API_VERSION < SB_EXPERIMENTAL_API_VERSION
const char kStarboardStabilitySuffix[] = "-ReleaseCandidate";
#else
diff --git a/src/cobalt/script/mozjs-45/conversion_helpers.h b/src/cobalt/script/mozjs-45/conversion_helpers.h
index c23b660..7683d8d 100644
--- a/src/cobalt/script/mozjs-45/conversion_helpers.h
+++ b/src/cobalt/script/mozjs-45/conversion_helpers.h
@@ -22,6 +22,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/optional.h"
#include "base/stringprintf.h"
+#include "cobalt/base/compiler.h"
#include "cobalt/base/enable_if.h"
#include "cobalt/base/token.h"
#include "cobalt/script/mozjs-45/mozjs_callback_interface_holder.h"
@@ -121,7 +122,9 @@
DCHECK_EQ(conversion_flags, kNoConversionFlags)
<< "No conversion flags supported.";
DCHECK(out_boolean);
- // ToBoolean implements the ECMAScript ToBoolean operation.
+ // |JS::ToBoolean| implements the ECMAScript ToBoolean operation.
+ // Note that |JS::ToBoolean| will handle the case in which |value| is of
+ // type Symbol without throwing.
*out_boolean = JS::ToBoolean(value);
}
@@ -197,6 +200,12 @@
TRACK_MEMORY_SCOPE("Javascript");
DCHECK(out_number);
+ if (UNLIKELY(value.isSymbol())) {
+ exception_state->SetSimpleException(
+ kTypeError, "Cannot convert a Symbol value to a number");
+ return;
+ }
+
int32_t out;
// Convert a JavaScript value to an integer type as specified by the
// ECMAScript standard.
@@ -226,6 +235,13 @@
(sizeof(T) > 4),
T>::type* = NULL) {
TRACK_MEMORY_SCOPE("Javascript");
+
+ if (UNLIKELY(value.isSymbol())) {
+ exception_state->SetSimpleException(
+ kTypeError, "Cannot convert a Symbol value to a number");
+ return;
+ }
+
double to_number;
JS::ToNumber(context, value, &to_number);
@@ -294,6 +310,12 @@
TRACK_MEMORY_SCOPE("Javascript");
DCHECK(out_number);
+ if (UNLIKELY(value.isSymbol())) {
+ exception_state->SetSimpleException(
+ kTypeError, "Cannot convert a Symbol value to a number");
+ return;
+ }
+
uint32_t out;
// Convert a JavaScript value to an integer type as specified by the
// ECMAScript standard.
@@ -327,6 +349,12 @@
TRACK_MEMORY_SCOPE("Javascript");
DCHECK(out_number);
+ if (UNLIKELY(value.isSymbol())) {
+ exception_state->SetSimpleException(
+ kTypeError, "Cannot convert a Symbol value to a number");
+ return;
+ }
+
uint64_t out;
// This produces and IDL unsigned long long.
// TODO: Consider only creating |value_to_convert| if the conversion flag is
@@ -382,6 +410,13 @@
DCHECK_EQ(conversion_flags & ~kConversionFlagsNumeric, 0)
<< "Unexpected conversion flags found.";
DCHECK(out_number);
+
+ if (UNLIKELY(value.isSymbol())) {
+ exception_state->SetSimpleException(
+ kTypeError, "Cannot convert a Symbol value to a number");
+ return;
+ }
+
double double_value;
if (!JS::ToNumber(context, value, &double_value)) {
exception_state->SetSimpleException(kNotNumberType);
diff --git a/src/cobalt/speech/sandbox/speech_sandbox.cc b/src/cobalt/speech/sandbox/speech_sandbox.cc
index 8638535..11e31f4 100644
--- a/src/cobalt/speech/sandbox/speech_sandbox.cc
+++ b/src/cobalt/speech/sandbox/speech_sandbox.cc
@@ -75,7 +75,7 @@
const dom::DOMSettings::Options& dom_settings_options) {
scoped_ptr<script::EnvironmentSettings> environment_settings(
new dom::DOMSettings(kDOMMaxElementDepth, NULL, network_module_.get(),
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
dom_settings_options));
DCHECK(environment_settings);
diff --git a/src/cobalt/websocket/web_socket_test.cc b/src/cobalt/websocket/web_socket_test.cc
index ebca33f..5600dac 100644
--- a/src/cobalt/websocket/web_socket_test.cc
+++ b/src/cobalt/websocket/web_socket_test.cc
@@ -39,7 +39,7 @@
public:
FakeSettings()
: dom::DOMSettings(0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL),
+ NULL),
base_("https://example.com") {
this->set_network_module(NULL);
}
diff --git a/src/cobalt/xhr/xml_http_request_test.cc b/src/cobalt/xhr/xml_http_request_test.cc
index 5863f7f..329e9e8 100644
--- a/src/cobalt/xhr/xml_http_request_test.cc
+++ b/src/cobalt/xhr/xml_http_request_test.cc
@@ -94,7 +94,7 @@
public:
FakeSettings()
: dom::DOMSettings(0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL),
+ NULL),
example_("http://example.com") {}
const GURL& base_url() const OVERRIDE { return example_; }
diff --git a/src/starboard/common/common.cc b/src/starboard/common/common.cc
index 82102fb..acf6e63 100644
--- a/src/starboard/common/common.cc
+++ b/src/starboard/common/common.cc
@@ -23,7 +23,8 @@
"own risk! We don't recommend this for third parties.")
#endif
-#if SB_API_VERSION >= SB_RELEASE_CANDIDATE_API_VERSION && \
+#if defined(SB_RELEASE_CANDIDATE_API_VERSION) && \
+ SB_API_VERSION >= SB_RELEASE_CANDIDATE_API_VERSION && \
SB_API_VERSION < SB_EXPERIMENTAL_API_VERSION
#pragma message( \
"Your platform's SB_API_VERSION >= SB_RELEASE_CANDIDATE_API_VERSION. " \
diff --git a/src/starboard/configuration.h b/src/starboard/configuration.h
index 057bb38..58d12c0 100644
--- a/src/starboard/configuration.h
+++ b/src/starboard/configuration.h
@@ -53,7 +53,8 @@
// changes. It is reasonable to base a port on the Release Candidate API
// version, but be aware that small incompatible changes may still be made to
// it.
-#define SB_RELEASE_CANDIDATE_API_VERSION 7
+// The following will be uncommented when an API version is a release candidate.
+// #define SB_RELEASE_CANDIDATE_API_VERSION 8
// --- Experimental Feature Defines ------------------------------------------
@@ -68,7 +69,6 @@
// #define SB_MY_EXPERIMENTAL_FEATURE_VERSION SB_EXPERIMENTAL_API_VERSION
// --- Release Candidate Feature Defines -------------------------------------
-#define SB_DECODE_TARGET_PLANE_FORMAT_VERSION SB_RELEASE_CANDIDATE_API_VERSION
// --- Common Detected Features ----------------------------------------------
diff --git a/src/starboard/raspi/shared/open_max/open_max_component.cc b/src/starboard/raspi/shared/open_max/open_max_component.cc
index 6a25305..665f74b 100644
--- a/src/starboard/raspi/shared/open_max/open_max_component.cc
+++ b/src/starboard/raspi/shared/open_max/open_max_component.cc
@@ -176,6 +176,10 @@
{
ScopedLock scoped_lock(mutex_);
+ if (output_buffers_.empty()) {
+ SB_DCHECK(outstanding_output_buffers_ == 0);
+ return;
+ }
SB_DCHECK(outstanding_output_buffers_ > 0);
--outstanding_output_buffers_;
diff --git a/src/starboard/raspi/shared/open_max/video_decoder.cc b/src/starboard/raspi/shared/open_max/video_decoder.cc
index f0e3909..2f87251 100644
--- a/src/starboard/raspi/shared/open_max/video_decoder.cc
+++ b/src/starboard/raspi/shared/open_max/video_decoder.cc
@@ -96,27 +96,24 @@
}
bool VideoDecoder::TryToDeliverOneFrame() {
- OMX_BUFFERHEADERTYPE* buffer = NULL;
+ scoped_refptr<VideoFrame> frame;
{
ScopedLock scoped_lock(mutex_);
- if (!filled_buffers_.empty()) {
- buffer = filled_buffers_.front();
+ if (filled_buffers_.empty()) {
+ return false;
}
- }
- if (buffer) {
- if (scoped_refptr<VideoFrame> frame = CreateFrame(buffer)) {
- host_->OnDecoderStatusUpdate(kNeedMoreInput, frame);
- {
- ScopedLock scoped_lock(mutex_);
- SB_DCHECK(!filled_buffers_.empty());
- filled_buffers_.pop();
- freed_buffers_.push(buffer);
- }
- return true;
+ OMX_BUFFERHEADERTYPE* buffer = filled_buffers_.front();
+ frame = CreateFrame(buffer);
+ if (!frame) {
+ return false;
}
- }
- return false;
+ SB_DCHECK(!filled_buffers_.empty());
+ filled_buffers_.pop();
+ freed_buffers_.push(buffer);
+ }
+ host_->OnDecoderStatusUpdate(kNeedMoreInput, frame);
+ return true;
}
// static
@@ -202,11 +199,11 @@
eos_written = component.WriteEOS();
stream_ended = true;
} else if (event->type == Event::kReset) {
+ ScopedLock scoped_lock(mutex_);
component.Flush();
stream_ended = false;
eos_written = false;
- ScopedLock scoped_lock(mutex_);
while (!freed_buffers_.empty()) {
component.DropOutputBuffer(freed_buffers_.front());
freed_buffers_.pop();
@@ -226,6 +223,7 @@
delete event;
}
+ ScopedLock scoped_lock(mutex_);
while (!freed_buffers_.empty()) {
component.DropOutputBuffer(freed_buffers_.front());
freed_buffers_.pop();
diff --git a/src/starboard/shared/starboard/application.cc b/src/starboard/shared/starboard/application.cc
index 76aa778..45f3162 100644
--- a/src/starboard/shared/starboard/application.cc
+++ b/src/starboard/shared/starboard/application.cc
@@ -273,7 +273,7 @@
return true;
}
- if (state() == kStatePaused) {
+ if (state() == kStatePaused || state() == kStatePreloading) {
Inject(new Event(kSbEventTypeSuspend, NULL, NULL));
Inject(scoped_event.release());
return true;