diff --git a/DEPS b/DEPS index 7452e52d9..8658fc0 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'a3091099fa19da32e60433c0da835e9de3dd8ee9', + 'skia_revision': 'edee1ae9e3b87983ed0ff0ea55b3c49892901260', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'f42bac69be04b747319e124cece6d277b9d38a67', + 'v8_revision': 'b7babbd9977c15a991c601eec24fb33e67177bd0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other.
diff --git a/chrome/browser/apps/app_browsertest.cc b/chrome/browser/apps/app_browsertest.cc index 36b4e308..828ce31 100644 --- a/chrome/browser/apps/app_browsertest.cc +++ b/chrome/browser/apps/app_browsertest.cc
@@ -1131,8 +1131,10 @@ #if BUILDFLAG(ENABLE_PRINT_PREVIEW) +// Disabled due to flakiness. See crbug.com/693305. +// TODO(rbpotter): Investigate and re-enable this test. IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, - WindowDotPrintShouldBringUpPrintPreview) { + DISABLED_WindowDotPrintShouldBringUpPrintPreview) { ScopedPreviewTestingDelegate preview_delegate; ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; preview_delegate.WaitUntilPreviewIsReady();
diff --git a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc index 34b7652..6b79bca 100644 --- a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc +++ b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.cc
@@ -49,8 +49,8 @@ QuickUnlockModeList ComputeActiveModes(Profile* profile) { QuickUnlockModeList modes; - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile); + chromeos::quick_unlock::PinStorage* pin_storage = + chromeos::quick_unlock::PinStorageFactory::GetForProfile(profile); if (pin_storage && pin_storage->IsPinSet()) modes.push_back(quick_unlock_private::QUICK_UNLOCK_MODE_PIN); @@ -400,8 +400,8 @@ // Apply changes. if (update_pin) { Profile* profile = chrome_details_.GetProfile(); - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile); + chromeos::quick_unlock::PinStorage* pin_storage = + chromeos::quick_unlock::PinStorageFactory::GetForProfile(profile); if (pin_credential.empty()) { pin_storage->RemovePin();
diff --git a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc index f628dad..67d2d5ae4 100644 --- a/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc +++ b/chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api_unittest.cc
@@ -38,15 +38,14 @@ const char* kValidPassword = "valid"; const char* kInvalidPassword = "invalid"; -chromeos::ExtendedAuthenticator* CreateFakeAuthenticator( - chromeos::AuthStatusConsumer* auth_status_consumer) { +ExtendedAuthenticator* CreateFakeAuthenticator( + AuthStatusConsumer* auth_status_consumer) { AccountId account_id = AccountId::FromUserEmail(kTestUserEmail); - chromeos::UserContext expected_context(account_id); + UserContext expected_context(account_id); expected_context.SetKey(Key(kValidPassword)); - chromeos::ExtendedAuthenticator* authenticator = - new chromeos::FakeExtendedAuthenticator(auth_status_consumer, - expected_context); + ExtendedAuthenticator* authenticator = + new FakeExtendedAuthenticator(auth_status_consumer, expected_context); return authenticator; } @@ -77,7 +76,7 @@ void SetUp() override { ExtensionApiUnittest::SetUp(); - EnableQuickUnlockForTesting(); + quick_unlock::EnableForTesting(); // Setup a primary user. auto test_account = AccountId::FromUserEmail(kTestUserEmail); @@ -355,7 +354,8 @@ // Ensures that quick unlock can be enabled and disabled by checking the result // of quickUnlockPrivate.GetActiveModes and PinStorage::IsPinSet. TEST_F(QuickUnlockPrivateUnitTest, SetModesAndGetActiveModes) { - PinStorage* pin_storage = PinStorageFactory::GetForProfile(profile()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile()); // Update mode to PIN raises an event and updates GetActiveModes. ExpectModesChanged( @@ -375,7 +375,8 @@ // Verifies that enabling PIN quick unlock actually talks to the PIN subsystem. TEST_F(QuickUnlockPrivateUnitTest, VerifyAuthenticationAgainstPIN) { - PinStorage* pin_storage = PinStorageFactory::GetForProfile(profile()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile()); EXPECT_TRUE(SetModes(QuickUnlockModeList{}, CredentialList{})); EXPECT_FALSE(pin_storage->IsPinSet());
diff --git a/chrome/browser/chromeos/login/lock/screen_locker.cc b/chrome/browser/chromeos/login/lock/screen_locker.cc index 7cc892b..8f0715db 100644 --- a/chrome/browser/chromeos/login/lock/screen_locker.cc +++ b/chrome/browser/chromeos/login/lock/screen_locker.cc
@@ -113,7 +113,8 @@ // strong authentication to allow them to use PIN to unlock the device. user_manager::User* user = content::Details<user_manager::User>(details).ptr(); - PinStorage* pin_storage = PinStorageFactory::GetForUser(user); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForUser(user); if (pin_storage) pin_storage->MarkStrongAuth(); } else { @@ -244,7 +245,8 @@ // 2. If the user signed in with cryptohome keys, then the PIN timeout is // going to be reset as well, so it is safe to reset the unlock attempt // count. - PinStorage* pin_storage = PinStorageFactory::GetForUser(user); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForUser(user); if (pin_storage) pin_storage->ResetUnlockAttemptCount(); @@ -267,8 +269,9 @@ void ScreenLocker::OnPasswordAuthSuccess(const UserContext& user_context) { // The user has signed in using their password, so reset the PIN timeout. - PinStorage* pin_storage = - PinStorageFactory::GetForAccountId(user_context.GetAccountId()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForAccountId( + user_context.GetAccountId()); if (pin_storage) pin_storage->MarkStrongAuth(); } @@ -309,8 +312,8 @@ // incorrectly more than a few times. int dummy_value; if (is_pin_attempt_ && base::StringToInt(pin, &dummy_value)) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForUser(user); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForUser(user); if (pin_storage && pin_storage->TryAuthenticatePin(pin)) { OnAuthSuccess(user_context); return;
diff --git a/chrome/browser/chromeos/login/quick_unlock/pin_storage.cc b/chrome/browser/chromeos/login/quick_unlock/pin_storage.cc index 86058df..bc4e2f79 100644 --- a/chrome/browser/chromeos/login/quick_unlock/pin_storage.cc +++ b/chrome/browser/chromeos/login/quick_unlock/pin_storage.cc
@@ -14,6 +14,7 @@ #include "crypto/random.h" namespace chromeos { +namespace quick_unlock { namespace { @@ -37,16 +38,16 @@ return key.GetSecret(); } -base::TimeDelta QuickUnlockPasswordConfirmationFrequencyToTimeDelta( - QuickUnlockPasswordConfirmationFrequency frequency) { +base::TimeDelta PasswordConfirmationFrequencyToTimeDelta( + PasswordConfirmationFrequency frequency) { switch (frequency) { - case QuickUnlockPasswordConfirmationFrequency::SIX_HOURS: + case PasswordConfirmationFrequency::SIX_HOURS: return base::TimeDelta::FromHours(6); - case QuickUnlockPasswordConfirmationFrequency::TWELVE_HOURS: + case PasswordConfirmationFrequency::TWELVE_HOURS: return base::TimeDelta::FromHours(12); - case QuickUnlockPasswordConfirmationFrequency::DAY: + case PasswordConfirmationFrequency::DAY: return base::TimeDelta::FromDays(1); - case QuickUnlockPasswordConfirmationFrequency::WEEK: + case PasswordConfirmationFrequency::WEEK: return base::TimeDelta::FromDays(7); } NOTREACHED(); @@ -75,11 +76,11 @@ if (last_strong_auth_.is_null()) return false; - QuickUnlockPasswordConfirmationFrequency strong_auth_interval = - static_cast<QuickUnlockPasswordConfirmationFrequency>( + PasswordConfirmationFrequency strong_auth_interval = + static_cast<PasswordConfirmationFrequency>( pref_service_->GetInteger(prefs::kQuickUnlockTimeout)); base::TimeDelta strong_auth_timeout = - QuickUnlockPasswordConfirmationFrequencyToTimeDelta(strong_auth_interval); + PasswordConfirmationFrequencyToTimeDelta(strong_auth_interval); return TimeSinceLastStrongAuth() < strong_auth_timeout; } @@ -126,7 +127,7 @@ const bool exceeded_unlock_attempts = unlock_attempt_count() >= kMaximumUnlockAttempts; - return IsPinUnlockEnabled(pref_service_) && IsPinSet() && HasStrongAuth() && + return IsPinEnabled(pref_service_) && IsPinSet() && HasStrongAuth() && !exceeded_unlock_attempts; } @@ -138,4 +139,5 @@ return ComputeSecret(pin, PinSalt()) == PinSecret(); } +} // namespace quick_unlock } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/quick_unlock/pin_storage.h b/chrome/browser/chromeos/login/quick_unlock/pin_storage.h index f3c88c4..56333fd4 100644 --- a/chrome/browser/chromeos/login/quick_unlock/pin_storage.h +++ b/chrome/browser/chromeos/login/quick_unlock/pin_storage.h
@@ -14,9 +14,11 @@ class PrefRegistrySimple; class PrefService; +namespace chromeos { + class PinStorageTestApi; -namespace chromeos { +namespace quick_unlock { class PinStorage : public KeyedService { public: @@ -65,7 +67,7 @@ std::string PinSalt() const; std::string PinSecret() const; - friend class ::PinStorageTestApi; + friend class chromeos::PinStorageTestApi; PrefService* pref_service_; int unlock_attempt_count_ = 0; @@ -74,6 +76,7 @@ DISALLOW_COPY_AND_ASSIGN(PinStorage); }; +} // namespace quick_unlock } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_QUICK_UNLOCK_PIN_STORAGE_H_
diff --git a/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.cc b/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.cc index 4548dbb..773bdf3 100644 --- a/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.cc +++ b/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.cc
@@ -12,6 +12,7 @@ #include "components/user_manager/user_manager.h" namespace chromeos { +namespace quick_unlock { // static PinStorage* PinStorageFactory::GetForProfile(Profile* profile) { @@ -55,4 +56,5 @@ return new PinStorage(Profile::FromBrowserContext(context)->GetPrefs()); } +} // namespace quick_unlock } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.h b/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.h index 505d6a6..e2d8bdc 100644 --- a/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.h +++ b/chrome/browser/chromeos/login/quick_unlock/pin_storage_factory.h
@@ -16,6 +16,7 @@ } namespace chromeos { +namespace quick_unlock { class PinStorage; @@ -50,6 +51,7 @@ DISALLOW_COPY_AND_ASSIGN(PinStorageFactory); }; +} // namespace quick_unlock } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_QUICK_UNLOCK_PIN_STORAGE_FACTORY_H_
diff --git a/chrome/browser/chromeos/login/quick_unlock/pin_storage_unittest.cc b/chrome/browser/chromeos/login/quick_unlock/pin_storage_unittest.cc index b3a937a..37ce31a 100644 --- a/chrome/browser/chromeos/login/quick_unlock/pin_storage_unittest.cc +++ b/chrome/browser/chromeos/login/quick_unlock/pin_storage_unittest.cc
@@ -12,11 +12,12 @@ #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest/include/gtest/gtest.h" +namespace chromeos { namespace { void SetConfirmationFrequency( PrefService* pref_service, - chromeos::QuickUnlockPasswordConfirmationFrequency frequency) { + quick_unlock::PasswordConfirmationFrequency frequency) { pref_service->SetInteger(prefs::kQuickUnlockTimeout, static_cast<int>(frequency)); } @@ -27,7 +28,7 @@ ~PinStorageUnitTest() override {} // testing::Test: - void SetUp() override { chromeos::EnableQuickUnlockForTesting(); } + void SetUp() override { quick_unlock::EnableForTesting(); } content::TestBrowserThreadBundle thread_bundle_; std::unique_ptr<TestingProfile> profile_; @@ -41,7 +42,7 @@ class PinStorageTestApi { public: // Does *not* take ownership over |pin_storage|. - explicit PinStorageTestApi(chromeos::PinStorage* pin_storage) + explicit PinStorageTestApi(quick_unlock::PinStorage* pin_storage) : pin_storage_(pin_storage) {} // Reduces the amount of strong auth time available by |time_delta|. @@ -58,7 +59,7 @@ std::string PinSecret() const { return pin_storage_->PinSecret(); } private: - chromeos::PinStorage* pin_storage_; + quick_unlock::PinStorage* pin_storage_; DISALLOW_COPY_AND_ASSIGN(PinStorageTestApi); }; @@ -73,8 +74,8 @@ EXPECT_EQ("", prefs->GetString(prefs::kQuickUnlockPinSalt)); EXPECT_EQ("", prefs->GetString(prefs::kQuickUnlockPinSecret)); - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile_.get()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile_.get()); PinStorageTestApi pin_storage_test(pin_storage); pin_storage->SetPin("1111"); @@ -97,8 +98,8 @@ // 2. Attempting unlock attempts correctly increases unlock attempt count. // 3. Resetting unlock attempt count correctly sets attempt count to 0. TEST_F(PinStorageUnitTest, UnlockAttemptCount) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile_.get()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile_.get()); EXPECT_EQ(0, pin_storage->unlock_attempt_count()); @@ -114,8 +115,8 @@ // Verifies that marking the strong auth makes TimeSinceLastStrongAuth a > zero // value. TEST_F(PinStorageUnitTest, TimeSinceLastStrongAuthReturnsPositiveValue) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile_.get()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile_.get()); PinStorageTestApi pin_storage_test(pin_storage); EXPECT_FALSE(pin_storage_test.HasStrongAuthInfo()); @@ -133,8 +134,8 @@ // Verifies that by altering the password confirmation preference, the pin // storage will request password reconfirmation as expected. TEST_F(PinStorageUnitTest, QuickUnlockPasswordConfirmationFrequencyPreference) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile_.get()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile_.get()); PrefService* pref_service = profile_->GetPrefs(); PinStorageTestApi test_api(pin_storage); @@ -155,8 +156,7 @@ // will. pin_storage->MarkStrongAuth(); SetConfirmationFrequency( - pref_service, - chromeos::QuickUnlockPasswordConfirmationFrequency::SIX_HOURS); + pref_service, quick_unlock::PasswordConfirmationFrequency::SIX_HOURS); test_api.ReduceRemainingStrongAuthTimeBy(base::TimeDelta::FromHours(4)); EXPECT_TRUE(pin_storage->HasStrongAuth()); test_api.ReduceRemainingStrongAuthTimeBy(base::TimeDelta::FromHours(4)); @@ -166,35 +166,31 @@ // shortened to less than the expiration time. pin_storage->MarkStrongAuth(); SetConfirmationFrequency( - pref_service, - chromeos::QuickUnlockPasswordConfirmationFrequency::TWELVE_HOURS); + pref_service, quick_unlock::PasswordConfirmationFrequency::TWELVE_HOURS); EXPECT_TRUE(pin_storage->HasStrongAuth()); test_api.ReduceRemainingStrongAuthTimeBy(base::TimeDelta::FromHours(8)); EXPECT_TRUE(pin_storage->HasStrongAuth()); SetConfirmationFrequency( - pref_service, - chromeos::QuickUnlockPasswordConfirmationFrequency::SIX_HOURS); + pref_service, quick_unlock::PasswordConfirmationFrequency::SIX_HOURS); EXPECT_FALSE(pin_storage->HasStrongAuth()); // An expired strong auth becomes usable if the confirmation frequency gets // extended past the expiration time. pin_storage->MarkStrongAuth(); SetConfirmationFrequency( - pref_service, - chromeos::QuickUnlockPasswordConfirmationFrequency::SIX_HOURS); + pref_service, quick_unlock::PasswordConfirmationFrequency::SIX_HOURS); EXPECT_TRUE(pin_storage->HasStrongAuth()); test_api.ReduceRemainingStrongAuthTimeBy(base::TimeDelta::FromHours(8)); EXPECT_FALSE(pin_storage->HasStrongAuth()); SetConfirmationFrequency( - pref_service, - chromeos::QuickUnlockPasswordConfirmationFrequency::TWELVE_HOURS); + pref_service, quick_unlock::PasswordConfirmationFrequency::TWELVE_HOURS); EXPECT_TRUE(pin_storage->HasStrongAuth()); } // Verifies that the correct pin can be used to authenticate. TEST_F(PinStorageUnitTest, AuthenticationSucceedsWithRightPin) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile_.get()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile_.get()); pin_storage->SetPin("1111"); @@ -205,15 +201,15 @@ // Verifies that the correct pin will fail to authenticate if too many // authentication attempts have been made. TEST_F(PinStorageUnitTest, AuthenticationFailsFromTooManyAttempts) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile_.get()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile_.get()); pin_storage->SetPin("1111"); // Use up all of the authentication attempts so authentication fails. pin_storage->MarkStrongAuth(); EXPECT_TRUE(pin_storage->IsPinAuthenticationAvailable()); - for (int i = 0; i < chromeos::PinStorage::kMaximumUnlockAttempts; ++i) + for (int i = 0; i < quick_unlock::PinStorage::kMaximumUnlockAttempts; ++i) EXPECT_FALSE(pin_storage->TryAuthenticatePin("foobar")); // We used up all of the attempts, so entering the right PIN will still fail. @@ -224,8 +220,8 @@ // Verifies that the correct pin will fail to authenticate if it has been too // long since a strong-auth/password authentication. TEST_F(PinStorageUnitTest, AuthenticationFailsFromTimeout) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForProfile(profile_.get()); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForProfile(profile_.get()); PinStorageTestApi pin_storage_test(pin_storage); pin_storage->SetPin("1111"); @@ -238,3 +234,4 @@ EXPECT_FALSE(pin_storage->IsPinAuthenticationAvailable()); } +} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.cc b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.cc index 7525f895..d3b7cc16 100644 --- a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.cc +++ b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.cc
@@ -39,6 +39,7 @@ } // namespace namespace chromeos { +namespace quick_unlock { QuickUnlockNotificationController::QuickUnlockNotificationController( Profile* profile) @@ -154,4 +155,5 @@ GURL(), kNotificationId, message_center::RichNotificationData(), this); } +} // namespace quick_unlock } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.h b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.h index e931871..d72eaa1 100644 --- a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.h +++ b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_notification_controller.h
@@ -15,6 +15,7 @@ class Notification; namespace chromeos { +namespace quick_unlock { // Quick Unlock feature notification controller is responsible for managing the // new feature notification displayed to the user. @@ -49,6 +50,7 @@ DISALLOW_COPY_AND_ASSIGN(QuickUnlockNotificationController); }; +} // namespace quick_unlock } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_QUICK_UNLOCK_QUICK_UNLOCK_NOTIFICATION_CONTROLLER_H_
diff --git a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.cc b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.cc index bb7b4ebd..8af3c1f 100644 --- a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.cc +++ b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.cc
@@ -14,6 +14,7 @@ #include "components/user_manager/user_manager.h" namespace chromeos { +namespace quick_unlock { namespace { bool enable_for_testing_ = false; @@ -24,14 +25,14 @@ constexpr int kDefaultMinimumPinLength = 6; } // namespace -void RegisterQuickUnlockProfilePrefs(PrefRegistrySimple* registry) { +void RegisterProfilePrefs(PrefRegistrySimple* registry) { base::ListValue quick_unlock_whitelist_default; quick_unlock_whitelist_default.AppendString(kQuickUnlockWhitelistOptionPin); registry->RegisterListPref(prefs::kQuickUnlockModeWhitelist, quick_unlock_whitelist_default.DeepCopy()); registry->RegisterIntegerPref( prefs::kQuickUnlockTimeout, - static_cast<int>(QuickUnlockPasswordConfirmationFrequency::DAY)); + static_cast<int>(PasswordConfirmationFrequency::DAY)); // Preferences related the lock screen pin unlock. registry->RegisterIntegerPref(prefs::kPinUnlockMinimumLength, @@ -43,7 +44,7 @@ registry->RegisterBooleanPref(prefs::kEnableQuickUnlockFingerprint, false); } -bool IsPinUnlockEnabled(PrefService* pref_service) { +bool IsPinEnabled(PrefService* pref_service) { if (enable_for_testing_) return true; @@ -69,13 +70,14 @@ return base::FeatureList::IsEnabled(features::kQuickUnlockPin); } -bool IsFingerprintUnlockEnabled() { +bool IsFingerprintEnabled() { // Enable fingerprint unlock only if the switch is present. return base::FeatureList::IsEnabled(features::kQuickUnlockFingerprint); } -void EnableQuickUnlockForTesting() { +void EnableForTesting() { enable_for_testing_ = true; } +} // namespace quick_unlock } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h index 979d4eec..626aef1 100644 --- a/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h +++ b/chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h
@@ -9,12 +9,13 @@ class PrefService; namespace chromeos { +namespace quick_unlock { // Enumeration specifiying the possible intervals before a strong auth // (password) is required to use quick unlock. These values correspond to the // policy items of QuickUnlockTimeout (policy ID 352) in policy_templates.json, // and should be updated accordingly. -enum class QuickUnlockPasswordConfirmationFrequency { +enum class PasswordConfirmationFrequency { SIX_HOURS = 0, TWELVE_HOURS = 1, DAY = 2, @@ -22,18 +23,19 @@ }; // Register quick unlock prefs. -void RegisterQuickUnlockProfilePrefs(PrefRegistrySimple* registry); +void RegisterProfilePrefs(PrefRegistrySimple* registry); // Returns true if PIN unlock is allowed by policy and the quick unlock feature // flag is present. -bool IsPinUnlockEnabled(PrefService* pref_service); +bool IsPinEnabled(PrefService* pref_service); // Returns true if the fingerprint unlock feature flag is present. -bool IsFingerprintUnlockEnabled(); +bool IsFingerprintEnabled(); // Forcibly enable quick-unlock for testing. -void EnableQuickUnlockForTesting(); +void EnableForTesting(); +} // namespace quick_unlock } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_QUICK_UNLOCK_QUICK_UNLOCK_UTILS_H_
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc index cb074247..fb655e17 100644 --- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc +++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc
@@ -123,7 +123,8 @@ if (!user->is_logged_in()) return false; - PinStorage* pin_storage = PinStorageFactory::GetForUser(user); + quick_unlock::PinStorage* pin_storage = + quick_unlock::PinStorageFactory::GetForUser(user); if (!pin_storage) return false;
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index 6c6b6c4..2a78309 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -1775,11 +1775,11 @@ if (HatsNotificationController::ShouldShowSurveyToProfile(profile)) hats_notification_controller_ = new HatsNotificationController(profile); - if (QuickUnlockNotificationController::ShouldShow(profile) && + if (quick_unlock::QuickUnlockNotificationController::ShouldShow(profile) && quick_unlock_notification_handler_.find(profile) == quick_unlock_notification_handler_.end()) { auto* qu_feature_notification_controller = - new QuickUnlockNotificationController(profile); + new quick_unlock::QuickUnlockNotificationController(profile); quick_unlock_notification_handler_.insert( std::make_pair(profile, qu_feature_notification_controller)); }
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.h b/chrome/browser/chromeos/login/session/user_session_manager.h index d406a10..604dd3e 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.h +++ b/chrome/browser/chromeos/login/session/user_session_manager.h
@@ -485,7 +485,7 @@ // Per-user-session Quick Unlock Feature Notification std::map<Profile*, - scoped_refptr<QuickUnlockNotificationController>, + scoped_refptr<quick_unlock::QuickUnlockNotificationController>, ProfileCompare> quick_unlock_notification_handler_;
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 61599a0..7e8126b 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -580,10 +580,10 @@ chromeos::file_system_provider::RegisterProfilePrefs(registry); chromeos::KeyPermissions::RegisterProfilePrefs(registry); chromeos::MultiProfileUserController::RegisterProfilePrefs(registry); - chromeos::PinStorage::RegisterProfilePrefs(registry); + chromeos::quick_unlock::PinStorage::RegisterProfilePrefs(registry); chromeos::Preferences::RegisterProfilePrefs(registry); chromeos::PrintersManager::RegisterProfilePrefs(registry); - chromeos::RegisterQuickUnlockProfilePrefs(registry); + chromeos::quick_unlock::RegisterProfilePrefs(registry); chromeos::SAMLOfflineSigninLimiter::RegisterProfilePrefs(registry); chromeos::ServicesCustomizationDocument::RegisterProfilePrefs(registry); chromeos::system::InputDeviceSettings::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index d939564..cf02376 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -949,8 +949,8 @@ for (user_manager::User* user : user_manager::UserManager::Get()->GetLoggedInUsers()) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForUser(user); + chromeos::quick_unlock::PinStorage* pin_storage = + chromeos::quick_unlock::PinStorageFactory::GetForUser(user); if (pin_storage && pin_storage->IsPinAuthenticationAvailable()) { CallJS("cr.ui.Oobe.preloadPinKeyboard"); break; @@ -996,8 +996,8 @@ } void SigninScreenHandler::HidePinKeyboardIfNeeded(const AccountId& account_id) { - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForAccountId(account_id); + chromeos::quick_unlock::PinStorage* pin_storage = + chromeos::quick_unlock::PinStorageFactory::GetForAccountId(account_id); if (pin_storage && !pin_storage->IsPinAuthenticationAvailable()) CallJS("login.AccountPickerScreen.disablePinKeyboardForUser", account_id); } @@ -1151,8 +1151,8 @@ return; DCHECK_EQ(account_id.GetUserEmail(), gaia::SanitizeEmail(account_id.GetUserEmail())); - chromeos::PinStorage* pin_storage = - chromeos::PinStorageFactory::GetForAccountId(account_id); + chromeos::quick_unlock::PinStorage* pin_storage = + chromeos::quick_unlock::PinStorageFactory::GetForAccountId(account_id); // If pin storage is unavailable, authenticated by PIN must be false. DCHECK(!pin_storage || pin_storage->IsPinAuthenticationAvailable() || !authenticated_by_pin);
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc index 1088902..c2898b6 100644 --- a/chrome/browser/ui/webui/options/browser_options_handler.cc +++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -816,10 +816,10 @@ values->SetBoolean("allowBluetooth", allow_bluetooth); values->SetBoolean("showQuickUnlockSettings", - chromeos::IsPinUnlockEnabled(profile->GetPrefs())); + chromeos::quick_unlock::IsPinEnabled(profile->GetPrefs())); values->SetBoolean("fingerprintUnlockEnabled", - chromeos::IsFingerprintUnlockEnabled()); - if (chromeos::IsPinUnlockEnabled(profile->GetPrefs())) { + chromeos::quick_unlock::IsFingerprintEnabled()); + if (chromeos::quick_unlock::IsPinEnabled(profile->GetPrefs())) { values->SetString( "enableScreenlock", l10n_util::GetStringUTF16(
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chrome/browser/ui/webui/settings/md_settings_ui.cc index 2cd4c0b..1d05b1e 100644 --- a/chrome/browser/ui/webui/settings/md_settings_ui.cc +++ b/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -161,10 +161,11 @@ AddSettingsPageUIHandler( base::MakeUnique<chromeos::settings::StylusHandler>()); - html_source->AddBoolean("pinUnlockEnabled", - chromeos::IsPinUnlockEnabled(profile->GetPrefs())); + html_source->AddBoolean( + "pinUnlockEnabled", + chromeos::quick_unlock::IsPinEnabled(profile->GetPrefs())); html_source->AddBoolean("fingerprintUnlockEnabled", - chromeos::IsFingerprintUnlockEnabled()); + chromeos::quick_unlock::IsFingerprintEnabled()); html_source->AddBoolean("androidAppsAllowed", arc::IsArcAllowedForProfile(profile) && !arc::IsArcOptInVerificationDisabled());
diff --git a/content/browser/media/audio_stream_monitor.cc b/content/browser/media/audio_stream_monitor.cc index f2782a6b..bab83477 100644 --- a/content/browser/media/audio_stream_monitor.cc +++ b/content/browser/media/audio_stream_monitor.cc
@@ -48,8 +48,7 @@ : web_contents_(contents), clock_(&default_tick_clock_), was_recently_audible_(false), - is_audible_(false), - active_streams_(0) { + is_audible_(false) { DCHECK(web_contents_); } @@ -65,6 +64,28 @@ return is_audible_; } +void AudioStreamMonitor::RenderProcessGone(int render_process_id) { + DCHECK(thread_checker_.CalledOnValidThread()); + + // Note: It's possible for the RenderProcessHost and WebContents (and thus + // this class) to survive the death of the render process and subsequently be + // reused. During this period StartStopMonitoringHelper() will be unable to + // lookup the WebContents using the now-dead |render_frame_id|. We must thus + // have this secondary mechanism for clearing stale callbacks. + + for (auto it = poll_callbacks_.begin(); it != poll_callbacks_.end();) { + if (it->first.first == render_process_id) { + it = poll_callbacks_.erase(it); + OnStreamRemoved(); + } else { + ++it; + } + } + + if (poll_callbacks_.empty()) + poll_timer_.Stop(); +} + // static void AudioStreamMonitor::StartMonitoringStream( int render_process_id, @@ -101,12 +122,8 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); if (AudioStreamMonitor* monitor = StartStopMonitoringHelper( ActionType::STARTING, render_process_id, render_frame_id)) { - if (!power_level_monitoring_available()) { - monitor->OnStreamAdded(); - } else { - monitor->StartMonitoringStreamOnUIThread(render_process_id, stream_id, - read_power_callback); - } + monitor->StartMonitoringStreamOnUIThread(render_process_id, stream_id, + read_power_callback); } } @@ -117,10 +134,7 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); if (AudioStreamMonitor* monitor = StartStopMonitoringHelper( ActionType::STOPPING, render_process_id, render_frame_id)) { - if (!power_level_monitoring_available()) - monitor->OnStreamRemoved(); - else - monitor->StopMonitoringStreamOnUIThread(render_process_id, stream_id); + monitor->StopMonitoringStreamOnUIThread(render_process_id, stream_id); } } @@ -133,26 +147,22 @@ const StreamID qualified_id(render_process_id, stream_id); DCHECK(poll_callbacks_.find(qualified_id) == poll_callbacks_.end()); - poll_callbacks_[qualified_id] = read_power_callback; - if (!poll_timer_.IsRunning()) { - poll_timer_.Start( - FROM_HERE, base::TimeDelta::FromSeconds(1) / - static_cast<int>(kPowerMeasurementsPerSecond), - base::Bind(&AudioStreamMonitor::Poll, base::Unretained(this))); - } + poll_callbacks_[qualified_id] = read_power_callback; + OnStreamAdded(); } void AudioStreamMonitor::StopMonitoringStreamOnUIThread(int render_process_id, int stream_id) { DCHECK(thread_checker_.CalledOnValidThread()); - const StreamID qualified_id(render_process_id, stream_id); - DCHECK(poll_callbacks_.find(qualified_id) != poll_callbacks_.end()); - poll_callbacks_.erase(qualified_id); + // In the event of render process death, these may have already been cleared. + auto it = poll_callbacks_.find(StreamID(render_process_id, stream_id)); + if (it == poll_callbacks_.end()) + return; - if (poll_callbacks_.empty()) - poll_timer_.Stop(); + poll_callbacks_.erase(it); + OnStreamRemoved(); } void AudioStreamMonitor::Poll() { @@ -204,22 +214,32 @@ void AudioStreamMonitor::OnStreamAdded() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - DCHECK(!power_level_monitoring_available()); - if (++active_streams_ == 1u) { + if (poll_callbacks_.size() != 1u) + return; + + if (!power_level_monitoring_available()) { is_audible_ = true; web_contents_->OnAudioStateChanged(true); MaybeToggle(); + } else if (!poll_timer_.IsRunning()) { + poll_timer_.Start( + FROM_HERE, base::TimeDelta::FromSeconds(1) / + static_cast<int>(kPowerMeasurementsPerSecond), + base::Bind(&AudioStreamMonitor::Poll, base::Unretained(this))); } } void AudioStreamMonitor::OnStreamRemoved() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - DCHECK(!power_level_monitoring_available()); - DCHECK_GT(active_streams_, 0u); - if (--active_streams_ == 0u) { + if (!poll_callbacks_.empty()) + return; + + if (!power_level_monitoring_available()) { is_audible_ = false; web_contents_->OnAudioStateChanged(false); MaybeToggle(); + } else { + poll_timer_.Stop(); } }
diff --git a/content/browser/media/audio_stream_monitor.h b/content/browser/media/audio_stream_monitor.h index ced46683..f925c91 100644 --- a/content/browser/media/audio_stream_monitor.h +++ b/content/browser/media/audio_stream_monitor.h
@@ -54,6 +54,10 @@ // false as soon as the WebContents stop producing sound. bool IsCurrentlyAudible() const; + // Called by the WebContentsImpl if |render_process_id| dies; used to clear + // any outstanding poll callbacks. + void RenderProcessGone(int render_process_id); + // Starts or stops audio level monitoring respectively for the stream owned by // the specified renderer. Safe to call from any thread. // @@ -142,8 +146,8 @@ // The callbacks to read power levels for each stream. Only playing (i.e., // not paused) streams will have an entry in this map. - typedef std::pair<int, int> StreamID; - typedef std::map<StreamID, ReadPowerAndClipCallback> StreamPollCallbackMap; + using StreamID = std::pair<int, int>; + using StreamPollCallbackMap = std::map<StreamID, ReadPowerAndClipCallback>; StreamPollCallbackMap poll_callbacks_; // Records the last time at which sound was audible from any stream. @@ -163,10 +167,6 @@ // future. base::OneShotTimer off_timer_; - // Number of active streams to be used as a proxy for audibility when power - // level monitoring is not available. - size_t active_streams_; - DISALLOW_COPY_AND_ASSIGN(AudioStreamMonitor); };
diff --git a/content/browser/media/audio_stream_monitor_unittest.cc b/content/browser/media/audio_stream_monitor_unittest.cc index f1d5103d..95f28b9 100644 --- a/content/browser/media/audio_stream_monitor_unittest.cc +++ b/content/browser/media/audio_stream_monitor_unittest.cc
@@ -78,11 +78,12 @@ void ExpectIsPolling(int render_process_id, int stream_id, bool is_polling) { const AudioStreamMonitor::StreamID key(render_process_id, stream_id); - EXPECT_EQ( - is_polling, - monitor_->poll_callbacks_.find(key) != monitor_->poll_callbacks_.end()); + EXPECT_EQ(is_polling, monitor_->poll_callbacks_.find(key) != + monitor_->poll_callbacks_.end()); EXPECT_EQ(!monitor_->poll_callbacks_.empty(), - monitor_->poll_timer_.IsRunning()); + power_level_monitoring_available() + ? monitor_->poll_timer_.IsRunning() + : monitor_->IsCurrentlyAudible()); } void ExpectTabWasRecentlyAudible(bool was_audible, @@ -141,14 +142,26 @@ int render_process_id, int stream_id, const AudioStreamMonitor::ReadPowerAndClipCallback& callback) { - monitor_->StartMonitoringStreamOnUIThread( - render_process_id, stream_id, callback); + if (!power_level_monitoring_available() && + monitor_->poll_callbacks_.empty()) { + ExpectCurrentlyAudibleChangeNotification(true); + } + monitor_->StartMonitoringStreamOnUIThread(render_process_id, stream_id, + callback); } void StopMonitoring(int render_process_id, int stream_id) { + if (!power_level_monitoring_available() && + monitor_->poll_callbacks_.size() == 1u) { + ExpectCurrentlyAudibleChangeNotification(false); + } monitor_->StopMonitoringStreamOnUIThread(render_process_id, stream_id); } + bool power_level_monitoring_available() { + return AudioStreamMonitor::power_level_monitoring_available(); + } + protected: AudioStreamMonitor* monitor_; @@ -175,6 +188,9 @@ // Tests that AudioStreamMonitor is polling while it has a // ReadPowerAndClipCallback, and is not polling at other times. TEST_F(AudioStreamMonitorTest, PollsWhenProvidedACallback) { + if (!power_level_monitoring_available()) + return; + EXPECT_FALSE(monitor_->WasRecentlyAudible()); ExpectNotCurrentlyAudible(); ExpectIsPolling(kRenderProcessId, kStreamId, false); @@ -195,6 +211,9 @@ // threshold. See comments in audio_stream_monitor.h for expected behavior. TEST_F(AudioStreamMonitorTest, ImpulsesKeepIndicatorOnUntilHoldingPeriodHasPassed) { + if (!power_level_monitoring_available()) + return; + StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId)); // Expect WebContents will get one call form AudioStreamMonitor to toggle the @@ -247,6 +266,9 @@ // Tests that the AudioStreamMonitor correctly processes the blurts from two // different streams in the same tab. TEST_F(AudioStreamMonitorTest, HandlesMultipleStreamsBlurting) { + if (!power_level_monitoring_available()) + return; + StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId)); StartMonitoring( kRenderProcessId, kAnotherStreamId, CreatePollCallback(kAnotherStreamId)); @@ -343,4 +365,38 @@ ExpectIsPolling(kAnotherRenderProcessId, kStreamId, false); } +TEST_F(AudioStreamMonitorTest, RenderProcessGone) { + StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId)); + StartMonitoring(kAnotherRenderProcessId, kStreamId, + CreatePollCallback(kStreamId)); + ExpectIsPolling(kRenderProcessId, kStreamId, true); + ExpectIsPolling(kAnotherRenderProcessId, kStreamId, true); + monitor_->RenderProcessGone(kRenderProcessId); + ExpectIsPolling(kRenderProcessId, kStreamId, false); + if (!power_level_monitoring_available()) + ExpectCurrentlyAudibleChangeNotification(false); + monitor_->RenderProcessGone(kAnotherRenderProcessId); + ExpectIsPolling(kAnotherRenderProcessId, kStreamId, false); +} + +TEST_F(AudioStreamMonitorTest, NoPowerLevelMonitoring) { + if (power_level_monitoring_available()) + return; + + ExpectNotCurrentlyAudible(); + StartMonitoring(kRenderProcessId, kStreamId, CreatePollCallback(kStreamId)); + ExpectIsCurrentlyAudible(); + ExpectIsPolling(kRenderProcessId, kStreamId, true); + + StartMonitoring(kAnotherRenderProcessId, kStreamId, + CreatePollCallback(kStreamId)); + ExpectIsCurrentlyAudible(); + ExpectIsPolling(kAnotherRenderProcessId, kStreamId, true); + + StopMonitoring(kRenderProcessId, kStreamId); + ExpectIsCurrentlyAudible(); + StopMonitoring(kAnotherRenderProcessId, kStreamId); + ExpectNotCurrentlyAudible(); +} + } // namespace content
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 87b9b7b..2daf76a0 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -4398,6 +4398,8 @@ if (delegate_) delegate_->HideValidationMessage(this); + audio_stream_monitor_.RenderProcessGone(rvh->GetProcess()->GetID()); + // Reset the loading progress. TODO(avi): What does it mean to have a // "renderer crash" when there is more than one renderer process serving a // webpage? Once this function is called at a more granular frame level, we
diff --git a/media/audio/win/audio_low_latency_input_win.cc b/media/audio/win/audio_low_latency_input_win.cc index df491b1..14a2f0d9 100644 --- a/media/audio/win/audio_low_latency_input_win.cc +++ b/media/audio/win/audio_low_latency_input_win.cc
@@ -356,13 +356,18 @@ // However if the buffer ratio is imperfect, we will need 3 buffers to safely // be able to buffer up data in cases where a conversion requires two audio // buffers (and we need to be able to write to the third one). + size_t capture_buffer_size = + std::max(2 * endpoint_buffer_size_frames_ * frame_size_, + 2 * packet_size_frames_ * frame_size_); + int buffers_required = capture_buffer_size / packet_size_bytes_; + if (converter_ && imperfect_buffer_size_conversion_) + ++buffers_required; + DCHECK(!fifo_); - const int buffers_required = - converter_ && imperfect_buffer_size_conversion_ ? 3 : 2; fifo_.reset(new AudioBlockFifo(format_.nChannels, packet_size_frames_, buffers_required)); - DVLOG(1) << "AudioBlockFifo needs " << buffers_required << " buffers"; + DVLOG(1) << "AudioBlockFifo buffer count: " << buffers_required; LARGE_INTEGER now_count = {}; bool recording = true;
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 4fd4294..6a9ef5c6 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -134,6 +134,7 @@ crbug.com/664852 virtual/gpu/fast/canvas/canvas-lose-restore-googol-size.html [ Pass Failure ] crbug.com/664852 virtual/gpu/fast/canvas/canvas-lost-gpu-context.html [ Pass Failure ] crbug.com/664852 virtual/gpu/fast/canvas/OffscreenCanvas-2d-drawImage.html [ Pass Failure ] +crbug.com/692400 fast/css/first-letter-rtc-crash.html [ NeedsRebaseline ] # Added 2016-12-14 crbug.com/674396 [ Win ] compositing/reflections/nested-reflection-transition.html [ Pass Failure ]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/MANIFEST.json b/third_party/WebKit/LayoutTests/external/wpt/MANIFEST.json index 4244315..4f71777 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/wpt/MANIFEST.json
@@ -21318,11 +21318,6 @@ {} ] ], - "selection/addRange-08-expected.txt": [ - [ - {} - ] - ], "selection/addRange-12-expected.txt": [ [ {} @@ -21358,31 +21353,6 @@ {} ] ], - "selection/addRange-40-expected.txt": [ - [ - {} - ] - ], - "selection/addRange-44-expected.txt": [ - [ - {} - ] - ], - "selection/addRange-48-expected.txt": [ - [ - {} - ] - ], - "selection/addRange-52-expected.txt": [ - [ - {} - ] - ], - "selection/addRange-56-expected.txt": [ - [ - {} - ] - ], "selection/addRange.js": [ [ {} @@ -21413,11 +21383,6 @@ {} ] ], - "selection/deleteFromDocument-expected.txt": [ - [ - {} - ] - ], "selection/extend-00-expected.txt": [ [ {} @@ -54647,7 +54612,7 @@ "support" ], "./MANIFEST.json": [ - "7cfcce7a806a8848409b9dbea851fadd3544d834", + "1ba6d9d96ac2726755be2db4cfbae75877b16384", "support" ], "./README.md": [ @@ -73655,11 +73620,11 @@ "support" ], "media-capabilities/idlharness.html": [ - "4ee7d3eb90c352a0888468578e49bbd49f91b789", + "d9a80463af2e0fc7bda0a4370a3ba0bbbb791897", "testharness" ], "media-capabilities/query.html": [ - "11afd4ba4eb40a5ff89c06ecf375eb16df65faaa", + "a83f2c7a7d9c38c707c4f96c3cd74f77185b7e43", "testharness" ], "media/2048x1360-random.jpg": [ @@ -82831,7 +82796,7 @@ "testharness" ], "selection/addRange-00-expected.txt": [ - "0aae2514f1f873b47e60d4c9ea005774afa280ab", + "eedac4c59c749216666bcd60a08711810db36e73", "support" ], "selection/addRange-00.html": [ @@ -82839,23 +82804,19 @@ "testharness" ], "selection/addRange-04-expected.txt": [ - "aed11682eea7bed0ef6fc44a5dc68762c13c7394", + "cdd195d7aadd66603ca9c0f5bf2b52cf054b92f2", "support" ], "selection/addRange-04.html": [ "c241e1c3a82f09c14bbf217350b2ee0b58c17178", "testharness" ], - "selection/addRange-08-expected.txt": [ - "e04b8a016042cc38a748f272cb9d291ba38808c9", - "support" - ], "selection/addRange-08.html": [ "6d51d9f4042e5590483fae60d19351602d6b0aa2", "testharness" ], "selection/addRange-12-expected.txt": [ - "b600b87e861e8d4ab6a978e4069bae3e893ac9c3", + "c37408236a59467912d31966c48e105b372be787", "support" ], "selection/addRange-12.html": [ @@ -82863,7 +82824,7 @@ "testharness" ], "selection/addRange-16-expected.txt": [ - "e7e68788a479995e679bf6687a69acde4d831f65", + "d8e9f67a786aea3ea8b94f942663ad69a419c52a", "support" ], "selection/addRange-16.html": [ @@ -82871,7 +82832,7 @@ "testharness" ], "selection/addRange-20-expected.txt": [ - "72fd62612f49950a11e9d3f98075d763b14fa5e3", + "2bc82fd38cd3bd635d3bda05fe3d92bc99f5e98a", "support" ], "selection/addRange-20.html": [ @@ -82879,7 +82840,7 @@ "testharness" ], "selection/addRange-24-expected.txt": [ - "035a0d5cbaac0dba45eb8d446ba5884b9e4cb211", + "fd4aabd6d0ed1531e3adc99411095b501e2be0de", "support" ], "selection/addRange-24.html": [ @@ -82887,7 +82848,7 @@ "testharness" ], "selection/addRange-28-expected.txt": [ - "2fd759a58f01cfcdce1f661fa0099a4cd67cb708", + "a0eb6bab0cdc1093ccad3c96eef6e99895d1a537", "support" ], "selection/addRange-28.html": [ @@ -82895,7 +82856,7 @@ "testharness" ], "selection/addRange-32-expected.txt": [ - "094c8213b11fab4ee9176ddea024f45c4b64cda7", + "c5bc03594b1095dedab19073232291b45f73a31a", "support" ], "selection/addRange-32.html": [ @@ -82903,55 +82864,35 @@ "testharness" ], "selection/addRange-36-expected.txt": [ - "529279feec4f7f6e1141452c032194a397dd5c23", + "fbed318b78eb54ba405d9b055d92f66bf899cf0a", "support" ], "selection/addRange-36.html": [ "9572f7b20ee6891157025e576cf837e496a61669", "testharness" ], - "selection/addRange-40-expected.txt": [ - "98d62124fc16e591af0d46c8c180db9b44e635e5", - "support" - ], "selection/addRange-40.html": [ "a58732345d1fdc0b833bf0b9062e44247e0a9592", "testharness" ], - "selection/addRange-44-expected.txt": [ - "adc6b32fb40a6eb502724c5ad9b789e9bc9075cd", - "support" - ], "selection/addRange-44.html": [ "7119f750a423fcfed1ddd1b92a48ae28cdaa0f02", "testharness" ], - "selection/addRange-48-expected.txt": [ - "13233557c60ff6324d2189b88185c0c9bccfd8da", - "support" - ], "selection/addRange-48.html": [ "c9fdeebfd75735480d07500faf217aae98ec12f1", "testharness" ], - "selection/addRange-52-expected.txt": [ - "d206db9236166700549a58bb26bef1b48a9e25a1", - "support" - ], "selection/addRange-52.html": [ "682150b475f15c8cef9e80a0a48e4a80a3a15a48", "testharness" ], - "selection/addRange-56-expected.txt": [ - "181678d34295b8d870156a35d027995360b46405", - "support" - ], "selection/addRange-56.html": [ "adcc65d54d59715ee740b2436486058ec578b63a", "testharness" ], "selection/addRange.js": [ - "df6dcd50618466c323d4343a8a2a55b2443e4498", + "67bd52a4653938061f121ed57ead8d768acdde2b", "support" ], "selection/collapse-00-expected.txt": [ @@ -82983,11 +82924,7 @@ "testharness" ], "selection/common.js": [ - "5c8f81d534759a0fa20a78f9643168a6d84d80b3", - "support" - ], - "selection/deleteFromDocument-expected.txt": [ - "a9c488204dc4254c8dc131859eaff3ef2e0c5429", + "279c4bf2f03cb1caa26b83a5898adfbf8bef2a5f", "support" ], "selection/deleteFromDocument.html": [ @@ -82999,7 +82936,7 @@ "manual" ], "selection/extend-00-expected.txt": [ - "b7d26aa46cad23b202e463701295a881785b569d", + "3c68a9961b52dbedf5eea97287db485236d34221", "support" ], "selection/extend-00.html": [ @@ -83007,7 +82944,7 @@ "testharness" ], "selection/extend-20-expected.txt": [ - "4d818e9dd9a326818a6defb25579c7ace9c10821", + "9acbe1d83b64ae83252fb896a21668944def8f5f", "support" ], "selection/extend-20.html": [ @@ -83015,7 +82952,7 @@ "testharness" ], "selection/extend-40-expected.txt": [ - "42e7a1c1a268ac5d625993d50fce8ecaf52881fa", + "0160a1d69f15c454ec0386418f10e8b07daa4fd9", "support" ], "selection/extend-40.html": [ @@ -83023,7 +82960,7 @@ "testharness" ], "selection/extend.js": [ - "6da1fb629a8323f7d45c952e7ff3ce5554f7d722", + "21daf8d7634f3c325bf9e5564d21701264497a38", "support" ], "selection/getRangeAt.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html b/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html index 1fa20c6..af0669b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html +++ b/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/idlharness.html
@@ -32,11 +32,11 @@ enum MediaConfigurationType { "file", - "MediaSource", + "media-source", }; dictionary VideoConfiguration { - required DOMString type; + required DOMString contentType; required unsigned long width; required unsigned long height; required unsigned long bitrate; @@ -44,7 +44,7 @@ }; dictionary AudioConfiguration { - required DOMString type; + required DOMString contentType; DOMString channels; unsigned long bitrate; unsigned long samplerate; @@ -58,12 +58,12 @@ [Exposed=(Window)] partial interface Navigator { - readonly attribute MediaCapabilities mediaCapabilities; + [SameObject] readonly attribute MediaCapabilities mediaCapabilities; }; [Exposed=(Worker)] partial interface WorkerNavigator { - readonly attribute MediaCapabilities mediaCapabilities; + [SameObject] readonly attribute MediaCapabilities mediaCapabilities; }; [Exposed=(Window, Worker)]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/query.html b/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/query.html index 809fbc6..f1bd22b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/query.html +++ b/third_party/WebKit/LayoutTests/external/wpt/media-capabilities/query.html
@@ -4,6 +4,22 @@ <script src="/resources/testharnessreport.js"></script> <script> +// Minimal VideoConfiguration that will be allowed per spec. All optional +// properties are missing. +var minimalVideoConfiguration = { + contentType: 'video/webm; codecs="vp9"', + width: 800, + height: 600, + bitrate: 3000, + framerate: 24, +}; + +// Minimal AudioConfiguration that will be allowed per spec. All optional +// properties are missing. +var minimalAudioConfiguration = { + contentType: 'audio/webm; codecs="opus"', +}; + promise_test(t => { return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.query()); }, "Test that query rejects if it doesn't get a configuration"); @@ -13,18 +29,17 @@ }, "Test that query rejects if the MediaConfiguration isn't valid"); promise_test(t => { + return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.query({ + video: minimalVideoConfiguration, + audio: minimalAudioConfiguration, + })); +}, "Test that query rejects if the MediaConfiguration does not have a type"); + +promise_test(t => { return navigator.mediaCapabilities.query({ type: 'file', - video: { - type: 'video/webm', - width: 800, - height: 600, - bitrate: 3000, - framerate: 24, - }, - audio: { - type: 'audio/webm', - }, + video: minimalVideoConfiguration, + audio: minimalAudioConfiguration, }).then(ability => { assert_idl_attribute(ability, 'supported'); assert_idl_attribute(ability, 'smooth'); @@ -32,4 +47,39 @@ }); }, "Test that query returns a valid MediaDecodingAbility objects"); +async_test(t => { + var validTypes = [ 'file', 'media-source' ]; + var invalidTypes = [ undefined, null, '', 'foobar', 'mse', 'MediaSource' ]; + + var validPromises = []; + var invalidCaught = 0; + + validTypes.forEach(type => { + validPromises.push(navigator.mediaCapabilities.query({ + type: type, + video: minimalVideoConfiguration, + audio: minimalAudioConfiguration, + })); + }); + + // validTypes are tested via Promise.all(validPromises) because if one of the + // promises fail, Promise.all() will reject. This mechanism can't be used for + // invalid types which will be tested individually and increment invalidCaught + // when rejected until the amount of rejection matches the expectation. + Promise.all(validPromises).then(t.step_func(() => { + for (var i = 0; i < invalidTypes.length; ++i) { + navigator.mediaCapabilities.query({ + type: invalidTypes[i], + video: minimalVideoConfiguration, + audio: minimalAudioConfiguration, + }).then(t.unreached_func(), t.step_func(e => { + assert_equals(e.name, 'TypeError'); + ++invalidCaught; + if (invalidCaught == invalidTypes.length) + t.done(); + })); + } + }), t.unreached_func('Promise.all should not reject for valid types')); +}, "Test that query rejects if the MediaConfiguration does not have a valid type"); + </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/collapseToStartEnd-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/collapseToStartEnd-expected.txt index a554a4e..5ab3c0d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/selection/collapseToStartEnd-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/collapseToStartEnd-expected.txt
@@ -17,33 +17,25 @@ CONSOLE ERROR: line 27: The given range isn't in document. CONSOLE ERROR: line 80: The given range isn't in document. This is a testharness.js-based test. -Found 118 tests; 12 PASS, 106 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 118 tests; 58 PASS, 60 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS Range 0 [] collapseToStart() PASS Range 0 [] collapseToEnd() PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] collapseToStart() PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0] collapseToEnd() PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] collapseToStart() -FAIL Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] collapseToEnd() assert_equals: focusOffset must equal the original end offset expected 1 but got 2 +PASS Range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1] collapseToEnd() PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] collapseToStart() PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8] collapseToEnd() PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] collapseToStart() -FAIL Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] collapseToEnd() assert_equals: focusOffset must equal the original end offset expected 9 but got 10 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] collapseToStart() assert_equals: focusNode must equal the original start node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] collapseToEnd() assert_equals: focusNode must equal the original end node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] collapseToStart() assert_equals: focusNode must equal the original start node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] collapseToStart() assert_equals: focusNode must equal the original start node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] collapseToEnd() assert_equals: focusNode must equal the original end node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] collapseToStart() assert_equals: focusNode must equal the original start node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] collapseToEnd() assert_equals: focusNode must equal the original end node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" +PASS Range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9] collapseToEnd() +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] collapseToStart() +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0] collapseToEnd() +PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] collapseToStart() +PASS Range 6 [paras[1].firstChild, 0, paras[1].firstChild, 1] collapseToEnd() +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] collapseToStart() +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 8] collapseToEnd() +PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] collapseToStart() +PASS Range 8 [paras[1].firstChild, 2, paras[1].firstChild, 9] collapseToEnd() FAIL Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 10 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 @@ -56,90 +48,58 @@ FAIL Range 13 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 14 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 -FAIL Range 15 [document.documentElement, 0, document.documentElement, 1] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <html><head><title>Selection.collapseTo(Start|End)() test... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 15 [document.documentElement, 0, document.documentElement, 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <html><head><title>Selection.collapseTo(Start|End)() test... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 16 [document.documentElement, 0, document.documentElement, 2] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <html><head><title>Selection.collapseTo(Start|End)() test... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 16 [document.documentElement, 0, document.documentElement, 2] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <html><head><title>Selection.collapseTo(Start|End)() test... but got Text node "Qrstuvwx" -FAIL Range 17 [document.documentElement, 1, document.documentElement, 2] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <html><head><title>Selection.collapseTo(Start|End)() test... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 17 [document.documentElement, 1, document.documentElement, 2] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <html><head><title>Selection.collapseTo(Start|End)() test... but got Text node "Qrstuvwx" -FAIL Range 18 [document.head, 1, document.head, 1] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <head><title>Selection.collapseTo(Start|End)() tests</tit... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 18 [document.head, 1, document.head, 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <head><title>Selection.collapseTo(Start|End)() tests</tit... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 19 [document.body, 0, document.body, 1] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 19 [document.body, 0, document.body, 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... but got Text node "Qrstuvwx" +PASS Range 15 [document.documentElement, 0, document.documentElement, 1] collapseToStart() +PASS Range 15 [document.documentElement, 0, document.documentElement, 1] collapseToEnd() +PASS Range 16 [document.documentElement, 0, document.documentElement, 2] collapseToStart() +PASS Range 16 [document.documentElement, 0, document.documentElement, 2] collapseToEnd() +PASS Range 17 [document.documentElement, 1, document.documentElement, 2] collapseToStart() +PASS Range 17 [document.documentElement, 1, document.documentElement, 2] collapseToEnd() +PASS Range 18 [document.head, 1, document.head, 1] collapseToStart() +PASS Range 18 [document.head, 1, document.head, 1] collapseToEnd() +PASS Range 19 [document.body, 0, document.body, 1] collapseToStart() +PASS Range 19 [document.body, 0, document.body, 1] collapseToEnd() FAIL Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 20 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 21 [foreignDoc.head, 1, foreignDoc.head, 1] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 21 [foreignDoc.head, 1, foreignDoc.head, 1] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 22 [foreignDoc.body, 0, foreignDoc.body, 0] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 22 [foreignDoc.body, 0, foreignDoc.body, 0] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 -FAIL Range 23 [paras[0], 0, paras[0], 0] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 23 [paras[0], 0, paras[0], 0] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 24 [paras[0], 0, paras[0], 1] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 24 [paras[0], 0, paras[0], 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" +PASS Range 23 [paras[0], 0, paras[0], 0] collapseToStart() +PASS Range 23 [paras[0], 0, paras[0], 0] collapseToEnd() +PASS Range 24 [paras[0], 0, paras[0], 1] collapseToStart() +PASS Range 24 [paras[0], 0, paras[0], 1] collapseToEnd() FAIL Range 25 [detachedPara1, 0, detachedPara1, 0] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 25 [detachedPara1, 0, detachedPara1, 0] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 26 [detachedPara1, 0, detachedPara1, 1] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 26 [detachedPara1, 0, detachedPara1, 1] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] collapseToStart() -FAIL Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] collapseToEnd() assert_equals: focusNode must equal the original end node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" +PASS Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 0] collapseToEnd() PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] collapseToStart() -FAIL Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] collapseToEnd() assert_equals: focusNode must equal the original end node expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 29 [paras[0].firstChild, 3, paras[3], 1] collapseToStart() assert_equals: focusOffset must equal the original start offset expected 3 but got 4 -FAIL Range 29 [paras[0].firstChild, 3, paras[3], 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Qrstuvwx" -FAIL Range 30 [paras[0], 0, paras[0].firstChild, 7] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 30 [paras[0], 0, paras[0].firstChild, 7] collapseToEnd() assert_equals: focusOffset must equal the original end offset expected 7 but got 8 -FAIL Range 31 [testDiv, 2, paras[4], 1] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Text node "Qrstuvwx" -FAIL Range 31 [testDiv, 2, paras[4], 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <p id="e" style="display:none">Ghijklmn</p> but got Text node "Qrstuvwx" -FAIL Range 32 [testDiv, 1, paras[2].firstChild, 5] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Text node "Qrstuvwx" +PASS Range 28 [paras[0].firstChild, 0, paras[1].firstChild, 8] collapseToEnd() +PASS Range 29 [paras[0].firstChild, 3, paras[3], 1] collapseToStart() +PASS Range 29 [paras[0].firstChild, 3, paras[3], 1] collapseToEnd() +PASS Range 30 [paras[0], 0, paras[0].firstChild, 7] collapseToStart() +PASS Range 30 [paras[0], 0, paras[0].firstChild, 7] collapseToEnd() +PASS Range 31 [testDiv, 2, paras[4], 1] collapseToStart() +PASS Range 31 [testDiv, 2, paras[4], 1] collapseToEnd() +PASS Range 32 [testDiv, 1, paras[2].firstChild, 5] collapseToStart() PASS Range 32 [testDiv, 1, paras[2].firstChild, 5] collapseToEnd() -FAIL Range 33 [document.documentElement, 1, document.body, 0] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <html><head><title>Selection.collapseTo(Start|End)() test... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 33 [document.documentElement, 1, document.body, 0] collapseToEnd() assert_equals: focusNode must equal the original end node expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" +PASS Range 33 [document.documentElement, 1, document.body, 0] collapseToStart() +PASS Range 33 [document.documentElement, 1, document.body, 0] collapseToEnd() FAIL Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 34 [foreignDoc.documentElement, 1, foreignDoc.body, 0] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 -FAIL Range 35 [document, 0, document, 1] collapseToStart() assert_equals: focusNode must equal the original start node expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 35 [document, 0, document, 1] collapseToEnd() assert_equals: focusNode must equal the original end node expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 36 [document, 0, document, 2] collapseToStart() assert_equals: focusNode must equal the original start node expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 36 [document, 0, document, 2] collapseToEnd() assert_equals: focusNode must equal the original end node expected Document node with 2 children but got Text node "Qrstuvwx" -FAIL Range 37 [document, 1, document, 2] collapseToStart() assert_equals: focusNode must equal the original start node expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 37 [document, 1, document, 2] collapseToEnd() assert_equals: focusNode must equal the original end node expected Document node with 2 children but got Text node "Qrstuvwx" -FAIL Range 38 [testDiv, 0, comment, 5] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 38 [testDiv, 0, comment, 5] collapseToEnd() assert_equals: focusNode must equal the original end node expected Comment node <!--Alphabet soup?--> but got Text node "Qrstuvwx" +PASS Range 35 [document, 0, document, 1] collapseToStart() +PASS Range 35 [document, 0, document, 1] collapseToEnd() +PASS Range 36 [document, 0, document, 2] collapseToStart() +PASS Range 36 [document, 0, document, 2] collapseToEnd() +PASS Range 37 [document, 1, document, 2] collapseToStart() +PASS Range 37 [document, 1, document, 2] collapseToEnd() +PASS Range 38 [testDiv, 0, comment, 5] collapseToStart() +PASS Range 38 [testDiv, 0, comment, 5] collapseToEnd() PASS Range 39 [paras[2].firstChild, 4, comment, 2] collapseToStart() -FAIL Range 39 [paras[2].firstChild, 4, comment, 2] collapseToEnd() assert_equals: focusNode must equal the original end node expected Comment node <!--Alphabet soup?--> but got Text node "Qrstuvwx" -FAIL Range 40 [paras[3], 1, comment, 8] collapseToStart() assert_equals: focusNode must equal the original start node expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Qrstuvwx" -FAIL Range 40 [paras[3], 1, comment, 8] collapseToEnd() assert_equals: focusNode must equal the original end node expected Comment node <!--Alphabet soup?--> but got Text node "Qrstuvwx" +PASS Range 39 [paras[2].firstChild, 4, comment, 2] collapseToEnd() +PASS Range 40 [paras[3], 1, comment, 8] collapseToStart() +PASS Range 40 [paras[3], 1, comment, 8] collapseToEnd() FAIL Range 41 [foreignDoc, 0, foreignDoc, 0] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 41 [foreignDoc, 0, foreignDoc, 0] collapseToEnd() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0 FAIL Range 42 [foreignDoc, 1, foreignComment, 2] collapseToStart() assert_equals: Sanity check: rangeCount must equal 1 after addRange() expected 1 but got 0
diff --git a/third_party/WebKit/LayoutTests/fast/css-intrinsic-dimensions/height-css-tables-expected.html b/third_party/WebKit/LayoutTests/fast/css-intrinsic-dimensions/height-css-tables-expected.html index 5f4d437..1e3c7f2 100644 --- a/third_party/WebKit/LayoutTests/fast/css-intrinsic-dimensions/height-css-tables-expected.html +++ b/third_party/WebKit/LayoutTests/fast/css-intrinsic-dimensions/height-css-tables-expected.html
@@ -28,9 +28,10 @@ </div> </div> - -<div class="table container" style="display: block; float: left; height: 98px;"> - <div class="td" style="height: 90px;" style="display: block;"> +<!-- crbug.com/690087: We use 99px instead of 100px because we end up discarding 1px when trying + to allocate the spare pixels to the table. --> +<div class="table container" style="display: block; float: left; height: 99px;"> + <div class="td" style="height: 91px;" style="display: block;"> <div class="item"></div> </div> </div>
diff --git a/third_party/WebKit/LayoutTests/fast/css/first-letter-rtc-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/css/first-letter-rtc-crash-expected.txt index 594e02e..aef377a0 100644 --- a/third_party/WebKit/LayoutTests/fast/css/first-letter-rtc-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/css/first-letter-rtc-crash-expected.txt
@@ -1,4 +1,5 @@ CONSOLE WARNING: line 21: The behavior that Selection.addRange() merges existing Range and the specified Range was removed. See https://www.chromestatus.com/features/6680566019653632 for more details. -CONSOLE ERROR: line 38: Uncaught HierarchyRequestError: Failed to execute 'insertNode' on 'Range': The node to be inserted contains the insertion point; it may not be inserted into itself. +CONSOLE ERROR: line 56: Uncaught HierarchyRequestError: Failed to execute 'insertNode' on 'Range': The node to be inserted contains the insertion point; it may not be inserted into itself. +text a Test passes if it does not CRASH.
diff --git a/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes-2.html b/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes-2.html new file mode 100644 index 0000000..a672749a --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes-2.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<p>crbug.com/691968: There should be a blue square below.</p> +<table id="table" style="border-spacing:0; width:100px; height:200px; background:blue;" data-expected-height=100> + <tr> + <td></td> + </tr> +</table> +<div id="results"></div> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/check-layout-th.js"></script> +<script> + document.body.offsetTop; + document.getElementById("table").style.height = "100px"; + checkLayout('#table', results); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes-3.html b/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes-3.html new file mode 100644 index 0000000..7090f188 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes-3.html
@@ -0,0 +1,29 @@ +<!DOCTYPE html> +<style> +table { + height: 100%; + width: 100%; +} +</style> +<p> crbug.com/691968: There should be no scrollbar. </p> +<div id="container" style="width: 400px; height: 400px; overflow: auto; overflow-x: hidden;"> + <table id="table" data-expected-height=200> + <colgroup> + <col style="width: 1161px;"> + </colgroup> + <tbody> + <tr> + <td></td> + </tr> + </tbody> + </table> +</div> +<div id="results"></div> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/check-layout-th.js"></script> +<script> + document.body.offsetTop; + document.getElementById("container").style.height = "200px"; + checkLayout('#table', results); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes.html b/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes.html new file mode 100644 index 0000000..4b94b91 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/table/layout-section-when-table-height-changes.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<style> +table { + table-layout: fixed; + height: 100%; + width: 100%; +} +</style> +<p> crbug.com/691968: There should be no scrollbar. </p> +<div id="container" style="width: 400px; height: 400px; overflow: auto; overflow-x: hidden;"> + <table id="table" data-expected-height=200> + <colgroup> + <col style="width: 1161px;"> + </colgroup> + <tbody> + <tr> + <td></td> + </tr> + </tbody> + </table> +</div> +<div id="results"></div> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/check-layout-th.js"></script> +<script> + document.body.offsetTop; + document.getElementById("container").style.height = "200px"; + checkLayout('#table', results); +</script>
diff --git a/third_party/WebKit/LayoutTests/html/text-level-semantics/abbr-acronym-rendering-expected.html b/third_party/WebKit/LayoutTests/html/text-level-semantics/abbr-acronym-rendering-expected.html new file mode 100644 index 0000000..13c7e2b --- /dev/null +++ b/third_party/WebKit/LayoutTests/html/text-level-semantics/abbr-acronym-rendering-expected.html
@@ -0,0 +1,7 @@ +<!DOCTYPE html> +<html> +<body> +<span style="text-decoration: dotted underline;">Cr</span> +<span style="text-decoration: dotted underline;">Pt</span> +</body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/html/text-level-semantics/abbr-acronym-rendering.html b/third_party/WebKit/LayoutTests/html/text-level-semantics/abbr-acronym-rendering.html new file mode 100644 index 0000000..1d74ce17 --- /dev/null +++ b/third_party/WebKit/LayoutTests/html/text-level-semantics/abbr-acronym-rendering.html
@@ -0,0 +1,7 @@ +<!DOCTYPE html> +<html> +<body> +<abbr title="Chromium">Cr</abbr> +<acronym title="Platinum">Pt</acronym> +</body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 5c52844..4553b0d 100644 --- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -236,6 +236,28 @@ method constructor method matrixTransform method toJSON +interface DOMRect : DOMRectReadOnly + getter height + getter width + getter x + getter y + method constructor + setter height + setter width + setter x + setter y +interface DOMRectReadOnly + static method fromRect + getter bottom + getter height + getter left + getter right + getter top + getter width + getter x + getter y + method constructor + method toJSON interface DOMStringList getter length method constructor
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.html b/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.html index 013c379..6c8da19 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.html +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.html
@@ -11,8 +11,14 @@ <tr> <td> <div id="target"></div> + <div id="dummy"></div> </td> </tr> </table> </body> </html> +<!-- crbug.com/690087: We do this to force a two-pass layout so that we get the same height on the table as the reference. --> +<script> + document.body.offsetTop; + document.getElementById("dummy").style.display = "none"; +</script>
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt index a3de9dc..f4575e4d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt
@@ -7,17 +7,40 @@ "drawsContent": true, "paintInvalidations": [ { - "object": "LayoutBlockFlow DIV id='target'", - "rect": [61, 44, 50, 25], + "object": "LayoutTable TABLE", + "rect": [8, 106, 106, 1], "reason": "incremental" + }, + { + "object": "LayoutTableCell TD", + "rect": [10, 104, 102, 1], + "reason": "incremental" + }, + { + "object": "LayoutBlockFlow DIV id='target'", + "rect": [11, 45, 100, 25], + "reason": "bounds change" + }, + { + "object": "LayoutBlockFlow DIV id='target'", + "rect": [11, 44, 50, 25], + "reason": "bounds change" } ] } ], "objectPaintInvalidations": [ { - "object": "LayoutBlockFlow DIV id='target'", + "object": "LayoutTable TABLE", "reason": "incremental" + }, + { + "object": "LayoutTableCell TD", + "reason": "incremental" + }, + { + "object": "LayoutBlockFlow DIV id='target'", + "reason": "bounds change" } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 21e61911..17874fc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 0c3bd4f9..1db384c 100644 --- a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -236,6 +236,28 @@ method constructor method matrixTransform method toJSON +interface DOMRect : DOMRectReadOnly + getter height + getter width + getter x + getter y + method constructor + setter height + setter width + setter x + setter y +interface DOMRectReadOnly + static method fromRect + getter bottom + getter height + getter left + getter right + getter top + getter width + getter x + getter y + method constructor + method toJSON interface DOMStringList getter length method constructor
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt index c1ec130..76c8ece 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -249,6 +249,30 @@ [Worker] method constructor [Worker] method matrixTransform [Worker] method toJSON +[Worker] interface DOMRect : DOMRectReadOnly +[Worker] attribute @@toStringTag +[Worker] getter height +[Worker] getter width +[Worker] getter x +[Worker] getter y +[Worker] method constructor +[Worker] setter height +[Worker] setter width +[Worker] setter x +[Worker] setter y +[Worker] interface DOMRectReadOnly +[Worker] static method fromRect +[Worker] attribute @@toStringTag +[Worker] getter bottom +[Worker] getter height +[Worker] getter left +[Worker] getter right +[Worker] getter top +[Worker] getter width +[Worker] getter x +[Worker] getter y +[Worker] method constructor +[Worker] method toJSON [Worker] interface DOMStringList [Worker] attribute @@toStringTag [Worker] getter length
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt index 97aced3..2b59c05 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -249,6 +249,30 @@ [Worker] method constructor [Worker] method matrixTransform [Worker] method toJSON +[Worker] interface DOMRect : DOMRectReadOnly +[Worker] attribute @@toStringTag +[Worker] getter height +[Worker] getter width +[Worker] getter x +[Worker] getter y +[Worker] method constructor +[Worker] setter height +[Worker] setter width +[Worker] setter x +[Worker] setter y +[Worker] interface DOMRectReadOnly +[Worker] static method fromRect +[Worker] attribute @@toStringTag +[Worker] getter bottom +[Worker] getter height +[Worker] getter left +[Worker] getter right +[Worker] getter top +[Worker] getter width +[Worker] getter x +[Worker] getter y +[Worker] method constructor +[Worker] method toJSON [Worker] interface DOMStringList [Worker] attribute @@toStringTag [Worker] getter length
diff --git a/third_party/WebKit/PerformanceTests/Layout/nested-percent-height-tables.html b/third_party/WebKit/PerformanceTests/Layout/nested-percent-height-tables.html new file mode 100644 index 0000000..934ed15 --- /dev/null +++ b/third_party/WebKit/PerformanceTests/Layout/nested-percent-height-tables.html
@@ -0,0 +1,94 @@ +<!DOCTYPE HTML> +<style> +.body { margin:0; } +.maxHeight { width:100%; height:100%; } +.overflowDiv { overflow:hidden; display:inline-block } +.overflowAuto { overflow:auto; } +</style> +<html id="top"> + <body class="body" style="height:100%;"> + <table class="maxHeight"> + <tr> + <td style="height:100%;"> + <div class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td style="height:100%;"> + <div class="maxHeight"> + <table id="top" class="maxHeight"> + <colgroup> + <col/> + <col /> + <col style="width:100%;"/> + </colgroup> + <tr style="height:100%;"> + <td style="height:100%;"> + <div class="overflowAuto maxHeight" style="position:relative;"> + </td> + <td rowspan="1"> + <div class="overflowDiv" > + </div> + </td> + <td style="height:100%;"> + <div class="overflowAuto maxHeight" style="position:relative;"> + <div class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td style="height:100%;"> + <table class="maxHeight"> + <tr> + <td colspan="2" class="maxHeight"> + <div class=" maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td style="height:100%;"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <div class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> + <table class="maxHeight"> + <tr> + <td class="maxHeight"> +<script src="../resources/runner.js"></script> +<script> +function test() { + PerfTestRunner.forceLayout(); + document.getElementById("top").style.height = "100%"; + PerfTestRunner.forceLayout(); + document.getElementById("top").style.height = "auto"; +} +PerfTestRunner.measureRunsPerSecond({ + description: "Measures performance of nested tables with percent height.", + run: test, +}); +</script>
diff --git a/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl b/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl index 8c7a5c4..ef2ec6f 100644 --- a/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl +++ b/third_party/WebKit/Source/build/scripts/templates/ComputedStyleBase.h.tmpl
@@ -77,12 +77,6 @@ ; } - void setBitDefaults() { - {% for field in fields %} - {{field.resetter_method_name}}(); - {% endfor %} - } - enum IsAtShadowBoundary { AtShadowBoundary, NotAtShadowBoundary,
diff --git a/third_party/WebKit/Source/core/css/html.css b/third_party/WebKit/Source/core/css/html.css index 99c3ae22..a0f1d95 100644 --- a/third_party/WebKit/Source/core/css/html.css +++ b/third_party/WebKit/Source/core/css/html.css
@@ -909,6 +909,10 @@ text-decoration: underline } +abbr[title], acronym[title] { + text-decoration: dotted underline; +} + strong, b { font-weight: bold }
diff --git a/third_party/WebKit/Source/core/dom/DOMRect.idl b/third_party/WebKit/Source/core/dom/DOMRect.idl index 782cc41..dfda1bf 100644 --- a/third_party/WebKit/Source/core/dom/DOMRect.idl +++ b/third_party/WebKit/Source/core/dom/DOMRect.idl
@@ -9,7 +9,7 @@ optional unrestricted double y = 0, optional unrestricted double width = 0, optional unrestricted double height = 0), - // FIXME: Exposed=(Window,Worker) + Exposed=(Window,Worker), RuntimeEnabled=GeometryInterfaces, ] interface DOMRect : DOMRectReadOnly { [NewObject] static DOMRect fromRect(optional DOMRectInit other);
diff --git a/third_party/WebKit/Source/core/dom/DOMRectReadOnly.idl b/third_party/WebKit/Source/core/dom/DOMRectReadOnly.idl index 859ecb6..e74e3c9 100644 --- a/third_party/WebKit/Source/core/dom/DOMRectReadOnly.idl +++ b/third_party/WebKit/Source/core/dom/DOMRectReadOnly.idl
@@ -7,7 +7,7 @@ [ Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, optional unrestricted double width = 0, optional unrestricted double height = 0), - // FIXME: Exposed=(Window,Worker) + Exposed=(Window,Worker), RuntimeEnabled=GeometryInterfaces, ] interface DOMRectReadOnly { [NewObject] static DOMRectReadOnly fromRect(optional DOMRectInit other);
diff --git a/third_party/WebKit/Source/core/editing/BUILD.gn b/third_party/WebKit/Source/core/editing/BUILD.gn index 01bb06b5..ac3beb0f 100644 --- a/third_party/WebKit/Source/core/editing/BUILD.gn +++ b/third_party/WebKit/Source/core/editing/BUILD.gn
@@ -236,7 +236,6 @@ "InputMethodControllerTest.cpp", "PositionTest.cpp", "RelocatablePositionTest.cpp", - "SelectionAdjusterTest.cpp", "SelectionControllerTest.cpp", "SelectionTemplateTest.cpp", "SurroundingTextTest.cpp",
diff --git a/third_party/WebKit/Source/core/editing/DOMSelection.cpp b/third_party/WebKit/Source/core/editing/DOMSelection.cpp index 3ab41952..e38f0d7 100644 --- a/third_party/WebKit/Source/core/editing/DOMSelection.cpp +++ b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
@@ -258,40 +258,54 @@ cacheRangeIfSelectionOfDocument(newRange); } +// https://www.w3.org/TR/selection-api/#dom-selection-collapsetoend void DOMSelection::collapseToEnd(ExceptionState& exceptionState) { if (!isAvailable()) return; - const VisibleSelection& selection = - frame()->selection().computeVisibleSelectionInDOMTreeDeprecated(); - - if (selection.isNone()) { + // The method must throw InvalidStateError exception if the context object is + // empty. + if (rangeCount() == 0) { exceptionState.throwDOMException(InvalidStateError, "there is no selection."); return; } + // Otherwise, it must create a new range, set both its start and end to the + // end of the context object's range, + Range* newRange = getRangeAt(0, ASSERT_NO_EXCEPTION)->cloneRange(); + newRange->collapse(false); + + // and then set the context object's range to the newly-created range. SelectionInDOMTree::Builder builder; - builder.collapse(selection.end()); + builder.collapse(newRange->endPosition()); frame()->selection().setSelection(builder.build()); + cacheRangeIfSelectionOfDocument(newRange); } +// https://www.w3.org/TR/selection-api/#dom-selection-collapsetostart void DOMSelection::collapseToStart(ExceptionState& exceptionState) { if (!isAvailable()) return; - const VisibleSelection& selection = - frame()->selection().computeVisibleSelectionInDOMTreeDeprecated(); - - if (selection.isNone()) { + // The method must throw InvalidStateError ([DOM4]) exception if the context + // object is empty. + if (rangeCount() == 0) { exceptionState.throwDOMException(InvalidStateError, "there is no selection."); return; } + // Otherwise, it must create a new range, set both its start and end to the + // start of the context object's range, + Range* newRange = getRangeAt(0, ASSERT_NO_EXCEPTION)->cloneRange(); + newRange->collapse(true); + + // and then set the context object's range to the newly-created range. SelectionInDOMTree::Builder builder; - builder.collapse(selection.start()); + builder.collapse(newRange->startPosition()); frame()->selection().setSelection(builder.build()); + cacheRangeIfSelectionOfDocument(newRange); } void DOMSelection::empty() {
diff --git a/third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp b/third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp index 450fe18..4d77b44 100644 --- a/third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp +++ b/third_party/WebKit/Source/core/editing/SelectionAdjuster.cpp
@@ -153,100 +153,6 @@ } // namespace -// Updates |selectionInFlatTree| to match with |selection|. -void SelectionAdjuster::adjustSelectionInFlatTree( - VisibleSelectionInFlatTree* selectionInFlatTree, - const VisibleSelection& selection) { - if (selection.isNone()) { - *selectionInFlatTree = VisibleSelectionInFlatTree(); - return; - } - - const PositionInFlatTree& base = toPositionInFlatTree(selection.base()); - const PositionInFlatTree& extent = toPositionInFlatTree(selection.extent()); - const PositionInFlatTree& position1 = toPositionInFlatTree(selection.start()); - const PositionInFlatTree& position2 = toPositionInFlatTree(selection.end()); - position1.anchorNode()->updateDistribution(); - position2.anchorNode()->updateDistribution(); - selectionInFlatTree->m_base = base; - selectionInFlatTree->m_extent = extent; - selectionInFlatTree->m_affinity = selection.m_affinity; - selectionInFlatTree->m_isDirectional = selection.m_isDirectional; - selectionInFlatTree->m_granularity = selection.m_granularity; - selectionInFlatTree->m_hasTrailingWhitespace = - selection.m_hasTrailingWhitespace; - selectionInFlatTree->m_baseIsFirst = - base.isNull() || base.compareTo(extent) <= 0; - if (position1.compareTo(position2) <= 0) { - selectionInFlatTree->m_start = position1; - selectionInFlatTree->m_end = position2; - } else { - selectionInFlatTree->m_start = position2; - selectionInFlatTree->m_end = position1; - } - selectionInFlatTree->updateSelectionType(); -} - -static bool isCrossingShadowBoundaries( - const VisibleSelectionInFlatTree& selection) { - if (!selection.isRange()) - return false; - TreeScope& treeScope = selection.base().anchorNode()->treeScope(); - return selection.extent().anchorNode()->treeScope() != treeScope || - selection.start().anchorNode()->treeScope() != treeScope || - selection.end().anchorNode()->treeScope() != treeScope; -} - -// TODO(yosin): We should make |adjustSelectionInDOMTree()| to return -// |VisibleSelection| once |VisibleSelection| constructor doesn't call -// |validate()|. -void SelectionAdjuster::adjustSelectionInDOMTree( - VisibleSelection* selection, - const VisibleSelectionInFlatTree& selectionInFlatTree) { - if (selectionInFlatTree.isNone()) { - *selection = VisibleSelection(); - return; - } - - const Position& base = toPositionInDOMTree(selectionInFlatTree.base()); - const Position& extent = toPositionInDOMTree(selectionInFlatTree.extent()); - - if (isCrossingShadowBoundaries(selectionInFlatTree)) { - DCHECK(base.document()); - - // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets - // needs to be audited. See http://crbug.com/590369 for more details. - // This layout update call cannot be hoisted out of the |if|, otherwise it's - // going to cause performance regression (http://crbug.com/652301). - // TODO(yosin): Implement and apply lazy visible selection validation so - // that we don't need to update layout here. - base.document()->updateStyleAndLayoutIgnorePendingStylesheets(); - - *selection = createVisibleSelection( - SelectionInDOMTree::Builder().setBaseAndExtent(base, extent).build()); - return; - } - - const Position& position1 = toPositionInDOMTree(selectionInFlatTree.start()); - const Position& position2 = toPositionInDOMTree(selectionInFlatTree.end()); - selection->m_base = base; - selection->m_extent = extent; - selection->m_affinity = selectionInFlatTree.m_affinity; - selection->m_isDirectional = selectionInFlatTree.m_isDirectional; - selection->m_granularity = selectionInFlatTree.m_granularity; - selection->m_hasTrailingWhitespace = - selectionInFlatTree.m_hasTrailingWhitespace; - selection->m_baseIsFirst = base.isNull() || base.compareTo(extent) <= 0; - if (position1.compareTo(position2) <= 0) { - selection->m_start = position1; - selection->m_end = position2; - } else { - selection->m_start = position2; - selection->m_end = position1; - } - selection->updateSelectionType(); -} - void SelectionAdjuster::adjustSelectionToAvoidCrossingShadowBoundaries( VisibleSelection* selection) { // Note: |m_selectionType| isn't computed yet.
diff --git a/third_party/WebKit/Source/core/editing/SelectionAdjuster.h b/third_party/WebKit/Source/core/editing/SelectionAdjuster.h index 37d11e6..92df242a 100644 --- a/third_party/WebKit/Source/core/editing/SelectionAdjuster.h +++ b/third_party/WebKit/Source/core/editing/SelectionAdjuster.h
@@ -17,10 +17,6 @@ STATIC_ONLY(SelectionAdjuster); public: - static void adjustSelectionInFlatTree(VisibleSelectionInFlatTree*, - const VisibleSelection&); - static void adjustSelectionInDOMTree(VisibleSelection*, - const VisibleSelectionInFlatTree&); static void adjustSelectionToAvoidCrossingShadowBoundaries(VisibleSelection*); static void adjustSelectionToAvoidCrossingShadowBoundaries( VisibleSelectionInFlatTree*);
diff --git a/third_party/WebKit/Source/core/editing/SelectionAdjusterTest.cpp b/third_party/WebKit/Source/core/editing/SelectionAdjusterTest.cpp deleted file mode 100644 index 1e60262..0000000 --- a/third_party/WebKit/Source/core/editing/SelectionAdjusterTest.cpp +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright 2014 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 "core/editing/SelectionAdjuster.h" - -#include "core/editing/EditingTestBase.h" - -namespace blink { - -class SelectionAdjusterTest : public EditingTestBase {}; - -TEST_F(SelectionAdjusterTest, adjustSelectionInFlatTree) { - setBodyContent("<div id=sample>foo</div>"); - VisibleSelectionInFlatTree selectionInFlatTree; - - Node* const sample = document().getElementById("sample"); - Node* const foo = sample->firstChild(); - // Select "foo" - VisibleSelection selection = - createVisibleSelection(SelectionInDOMTree::Builder() - .collapse(Position(foo, 0)) - .extend(Position(foo, 3)) - .build()); - SelectionAdjuster::adjustSelectionInFlatTree(&selectionInFlatTree, selection); - EXPECT_EQ(PositionInFlatTree(foo, 0), selectionInFlatTree.start()); - EXPECT_EQ(PositionInFlatTree(foo, 3), selectionInFlatTree.end()); -} - -TEST_F(SelectionAdjusterTest, adjustSelectionInDOMTree) { - setBodyContent("<div id=sample>foo</div>"); - VisibleSelection selection; - - Node* const sample = document().getElementById("sample"); - Node* const foo = sample->firstChild(); - // Select "foo" - VisibleSelectionInFlatTree selectionInFlatTree = - createVisibleSelection(SelectionInFlatTree::Builder() - .collapse(PositionInFlatTree(foo, 0)) - .extend(PositionInFlatTree(foo, 3)) - .build()); - SelectionAdjuster::adjustSelectionInDOMTree(&selection, selectionInFlatTree); - EXPECT_EQ(Position(foo, 0), selection.start()); - EXPECT_EQ(Position(foo, 3), selection.end()); -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/VisibleSelectionTest.cpp b/third_party/WebKit/Source/core/editing/VisibleSelectionTest.cpp index 1ab7b726..549b61c 100644 --- a/third_party/WebKit/Source/core/editing/VisibleSelectionTest.cpp +++ b/third_party/WebKit/Source/core/editing/VisibleSelectionTest.cpp
@@ -481,11 +481,6 @@ // Simulates to restore selection from undo stack. selection.updateIfNeeded(); EXPECT_EQ(Position(sample->firstChild(), 0), selection.start()); - - VisibleSelectionInFlatTree selectionInFlatTree; - SelectionAdjuster::adjustSelectionInFlatTree(&selectionInFlatTree, selection); - EXPECT_EQ(PositionInFlatTree(sample->firstChild(), 0), - selectionInFlatTree.start()); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp index 2c123d2..7587722 100644 --- a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
@@ -832,7 +832,7 @@ const String&) { return targetFrame(frame, event) ->eventHandler() - .handleTextInputEvent("\t", event, TextEventInputBackTab); + .handleTextInputEvent("\t", event); } static bool executeInsertHorizontalRule(LocalFrame& frame,
diff --git a/third_party/WebKit/Source/core/events/TextEventInputType.h b/third_party/WebKit/Source/core/events/TextEventInputType.h index a86270f..0c035ae 100644 --- a/third_party/WebKit/Source/core/events/TextEventInputType.h +++ b/third_party/WebKit/Source/core/events/TextEventInputType.h
@@ -35,12 +35,9 @@ // Any tab characters in the text are backtabs. TextEventInputLineBreak, TextEventInputComposition, - TextEventInputBackTab, TextEventInputPaste, TextEventInputDrop, - TextEventInputDictation, TextEventInputIncrementalInsertion, - TextEventInputOther, }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/TextControlElement.cpp b/third_party/WebKit/Source/core/html/TextControlElement.cpp index 0ed399f2..273579c 100644 --- a/third_party/WebKit/Source/core/html/TextControlElement.cpp +++ b/third_party/WebKit/Source/core/html/TextControlElement.cpp
@@ -434,15 +434,14 @@ DCHECK_EQ(endPosition.anchorNode()->ownerShadowHost(), this); } #endif // DCHECK_IS_ON() - VisibleSelection newSelection; - if (direction == SelectionHasBackwardDirection) - newSelection.setWithoutValidation(endPosition, startPosition); - else - newSelection.setWithoutValidation(startPosition, endPosition); - newSelection.setIsDirectional(direction != SelectionHasNoDirection); - frame->selection().setSelection( - newSelection, + SelectionInDOMTree::Builder() + .collapse(direction == SelectionHasBackwardDirection ? endPosition + : startPosition) + .extend(direction == SelectionHasBackwardDirection ? startPosition + : endPosition) + .setIsDirectional(direction != SelectionHasNoDirection) + .build(), FrameSelection::DoNotAdjustInFlatTree | FrameSelection::CloseTyping | FrameSelection::ClearTypingStyle | FrameSelection::DoNotSetFocus); return true;
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.cpp b/third_party/WebKit/Source/core/layout/LayoutTable.cpp index c497b9f0..ea658b4 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTable.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
@@ -445,18 +445,22 @@ void LayoutTable::layoutSection(LayoutTableSection& section, SubtreeLayoutScope& layouter, - LayoutUnit logicalLeft) { + LayoutUnit logicalLeft, + TableHeightChangingValue tableHeightChanging) { section.setLogicalLocation(LayoutPoint(logicalLeft, logicalHeight())); if (m_columnLogicalWidthChanged) layouter.setChildNeedsLayout(§ion); if (!section.needsLayout()) markChildForPaginationRelayoutIfNeeded(section, layouter); - section.layoutIfNeeded(); - int sectionLogicalHeight = section.calcRowLogicalHeight(); - section.setLogicalHeight(LayoutUnit(sectionLogicalHeight)); + bool neededLayout = section.needsLayout(); + if (neededLayout) + section.layout(); + if (neededLayout || tableHeightChanging == TableHeightChanging) + section.setLogicalHeight(LayoutUnit(section.calcRowLogicalHeight())); + if (view()->layoutState()->isPaginated()) updateFragmentationInfoForChild(section); - setLogicalHeight(logicalHeight() + sectionLogicalHeight); + setLogicalHeight(logicalHeight() + section.logicalHeight()); } LayoutUnit LayoutTable::logicalHeightFromStyle() const { @@ -501,8 +505,8 @@ extraLogicalHeight -= section->distributeExtraLogicalHeightToRows(extraLogicalHeight); - // FIXME: We really would like to enable this ASSERT to ensure that all the - // extra space has been distributed. + // crbug.com/690087: We really would like to enable this ASSERT to ensure that + // all the extra space has been distributed. // However our current distribution algorithm does not round properly and thus // we can have some remaining height. // ASSERT(!topSection() || !extraLogicalHeight); @@ -623,10 +627,19 @@ sectionLogicalLeft += style()->isLeftToRightDirection() ? paddingStart() : paddingEnd(); } + LayoutUnit currentAvailableLogicalHeight = + availableLogicalHeight(IncludeMarginBorderPadding); + TableHeightChangingValue tableHeightChanging = + m_oldAvailableLogicalHeight && + m_oldAvailableLogicalHeight != currentAvailableLogicalHeight + ? TableHeightChanging + : TableHeightNotChanging; + m_oldAvailableLogicalHeight = currentAvailableLogicalHeight; // Lay out table header group. if (LayoutTableSection* section = header()) { - layoutSection(*section, layouter, sectionLogicalLeft); + layoutSection(*section, layouter, sectionLogicalLeft, + tableHeightChanging); if (state.isPaginated()) { // If the repeating header group allows at least one row of content, // then store the offset for other sections to offset their rows @@ -651,7 +664,8 @@ if (child->isTableSection()) { if (child != header() && child != footer()) { LayoutTableSection& section = *toLayoutTableSection(child); - layoutSection(section, layouter, sectionLogicalLeft); + layoutSection(section, layouter, sectionLogicalLeft, + tableHeightChanging); } } else if (child->isLayoutTableCol()) { child->layoutIfNeeded(); @@ -661,8 +675,10 @@ } // Lay out table footer. - if (LayoutTableSection* section = footer()) - layoutSection(*section, layouter, sectionLogicalLeft); + if (LayoutTableSection* section = footer()) { + layoutSection(*section, layouter, sectionLogicalLeft, + tableHeightChanging); + } setLogicalHeight(tableBoxLogicalTop + borderAndPaddingBefore);
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.h b/third_party/WebKit/Source/core/layout/LayoutTable.h index b2f86d6..26b7755 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTable.h +++ b/third_party/WebKit/Source/core/layout/LayoutTable.h
@@ -42,6 +42,7 @@ class TableLayoutAlgorithm; enum SkipEmptySectionsValue { DoNotSkipEmptySections, SkipEmptySections }; +enum TableHeightChangingValue { TableHeightNotChanging, TableHeightChanging }; // LayoutTable is the LayoutObject associated with // display: table or inline-table. @@ -515,7 +516,8 @@ void layoutCaption(LayoutTableCaption&, SubtreeLayoutScope&); void layoutSection(LayoutTableSection&, SubtreeLayoutScope&, - LayoutUnit logicalLeft); + LayoutUnit logicalLeft, + TableHeightChangingValue); // Return the logical height based on the height, min-height and max-height // properties from CSS. Will return 0 if auto. @@ -599,6 +601,7 @@ LayoutUnit m_blockOffsetToFirstRepeatableHeader; LayoutUnit m_rowOffsetFromRepeatingHeader; + LayoutUnit m_oldAvailableLogicalHeight; }; inline LayoutTableSection* LayoutTable::topSection() const {
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.h b/third_party/WebKit/Source/core/layout/LayoutTableSection.h index f7d6d1d..0254244 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTableSection.h +++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.h
@@ -329,6 +329,8 @@ bool isRepeatingHeaderGroup() const; + void layout() override; + protected: void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override; bool nodeAtPoint(HitTestResult&, @@ -343,8 +345,6 @@ void willBeRemovedFromTree() override; - void layout() override; - int borderSpacingForRow(unsigned row) const { return m_grid[row].rowLayoutObject ? table()->vBorderSpacing() : 0; }
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp index bc38abc..08720ae 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp +++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -124,7 +124,8 @@ m_rareInheritedData(initialStyle().m_rareInheritedData), m_styleInheritedData(initialStyle().m_styleInheritedData), m_svgStyle(initialStyle().m_svgStyle) { - setBitDefaults(); // Would it be faster to copy this from the default style? + initializeBitDefaults(); // Would it be faster to copy this from the default + // style? static_assert((sizeof(InheritedData) <= 8), "InheritedData should not grow"); static_assert((sizeof(NonInheritedData) <= 12), "NonInheritedData should not grow"); @@ -132,7 +133,7 @@ ALWAYS_INLINE ComputedStyle::ComputedStyle(InitialStyleTag) : ComputedStyleBase(), RefCounted<ComputedStyle>() { - setBitDefaults(); + initializeBitDefaults(); m_box.init(); m_visual.init();
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h index 37acb41..a297c51 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.h +++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -290,9 +290,9 @@ // !END SYNC! - void setBitDefaults() { - // Generated properties are updated in ComputedStyleBase - ComputedStyleBase::setBitDefaults(); + // Only call inside the constructor. Generated properties in the base class + // are not initialized in this method. + void initializeBitDefaults() { m_inheritedData.m_hasSimpleUnderline = false; m_inheritedData.m_cursorStyle = static_cast<unsigned>(initialCursor()); m_inheritedData.m_insideLink =
diff --git a/third_party/WebKit/Source/modules/mediacapabilities/AudioConfiguration.idl b/third_party/WebKit/Source/modules/mediacapabilities/AudioConfiguration.idl index 3c4128b..cd9fcfc 100644 --- a/third_party/WebKit/Source/modules/mediacapabilities/AudioConfiguration.idl +++ b/third_party/WebKit/Source/modules/mediacapabilities/AudioConfiguration.idl
@@ -5,7 +5,7 @@ // https://wicg.github.io/media-capabilities/#dictdef-audioconfiguration dictionary AudioConfiguration { - required DOMString type; + required DOMString contentType; DOMString channels; unsigned long bitrate;
diff --git a/third_party/WebKit/Source/modules/mediacapabilities/MediaConfiguration.idl b/third_party/WebKit/Source/modules/mediacapabilities/MediaConfiguration.idl index 5d82f14..aa3da1d 100644 --- a/third_party/WebKit/Source/modules/mediacapabilities/MediaConfiguration.idl +++ b/third_party/WebKit/Source/modules/mediacapabilities/MediaConfiguration.idl
@@ -6,7 +6,7 @@ enum MediaConfigurationType { "file", - "MediaSource", + "media-source", }; dictionary MediaConfiguration {
diff --git a/third_party/WebKit/Source/modules/mediacapabilities/VideoConfiguration.idl b/third_party/WebKit/Source/modules/mediacapabilities/VideoConfiguration.idl index bf4f615..af63d0b 100644 --- a/third_party/WebKit/Source/modules/mediacapabilities/VideoConfiguration.idl +++ b/third_party/WebKit/Source/modules/mediacapabilities/VideoConfiguration.idl
@@ -5,7 +5,7 @@ // https://wicg.github.io/media-capabilities/#dictdef-videoconfiguration dictionary VideoConfiguration { - required DOMString type; + required DOMString contentType; required unsigned long width; required unsigned long height; required unsigned long bitrate;
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc index 43bb7d7..dbb489fa 100644 --- a/ui/base/x/x11_util.cc +++ b/ui/base/x/x11_util.cc
@@ -288,7 +288,9 @@ XcursorImage* SkBitmapToXcursorImage(const SkBitmap* cursor_image, const gfx::Point& hotspot) { - DCHECK(cursor_image->colorType() == kN32_SkColorType); + // TODO(crbug.com/596782): It is possible for cursor_image to be zeroed out + // at this point, which leads to benign debug errors. Once this is fixed, we + // should DCHECK_EQ(cursor_image->colorType(), kN32_SkColorType). gfx::Point hotspot_point = hotspot; SkBitmap scaled;