diff --git a/services/sky/runtime_flags.cc b/services/sky/runtime_flags.cc index 360fbea0665..973b5b60fb9 100644 --- a/services/sky/runtime_flags.cc +++ b/services/sky/runtime_flags.cc @@ -16,11 +16,15 @@ RuntimeFlags flags; // Load the viewer in testing mode so we can dump pixels. const char kTesting[] = "--testing"; +// Instruct the DartVM to report type errors. +const char kEnableCheckedMode[] = "--enable-checked-mode"; + } // namespace void RuntimeFlags::Initialize(mojo::ApplicationImpl* app) { DCHECK(!initialized); flags.testing_ = app->HasArg(kTesting); + flags.enable_checked_mode_ = app->HasArg(kEnableCheckedMode); initialized = true; } diff --git a/services/sky/runtime_flags.h b/services/sky/runtime_flags.h index a16d32573ae..c4bf9649254 100644 --- a/services/sky/runtime_flags.h +++ b/services/sky/runtime_flags.h @@ -17,9 +17,11 @@ class RuntimeFlags { static const RuntimeFlags& Get(); bool testing() const { return testing_; } + bool enable_checked_mode() const { return enable_checked_mode_; } private: - bool testing_; + bool testing_ = false; + bool enable_checked_mode_ = false; }; } // namespace sky diff --git a/services/sky/viewer.cc b/services/sky/viewer.cc index 879c9f67348..c22e4a3e78c 100644 --- a/services/sky/viewer.cc +++ b/services/sky/viewer.cc @@ -37,6 +37,8 @@ class Viewer : public mojo::ApplicationDelegate, blink::WebRuntimeFeatures::enableObservatory( !RuntimeFlags::Get().testing()); + blink::WebRuntimeFeatures::enableDartCheckedMode( + RuntimeFlags::Get().enable_checked_mode()); platform_impl_.reset(new PlatformImpl()); blink::initialize(platform_impl_.get()); diff --git a/sky/engine/core/script/dart_init.cc b/sky/engine/core/script/dart_init.cc index 8efc44f940c..574d37f2962 100644 --- a/sky/engine/core/script/dart_init.cc +++ b/sky/engine/core/script/dart_init.cc @@ -75,15 +75,16 @@ void CreateEmptyRootLibraryIfNeeded() { static const char* kDartArgs[] = { "--enable_mirrors=false", -#if ENABLE(DART_STRICT) - "--enable_asserts", - "--enable_type_checks", - "--error_on_bad_type", - "--error_on_bad_override", #if WTF_OS_IOS || WTF_OS_MACOSX "--no-profile" #endif -#endif +}; + +static const char* kDartCheckedModeArgs[] = { + "--enable_asserts", + "--enable_type_checks", + "--error_on_bad_type", + "--error_on_bad_override", }; void UnhandledExceptionCallback(Dart_Handle error) { @@ -172,7 +173,17 @@ Dart_Isolate IsolateCreateCallback(const char* script_uri, void InitDartVM() { dart::bin::BootstrapDartIo(); - CHECK(Dart_SetVMFlags(arraysize(kDartArgs), kDartArgs)); + bool enable_checked_mode = RuntimeEnabledFeatures::dartCheckedModeEnabled(); +#if ENABLE(DART_STRICT) + enable_checked_mode = true; +#endif + + Vector args; + args.append(kDartArgs, arraysize(kDartArgs)); + if (enable_checked_mode) + args.append(kDartCheckedModeArgs, arraysize(kDartCheckedModeArgs)); + + CHECK(Dart_SetVMFlags(args.size(), args.data())); // This should be called before calling Dart_Initialize. DartDebugger::InitDebugger(); CHECK(Dart_Initialize(kDartVmIsolateSnapshotBuffer, diff --git a/sky/engine/platform/RuntimeEnabledFeatures.in b/sky/engine/platform/RuntimeEnabledFeatures.in index 4edc8107fe9..00403a060b6 100644 --- a/sky/engine/platform/RuntimeEnabledFeatures.in +++ b/sky/engine/platform/RuntimeEnabledFeatures.in @@ -120,3 +120,4 @@ PseudoClassesInMatchingCriteriaInAuthorShadowTrees status=test CredentialManager status=test Observatory status=stable +DartCheckedMode diff --git a/sky/engine/public/web/WebRuntimeFeatures.h b/sky/engine/public/web/WebRuntimeFeatures.h index 245a508fe30..0feb2319a9d 100644 --- a/sky/engine/public/web/WebRuntimeFeatures.h +++ b/sky/engine/public/web/WebRuntimeFeatures.h @@ -94,6 +94,8 @@ public: BLINK_EXPORT static void enableObservatory(bool); + BLINK_EXPORT static void enableDartCheckedMode(bool); + private: WebRuntimeFeatures(); }; diff --git a/sky/engine/web/WebRuntimeFeatures.cpp b/sky/engine/web/WebRuntimeFeatures.cpp index d38a3a6aee2..55543b9638e 100644 --- a/sky/engine/web/WebRuntimeFeatures.cpp +++ b/sky/engine/web/WebRuntimeFeatures.cpp @@ -175,4 +175,9 @@ void WebRuntimeFeatures::enableObservatory(bool enable) RuntimeEnabledFeatures::setObservatoryEnabled(enable); } +void WebRuntimeFeatures::enableDartCheckedMode(bool enable) +{ + RuntimeEnabledFeatures::setDartCheckedModeEnabled(enable); +} + } // namespace blink