diff --git a/.gitignore b/.gitignore index f01599cf..876cc7bb 100644 --- a/.gitignore +++ b/.gitignore
@@ -75,6 +75,7 @@ /chrome/android/profiles/afdo.prof /chrome/android/profiles/local.txt /chrome/angle_unittests_run.xml +/chrome/app/vector_icons/google_chrome/ /chrome/build/chrome.x64.orderfile /chrome/build/chrome.x86.orderfile /chrome/build/chrome_child.x64.orderfile
diff --git a/DEPS b/DEPS index 8320f7e..365cf1d 100644 --- a/DEPS +++ b/DEPS
@@ -129,11 +129,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': '7656b2c18ce88e023f7911274535a3df34118817', + 'skia_revision': 'cfb0e026fe00e94dc5b72f7984e4edc918628e4f', # 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': 'c796dae269b97c5a146a50e8bc710e3bbfae77f1', + 'v8_revision': 'b595027bab397770e0f3e6c78cc17ceed9eaf6cd', # 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. @@ -141,7 +141,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '9f958344898ce0c4259d36c09c79e1a9de8ce47c', + 'angle_revision': 'd5ff4fadd867f7adee0e8f88e37230ce61d109c5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -149,7 +149,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '3419af426bd572e23f3e8b0ab994589e3e4020af', + 'pdfium_revision': '7f7405ec47e9ca045d6bf391a05a423e5f1338e9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -196,7 +196,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '979fc35bbcca4c9015176a71d8d71abe023d94e8', + 'catapult_revision': 'dc3ad63a09b8ca5e3f79ecb2f4794c1da6ced43b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -252,7 +252,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'spv_tools_revision': '7ce37d66a86d5869ed64e996c9ae694cd47796b8', + 'spv_tools_revision': 'd90aae9a5a6cb05b9d7eb45555d9ae107fbe7464', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -805,7 +805,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '36589c6fccb25e55bdc289495fcebde2af994840', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '4206f6a183ae23c0f0dc402e04631ec6ab5a2216', 'condition': 'checkout_linux', }, @@ -1172,7 +1172,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'fb43b375bc15b88f115841f7ce336efa61df1ce6', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '71cac8bfa4a8126c400d08ce0517771f5c29537b', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78', @@ -1384,7 +1384,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@fa0935506a93a988c095b6e860c3cb9c3939e5da', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@8342a7f2fc299ccd32d5335f335316049654629a', 'condition': 'checkout_src_internal', },
diff --git a/ENG_REVIEW_OWNERS b/ENG_REVIEW_OWNERS index 89398a8c..8970046d 100644 --- a/ENG_REVIEW_OWNERS +++ b/ENG_REVIEW_OWNERS
@@ -3,9 +3,9 @@ ben@chromium.org darin@chromium.org -klobag@chromium.org jochen@chromium.org jam@chromium.org jschuh@chromium.org pinkerton@chromium.org sky@chromium.org +tedchoc@chromium.org
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index f56ef0fb8..389d66d 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -710,6 +710,14 @@ r'^third_party/blink/renderer/.*\.(cc|h)$', ), ), + ( + 'mojo::DataPipe', + ( + 'mojo::DataPipe is deprecated. Use mojo::CreateDataPipe instead.', + ), + True, + (), + ), )
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py index 34456b1..a650950 100755 --- a/PRESUBMIT_test.py +++ b/PRESUBMIT_test.py
@@ -1772,6 +1772,20 @@ self.assertTrue('another/ios_file.mm' in errors[0].message) self.assertTrue('some/mac/file.mm' not in errors[0].message) + def testBannedMojoFunctions(self): + input_api = MockInputApi() + input_api.files = [ + MockFile('some/cpp/problematic/file.cc', + ['mojo::DataPipe();']), + MockFile('some/cpp/ok/file.cc', + ['CreateDataPipe();']), + ] + + errors = PRESUBMIT._CheckNoBannedFunctions(input_api, MockOutputApi()) + self.assertEqual(1, len(errors)) + self.assertTrue('some/cpp/problematic/file.cc' in errors[0].message) + self.assertTrue('some/cpp/ok/file.cc' not in errors[0].message) + class NoProductionCodeUsingTestOnlyFunctionsTest(unittest.TestCase): def testTruePositives(self):
diff --git a/WATCHLISTS b/WATCHLISTS index f3e7b866..bd5df2a7 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -722,6 +722,12 @@ 'chromeos_calculator': { 'filepath': 'chrome/common/extensions/docs/examples/apps/calculator/', }, + 'chromeos_cellular': { + 'filepath': 'chrome/browser/resources/chromeos/cellular_setup/|'\ + 'chrome/browser/ui/webui/chromeos/cellular_setup/|'\ + 'chromeos/services/cellular_setup/|'\ + 'ui/webui/resources/cr_components/chromeos/cellular_setup/', + }, 'chromeos_geolocation': { 'filepath': 'chromeos/geolocation/', }, @@ -736,9 +742,11 @@ 'ui/login/', }, 'chromeos_net': { - 'filepath': 'chromeos/network/|'\ + 'filepath': 'ash/system/network/|'\ + 'chromeos/network/|'\ 'chrome/browser/chromeos/net/|'\ 'chrome/browser/extensions/api/networking_private/|'\ + 'chrome/browser/resources/settings/internet_page/|'\ 'extensions/browser/api/networking_private/|'\ 'ui/chromeos/network/', }, @@ -2119,6 +2127,8 @@ 'chromeos': ['oshima+watch@chromium.org'], 'chromeos_attestation': ['dkrahn+watch@chromium.org'], 'chromeos_calculator': ['dharcourt@chromium.org'], + 'chromeos_cellular': ['azeemarshad+watch-cellular@chromium.org', + 'khorimoto+watch-cellular@chromium.org'], 'chromeos_geolocation': ['alemate+watch@chromium.org'], 'chromeos_lkgm': ['achuith+watch@chromium.org', 'bpastene+watch@chromium.org', @@ -2128,7 +2138,9 @@ 'jdufault+watch@chromium.org', 'rsorokin+watch@chromium.org', 'tbarzic+watch@chromium.org'], - 'chromeos_net': ['stevenjb+watch@chromium.org'], + 'chromeos_net': ['azeemarshad+watch-network@chromium.org', + 'khorimoto+watch-network@chromium.org', + 'stevenjb+watch-network@chromium.org'], 'chromeos_power': ['derat+watch@chromium.org'], 'chromeos_timezone': ['alemate+watch@chromium.org'], 'chromeos_webui': ['alemate+watch@chromium.org'],
diff --git a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java index 890ff7e..8f991b6eb 100644 --- a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java +++ b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
@@ -230,16 +230,11 @@ * @return a Uri instance, or null if the URL was invalid. */ private static Uri verifyUrl(String url) { - if (url == null) { - return null; - } - Uri uri = Uri.parse(url); - if (uri == null) { - Log.e(TAG, "Malformed URL: " + url); - return null; - } + if (url == null) return null; + if (url.isEmpty()) return null; + Uri uri = Uri.parse(url); // Never null. parse() doesn't actually parse or verify anything. String path = uri.getPath(); - if (path == null || path.length() == 0) { + if (path == null || path.isEmpty() || path.equals("/")) { Log.e(TAG, "URL does not have a path: " + url); return null; }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AndroidProtocolHandlerTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidProtocolHandlerTest.java index 8aa45e2..2af044e 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AndroidProtocolHandlerTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidProtocolHandlerTest.java
@@ -26,6 +26,37 @@ @Rule public AwActivityTestRule mActivityTestRule = new AwActivityTestRule(); + @Test + @SmallTest + @Feature({"AndroidWebView"}) + public void testOpenNullUrl() { + Assert.assertNull(AndroidProtocolHandler.open(null)); + } + + @Test + @SmallTest + @Feature({"AndroidWebView"}) + public void testOpenEmptyUrl() { + Assert.assertNull(AndroidProtocolHandler.open("")); + } + + @Test + @SmallTest + @Feature({"AndroidWebView"}) + public void testOpenMalformedUrl() { + Assert.assertNull(AndroidProtocolHandler.open("abcdefg")); + } + + @Test + @SmallTest + @Feature({"AndroidWebView"}) + public void testOpenPathlessUrl() { + // These URLs are interesting because android.net.Uri parses them unintuitively: + // Uri.getPath() returns "/" but Uri.getLastPathSegment() returns null. + Assert.assertNull(AndroidProtocolHandler.open("file:///")); + Assert.assertNull(AndroidProtocolHandler.open("content:///")); + } + // star.svg and star.svgz contain the same data. AndroidProtocolHandler should decompress the // svgz automatically. Load both from assets and assert that they're equal. @Test
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 74bb555..5bbbec4 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -1336,7 +1336,8 @@ "//chromeos/audio", "//chromeos/components/multidevice/logging", "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//chromeos/dbus/services:services", "//chromeos/dbus/system_clock", @@ -1533,6 +1534,7 @@ "//chromeos/audio", "//chromeos/dbus", "//chromeos/dbus/biod", + "//chromeos/dbus/power", "//components/discardable_memory/public/interfaces", "//components/services/font:lib", "//components/services/font/public/interfaces", @@ -1932,8 +1934,9 @@ # TODO(stevenjb): Investigate whether this is OK. https://crbug.com/644336. "//chromeos/audio", - "//chromeos/dbus:power_manager_proto", "//chromeos/dbus:test_support", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", # TODO(stevenjb): Remove this dependency, https://crbug.com/644355. "//chromeos/network:test_support", @@ -2208,6 +2211,7 @@ # TODO(stevenjb): Investigate whether this is OK. https://crbug.com/644336. "//chromeos/audio", "//chromeos/dbus:test_support", + "//chromeos/dbus/power", "//chromeos/dbus/system_clock", # TODO(stevenjb): Remove this dependency, https://crbug.com/644355.
diff --git a/ash/DEPS b/ash/DEPS index 92dd1c8..7b96327 100644 --- a/ash/DEPS +++ b/ash/DEPS
@@ -60,6 +60,7 @@ "+chromeos/components/multidevice/logging/logging.h", "+chromeos/constants", "+chromeos/dbus/biod/biod_client.h", + "+chromeos/dbus/cras_audio_client.h", "+chromeos/dbus/dbus_thread_manager.h", "+chromeos/dbus/fake_power_manager_client.h", "+chromeos/dbus/hammerd",
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc index 905f0be..4394d784 100644 --- a/ash/app_list/app_list_controller_impl.cc +++ b/ash/app_list/app_list_controller_impl.cc
@@ -254,15 +254,12 @@ } void AppListControllerImpl::SetModelData( - int profile_id, std::vector<AppListItemMetadataPtr> apps, bool is_search_engine_google) { // Clear old model data. model_->DeleteAllItems(); search_model_.DeleteAllResults(); - profile_id_ = profile_id; - // Populate new models. First populate folders and then other items to avoid // automatically creating folder items in |AddItemToFolder|. for (auto& app : apps) { @@ -398,9 +395,9 @@ void AppListControllerImpl::OnAppListItemAdded(app_list::AppListItem* item) { if (item->is_folder()) - client_->OnFolderCreated(profile_id_, item->CloneMetadata()); + client_->OnFolderCreated(item->CloneMetadata()); else if (item->is_page_break()) - client_->OnPageBreakItemAdded(profile_id_, item->id(), item->position()); + client_->OnPageBreakItemAdded(item->id(), item->position()); } void AppListControllerImpl::OnActiveUserPrefServiceChanged( @@ -427,15 +424,15 @@ return; if (item->is_folder()) - client_->OnFolderDeleted(profile_id_, item->CloneMetadata()); + client_->OnFolderDeleted(item->CloneMetadata()); if (item->is_page_break()) - client_->OnPageBreakItemDeleted(profile_id_, item->id()); + client_->OnPageBreakItemDeleted(item->id()); } void AppListControllerImpl::OnAppListItemUpdated(app_list::AppListItem* item) { if (client_) - client_->OnItemUpdated(profile_id_, item->CloneMetadata()); + client_->OnItemUpdated(item->CloneMetadata()); } void AppListControllerImpl::OnAppListStateChanged(ash::AppListState new_state, @@ -923,7 +920,7 @@ void AppListControllerImpl::ActivateItem(const std::string& id, int event_flags) { if (client_) - client_->ActivateItem(profile_id_, id, event_flags); + client_->ActivateItem(id, event_flags); ResetHomeLauncherIfShown(); } @@ -932,14 +929,14 @@ const std::string& id, GetContextMenuModelCallback callback) { if (client_) - client_->GetContextMenuModel(profile_id_, id, std::move(callback)); + client_->GetContextMenuModel(id, std::move(callback)); } void AppListControllerImpl::ContextMenuItemSelected(const std::string& id, int command_id, int event_flags) { if (client_) - client_->ContextMenuItemSelected(profile_id_, id, command_id, event_flags); + client_->ContextMenuItemSelected(id, command_id, event_flags); } void AppListControllerImpl::ShowWallpaperContextMenu(
diff --git a/ash/app_list/app_list_controller_impl.h b/ash/app_list/app_list_controller_impl.h index e0d7dfb0..74ed8533 100644 --- a/ash/app_list/app_list_controller_impl.h +++ b/ash/app_list/app_list_controller_impl.h
@@ -102,8 +102,7 @@ void SetItemIsInstalling(const std::string& id, bool is_installing) override; void SetItemPercentDownloaded(const std::string& id, int32_t percent_downloaded) override; - void SetModelData(int profile_id, - std::vector<AppListItemMetadataPtr> apps, + void SetModelData(std::vector<AppListItemMetadataPtr> apps, bool is_search_engine_google) override; void SetSearchResultMetadata(SearchResultMetadataPtr metadata) override; @@ -329,11 +328,6 @@ // True if Shutdown() has been called. bool is_shutdown_ = false; - // Used in mojo callings to specify the profile whose app list data is - // read/written by Ash side through IPC. Notice that in multi-profile mode, - // each profile has its own AppListModelUpdater to manipulate app list items. - int profile_id_; - base::ObserverList<AppListControllerObserver> observers_; DISALLOW_COPY_AND_ASSIGN(AppListControllerImpl);
diff --git a/ash/app_list/test/test_app_list_client.cc b/ash/app_list/test/test_app_list_client.cc index b926817..f800f497 100644 --- a/ash/app_list/test/test_app_list_client.cc +++ b/ash/app_list/test/test_app_list_client.cc
@@ -25,7 +25,6 @@ } void TestAppListClient::GetContextMenuModel( - int profile_id, const std::string& id, GetContextMenuModelCallback callback) { std::move(callback).Run({});
diff --git a/ash/app_list/test/test_app_list_client.h b/ash/app_list/test/test_app_list_client.h index 09f9f252..6826bf465 100644 --- a/ash/app_list/test/test_app_list_client.h +++ b/ash/app_list/test/test_app_list_client.h
@@ -40,28 +40,20 @@ int event_flags) override {} void ViewClosing() override {} void ViewShown(int64_t display_id) override {} - void ActivateItem(int profile_id, - const std::string& id, - int event_flags) override {} - void GetContextMenuModel(int profile_id, - const std::string& id, + void ActivateItem(const std::string& id, int event_flags) override {} + void GetContextMenuModel(const std::string& id, GetContextMenuModelCallback callback) override; - void ContextMenuItemSelected(int profile_id, - const std::string& id, + void ContextMenuItemSelected(const std::string& id, int command_id, int event_flags) override {} void OnAppListTargetVisibilityChanged(bool visible) override {} void OnAppListVisibilityChanged(bool visible) override {} - void OnFolderCreated(int profile_id, - mojom::AppListItemMetadataPtr item) override {} - void OnFolderDeleted(int profile_id, - mojom::AppListItemMetadataPtr item) override {} - void OnItemUpdated(int profile_id, - mojom::AppListItemMetadataPtr item) override {} - void OnPageBreakItemAdded(int profile_id, - const std::string& id, + void OnFolderCreated(mojom::AppListItemMetadataPtr item) override {} + void OnFolderDeleted(mojom::AppListItemMetadataPtr item) override {} + void OnItemUpdated(mojom::AppListItemMetadataPtr item) override {} + void OnPageBreakItemAdded(const std::string& id, const syncer::StringOrdinal& position) override {} - void OnPageBreakItemDeleted(int profile_id, const std::string& id) override {} + void OnPageBreakItemDeleted(const std::string& id) override {} void GetNavigableContentsFactory( mojo::PendingReceiver<content::mojom::NavigableContentsFactory> receiver) override {}
diff --git a/ash/app_list/views/search_result_tile_item_list_view.cc b/ash/app_list/views/search_result_tile_item_list_view.cc index 8e1a78b..69af32e1 100644 --- a/ash/app_list/views/search_result_tile_item_list_view.cc +++ b/ash/app_list/views/search_result_tile_item_list_view.cc
@@ -45,6 +45,14 @@ constexpr SkColor kSeparatorColor = SkColorSetA(gfx::kGoogleGrey900, 0x24); +// Returns true if the search result is an installable app. +bool IsResultAnInstallableApp(app_list::SearchResult* result) { + app_list::SearchResult::ResultType result_type = result->result_type(); + return result_type == ash::SearchResultType::kPlayStoreApp || + result_type == ash::SearchResultType::kPlayStoreReinstallApp || + result_type == ash::SearchResultType::kInstantApp; +} + } // namespace namespace app_list { @@ -110,11 +118,9 @@ int SearchResultTileItemListView::DoUpdate() { std::vector<SearchResult*> display_results = GetDisplayResults(); - SearchResult::ResultType previous_type = ash::SearchResultType::kUnknown; - ash::SearchResultDisplayType previous_display_type = - ash::SearchResultDisplayType::kNone; - std::set<std::string> result_id_removed, result_id_added; + bool is_result_an_installable_app = false; + bool is_previous_result_installable_app = false; for (size_t i = 0; i < kMaxNumSearchResultTiles; ++i) { // If the current result at i exists, wants to be notified and is a // different id, notify it that it is being hidden. @@ -137,24 +143,22 @@ tile_views_[i]->SetResult(item); result_id_added.insert(item->id()); + is_result_an_installable_app = IsResultAnInstallableApp(item); if (is_play_store_app_search_enabled_ || is_app_reinstall_recommendation_enabled_) { - if (i > 0 && (item->result_type() != previous_type || - item->display_type() != previous_display_type)) { - // Add a separator to separate search results of different types. - // The strategy here is to only add a separator only if current search - // result type is different from the previous one. The strategy is - // based on the assumption that the search results are already - // separated in groups based on their result types. + if (i > 0 && (is_result_an_installable_app != + is_previous_result_installable_app)) { + // Add a separator between installed apps and installable apps. + // This assumes the search results are already separated in groups for + // installed and installable apps. separator_views_[i]->SetVisible(true); } else { separator_views_[i]->SetVisible(false); } } - previous_type = item->result_type(); - previous_display_type = item->display_type(); + is_previous_result_installable_app = is_result_an_installable_app; } // notify visibility changes, if needed.
diff --git a/ash/ash_service.cc b/ash/ash_service.cc index 32804a1..4e71b027 100644 --- a/ash/ash_service.cc +++ b/ash/ash_service.cc
@@ -160,6 +160,11 @@ chromeos::DBusThreadManager::Initialize(chromeos::DBusThreadManager::kShared); dbus::Bus* bus = chromeos::DBusThreadManager::Get()->GetSystemBus(); + if (bus) + chromeos::CrasAudioClient::Initialize(bus); + else + chromeos::CrasAudioClient::InitializeFake(); + // TODO(jamescook): Initialize real audio handler. chromeos::CrasAudioHandler::InitializeForTesting();
diff --git a/ash/public/cpp/BUILD.gn b/ash/public/cpp/BUILD.gn index ab54748..5bfea81 100644 --- a/ash/public/cpp/BUILD.gn +++ b/ash/public/cpp/BUILD.gn
@@ -131,7 +131,7 @@ deps = [ "//ash/public/cpp/vector_icons", "//chromeos/constants", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power:power_manager_proto", "//components/prefs", "//mojo/public/cpp/bindings", "//services/service_manager/public/cpp",
diff --git a/ash/public/interfaces/app_list.mojom b/ash/public/interfaces/app_list.mojom index fbd8f7a..0e8e0e1 100644 --- a/ash/public/interfaces/app_list.mojom +++ b/ash/public/interfaces/app_list.mojom
@@ -254,8 +254,7 @@ // Publishes search results to Ash to render them. PublishSearchResults(array<SearchResultMetadata> results); // Update the whole model, usually when profile changes happen in Chrome. - SetModelData(int32 profile_id, - array<AppListItemMetadata> apps, + SetModelData(array<AppListItemMetadata> apps, bool is_search_engine_google); ////////////////////////////////////////////////////////////////////////////// @@ -373,34 +372,27 @@ OnAppListVisibilityChanged(bool visible); ////////////////////////////////////////////////////////////////////////////// - // Interfaces on app list items. |profile_id| indicates the profile to which - // app list items belong. In multi-profile mode, each profile has its own - // app list model updater: + // Interfaces on app list items: // Activates (opens) the item with |id|. - ActivateItem(int32 profile_id, string id, int32 event_flags); + ActivateItem(string id, int32 event_flags); // Returns the context menu model for the item with |id|, or an empty array if // there is currently no menu for the item (e.g. during install). - GetContextMenuModel(int32 profile_id, string id) => (array<MenuItem> items); + GetContextMenuModel(string id) => (array<MenuItem> items); // Invoked when a context menu item of an app list item is clicked. // |id|: the clicked AppListItem's id. // |command_id|: the clicked menu item's command id. // |event_flags|: flags from the event which triggered this command. - ContextMenuItemSelected(int32 profile_id, - string id, - int32 command_id, - int32 event_flags); + ContextMenuItemSelected(string id, int32 command_id, int32 event_flags); // Invoked when a folder is created in Ash (e.g. merge items into a folder). - OnFolderCreated(int32 profile_id, AppListItemMetadata folder); + OnFolderCreated(AppListItemMetadata folder); // Invoked when a folder has only one item left and so gets removed. - OnFolderDeleted(int32 profile_id, AppListItemMetadata folder); + OnFolderDeleted(AppListItemMetadata folder); // Invoked when user changes a folder's name or an item's position. - OnItemUpdated(int32 profile_id, AppListItemMetadata folder); + OnItemUpdated(AppListItemMetadata folder); // Invoked when a "page break" item is added with |id| and |position|. - OnPageBreakItemAdded(int32 profile_id, - string id, - syncer.mojom.StringOrdinal position); + OnPageBreakItemAdded(string id, syncer.mojom.StringOrdinal position); // Invoked when a "page break" item with |id| is deleted. - OnPageBreakItemDeleted(int32 profile_id, string id); + OnPageBreakItemDeleted(string id); // Updated when item with |id| is set to |visible|. Only sent if // |notify_visibility_change| was set on the SearchResultMetadata.
diff --git a/ash/shell/example_app_list_client.cc b/ash/shell/example_app_list_client.cc index 771021b..b798f46 100644 --- a/ash/shell/example_app_list_client.cc +++ b/ash/shell/example_app_list_client.cc
@@ -245,8 +245,7 @@ WindowTypeShelfItem::ActivateItem((*it)->type(), event_flags); } -void ExampleAppListClient::ActivateItem(int profile_id, - const std::string& id, +void ExampleAppListClient::ActivateItem(const std::string& id, int event_flags) { auto it = std::find_if(apps_.begin(), apps_.end(),
diff --git a/ash/shell/example_app_list_client.h b/ash/shell/example_app_list_client.h index 3952128..e008068 100644 --- a/ash/shell/example_app_list_client.h +++ b/ash/shell/example_app_list_client.h
@@ -37,9 +37,7 @@ ash::mojom::AppListLaunchedFrom launched_from, ash::mojom::AppListLaunchType launch_type, int suggestion_index) override; - void ActivateItem(int profile_id, - const std::string& id, - int event_flags) override; + void ActivateItem(const std::string& id, int event_flags) override; AppListControllerImpl* controller_;
diff --git a/ash/system/audio/unified_audio_detailed_view_controller.cc b/ash/system/audio/unified_audio_detailed_view_controller.cc index a9f2931..c2196aa 100644 --- a/ash/system/audio/unified_audio_detailed_view_controller.cc +++ b/ash/system/audio/unified_audio_detailed_view_controller.cc
@@ -15,12 +15,10 @@ UnifiedSystemTrayController* tray_controller) : detailed_view_delegate_( std::make_unique<DetailedViewDelegate>(tray_controller)) { - DCHECK(CrasAudioHandler::IsInitialized()); CrasAudioHandler::Get()->AddAudioObserver(this); } UnifiedAudioDetailedViewController::~UnifiedAudioDetailedViewController() { - DCHECK(CrasAudioHandler::IsInitialized()); CrasAudioHandler::Get()->RemoveAudioObserver(this); }
diff --git a/ash/system/audio/unified_volume_view.cc b/ash/system/audio/unified_volume_view.cc index 3d32d31..4307903 100644 --- a/ash/system/audio/unified_volume_view.cc +++ b/ash/system/audio/unified_volume_view.cc
@@ -125,14 +125,12 @@ kSystemMenuVolumeHighIcon, IDS_ASH_STATUS_TRAY_VOLUME), more_button_(new MoreButton(controller)) { - DCHECK(CrasAudioHandler::IsInitialized()); CrasAudioHandler::Get()->AddAudioObserver(this); AddChildView(more_button_); Update(false /* by_user */); } UnifiedVolumeView::~UnifiedVolumeView() { - DCHECK(CrasAudioHandler::IsInitialized()); CrasAudioHandler::Get()->RemoveAudioObserver(this); }
diff --git a/ash/system/unified/unified_slider_bubble_controller.cc b/ash/system/unified/unified_slider_bubble_controller.cc index 7e94a8d9..aa793bc 100644 --- a/ash/system/unified/unified_slider_bubble_controller.cc +++ b/ash/system/unified/unified_slider_bubble_controller.cc
@@ -43,13 +43,11 @@ UnifiedSliderBubbleController::UnifiedSliderBubbleController( UnifiedSystemTray* tray) : tray_(tray) { - DCHECK(CrasAudioHandler::IsInitialized()); CrasAudioHandler::Get()->AddAudioObserver(this); tray_->model()->AddObserver(this); } UnifiedSliderBubbleController::~UnifiedSliderBubbleController() { - DCHECK(CrasAudioHandler::IsInitialized()); CrasAudioHandler::Get()->RemoveAudioObserver(this); tray_->model()->RemoveObserver(this); autoclose_.Stop();
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc index 663f820..fe561bc 100644 --- a/ash/test/ash_test_helper.cc +++ b/ash/test/ash_test_helper.cc
@@ -31,6 +31,7 @@ #include "base/strings/string_split.h" #include "base/token.h" #include "chromeos/audio/cras_audio_handler.h" +#include "chromeos/dbus/cras_audio_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_policy_controller.h" #include "chromeos/network/network_handler.h" @@ -177,6 +178,7 @@ power_policy_controller_initialized_ = true; } + chromeos::CrasAudioClient::InitializeFake(); // Create CrasAudioHandler for testing since g_browser_process is not // created in AshTestBase tests. chromeos::CrasAudioHandler::InitializeForTesting(); @@ -259,6 +261,7 @@ base::RunLoop().RunUntilIdle(); chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); if (power_policy_controller_initialized_) { chromeos::PowerPolicyController::Shutdown();
diff --git a/ash/wm/default_state.cc b/ash/wm/default_state.cc index 2d1bd81..0e20c55 100644 --- a/ash/wm/default_state.cc +++ b/ash/wm/default_state.cc
@@ -409,6 +409,13 @@ event->duration()); } else { window_state->SetBoundsConstrained(event->requested_bounds()); + // Update the restore size if the bounds is updated by PIP itself. + if (window_state->IsPip() && window_state->HasRestoreBounds()) { + gfx::Rect restore_bounds = window_state->GetRestoreBoundsInScreen(); + restore_bounds.set_size( + window_state->window()->GetTargetBounds().size()); + window_state->SetRestoreBoundsInScreen(restore_bounds); + } } } }
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc index 493252e9..91e67a7d6 100644 --- a/ash/wm/window_state.cc +++ b/ash/wm/window_state.cc
@@ -365,7 +365,7 @@ } void WindowState::SaveCurrentBoundsForRestore() { - gfx::Rect bounds_in_screen = window_->bounds(); + gfx::Rect bounds_in_screen = window_->GetTargetBounds(); ::wm::ConvertRectToScreen(window_->parent(), &bounds_in_screen); SetRestoreBoundsInScreen(bounds_in_screen); }
diff --git a/ash/wm/window_state_unittest.cc b/ash/wm/window_state_unittest.cc index 1b9c9bc..8d83bff 100644 --- a/ash/wm/window_state_unittest.cc +++ b/ash/wm/window_state_unittest.cc
@@ -708,6 +708,24 @@ ASSERT_TRUE(window_state->GetStateType() == mojom::WindowStateType::NORMAL); } +TEST_F(WindowStateTest, SetBoundsUpdatesSizeOfPipRestoreBounds) { + std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); + wm::WindowState* window_state = wm::GetWindowState(window.get()); + window->Show(); + window->SetBounds(gfx::Rect(0, 0, 50, 50)); + + const wm::WMEvent enter_pip(wm::WM_EVENT_PIP); + window_state->OnWMEvent(&enter_pip); + + EXPECT_TRUE(window_state->IsPip()); + EXPECT_TRUE(window_state->HasRestoreBounds()); + EXPECT_EQ(gfx::Rect(8, 8, 50, 50), window_state->GetRestoreBoundsInScreen()); + window_state->window()->SetBounds(gfx::Rect(100, 100, 100, 100)); + // SetBounds only updates the size of the restore bounds. + EXPECT_EQ(gfx::Rect(8, 8, 100, 100), + window_state->GetRestoreBoundsInScreen()); +} + // TODO(skuhne): Add more unit test to verify the correctness for the restore // operation.
diff --git a/build/android/apk_operations.py b/build/android/apk_operations.py index 55e3e88..e6ee0ab 100755 --- a/build/android/apk_operations.py +++ b/build/android/apk_operations.py
@@ -331,8 +331,10 @@ if url is None: # Simulate app icon click if no url is present. - cmd = ['monkey', '-p', package_name, '-c', - 'android.intent.category.LAUNCHER', '1'] + cmd = [ + 'am', 'start', '-p', package_name, '-c', + 'android.intent.category.LAUNCHER', '-a', 'android.intent.action.MAIN' + ] device.RunShellCommand(cmd, check_return=True) else: launch_intent = intent.Intent(action='android.intent.action.VIEW',
diff --git a/build/chromeos/test_runner.py b/build/chromeos/test_runner.py index 3ea046f..5ef6c1b7 100755 --- a/build/chromeos/test_runner.py +++ b/build/chromeos/test_runner.py
@@ -252,13 +252,16 @@ # Coverage tests require some special pre-test setup, so use an # on_device_script in that case. For all other tests, use cros_run_test's # built-in '--tast' option. This gives us much better results reporting. - if self._llvm_profile_var: + # TODO(bpastene): s/True/self._llvm_profile_var/ once we parse Tast results. + if True: # pylint: disable=using-constant-test # Build the shell script that will be used on the device to invoke the # test. - device_test_script_contents = self.BASIC_SHELL_SCRIPT[:] + [ - 'echo "LLVM_PROFILE_FILE=%s" >> /etc/chrome_dev.conf' % ( - self._llvm_profile_var) - ] + device_test_script_contents = self.BASIC_SHELL_SCRIPT[:] + if self._llvm_profile_var: + device_test_script_contents += [ + 'echo "LLVM_PROFILE_FILE=%s" >> /etc/chrome_dev.conf' % ( + self._llvm_profile_var) + ] local_test_runner_cmd = ['local_test_runner', '-waituntilready'] if self._use_vm: @@ -286,6 +289,11 @@ '--private-key', os.path.join(CHROMITE_PATH, 'ssh_keys', 'testing_rsa'), ] + # Capture tast's results in the logs dir as well. + if self._logs_dir: + self._test_cmd += [ + '--results-dir', self._logs_dir, + ] if self._conditional: # Don't use pipes.quote() here. Something funky happens with the arg # as it gets passed down from cros_run_test to tast. (Tast picks up the
diff --git a/build/toolchain/win/tool_wrapper.py b/build/toolchain/win/tool_wrapper.py index f173adb..9260866 100644 --- a/build/toolchain/win/tool_wrapper.py +++ b/build/toolchain/win/tool_wrapper.py
@@ -233,7 +233,7 @@ env = self._GetEnv(arch) # TODO(scottmg): This is a temporary hack to get some specific variables # through to actions that are set after GN-time. http://crbug.com/333738. - for k, v in os.environ.iteritems(): + for k, v in os.environ.items(): if k not in env: env[k] = v args = open(rspfile).read()
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc index e46a166..cd56fec 100644 --- a/cc/trees/layer_tree_host_common.cc +++ b/cc/trees/layer_tree_host_common.cc
@@ -326,17 +326,23 @@ bool non_root_copy_request = effect_node->closest_ancestor_with_copy_request_id > EffectTree::kContentsRootNodeId; - gfx::Transform from_target; // If there is a copy request, we check the invertibility of the transform // between the node corresponding to the layer and the node corresponding to // the copy request. Otherwise, we are interested in the invertibility of // screen space transform which is already cached on the transform node. - return non_root_copy_request - ? !property_trees->GetFromTarget( - layer->transform_tree_index(), - effect_node->closest_ancestor_with_copy_request_id, - &from_target) - : !transform_node->ancestors_are_invertible; + if (non_root_copy_request) { + // Null check is a temporary fix for crasher: https://crbug.com/939342 + if (effect_node == nullptr) + return false; + gfx::Transform from_target; + return !property_trees->GetFromTarget( + layer->transform_tree_index(), + effect_node->closest_ancestor_with_copy_request_id, &from_target); + } + // Null check is a temporary fix for crasher: https://crbug.com/939342 + if (transform_node == nullptr) + return false; + return !transform_node->ancestors_are_invertible; } static void ComputeInitialRenderSurfaceList(
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java index f246287f..59994148 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java
@@ -21,7 +21,7 @@ int BUTTON_HAIRLINE = 2; /** The number of types. Increment this value if you add a type. */ - int CHIP_TYPE_NUMBER = 3; + int NUM_ENTRIES = 3; } private final @Type int mType;
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java index 5f7a682..ab8e781c 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChipViewHolder.java
@@ -26,7 +26,7 @@ static AssistantChipViewHolder create(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); int resId = -1; - switch (viewType % AssistantChip.Type.CHIP_TYPE_NUMBER) { + switch (viewType % AssistantChip.Type.NUM_ENTRIES) { // TODO: inflate normal chrome buttons instead. case AssistantChip.Type.CHIP_ASSISTIVE: resId = R.layout.autofill_assistant_chip_assistive; @@ -42,7 +42,7 @@ } TextView view = (TextView) layoutInflater.inflate(resId, /* root= */ null); - if (viewType >= AssistantChip.Type.CHIP_TYPE_NUMBER) { + if (viewType >= AssistantChip.Type.NUM_ENTRIES) { view.setEnabled(false); } @@ -54,7 +54,7 @@ // chips of the same type. Ideally, we should return a (type, disabled) tuple but // RecyclerView does not allow that. if (chip.isDisabled()) { - return chip.getType() + AssistantChip.Type.CHIP_TYPE_NUMBER; + return chip.getType() + AssistantChip.Type.NUM_ENTRIES; } return chip.getType();
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml index 77eaf16..7b10529 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml
@@ -351,7 +351,7 @@ ## Proposed brand name, not to be localized. android:label="Dino Run" android:exported="true"> - <intent-filter> + <intent-filter android:priority="-1"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" />
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappBridge.java index ac8a2b8..ee694908b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/permissiondelegation/InstalledWebappBridge.java
@@ -12,11 +12,13 @@ * Provides Trusted Web Activity Client App permissions for native. The C++ counterpart is the * {@code installed_webapp_bridge.h}. * - * Lifecycle: All methods are static and are called by native. + * Lifecycle: All methods are static. * Thread safety: Methods will only be called on the UI thread. * Native: Requires native to be loaded. */ public class InstalledWebappBridge { + private static long sNativeInstalledWebappProvider; + /** * A POD class to store the combination of a permission setting and the origin the permission is * relevant for. @@ -37,6 +39,17 @@ } } + public static void notifyPermissionsChange() { + if (sNativeInstalledWebappProvider == 0) return; + + nativeNotifyPermissionsChange(sNativeInstalledWebappProvider); + } + + @CalledByNative + private static void setInstalledWebappProvider(long provider) { + sNativeInstalledWebappProvider = provider; + } + @CalledByNative private static Permission[] getNotificationPermissions() { return TrustedWebActivityPermissionManager.getNotificationPermissions(); @@ -51,4 +64,6 @@ private static int getSettingFromPermission(Permission permission) { return permission.setting; } + + private static native void nativeNotifyPermissionsChange(long provider); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java index 406e346e..82525d26 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -272,7 +272,8 @@ } } if (FirstRunStatus.getFirstRunFlowComplete()) { - if (UrlUtilities.isDownloadableScheme(params.getLinkUrl())) { + if (!mDelegate.isIncognito() + && UrlUtilities.isDownloadableScheme(params.getLinkUrl())) { linkTab.add(new ChromeContextMenuItem(Item.SAVE_LINK_AS)); } linkTab.add(new ShareContextMenuItem(R.drawable.ic_share_white_24dp,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java b/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java index f85f5c15..b5d8610d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextual_suggestions/PageViewTimer.java
@@ -44,11 +44,11 @@ @IntDef({DurationBucket.SHORT_CLICK, DurationBucket.MEDIUM_CLICK, DurationBucket.LONG_CLICK}) @Retention(RetentionPolicy.SOURCE) public @interface DurationBucket { - int SHORT_CLICK = 0; /** Click <= 4 secconds */ + int SHORT_CLICK = 0; /** Click <= 4 seconds */ int MEDIUM_CLICK = 1; /** 4 seconds < Click <= 180 seconds */ int LONG_CLICK = 2; /** 180 seconds < Click */ + int NUM_ENTRIES = 3; } - private static final int DURATION_BUCKET_COUNT = 3; /** Track the navigation source to report the page view time under. */ @IntDef({NavigationSource.OTHER, NavigationSource.CONTEXTUAL_SUGGESTIONS}) @@ -228,12 +228,12 @@ if (mNavigationSource == NavigationSource.CONTEXTUAL_SUGGESTIONS) { RecordHistogram.recordEnumeratedHistogram( "ContextualSuggestions.PageViewClickLength.ContextualSuggestions", - durationBucket, DURATION_BUCKET_COUNT); + durationBucket, DurationBucket.NUM_ENTRIES); return; } RecordHistogram.recordEnumeratedHistogram("ContextualSuggestions.PageViewClickLength.Other", - durationBucket, DURATION_BUCKET_COUNT); + durationBucket, DurationBucket.NUM_ENTRIES); } private void switchObserverToTab(Tab tab) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java index d9f55c7..9e57091 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java
@@ -203,7 +203,12 @@ } c.close(); - result.contentUri = manager.getUriForDownloadedFile(downloadId); + try { + result.contentUri = manager.getUriForDownloadedFile(downloadId); + } catch (SecurityException e) { + Log.e(TAG, "unable to get content URI from DownloadManager"); + } + result.mimeType = manager.getMimeTypeForDownloadedFile(downloadId); return result;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java index eb08da9..bae049d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.download.ui; import android.app.Activity; +import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Intent; import android.os.Handler; @@ -19,6 +20,7 @@ import org.chromium.base.CollectionUtil; import org.chromium.base.DiscardableReferencePool; import org.chromium.base.FileUtils; +import org.chromium.base.Log; import org.chromium.base.ObserverList; import org.chromium.base.TraceEvent; import org.chromium.base.VisibleForTesting; @@ -150,6 +152,7 @@ } } + private static final String TAG = "DownloadManagerUi"; private static final int PREFETCH_BUNDLE_OPEN_DELAY_MS = 500; private static BackendProvider sProviderForTests; @@ -441,8 +444,12 @@ } private void startShareIntent(Intent intent) { - mActivity.startActivity(Intent.createChooser( - intent, mActivity.getString(R.string.share_link_chooser_title))); + try { + mActivity.startActivity(Intent.createChooser( + intent, mActivity.getString(R.string.share_link_chooser_title))); + } catch (ActivityNotFoundException e) { + Log.e(TAG, "Cannot find activity for sharing"); + } } private void deleteItems(List<DownloadHistoryItemWrapper> items) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java index 3ac36ba..81f2092 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java
@@ -59,7 +59,7 @@ int FROM_MENU = 0; int FROM_INFOBAR = 1; - int COUNT = 2; + int NUM_ENTRIES = 2; } /** @@ -79,7 +79,7 @@ int INLINE_UPDATE_READY = 5; int INLINE_UPDATE_FAILED = 6; - int COUNT = 7; + int NUM_ENTRIES = 7; } /** A set of properties that represent the current update state for Chrome. */ @@ -208,7 +208,7 @@ public void startInlineUpdate(@UpdateInteractionSource int source, Activity activity) { if (mStatus == null || mStatus.updateState != UpdateState.INLINE_UPDATE_AVAILABLE) return; RecordHistogram.recordEnumeratedHistogram( - "GoogleUpdate.Inline.UI.Start.Source", source, UpdateInteractionSource.COUNT); + "GoogleUpdate.Inline.UI.Start.Source", source, UpdateInteractionSource.NUM_ENTRIES); mInlineController.startUpdate(activity); } @@ -219,15 +219,15 @@ public void retryInlineUpdate(@UpdateInteractionSource int source, Activity activity) { if (mStatus == null || mStatus.updateState != UpdateState.INLINE_UPDATE_AVAILABLE) return; RecordHistogram.recordEnumeratedHistogram( - "GoogleUpdate.Inline.UI.Retry.Source", source, UpdateInteractionSource.COUNT); + "GoogleUpdate.Inline.UI.Retry.Source", source, UpdateInteractionSource.NUM_ENTRIES); mInlineController.startUpdate(activity); } /** Finishes the inline update process, which may involve restarting the app. */ public void finishInlineUpdate(@UpdateInteractionSource int source) { if (mStatus == null || mStatus.updateState != UpdateState.INLINE_UPDATE_READY) return; - RecordHistogram.recordEnumeratedHistogram( - "GoogleUpdate.Inline.UI.Install.Source", source, UpdateInteractionSource.COUNT); + RecordHistogram.recordEnumeratedHistogram("GoogleUpdate.Inline.UI.Install.Source", source, + UpdateInteractionSource.NUM_ENTRIES); mInlineController.completeUpdate(); } @@ -289,7 +289,7 @@ if (!mRecordedInitialStatus) { RecordHistogram.recordEnumeratedHistogram( - "GoogleUpdate.StartUp.State", mStatus.updateState, UpdateState.COUNT); + "GoogleUpdate.StartUp.State", mStatus.updateState, UpdateState.NUM_ENTRIES); mRecordedInitialStatus = true; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/PlayInlineUpdateController.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/PlayInlineUpdateController.java index f026109..c572985 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/PlayInlineUpdateController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/PlayInlineUpdateController.java
@@ -57,7 +57,7 @@ int ERROR_INTERNAL_ERROR = 8; int ERROR_UNTRACKED = 9; - int COUNT = 10; + int NUM_ENTRIES = 10; } /** @@ -73,7 +73,7 @@ int COMPLETE_FAILED = 2; int QUERY_FAILED = 3; - int COUNT = 4; + int NUM_ENTRIES = 4; } private static final String TAG = "PlayInline"; @@ -161,7 +161,7 @@ RecordHistogram.recordEnumeratedHistogram("GoogleUpdate.Inline.StateChange.Error." + installStatusToEnumSuffix(state.installStatus()), installErrorCodeToMetrics(state.installErrorCode()), - InstallErrorCodeMetrics.COUNT); + InstallErrorCodeMetrics.NUM_ENTRIES); } mInstallStatus = state.installStatus(); @@ -286,6 +286,6 @@ private static void recordCallFailure(@CallFailure int failure) { RecordHistogram.recordEnumeratedHistogram( - "GoogleUpdate.Inline.CallFailure", failure, CallFailure.COUNT); + "GoogleUpdate.Inline.CallFailure", failure, CallFailure.NUM_ENTRIES); } } \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninInvestigator.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninInvestigator.java index 90d2dd6..9857d9df 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninInvestigator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninInvestigator.java
@@ -4,6 +4,8 @@ package org.chromium.chrome.browser.signin; +import org.chromium.signin.InvestigatedScenario; + /** * A bridge to call shared investigator logic. */ @@ -16,7 +18,7 @@ * * @return int value that corresponds to enum InvestigatedScenario. */ - public static int investigate(String currentEmail) { + public static @InvestigatedScenario int investigate(String currentEmail) { return nativeInvestigate(currentEmail); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java index 4360c60..2f195fc2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
@@ -443,8 +443,10 @@ intent.putExtra(ShortcutHelper.EXTRA_ID, id()); intent.putExtra(ShortcutHelper.EXTRA_URL, uri().toString()); intent.putExtra(ShortcutHelper.EXTRA_SOURCE, source()); - intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, webApkPackageName()); intent.putExtra(ShortcutHelper.EXTRA_FORCE_NAVIGATION, shouldForceNavigation()); + intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, webApkPackageName()); + intent.putExtra( + WebApkConstants.EXTRA_SPLASH_PROVIDED_BY_WEBAPK, isSplashProvidedByWebApk()); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java index 00866b63..4f91a12 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java
@@ -6,6 +6,8 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.animation.TimeAnimator; import android.animation.TimeAnimator.TimeListener; import android.animation.TimeInterpolator; @@ -125,6 +127,10 @@ /** The progress bar's height. */ private final int mProgressBarHeight; + /** The current running animator that controls the fade in/out of the progress bar. */ + @Nullable + private Animator mFadeAnimator; + private final OnLayoutChangeListener mOnLayoutChangeListener = (view, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> updateTopMargin(); @@ -432,15 +438,25 @@ BakedBezierInterpolator interpolator = BakedBezierInterpolator.FADE_IN_CURVE; if (alphaDiff < 0) interpolator = BakedBezierInterpolator.FADE_OUT_CURVE; - animate().alpha(targetAlpha) - .setDuration(duration) - .setInterpolator(interpolator); + if (mFadeAnimator != null) mFadeAnimator.cancel(); + + ObjectAnimator alphaFade = ObjectAnimator.ofFloat(this, ALPHA, getAlpha(), targetAlpha); + alphaFade.setDuration(duration); + alphaFade.setInterpolator(interpolator); + mFadeAnimator = alphaFade; if (mAnimatingView != null) { - mAnimatingView.animate().alpha(targetAlpha) - .setDuration(duration) - .setInterpolator(interpolator); + alphaFade = ObjectAnimator.ofFloat( + mAnimatingView, ALPHA, mAnimatingView.getAlpha(), targetAlpha); + alphaFade.setDuration(duration); + alphaFade.setInterpolator(interpolator); + + AnimatorSet fadeSet = new AnimatorSet(); + fadeSet.playTogether(mFadeAnimator, alphaFade); + mFadeAnimator = fadeSet; } + + mFadeAnimator.start(); } // ClipDrawableProgressBar implementation.
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index 99ec3031..9ba340d 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -1397,7 +1397,7 @@ <message name="IDS_DATA_REDUCTION_PROMO_SUMMARY" desc="Description for the promo inviting users to enable Data Saver" > Use up to 60 percent less data and speed up the web. Google servers will optimize the pages you visit. </message> - <message name="IDS_DATA_REDUCTION_PROMO_SUMMARY_LITE_MODE" desc="Description for the promo inviting users to enable Lite mode. This informs users that their web traffic will be seen and optimized for speed and data usage, by Google servers (AKA 'Cloud technology')." > + <message name="IDS_DATA_REDUCTION_PROMO_SUMMARY_LITE_MODE" desc="Description for the promo inviting users to enable Lite mode. This informs users that their web traffic will be seen and optimized for speed and data usage, by Google servers (AKA 'Cloud technology')." meaning="The translation of percent should be spelled out instead of using the percent symbol."> In Lite mode, Chrome loads pages faster and uses up to 60 percent less data. Google's Cloud technology optimizes the pages you visit. </message> <message name="IDS_DATA_REDUCTION_ENABLE_BUTTON" desc="Button the user presses if they want to enable Data Saver" >
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java index 92ce0d2..d8ffa75 100644 --- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java +++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java
@@ -5,8 +5,10 @@ package org.chromium.chrome.browser.touchless; import android.graphics.Bitmap; +import android.text.TextUtils; import org.chromium.chrome.browser.suggestions.SiteSuggestion; +import org.chromium.chrome.browser.util.UrlUtilities; import org.chromium.ui.modelutil.PropertyModel; /** @@ -25,9 +27,14 @@ new PropertyModel.WritableObjectPropertyKey<>(); static PropertyModel getSiteSuggestionModel(SiteSuggestion suggestion) { + String title = UrlUtilities.getDomainAndRegistry(suggestion.url, false); + if (TextUtils.isEmpty(title)) { + // Fallback to title. + title = suggestion.title; + } return new PropertyModel .Builder(TITLE_KEY, URL_KEY, ICON_KEY, SOURCE_KEY, WHITELIST_ICON_PATH_KEY) - .with(TITLE_KEY, suggestion.title) + .with(TITLE_KEY, title) .with(URL_KEY, suggestion.url) .with(SOURCE_KEY, suggestion.source) .with(WHITELIST_ICON_PATH_KEY, suggestion.whitelistIconPath)
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 3ecd7e9..d201a5383 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -426,6 +426,8 @@ "download/download_item_model.h", "download/download_location_dialog_result.h", "download/download_location_dialog_type.h", + "download/download_manager_utils.cc", + "download/download_manager_utils.h", "download/download_offline_content_provider.cc", "download/download_offline_content_provider.h", "download/download_permission_request.cc", @@ -3133,6 +3135,10 @@ "search/instant_service_factory.h", "search/instant_service_observer.cc", "search/instant_service_observer.h", + "search/local_ntp_first_run_field_trial_handler.cc", + "search/local_ntp_first_run_field_trial_handler.h", + "search/local_ntp_first_run_field_trials.cc", + "search/local_ntp_first_run_field_trials.h", "search/local_ntp_source.cc", "search/local_ntp_source.h", "search/most_visited_iframe_source.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index b9e8a06e..7a27050 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3719,10 +3719,10 @@ flag_descriptions::kSendTabToSelfDescription, kOsAll, FEATURE_VALUE_TYPE(switches::kSyncSendTabToSelf)}, - {"enable-send-tab-to-self-receive", - flag_descriptions::kSendTabToSelfReceiveName, - flag_descriptions::kSendTabToSelfReceiveDescription, kOsAll, - FEATURE_VALUE_TYPE(send_tab_to_self::kSendTabToSelfReceive)}, + {"enable-send-tab-to-self-show-sending-ui", + flag_descriptions::kSendTabToSelfShowSendingUIName, + flag_descriptions::kSendTabToSelfShowSendingUIDescription, kOsAll, + FEATURE_VALUE_TYPE(send_tab_to_self::kSendTabToSelfShowSendingUI)}, {"enable-data-reduction-proxy-with-network-service", flag_descriptions::kEnableDataReductionProxyNetworkServiceName,
diff --git a/chrome/browser/accessibility/accessibility_labels_service.cc b/chrome/browser/accessibility/accessibility_labels_service.cc index 64dddcc..dd31968 100644 --- a/chrome/browser/accessibility/accessibility_labels_service.cc +++ b/chrome/browser/accessibility/accessibility_labels_service.cc
@@ -55,14 +55,12 @@ &AccessibilityLabelsService::OnImageLabelsEnabledChanged, weak_factory_.GetWeakPtr())); - // Log whether the feature is enabled after startup. - // TODO(dmazzoni) re-enable. http://crbug.com/940805 -#if 0 - content::BrowserAccessibilityState::GetInstance()->AddHistogramCallback( - base::BindRepeating( + // Log whether the feature is enabled after startup. This must be run on the + // UI thread because it accesses prefs. + content::BrowserAccessibilityState::GetInstance() + ->AddUIThreadHistogramCallback(base::BindRepeating( &AccessibilityLabelsService::UpdateAccessibilityLabelsHistograms, weak_factory_.GetWeakPtr())); -#endif } AccessibilityLabelsService::AccessibilityLabelsService(Profile* profile)
diff --git a/chrome/browser/apps/platform_apps/app_browsertest.cc b/chrome/browser/apps/platform_apps/app_browsertest.cc index fc1e7a53..6ad7d4e 100644 --- a/chrome/browser/apps/platform_apps/app_browsertest.cc +++ b/chrome/browser/apps/platform_apps/app_browsertest.cc
@@ -123,22 +123,22 @@ }; #if BUILDFLAG(ENABLE_PRINT_PREVIEW) -class ScopedPreviewTestingDelegate : printing::PrintPreviewUI::TestingDelegate { +class ScopedPreviewTestDelegate : printing::PrintPreviewUI::TestDelegate { public: - ScopedPreviewTestingDelegate() { + ScopedPreviewTestDelegate() { printing::PrintPreviewUI::SetDelegateForTesting(this); } - ~ScopedPreviewTestingDelegate() { - printing::PrintPreviewUI::SetDelegateForTesting(NULL); + ~ScopedPreviewTestDelegate() override { + printing::PrintPreviewUI::SetDelegateForTesting(nullptr); } - // PrintPreviewUI::TestingDelegate implementation. + // PrintPreviewUI::TestDelegate implementation. void DidGetPreviewPageCount(int page_count) override { total_page_count_ = page_count; } - // PrintPreviewUI::TestingDelegate implementation. + // PrintPreviewUI::TestDelegate implementation. void DidRenderPreviewPage(content::WebContents* preview_dialog) override { dialog_size_ = preview_dialog->GetContainerBounds().size(); ++rendered_page_count_; @@ -1143,7 +1143,7 @@ IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, WindowDotPrintShouldBringUpPrintPreview) { - ScopedPreviewTestingDelegate preview_delegate; + ScopedPreviewTestDelegate preview_delegate; ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; preview_delegate.WaitUntilPreviewIsReady(); } @@ -1151,7 +1151,7 @@ // This test verifies that http://crbug.com/297179 is fixed. IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DISABLED_ClosingWindowWhilePrintingShouldNotCrash) { - ScopedPreviewTestingDelegate preview_delegate; + ScopedPreviewTestDelegate preview_delegate; ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; preview_delegate.WaitUntilPreviewIsReady(); GetFirstAppWindow()->GetBaseWindow()->Close();
diff --git a/chrome/browser/badging/badge_manager_delegate_win.cc b/chrome/browser/badging/badge_manager_delegate_win.cc index e3c7bb3..c588672 100644 --- a/chrome/browser/badging/badge_manager_delegate_win.cc +++ b/chrome/browser/badging/badge_manager_delegate_win.cc
@@ -73,8 +73,8 @@ bool BadgeManagerDelegateWin::IsAppBrowser(Browser* browser, const std::string& app_id) { - return browser->hosted_app_controller() && - browser->hosted_app_controller()->app_id() == app_id && + return browser->web_app_controller() && + browser->web_app_controller()->GetAppId() == app_id && browser->profile() == profile_; }
diff --git a/chrome/browser/badging/badge_service_impl.cc b/chrome/browser/badging/badge_service_impl.cc index d75aa6c..9cd2571 100644 --- a/chrome/browser/badging/badge_service_impl.cc +++ b/chrome/browser/badging/badge_service_impl.cc
@@ -80,11 +80,10 @@ } bool BadgeServiceImpl::IsInApp() { - extensions::HostedAppBrowserController* hosted_app_controller = - chrome::FindBrowserWithWebContents(web_contents_) - ->hosted_app_controller(); - return hosted_app_controller && - extensions::IsSameScope(hosted_app_controller->GetAppLaunchURL(), + WebAppBrowserController* web_app_controller = + chrome::FindBrowserWithWebContents(web_contents_)->web_app_controller(); + return web_app_controller && + extensions::IsSameScope(web_app_controller->GetAppLaunchURL(), web_contents_->GetLastCommittedURL(), web_contents_->GetBrowserContext()); }
diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc index 8bba8b3..79a490e6 100644 --- a/chrome/browser/chrome_browser_field_trials.cc +++ b/chrome/browser/chrome_browser_field_trials.cc
@@ -17,6 +17,7 @@ #include "chrome/browser/metrics/chrome_metrics_service_client.h" #include "chrome/browser/metrics/chrome_metrics_services_manager_client.h" #include "chrome/browser/metrics/persistent_histograms.h" +#include "chrome/browser/search/local_ntp_first_run_field_trial_handler.h" #include "chrome/common/channel_info.h" #include "chrome/common/chrome_switches.h" #include "components/metrics/metrics_pref_names.h" @@ -55,7 +56,10 @@ } // namespace -ChromeBrowserFieldTrials::ChromeBrowserFieldTrials() {} +ChromeBrowserFieldTrials::ChromeBrowserFieldTrials(PrefService* local_state) + : local_state_(local_state) { + DCHECK(local_state_); +} ChromeBrowserFieldTrials::~ChromeBrowserFieldTrials() { } @@ -86,6 +90,11 @@ chromeos::multidevice_setup::CreateFirstRunFieldTrial(feature_list); #endif } +#if !defined(OS_ANDROID) + // TODO(crbug.com/944624) Remove hide shortcuts field trial + ntp_first_run::ActivateHideShortcutsOnNtpFieldTrial(feature_list, + local_state_); +#endif // !defined(OS_ANDROID) } void ChromeBrowserFieldTrials::RegisterSyntheticTrials() {
diff --git a/chrome/browser/chrome_browser_field_trials.h b/chrome/browser/chrome_browser_field_trials.h index e80020b..5856c82 100644 --- a/chrome/browser/chrome_browser_field_trials.h +++ b/chrome/browser/chrome_browser_field_trials.h
@@ -8,13 +8,15 @@ #include "base/macros.h" #include "components/variations/platform_field_trials.h" +class PrefService; + namespace base { class FeatureList; } class ChromeBrowserFieldTrials : public variations::PlatformFieldTrials { public: - ChromeBrowserFieldTrials(); + explicit ChromeBrowserFieldTrials(PrefService* local_state); ~ChromeBrowserFieldTrials() override; // variations::PlatformFieldTrials: @@ -29,6 +31,9 @@ // reported as used. void InstantiateDynamicTrials(); + // Weak pointer to the local state prefs store. + PrefService* const local_state_; + DISALLOW_COPY_AND_ASSIGN(ChromeBrowserFieldTrials); };
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 245311f8..4fd55c0 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -3234,8 +3234,10 @@ // WebContents. Browser* browser = chrome::FindBrowserWithWebContents(contents); if (base::FeatureList::IsEnabled(features::kDesktopPWAWindowing) && - browser && browser->hosted_app_controller() && - browser->hosted_app_controller()->created_for_installed_pwa()) { + browser && browser->web_app_controller() && + browser->web_app_controller()->CreatedForInstalledPwa()) { + // PWAs should be hosted apps. + DCHECK(browser->web_app_controller()->IsHostedApp()); // HostedApps that are PWAs are always created through WebAppProvider // or BookmarkAppHelper for profiles that support them, so we should // always be able to retrieve a WebAppProvider from the Profile. @@ -3245,15 +3247,15 @@ web_prefs->web_app_scope = web_app::WebAppProvider::Get(profile) ->registrar() - .GetScopeUrlForApp(browser->hosted_app_controller()->app_id()); + .GetScopeUrlForApp(*browser->web_app_controller()->GetAppId()); } } #endif #if BUILDFLAG(ENABLE_EXTENSIONS) Browser* browser = chrome::FindBrowserWithWebContents(contents); - if (browser && browser->hosted_app_controller() && - browser->hosted_app_controller()->created_for_installed_pwa()) { + if (browser && browser->web_app_controller() && + browser->web_app_controller()->CreatedForInstalledPwa()) { web_prefs->strict_mixed_content_checking = true; } #endif
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 62f138f..9506b93 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -30,10 +30,10 @@ "//chrome/browser/chromeos/power/ml:user_activity_ukm_logger_helpers", "//chromeos/dbus:cicerone_proto", "//chromeos/dbus:concierge_proto", - "//chromeos/dbus:power_manager_proto", "//chromeos/dbus:runtime_probe_proto", "//chromeos/dbus:seneschal_proto", "//chromeos/dbus:vm_applications_apps_proto", + "//chromeos/dbus/power:power_manager_proto", "//chromeos/strings", "//components/policy/proto", "//content/app/resources", @@ -104,6 +104,7 @@ "//chromeos/dbus/media_analytics", "//chromeos/dbus/media_analytics:media_perception_proto", "//chromeos/dbus/permission_broker", + "//chromeos/dbus/power", "//chromeos/dbus/services:services", "//chromeos/dbus/session_manager", "//chromeos/dbus/session_manager:login_manager_proto", @@ -2149,6 +2150,8 @@ "login/screens/mock_update_screen.h", "login/screens/mock_welcome_screen.cc", "login/screens/mock_welcome_screen.h", + "login/test/help_app_test_helper.cc", + "login/test/help_app_test_helper.h", "login/test/test_condition_waiter.h", "login/test/test_predicate_waiter.cc", "login/test/test_predicate_waiter.h",
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc index 4211da35..e4054ee 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -1096,9 +1096,10 @@ base::Bind(&AccessibilityManager::OnLocaleChanged, base::Unretained(this))); - content::BrowserAccessibilityState::GetInstance()->AddHistogramCallback( - base::Bind(&AccessibilityManager::UpdateChromeOSAccessibilityHistograms, - base::Unretained(this))); + content::BrowserAccessibilityState::GetInstance() + ->AddOtherThreadHistogramCallback(base::BindOnce( + &AccessibilityManager::UpdateChromeOSAccessibilityHistograms, + base::Unretained(this))); extensions::ExtensionRegistry* registry = extensions::ExtensionRegistry::Get(profile);
diff --git a/chrome/browser/chromeos/dbus/dbus_helper.cc b/chrome/browser/chromeos/dbus/dbus_helper.cc index 9d44510..01b1ce6 100644 --- a/chrome/browser/chromeos/dbus/dbus_helper.cc +++ b/chrome/browser/chromeos/dbus/dbus_helper.cc
@@ -12,6 +12,7 @@ #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/dbus/auth_policy/auth_policy_client.h" #include "chromeos/dbus/biod/biod_client.h" +#include "chromeos/dbus/cras_audio_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/hammerd/hammerd_client.h" #include "chromeos/dbus/kerberos/kerberos_client.h" @@ -55,6 +56,7 @@ if (bus) { AuthPolicyClient::Initialize(bus); BiodClient::Initialize(bus); // For device::Fingerprint. + CrasAudioClient::Initialize(bus); CryptohomeClient::Initialize(bus); KerberosClient::Initialize(bus); MachineLearningClient::Initialize(bus); @@ -67,6 +69,7 @@ } else { AuthPolicyClient::InitializeFake(); BiodClient::InitializeFake(); // For device::Fingerprint. + CrasAudioClient::InitializeFake(); CryptohomeClient::InitializeFake(); KerberosClient::InitializeFake(); MachineLearningClient::InitializeFake(); @@ -95,6 +98,7 @@ MachineLearningClient::Shutdown(); KerberosClient::Shutdown(); CryptohomeClient::Shutdown(); + CrasAudioClient::Shutdown(); BiodClient::Shutdown(); AuthPolicyClient::Shutdown();
diff --git a/chrome/browser/chromeos/login/eula_browsertest.cc b/chrome/browser/chromeos/login/eula_browsertest.cc index 8092a60..4f4fef1 100644 --- a/chrome/browser/chromeos/login/eula_browsertest.cc +++ b/chrome/browser/chromeos/login/eula_browsertest.cc
@@ -8,17 +8,29 @@ #include <utility> #include "base/bind.h" +#include "base/callback.h" #include "base/macros.h" #include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" +#include "base/task/post_task.h" +#include "base/test/bind_test_util.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/login/test/help_app_test_helper.h" #include "chrome/browser/chromeos/login/test/js_checker.h" #include "chrome/browser/chromeos/login/test/oobe_base_test.h" #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/login/wizard_controller.h" +#include "chrome/browser/chromeos/settings/stats_reporting_controller.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/ui/webui/chromeos/login/eula_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" +#include "chrome/installer/util/google_update_settings.h" +#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "components/guest_view/browser/guest_view_manager.h" +#include "components/metrics/metrics_pref_names.h" +#include "components/prefs/pref_service.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_ui.h" @@ -38,7 +50,6 @@ constexpr char kFakeOnlineEulaPath[] = "/intl/en-US/chrome/eula_text.html"; constexpr char kFakeOnlineEula[] = "No obligations at all"; - #if defined(GOOGLE_CHROME_BUILD) // See IDS_ABOUT_TERMS_OF_SERVICE for the complete text. constexpr char kOfflineEULAWarning[] = "Chrome OS Terms"; @@ -153,6 +164,46 @@ return *frame_set.begin(); } + // Returns an Oobe JSChecker that sends 'click' events instead of 'tap' + // events when interacting with UI elements. + test::JSChecker NonPolymerOobeJS() { + test::JSChecker js = test::OobeJS(); + js.set_polymer_ui(false); + return js; + } + + base::OnceClosure SetCollectStatsConsentClosure(bool consented) { + return base::BindOnce( + base::IgnoreResult(&GoogleUpdateSettings::SetCollectStatsConsent), + consented); + } + + // Waits until |blocking_closure| finishes executing. + void WaitForBlockingCall(base::OnceClosure blocking_closure) { + base::RunLoop runloop; + base::PostTaskWithTraitsAndReply(FROM_HERE, {base::MayBlock()}, + std::move(blocking_closure), + runloop.QuitClosure()); + runloop.Run(); + } + + // Waits and returns the result of evaluating |blocking_closure|. + bool EvaluateBlocking(base::OnceCallback<bool()> blocking_closure) { + bool result = false; + base::RunLoop runloop; + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, {base::MayBlock()}, std::move(blocking_closure), + base::BindOnce( + [](base::RepeatingClosure quit_closure, bool* result_out, + bool evaluation_result) { + *result_out = evaluation_result; + quit_closure.Run(); + }, + runloop.QuitClosure(), &result)); + runloop.Run(); + return result; + } + private: std::unique_ptr<HttpResponse> HandleRequest(const HttpRequest& request) { GURL request_url = GURL("http://localhost").Resolve(request.relative_url); @@ -211,5 +262,113 @@ std::string::npos); } +// Tests that clicking on "System security settings" button opens a dialog +// showing the TPM password. +IN_PROC_BROWSER_TEST_F(EulaTest, DisplaysTpmPassword) { + ShowEulaScreen(); + + NonPolymerOobeJS().TapOnPath({"oobe-eula-md", "installationSettings"}); + test::OobeJS().ExpectVisiblePath( + {"oobe-eula-md", "installationSettingsDialog"}); + + test::OobeJS().CreateWaiter( + "$('oobe-eula-md').$$('#eula-password').textContent.trim() !== ''"); + test::OobeJS().ExpectEQ( + "$('oobe-eula-md').$$('#eula-password').textContent.trim()", + std::string(FakeCryptohomeClient::kStubTpmPassword)); +} + +// Verifies statistic collection accepted flow. +// Advaces to the next screen and verifies stats collection is enabled. +IN_PROC_BROWSER_TEST_F(EulaTest, EnableUsageStats) { + ShowEulaScreen(); + + // Verify that toggle is enabled by default. + test::OobeJS().ExpectTrue("$('oobe-eula-md').$$('#usageStats').checked"); + + ASSERT_TRUE(StatsReportingController::IsInitialized()); + + // Explicitly set as false to make sure test modifies these values. + StatsReportingController::Get()->SetEnabled( + ProfileManager::GetActiveUserProfile(), false); + g_browser_process->local_state()->SetBoolean( + metrics::prefs::kMetricsReportingEnabled, false); + + WaitForBlockingCall(SetCollectStatsConsentClosure(false)); + + // Start Listening for StatsReportingController updates. + base::RunLoop runloop; + auto subscription = + StatsReportingController::Get()->AddObserver(runloop.QuitClosure()); + + // Advance to the next screen for changes to take effect. + test::OobeJS().TapOnPath({"oobe-eula-md", "acceptButton"}); + + // Wait for StartReporting update. + runloop.Run(); + + // Verify stats collection is enabled. + EXPECT_TRUE(StatsReportingController::Get()->IsEnabled()); + EXPECT_TRUE(g_browser_process->local_state()->GetBoolean( + metrics::prefs::kMetricsReportingEnabled)); + EXPECT_TRUE(EvaluateBlocking( + base::BindOnce(&GoogleUpdateSettings::GetCollectStatsConsent))); +} + +// Verify statistic collection denied flow. Clicks on usage stats toggle, +// advaces to the next screen and verifies stats collection is disabled. +IN_PROC_BROWSER_TEST_F(EulaTest, DisableUsageStats) { + ShowEulaScreen(); + + // Verify that toggle is enabled by default. + test::OobeJS().ExpectTrue("$('oobe-eula-md').$$('#usageStats').checked"); + + ASSERT_TRUE(StatsReportingController::IsInitialized()); + + // Explicitly set as true to make sure test modifies these values. + StatsReportingController::Get()->SetEnabled( + ProfileManager::GetActiveUserProfile(), true); + g_browser_process->local_state()->SetBoolean( + metrics::prefs::kMetricsReportingEnabled, true); + + WaitForBlockingCall(SetCollectStatsConsentClosure(true)); + + // Start Listening for StatsReportingController updates. + base::RunLoop runloop; + auto subscription = + StatsReportingController::Get()->AddObserver(runloop.QuitClosure()); + + // Click on the toggle to disable stats collection and advance to the next + // screen for changes to take effect. + NonPolymerOobeJS().TapOnPath({"oobe-eula-md", "usageStats"}); + test::OobeJS().TapOnPath({"oobe-eula-md", "acceptButton"}); + + // Wait for StartReportingController update. + runloop.Run(); + + // Verify stats collection is disabled. + EXPECT_FALSE(StatsReportingController::Get()->IsEnabled()); + EXPECT_FALSE(g_browser_process->local_state()->GetBoolean( + metrics::prefs::kMetricsReportingEnabled)); + EXPECT_FALSE(EvaluateBlocking( + base::BindOnce(&GoogleUpdateSettings::GetCollectStatsConsent))); +} + +// Tests that clicking on "Learn more" button opens a help dialog. +IN_PROC_BROWSER_TEST_F(EulaTest, LearnMore) { + ShowEulaScreen(); + + // Load HelperApp extension. + HelpAppTestHelper scoped_helper; + + // Start listening for help dialog creation. + HelpAppTestHelper::Waiter waiter; + + NonPolymerOobeJS().TapOnPath({"oobe-eula-md", "learn-more"}); + + // Wait until help dialog is displayed. + waiter.Wait(); +} + } // namespace } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/help_app_launcher.cc b/chrome/browser/chromeos/login/help_app_launcher.cc index 7ad126e..e8dd6863 100644 --- a/chrome/browser/chromeos/login/help_app_launcher.cc +++ b/chrome/browser/chromeos/login/help_app_launcher.cc
@@ -24,8 +24,12 @@ namespace { -const char kHelpAppFormat[] = - "chrome-extension://honijodknafkokifofgiaalefdiedpko/oobe.html?id=%d"; +// Official HelpApp extension id. +const char kExtensionId[] = "honijodknafkokifofgiaalefdiedpko"; + +const char kHelpAppFormat[] = "chrome-extension://%s/oobe.html?id=%d"; + +const char* g_extension_id_for_test = nullptr; } // namespace @@ -45,13 +49,24 @@ if (!registry) return; - GURL url(base::StringPrintf(kHelpAppFormat, static_cast<int>(help_topic_id))); + const char* extension_id = kExtensionId; + if (g_extension_id_for_test && *g_extension_id_for_test != '\0') { + extension_id = g_extension_id_for_test; + } + + GURL url(base::StringPrintf(kHelpAppFormat, extension_id, + static_cast<int>(help_topic_id))); // HelpApp component extension presents only in official builds so we can // show help only when the extensions is installed. if (registry->enabled_extensions().GetByID(url.host())) ShowHelpTopicDialog(profile, GURL(url)); } +// static +void HelpAppLauncher::SetExtensionIdForTest(const char* extension_id) { + g_extension_id_for_test = extension_id; +} + /////////////////////////////////////////////////////////////////////////////// // HelpApp, protected:
diff --git a/chrome/browser/chromeos/login/help_app_launcher.h b/chrome/browser/chromeos/login/help_app_launcher.h index 1a5b2bd..77309678 100644 --- a/chrome/browser/chromeos/login/help_app_launcher.h +++ b/chrome/browser/chromeos/login/help_app_launcher.h
@@ -47,6 +47,9 @@ // Shows specified help topic. void ShowHelpTopic(HelpTopic help_topic_id); + // Allows tests to specify a different extension id to connect to. + static void SetExtensionIdForTest(const char* extension_id); + protected: virtual ~HelpAppLauncher();
diff --git a/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc b/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc index fc58c3a5..ac2f643a 100644 --- a/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc +++ b/chrome/browser/chromeos/login/lock/screen_locker_unittest.cc
@@ -23,6 +23,7 @@ #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/dbus/biod/biod_client.h" +#include "chromeos/dbus/cras_audio_client.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/login/login_state/login_state.h" @@ -51,6 +52,7 @@ void SetUp() override { DBusThreadManager::Initialize(); BiodClient::InitializeFake(); + CrasAudioClient::InitializeFake(); CryptohomeClient::InitializeFake(); // MojoSystemInfoDispatcher dependency:
diff --git a/chrome/browser/chromeos/login/login_utils_browsertest.cc b/chrome/browser/chromeos/login/login_utils_browsertest.cc index 82869a2..b3c3d139 100644 --- a/chrome/browser/chromeos/login/login_utils_browsertest.cc +++ b/chrome/browser/chromeos/login/login_utils_browsertest.cc
@@ -60,8 +60,6 @@ LoginUtilsTest() = default; ~LoginUtilsTest() override = default; - void RunUntilIdle() { base::RunLoop().RunUntilIdle(); } - PrefService* local_state() { return g_browser_process->local_state(); } void Login(const std::string& username) {
diff --git a/chrome/browser/chromeos/login/oobe_screen.cc b/chrome/browser/chromeos/login/oobe_screen.cc index db69921..7d03f63 100644 --- a/chrome/browser/chromeos/login/oobe_screen.cc +++ b/chrome/browser/chromeos/login/oobe_screen.cc
@@ -85,16 +85,4 @@ return OobeScreen::SCREEN_UNKNOWN; } -bool ForceShowOobeScreen(OobeScreen screen) { - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (!command_line->HasSwitch(switches::kOobeForceShowScreen)) - return false; - std::string option_str = - command_line->GetSwitchValueASCII(switches::kOobeForceShowScreen); - std::vector<std::string> screens = base::SplitString( - option_str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - std::string name = GetOobeScreenName(screen); - return base::ContainsValue(screens, name); -} - } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/screens/eula_screen.cc b/chrome/browser/chromeos/login/screens/eula_screen.cc index 0acc4fd..3e48399 100644 --- a/chrome/browser/chromeos/login/screens/eula_screen.cc +++ b/chrome/browser/chromeos/login/screens/eula_screen.cc
@@ -44,24 +44,6 @@ view_->Unbind(); } -GURL EulaScreen::GetOemEulaUrl() const { - const StartupCustomizationDocument* customization = - StartupCustomizationDocument::GetInstance(); - if (customization->IsReady()) { - // Previously we're using "initial locale" that device initially - // booted with out-of-box. http://crbug.com/145142 - std::string locale = g_browser_process->GetApplicationLocale(); - std::string eula_page = customization->GetEULAPage(locale); - if (!eula_page.empty()) - return GURL(eula_page); - - VLOG(1) << "No eula found for locale: " << locale; - } else { - LOG(ERROR) << "No manifest found."; - } - return GURL(); -} - void EulaScreen::InitiatePasswordFetch() { if (tpm_password_.empty()) { password_fetcher_.Fetch();
diff --git a/chrome/browser/chromeos/login/test/help_app_test_helper.cc b/chrome/browser/chromeos/login/test/help_app_test_helper.cc new file mode 100644 index 0000000..e095e0e3 --- /dev/null +++ b/chrome/browser/chromeos/login/test/help_app_test_helper.cc
@@ -0,0 +1,82 @@ +// Copyright 2019 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 "chrome/browser/chromeos/login/test/help_app_test_helper.h" + +#include "base/files/file_path.h" +#include "base/path_service.h" +#include "chrome/browser/chromeos/extensions/signin_screen_policy_provider.h" +#include "chrome/browser/chromeos/login/help_app_launcher.h" +#include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/extensions/chrome_test_extension_loader.h" +#include "chrome/common/chrome_paths.h" +#include "chrome/grit/generated_resources.h" +#include "ui/aura/env.h" +#include "ui/aura/window.h" +#include "ui/base/l10n/l10n_util.h" + +namespace chromeos { + +/////////////////////////////////////////////////////////////////////////////// +// HelpAppTestHelper::Waiter +/////////////////////////////////////////////////////////////////////////////// + +HelpAppTestHelper::Waiter::Waiter() { + aura::Env::GetInstance()->AddObserver(this); +} + +HelpAppTestHelper::Waiter::~Waiter() { + aura::Env::GetInstance()->RemoveObserver(this); +} + +void HelpAppTestHelper::Waiter::Wait() { + if (!dialog_visible_) + run_loop_.Run(); +} + +void HelpAppTestHelper::Waiter::OnWindowInitialized(aura::Window* window) { + window_observer_.Add(window); +} + +void HelpAppTestHelper::Waiter::OnWindowVisibilityChanged(aura::Window* window, + bool visible) { + if (IsHelpAppDialog(window) && visible && !dialog_visible_) { + dialog_visible_ = true; + run_loop_.QuitClosure().Run(); + } +} + +bool HelpAppTestHelper::Waiter::IsHelpAppDialog(aura::Window* window) { + return window->GetTitle() == + l10n_util::GetStringUTF16(IDS_LOGIN_OOBE_HELP_DIALOG_TITLE); +} + +/////////////////////////////////////////////////////////////////////////////// +// HelpAppTestHelper +/////////////////////////////////////////////////////////////////////////////// + +HelpAppTestHelper::HelpAppTestHelper() { + auto reset = GetScopedSigninScreenPolicyProviderDisablerForTesting(); + + base::FilePath test_data_dir; + base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); + extensions::ChromeTestExtensionLoader loader( + ProfileHelper::GetSigninProfile()); + loader.set_allow_incognito_access(true); + + scoped_refptr<const extensions::Extension> extension = + loader.LoadExtension(test_data_dir.AppendASCII("extensions") + .AppendASCII("api_test") + .AppendASCII("help_app")); + + DCHECK(extension && !extension->id().empty()); + + HelpAppLauncher::SetExtensionIdForTest(extension->id().c_str()); +} + +HelpAppTestHelper::~HelpAppTestHelper() { + HelpAppLauncher::SetExtensionIdForTest(nullptr); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/test/help_app_test_helper.h b/chrome/browser/chromeos/login/test/help_app_test_helper.h new file mode 100644 index 0000000..e752448 --- /dev/null +++ b/chrome/browser/chromeos/login/test/help_app_test_helper.h
@@ -0,0 +1,57 @@ +// Copyright 2019 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. + +#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_TEST_HELP_APP_TEST_HELPER_H_ +#define CHROME_BROWSER_CHROMEOS_LOGIN_TEST_HELP_APP_TEST_HELPER_H_ + +#include "base/macros.h" +#include "base/run_loop.h" +#include "base/scoped_observer.h" +#include "ui/aura/env_observer.h" +#include "ui/aura/window_observer.h" + +namespace chromeos { + +// Provides utilies for launching and interacting with HelpApp dialogs in tests. +class HelpAppTestHelper { + public: + // Waits for a HelpApp dialog to open and become visible. + class Waiter : public aura::EnvObserver, public aura::WindowObserver { + public: + Waiter(); + ~Waiter() override; + + // Blocks until a HelpApp dialog becomes visible. + void Wait(); + + // aura::EnvObserver + void OnWindowInitialized(aura::Window* window) override; + + // aura::WindowObserver + void OnWindowVisibilityChanged(aura::Window* window, bool visible) override; + + private: + bool IsHelpAppDialog(aura::Window* window); + + base::RunLoop run_loop_; + bool dialog_visible_ = false; + ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this}; + DISALLOW_COPY_AND_ASSIGN(Waiter); + }; + + HelpAppTestHelper(); + virtual ~HelpAppTestHelper(); + + // Performs setup to allow HelpApp dialogs to open in tests. + void SetUpHelpAppForTest(); + + // TODO(tonydeluna): Add utilities for interacting with the contents of the + // help dialogs. + + DISALLOW_COPY_AND_ASSIGN(HelpAppTestHelper); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_TEST_HELP_APP_TEST_HELPER_H_
diff --git a/chrome/browser/chromeos/login/test/js_checker.cc b/chrome/browser/chromeos/login/test/js_checker.cc index de4b376..b4f8a5c 100644 --- a/chrome/browser/chromeos/login/test/js_checker.cc +++ b/chrome/browser/chromeos/login/test/js_checker.cc
@@ -237,11 +237,11 @@ void JSChecker::TapOnPath( std::initializer_list<base::StringPiece> element_ids) { ExpectVisiblePath(element_ids); - // All OOBE UI should be mobile-friendly, so use "tap" instead of "click". + // TODO(crbug.com/949377): Switch to always firing 'click' events when + // missing OOBE UI components are migrated to handle 'click' events. if (polymer_ui_) { Evaluate(GetOobeElementPath(element_ids) + ".fire('tap')"); } else { - // Old test-only UI (fake GAIA, fake SAML) only support "click". Evaluate(GetOobeElementPath(element_ids) + ".click()"); } }
diff --git a/chrome/browser/download/download_manager_utils.cc b/chrome/browser/download/download_manager_utils.cc new file mode 100644 index 0000000..0cc0c857b --- /dev/null +++ b/chrome/browser/download/download_manager_utils.cc
@@ -0,0 +1,39 @@ +// Copyright 2019 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 "chrome/browser/download/download_manager_utils.h" + +#include "base/bind.h" +#include "build/build_config.h" +#include "chrome/browser/profiles/profile.h" +#include "components/download/public/common/in_progress_download_manager.h" +#include "content/public/browser/download_request_utils.h" + +#if defined(OS_ANDROID) +#include "chrome/browser/android/download/download_manager_service.h" +#endif + +// Ignores origin security check. DownloadManagerImpl will provide its own +// implementation when InProgressDownloadManager object is passed to it. +bool IgnoreOriginSecurityCheck(const GURL& url) { + return true; +} + +download::InProgressDownloadManager* +DownloadManagerUtils::RetrieveInProgressDownloadManager(Profile* profile) { + // TODO(qinmin): use the profile to retrieve SimpleFactoryKey and + // create SimpleDownloadManagerCoordinator. +#if defined(OS_ANDROID) + download::InProgressDownloadManager* manager = + DownloadManagerService::GetInstance()->RetriveInProgressDownloadManager( + profile); + if (manager) + return manager; +#endif + return new download::InProgressDownloadManager( + nullptr, + profile->IsOffTheRecord() ? base::FilePath() : profile->GetPath(), + base::BindRepeating(&IgnoreOriginSecurityCheck), + base::BindRepeating(&content::DownloadRequestUtils::IsURLSafe)); +}
diff --git a/chrome/browser/download/download_manager_utils.h b/chrome/browser/download/download_manager_utils.h new file mode 100644 index 0000000..b900d0a --- /dev/null +++ b/chrome/browser/download/download_manager_utils.h
@@ -0,0 +1,26 @@ +// Copyright 2019 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. + +#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_UTILS_H_ +#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_UTILS_H_ + +#include "base/macros.h" + +class Profile; + +namespace download { +class InProgressDownloadManager; +} + +class DownloadManagerUtils { + public: + // Creates an InProgressDownloadManager from a profile. + static download::InProgressDownloadManager* RetrieveInProgressDownloadManager( + Profile* profile); + + private: + DISALLOW_COPY_AND_ASSIGN(DownloadManagerUtils); +}; + +#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_UTILS_H_
diff --git a/chrome/browser/download/download_offline_content_provider.cc b/chrome/browser/download/download_offline_content_provider.cc index becf135..662cfe2 100644 --- a/chrome/browser/download/download_offline_content_provider.cc +++ b/chrome/browser/download/download_offline_content_provider.cc
@@ -233,6 +233,16 @@ void DownloadOfflineContentProvider::ManagerGoingDown( DownloadManager* manager) { + DownloadManager::DownloadVector all_items; + GetAllDownloads(&all_items); + + for (auto* item : all_items) { + if (!ShouldShowDownloadItem(item)) + continue; + for (auto& observer : observers_) + observer.OnItemRemoved(ContentId(name_space_, item->GetGuid())); + } + manager_ = nullptr; }
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 8d0c0b20..a086a5d 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -983,6 +983,7 @@ "//chromeos/cryptohome", "//chromeos/dbus", "//chromeos/dbus/cryptohome", + "//chromeos/dbus/power", "//chromeos/disks", "//chromeos/login/login_state", "//chromeos/network",
diff --git a/chrome/browser/extensions/activity_log/counting_policy.cc b/chrome/browser/extensions/activity_log/counting_policy.cc index b788505..6b7b2c5 100644 --- a/chrome/browser/extensions/activity_log/counting_policy.cc +++ b/chrome/browser/extensions/activity_log/counting_policy.cc
@@ -495,7 +495,7 @@ static_cast<Action::ActionType>(query.ColumnInt(2)), query.ColumnString(3), query.ColumnInt64(10)); - if (query.ColumnType(4) != sql::ColumnType::kNull) { + if (query.GetColumnType(4) != sql::ColumnType::kNull) { std::unique_ptr<base::Value> parsed_value = base::JSONReader::ReadDeprecated(query.ColumnString(4)); if (parsed_value && parsed_value->is_list()) { @@ -508,7 +508,7 @@ action->set_page_title(query.ColumnString(6)); action->ParseArgUrl(query.ColumnString(7)); - if (query.ColumnType(8) != sql::ColumnType::kNull) { + if (query.GetColumnType(8) != sql::ColumnType::kNull) { std::unique_ptr<base::Value> parsed_value = base::JSONReader::ReadDeprecated(query.ColumnString(8)); if (parsed_value && parsed_value->is_dict()) {
diff --git a/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc b/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc index 6223b61..784e87a 100644 --- a/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc +++ b/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc
@@ -192,7 +192,7 @@ static_cast<Action::ActionType>(query.ColumnInt(2)), query.ColumnString(3), query.ColumnInt64(9)); - if (query.ColumnType(4) != sql::ColumnType::kNull) { + if (query.GetColumnType(4) != sql::ColumnType::kNull) { std::unique_ptr<base::Value> parsed_value = base::JSONReader::ReadDeprecated(query.ColumnString(4)); if (parsed_value && parsed_value->is_list()) { @@ -205,7 +205,7 @@ action->set_page_title(query.ColumnString(6)); action->ParseArgUrl(query.ColumnString(7)); - if (query.ColumnType(8) != sql::ColumnType::kNull) { + if (query.GetColumnType(8) != sql::ColumnType::kNull) { std::unique_ptr<base::Value> parsed_value = base::JSONReader::ReadDeprecated(query.ColumnString(8)); if (parsed_value && parsed_value->is_dict()) {
diff --git a/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc b/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc index 113f674..da36b83 100644 --- a/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc
@@ -46,6 +46,7 @@ protected: using Action = RulesetManager::Action; + using ActionType = Action::Type; // Helper to create a composite matcher instance for the given |rules|. void CreateMatcherForRules( @@ -142,9 +143,8 @@ WebRequestInfo request_three_info = GetRequestForURL("http://three.com"); auto should_block_request = [manager](const WebRequestInfo& request) { - GURL redirect_url; - return manager->EvaluateRequest(request, false /*is_incognito_context*/, - &redirect_url) == Action::BLOCK; + return manager->EvaluateRequest(request, false /*is_incognito_context*/) == + Action(ActionType::BLOCK); }; for (int mask = 0; mask < 4; mask++) { @@ -208,30 +208,28 @@ WebRequestInfo request_info = GetRequestForURL("http://example.com"); - GURL redirect_url; - // By default, the extension is disabled in incognito mode. So requests from // incognito contexts should not be evaluated. EXPECT_FALSE(util::IsIncognitoEnabled(last_loaded_extension()->id(), browser_context())); - EXPECT_EQ(Action::NONE, - manager->EvaluateRequest( - request_info, true /*is_incognito_context*/, &redirect_url)); - EXPECT_EQ(Action::BLOCK, - manager->EvaluateRequest( - request_info, false /*is_incognito_context*/, &redirect_url)); + EXPECT_EQ( + Action(ActionType::NONE), + manager->EvaluateRequest(request_info, true /*is_incognito_context*/)); + EXPECT_EQ( + Action(ActionType::BLOCK), + manager->EvaluateRequest(request_info, false /*is_incognito_context*/)); // Enabling the extension in incognito mode, should cause requests from // incognito contexts to also be evaluated. SetIncognitoEnabled(last_loaded_extension(), true /*incognito_enabled*/); EXPECT_TRUE(util::IsIncognitoEnabled(last_loaded_extension()->id(), browser_context())); - EXPECT_EQ(Action::BLOCK, - manager->EvaluateRequest( - request_info, true /*is_incognito_context*/, &redirect_url)); - EXPECT_EQ(Action::BLOCK, - manager->EvaluateRequest( - request_info, false /*is_incognito_context*/, &redirect_url)); + EXPECT_EQ( + Action(ActionType::BLOCK), + manager->EvaluateRequest(request_info, true /*is_incognito_context*/)); + EXPECT_EQ( + Action(ActionType::BLOCK), + manager->EvaluateRequest(request_info, false /*is_incognito_context*/)); } // Tests that @@ -243,18 +241,17 @@ WebRequestInfo example_com_request = GetRequestForURL("http://example.com"); WebRequestInfo google_com_request = GetRequestForURL("http://google.com"); - GURL redirect_url; bool is_incognito_context = false; const char* kHistogramName = "Extensions.DeclarativeNetRequest.EvaluateRequestTime.AllExtensions2"; { base::HistogramTester tester; - EXPECT_EQ(Action::NONE, - manager->EvaluateRequest(example_com_request, - is_incognito_context, &redirect_url)); - EXPECT_EQ(Action::NONE, - manager->EvaluateRequest(google_com_request, is_incognito_context, - &redirect_url)); + EXPECT_EQ( + Action(ActionType::NONE), + manager->EvaluateRequest(example_com_request, is_incognito_context)); + EXPECT_EQ( + Action(ActionType::NONE), + manager->EvaluateRequest(google_com_request, is_incognito_context)); tester.ExpectTotalCount(kHistogramName, 0); } @@ -269,13 +266,13 @@ { base::HistogramTester tester; - EXPECT_EQ(Action::BLOCK, - manager->EvaluateRequest(example_com_request, - is_incognito_context, &redirect_url)); + EXPECT_EQ( + Action(ActionType::BLOCK), + manager->EvaluateRequest(example_com_request, is_incognito_context)); tester.ExpectTotalCount(kHistogramName, 1); - EXPECT_EQ(Action::NONE, - manager->EvaluateRequest(google_com_request, is_incognito_context, - &redirect_url)); + EXPECT_EQ( + Action(ActionType::NONE), + manager->EvaluateRequest(google_com_request, is_incognito_context)); tester.ExpectTotalCount(kHistogramName, 2); } } @@ -301,36 +298,30 @@ // Create a request to "example.com" with an empty initiator. It should be // redirected to "google.com". const bool is_incognito_context = false; - GURL redirect_url1; WebRequestInfo request = GetRequestForURL("http://example.com"); request.initiator = base::nullopt; - EXPECT_EQ( - Action::REDIRECT, - manager->EvaluateRequest(request, is_incognito_context, &redirect_url1)); - EXPECT_EQ(GURL("http://google.com"), redirect_url1); + Action action = manager->EvaluateRequest(request, is_incognito_context); + EXPECT_EQ(ActionType::REDIRECT, action.type); + EXPECT_EQ(GURL("http://google.com"), action.redirect_url); // Change the initiator to "xyz.com". It should not be redirected since we // don't have host permissions to the request initiator. - GURL redirect_url2; request.initiator = url::Origin::Create(GURL("http://xyz.com")); - EXPECT_EQ(Action::NONE, manager->EvaluateRequest( - request, is_incognito_context, &redirect_url2)); + action = manager->EvaluateRequest(request, is_incognito_context); + EXPECT_EQ(Action(ActionType::NONE), action); // Change the initiator to "abc.com". It should be redirected since we have // the required host permissions. - GURL redirect_url3; request.initiator = url::Origin::Create(GURL("http://abc.com")); - EXPECT_EQ( - Action::REDIRECT, - manager->EvaluateRequest(request, is_incognito_context, &redirect_url3)); - EXPECT_EQ(GURL("http://google.com"), redirect_url3); + action = manager->EvaluateRequest(request, is_incognito_context); + EXPECT_EQ(ActionType::REDIRECT, action.type); + EXPECT_EQ(GURL("http://google.com"), action.redirect_url); // Ensure web-socket requests are not redirected. - GURL redirect_url4; request = GetRequestForURL("ws://example.com"); request.initiator = base::nullopt; - EXPECT_EQ(Action::NONE, manager->EvaluateRequest( - request, is_incognito_context, &redirect_url4)); + action = manager->EvaluateRequest(request, is_incognito_context); + EXPECT_EQ(Action(ActionType::NONE), action); } // Tests that an extension can't block or redirect resources on the chrome- @@ -376,36 +367,31 @@ // Ensure that "http://example.com" will be blocked (with blocking taking // priority over redirection). WebRequestInfo request = GetRequestForURL("http://example.com"); - GURL redirect_url; - EXPECT_EQ(Action::BLOCK, - manager->EvaluateRequest(request, false /*is_incognito_context*/, - &redirect_url)); + EXPECT_EQ(Action(ActionType::BLOCK), + manager->EvaluateRequest(request, false /*is_incognito_context*/)); // Ensure that the background page for |extension_1| won't be blocked or // redirected. GURL background_page_url_1 = BackgroundInfo::GetBackgroundURL(extension_1); EXPECT_TRUE(!background_page_url_1.is_empty()); request = GetRequestForURL(background_page_url_1.spec()); - EXPECT_EQ(Action::NONE, - manager->EvaluateRequest(request, false /*is_incognito_context*/, - &redirect_url)); + EXPECT_EQ(Action(ActionType::NONE), + manager->EvaluateRequest(request, false /*is_incognito_context*/)); // Ensure that the background page for |extension_2| won't be blocked or // redirected. GURL background_page_url_2 = BackgroundInfo::GetBackgroundURL(extension_2); EXPECT_TRUE(!background_page_url_2.is_empty()); request = GetRequestForURL(background_page_url_2.spec()); - EXPECT_EQ(Action::NONE, - manager->EvaluateRequest(request, false /*is_incognito_context*/, - &redirect_url)); + EXPECT_EQ(Action(ActionType::NONE), + manager->EvaluateRequest(request, false /*is_incognito_context*/)); // Also ensure that an arbitrary url on the chrome extension scheme is also // not blocked or redirected. request = GetRequestForURL(base::StringPrintf("%s://%s/%s", kExtensionScheme, "extension_id", "path")); - EXPECT_EQ(Action::NONE, - manager->EvaluateRequest(request, false /*is_incognito_context*/, - &redirect_url)); + EXPECT_EQ(Action(ActionType::NONE), + manager->EvaluateRequest(request, false /*is_incognito_context*/)); } TEST_P(RulesetManagerTest, PageAllowingAPI) { @@ -560,14 +546,11 @@ GURL(*params.pending_main_frame_url); } - GURL redirect_url; - RulesetManager::Action expected_action = - test_case.expect_blocked_with_allowed_pages - ? RulesetManager::Action::BLOCK - : RulesetManager::Action::NONE; + Action expected_action = test_case.expect_blocked_with_allowed_pages + ? Action(ActionType::BLOCK) + : Action(ActionType::NONE); EXPECT_EQ(expected_action, - manager->EvaluateRequest(info, false /*is_incognito_context*/, - &redirect_url)); + manager->EvaluateRequest(info, false /*is_incognito_context*/)); } } @@ -611,29 +594,31 @@ struct TestCase { std::string url; base::Optional<url::Origin> initiator; - Action expected_action_redirect_extension; - Action expected_action_blocking_extension; + ActionType expected_action_redirect_extension; + ActionType expected_action_blocking_extension; } cases[] = { // Empty initiator. Has access. - {"https://example.com", base::nullopt, Action::REDIRECT, Action::BLOCK}, + {"https://example.com", base::nullopt, ActionType::REDIRECT, + ActionType::BLOCK}, // Opaque origin as initiator. Has access. - {"https://example.com", url::Origin(), Action::REDIRECT, Action::BLOCK}, + {"https://example.com", url::Origin(), ActionType::REDIRECT, + ActionType::BLOCK}, // yahoo.com as initiator. Has access. {"https://example.com", url::Origin::Create(GURL("http://yahoo.com")), - Action::REDIRECT, Action::BLOCK}, + ActionType::REDIRECT, ActionType::BLOCK}, // No matching rule. {"https://yahoo.com", url::Origin::Create(GURL("http://example.com")), - Action::NONE, Action::NONE}, + ActionType::NONE, ActionType::NONE}, // Doesn't have access to initiator. But blocking a request doesn't // require host permissions. {"https://example.com", url::Origin::Create(GURL("http://google.com")), - Action::NONE, Action::BLOCK}, + ActionType::NONE, ActionType::BLOCK}, }; auto verify_test_case = [this, manager]( const std::string& url, const base::Optional<url::Origin>& initiator, - Action expected_action, GURL* redirect_url) { + const Action& expected_action) { SCOPED_TRACE(base::StringPrintf( "Url-%s initiator-%s", url.c_str(), initiator ? initiator->Serialize().c_str() : "empty")); @@ -642,9 +627,8 @@ request.initiator = initiator; bool is_incognito_context = false; - EXPECT_EQ( - expected_action, - manager->EvaluateRequest(request, is_incognito_context, redirect_url)); + EXPECT_EQ(expected_action, + manager->EvaluateRequest(request, is_incognito_context)); }; // Test redirect extension. @@ -653,11 +637,11 @@ manager->AddRuleset(redirect_extension_id, std::move(redirect_matcher), URLPatternSet()); for (const auto& test : cases) { - GURL redirect_url; - verify_test_case(test.url, test.initiator, - test.expected_action_redirect_extension, &redirect_url); - if (test.expected_action_redirect_extension == Action::REDIRECT) - EXPECT_EQ("https://foo.com/", redirect_url.spec()); + Action expected_action(test.expected_action_redirect_extension); + if (test.expected_action_redirect_extension == ActionType::REDIRECT) + expected_action.redirect_url = GURL("https://foo.com/"); + + verify_test_case(test.url, test.initiator, expected_action); } manager->RemoveRuleset(redirect_extension_id); } @@ -668,9 +652,8 @@ manager->AddRuleset(blocking_extension_id, std::move(blocking_matcher), URLPatternSet()); for (const auto& test : cases) { - GURL redirect_url; verify_test_case(test.url, test.initiator, - test.expected_action_blocking_extension, &redirect_url); + Action(test.expected_action_blocking_extension)); } manager->RemoveRuleset(blocking_extension_id); }
diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc index 895fdee..ab4b26e 100644 --- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
@@ -2073,12 +2073,10 @@ deltas.push_back(std::move(d0)); } bool request_headers_modified0; - std::set<std::string> ignore1, ignore2; net::HttpRequestHeaders headers0; headers0.MergeFrom(base_headers); MergeOnBeforeSendHeadersResponses(GURL(), deltas, &headers0, &ignored_actions, - &logger, &ignore1, &ignore2, - &request_headers_modified0); + &logger, &request_headers_modified0); ASSERT_TRUE(headers0.GetHeader("key1", &header_value)); EXPECT_EQ("value 1", header_value); ASSERT_TRUE(headers0.GetHeader("key2", &header_value)); @@ -2098,14 +2096,11 @@ deltas.sort(&InDecreasingExtensionInstallationTimeOrder); ignored_actions.clear(); logger.clear(); - ignore1.clear(); - ignore2.clear(); bool request_headers_modified1; net::HttpRequestHeaders headers1; headers1.MergeFrom(base_headers); MergeOnBeforeSendHeadersResponses(GURL(), deltas, &headers1, &ignored_actions, - &logger, &ignore1, &ignore2, - &request_headers_modified1); + &logger, &request_headers_modified1); EXPECT_FALSE(headers1.HasHeader("key1")); ASSERT_TRUE(headers1.GetHeader("key2", &header_value)); EXPECT_EQ("value 3", header_value); @@ -2127,14 +2122,11 @@ deltas.sort(&InDecreasingExtensionInstallationTimeOrder); ignored_actions.clear(); logger.clear(); - ignore1.clear(); - ignore2.clear(); bool request_headers_modified2; net::HttpRequestHeaders headers2; headers2.MergeFrom(base_headers); MergeOnBeforeSendHeadersResponses(GURL(), deltas, &headers2, &ignored_actions, - &logger, &ignore1, &ignore2, - &request_headers_modified2); + &logger, &request_headers_modified2); EXPECT_FALSE(headers2.HasHeader("key1")); ASSERT_TRUE(headers2.GetHeader("key2", &header_value)); EXPECT_EQ("value 3", header_value); @@ -2160,14 +2152,11 @@ deltas.sort(&InDecreasingExtensionInstallationTimeOrder); ignored_actions.clear(); logger.clear(); - ignore1.clear(); - ignore2.clear(); bool request_headers_modified3; net::HttpRequestHeaders headers3; headers3.MergeFrom(base_headers); MergeOnBeforeSendHeadersResponses(GURL(), deltas, &headers3, &ignored_actions, - &logger, &ignore1, &ignore2, - &request_headers_modified3); + &logger, &request_headers_modified3); EXPECT_FALSE(headers3.HasHeader("key1")); ASSERT_TRUE(headers3.GetHeader("key2", &header_value)); EXPECT_EQ("value 3", header_value); @@ -2229,13 +2218,11 @@ } deltas.sort(&InDecreasingExtensionInstallationTimeOrder); bool request_headers_modified1; - std::set<std::string> ignore1, ignore2; net::HttpRequestHeaders headers1; headers1.MergeFrom(base_headers); ignored_actions.clear(); MergeOnBeforeSendHeadersResponses(GURL(), deltas, &headers1, &ignored_actions, - &logger, &ignore1, &ignore2, - &request_headers_modified1); + &logger, &request_headers_modified1); EXPECT_TRUE(headers1.HasHeader("Cookie")); ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value)); EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
diff --git a/chrome/browser/extensions/extension_util.cc b/chrome/browser/extensions/extension_util.cc index b36d1916..1c3b890 100644 --- a/chrome/browser/extensions/extension_util.cc +++ b/chrome/browser/extensions/extension_util.cc
@@ -361,7 +361,7 @@ // TODO(loyso): Unify this check as a util (including // MaybeCreateHostedAppController). Browser* browser = chrome::FindBrowserWithWebContents(web_contents); - return browser && browser->hosted_app_controller(); + return browser && browser->web_app_controller(); } } // namespace util
diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc index ef56413..6bcd84c 100644 --- a/chrome/browser/file_select_helper.cc +++ b/chrome/browser/file_select_helper.cc
@@ -470,7 +470,7 @@ // message. scoped_refptr<FileSelectHelper> file_select_helper( new FileSelectHelper(profile)); - file_select_helper->EnumerateDirectory(std::move(listener), path); + file_select_helper->EnumerateDirectoryImpl(tab, std::move(listener), path); } void FileSelectHelper::RunFileChooser( @@ -658,12 +658,14 @@ Release(); } -void FileSelectHelper::EnumerateDirectory( +void FileSelectHelper::EnumerateDirectoryImpl( + content::WebContents* tab, std::unique_ptr<content::FileSelectListener> listener, const base::FilePath& path) { DCHECK(listener); DCHECK(!listener_); dialog_type_ = ui::SelectFileDialog::SELECT_NONE; + web_contents_ = tab; listener_ = std::move(listener); // Because this class returns notifications to the RenderViewHost, it is // difficult for callers to know how long to keep a reference to this @@ -676,7 +678,7 @@ // This method is called when we receive the last callback from the enumeration // code. Perform any cleanup and release the reference we added in -// EnumerateDirectory(). +// EnumerateDirectoryImpl(). void FileSelectHelper::EnumerateDirectoryEnd() { Release(); }
diff --git a/chrome/browser/file_select_helper.h b/chrome/browser/file_select_helper.h index ef695e1..1699ad03 100644 --- a/chrome/browser/file_select_helper.h +++ b/chrome/browser/file_select_helper.h
@@ -118,8 +118,10 @@ void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; void WebContentsDestroyed() override; - void EnumerateDirectory(std::unique_ptr<content::FileSelectListener> listener, - const base::FilePath& path); + void EnumerateDirectoryImpl( + content::WebContents* tab, + std::unique_ptr<content::FileSelectListener> listener, + const base::FilePath& path); // Kicks off a new directory enumeration. void StartNewEnumeration(const base::FilePath& path);
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 4f212af1..739a65d 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1622,7 +1622,7 @@ "expiry_milestone": 77 }, { - "name": "enable-send-tab-to-self-receive", + "name": "enable-send-tab-to-self-show-sending-ui", "owners": [ "//components/send_tab_to_self/OWNERS" ], "expiry_milestone": 77 },
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 073657a..13314db7 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1732,13 +1732,15 @@ const char kSendTabToSelfName[] = "Send tab to self"; const char kSendTabToSelfDescription[] = - "Allows users to push tabs from Android devices to other synced " - "devices, in order to easily transition those tabs to the new device "; + "Allows users to receive tabs from other synced devices, in order to " + "easily transition those tabs to this device. This enables the sync " + "infrastructure for this feature."; -const char kSendTabToSelfReceiveName[] = "Send tab to self receive"; -const char kSendTabToSelfReceiveDescription[] = - "Allows users to receive tabs that were pushed from other synced " - "devices, in order to easily transition those tabs to the new device "; +const char kSendTabToSelfShowSendingUIName[] = + "Send tab to self show sending UI"; +const char kSendTabToSelfShowSendingUIDescription[] = + "Allows users to send tabs to other synced devices by accessing the " + "sending user interface. Requires Send tab to self to also be enabled"; const char kServiceWorkerImportedScriptUpdateCheckName[] = "Enable update check for service worker importScripts() resources";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index b7c07d4..3c4addf3 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1040,8 +1040,8 @@ extern const char kSendTabToSelfName[]; extern const char kSendTabToSelfDescription[]; -extern const char kSendTabToSelfReceiveName[]; -extern const char kSendTabToSelfReceiveDescription[]; +extern const char kSendTabToSelfShowSendingUIName[]; +extern const char kSendTabToSelfShowSendingUIDescription[]; extern const char kServiceWorkerImportedScriptUpdateCheckName[]; extern const char kServiceWorkerImportedScriptUpdateCheckDescription[];
diff --git a/chrome/browser/history/android/android_provider_backend.cc b/chrome/browser/history/android/android_provider_backend.cc index 8243bd7..5b599e5 100644 --- a/chrome/browser/history/android/android_provider_backend.cc +++ b/chrome/browser/history/android/android_provider_backend.cc
@@ -787,7 +787,7 @@ base::Time::FromInternalValue(statement.ColumnInt64(1)); base::Time created_time = last_visit_time; - if (statement.ColumnType(2) != sql::ColumnType::kNull) + if (statement.GetColumnType(2) != sql::ColumnType::kNull) created_time = base::Time::FromInternalValue(statement.ColumnInt64(2)); if (!history_db_->AddBookmarkCacheRow(created_time, last_visit_time,
diff --git a/chrome/browser/history/android/sqlite_cursor.cc b/chrome/browser/history/android/sqlite_cursor.cc index 21ca8812..cb955c8 100644 --- a/chrome/browser/history/android/sqlite_cursor.cc +++ b/chrome/browser/history/android/sqlite_cursor.cc
@@ -238,7 +238,7 @@ if (column == statement_->favicon_index()) return SQLiteCursor::BLOB; - return ToJavaColumnType(statement_->statement()->ColumnType(column)); + return ToJavaColumnType(statement_->statement()->GetColumnType(column)); } void SQLiteCursor::RunMoveStatementOnUIThread(int pos) {
diff --git a/chrome/browser/installable/installed_webapp_bridge.cc b/chrome/browser/installable/installed_webapp_bridge.cc index 7f20a60..cfa7500 100644 --- a/chrome/browser/installable/installed_webapp_bridge.cc +++ b/chrome/browser/installable/installed_webapp_bridge.cc
@@ -14,6 +14,13 @@ using base::android::ConvertJavaStringToUTF8; using base::android::ScopedJavaLocalRef; +static void JNI_InstalledWebappBridge_NotifyPermissionsChange(JNIEnv* env, + jlong j_provider) { + InstalledWebappProvider* provider = + reinterpret_cast<InstalledWebappProvider*>(j_provider); + provider->Notify(); +} + InstalledWebappProvider::RuleList InstalledWebappBridge::GetInstalledWebappNotificationPermissions() { JNIEnv* env = base::android::AttachCurrentThread(); @@ -35,3 +42,9 @@ return rules; } + +void InstalledWebappBridge::SetProviderInstance( + InstalledWebappProvider *provider) { + Java_InstalledWebappBridge_setInstalledWebappProvider( + base::android::AttachCurrentThread(), (jlong) provider); +}
diff --git a/chrome/browser/installable/installed_webapp_bridge.h b/chrome/browser/installable/installed_webapp_bridge.h index 25363f2..549976e1 100644 --- a/chrome/browser/installable/installed_webapp_bridge.h +++ b/chrome/browser/installable/installed_webapp_bridge.h
@@ -13,6 +13,8 @@ static InstalledWebappProvider::RuleList GetInstalledWebappNotificationPermissions(); + static void SetProviderInstance(InstalledWebappProvider* provider); + private: DISALLOW_IMPLICIT_CONSTRUCTORS(InstalledWebappBridge); };
diff --git a/chrome/browser/installable/installed_webapp_provider.cc b/chrome/browser/installable/installed_webapp_provider.cc index 7dfb2eb9..78ca0beb 100644 --- a/chrome/browser/installable/installed_webapp_provider.cc +++ b/chrome/browser/installable/installed_webapp_provider.cc
@@ -12,6 +12,7 @@ #include "base/values.h" #include "chrome/browser/installable/installed_webapp_bridge.h" #include "components/content_settings/core/browser/content_settings_rule.h" +#include "components/content_settings/core/common/content_settings_pattern.h" #include "url/gurl.h" using content_settings::ResourceIdentifier; @@ -47,8 +48,12 @@ } // namespace -InstalledWebappProvider::InstalledWebappProvider() = default; -InstalledWebappProvider::~InstalledWebappProvider() = default; +InstalledWebappProvider::InstalledWebappProvider() { + InstalledWebappBridge::SetProviderInstance(this); +} +InstalledWebappProvider::~InstalledWebappProvider() { + InstalledWebappBridge::SetProviderInstance(nullptr); +} std::unique_ptr<RuleIterator> InstalledWebappProvider::GetRuleIterator( ContentSettingsType content_type, @@ -81,3 +86,11 @@ DCHECK(CalledOnValidThread()); RemoveAllObservers(); } + +void InstalledWebappProvider::Notify() { + NotifyObservers( + ContentSettingsPattern(), + ContentSettingsPattern(), + CONTENT_SETTINGS_TYPE_NOTIFICATIONS, + std::string()); +}
diff --git a/chrome/browser/installable/installed_webapp_provider.h b/chrome/browser/installable/installed_webapp_provider.h index f509b96..1b7d3b8 100644 --- a/chrome/browser/installable/installed_webapp_provider.h +++ b/chrome/browser/installable/installed_webapp_provider.h
@@ -38,6 +38,8 @@ void ClearAllContentSettingsRules(ContentSettingsType content_type) override; void ShutdownOnUIThread() override; + void Notify(); + private: DISALLOW_COPY_AND_ASSIGN(InstalledWebappProvider); };
diff --git a/chrome/browser/metrics/chrome_feature_list_creator.cc b/chrome/browser/metrics/chrome_feature_list_creator.cc index c52e681..77738f3 100644 --- a/chrome/browser/metrics/chrome_feature_list_creator.cc +++ b/chrome/browser/metrics/chrome_feature_list_creator.cc
@@ -165,7 +165,8 @@ } void ChromeFeatureListCreator::SetupFieldTrials() { - browser_field_trials_ = std::make_unique<ChromeBrowserFieldTrials>(); + browser_field_trials_ = + std::make_unique<ChromeBrowserFieldTrials>(local_state_.get()); // Initialize FieldTrialList to support FieldTrials. This is intentionally // leaked since it needs to live for the duration of the browser process and
diff --git a/chrome/browser/metrics/perf/heap_collector.cc b/chrome/browser/metrics/perf/heap_collector.cc index 4422571..72b942db 100644 --- a/chrome/browser/metrics/perf/heap_collector.cc +++ b/chrome/browser/metrics/perf/heap_collector.cc
@@ -10,29 +10,35 @@ #include "base/allocator/allocator_extension.h" #include "base/command_line.h" +#include "base/debug/proc_maps_linux.h" #include "base/files/file.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/metrics/field_trial_params.h" #include "base/process/process_handle.h" #include "base/rand_util.h" +#include "base/sampling_heap_profiler/sampling_heap_profiler.h" +#include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_piece.h" #include "base/strings/string_split.h" +#include "base/strings/stringprintf.h" #include "base/system/sys_info.h" #include "base/task/post_task.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" +#include "components/services/heap_profiling/public/cpp/settings.h" #include "third_party/metrics_proto/sampled_profile.pb.h" namespace metrics { -// Feature for controlling the heap collection parameters. -const base::Feature kCWPHeapCollection{"CWPHeapCollection", - base::FEATURE_DISABLED_BY_DEFAULT}; - namespace { +// Supported collection mode values. +const char kCollectionModeTcmalloc[] = "cwp-tcmalloc"; +const char kCollectionModeShimLayer[] = "cwp-shim-layer"; + // Name of the heap collector. It is appended to the UMA metric names for // reporting collection and upload status. const char kHeapCollectorName[] = "Heap"; @@ -43,23 +49,28 @@ // Feature parameters that control the behavior of the heap collector. constexpr base::FeatureParam<int> kSamplingIntervalBytes{ - &kCWPHeapCollection, "SamplingIntervalBytes", kHeapSamplingIntervalBytes}; + &heap_profiling::kOOPHeapProfilingFeature, "SamplingIntervalBytes", + kHeapSamplingIntervalBytes}; constexpr base::FeatureParam<int> kPeriodicCollectionIntervalMs{ - &kCWPHeapCollection, "PeriodicCollectionIntervalMs", + &heap_profiling::kOOPHeapProfilingFeature, "PeriodicCollectionIntervalMs", 3 * 3600 * 1000}; // 3h constexpr base::FeatureParam<int> kResumeFromSuspendSamplingFactor{ - &kCWPHeapCollection, "ResumeFromSuspend::SamplingFactor", 10}; + &heap_profiling::kOOPHeapProfilingFeature, + "ResumeFromSuspend::SamplingFactor", 10}; constexpr base::FeatureParam<int> kResumeFromSuspendMaxDelaySec{ - &kCWPHeapCollection, "ResumeFromSuspend::MaxDelaySec", 5}; + &heap_profiling::kOOPHeapProfilingFeature, "ResumeFromSuspend::MaxDelaySec", + 5}; constexpr base::FeatureParam<int> kRestoreSessionSamplingFactor{ - &kCWPHeapCollection, "RestoreSession::SamplingFactor", 10}; + &heap_profiling::kOOPHeapProfilingFeature, "RestoreSession::SamplingFactor", + 10}; constexpr base::FeatureParam<int> kRestoreSessionMaxDelaySec{ - &kCWPHeapCollection, "RestoreSession::MaxDelaySec", 10}; + &heap_profiling::kOOPHeapProfilingFeature, "RestoreSession::MaxDelaySec", + 10}; // Limit the total size of protobufs that can be cached, so they don't take up // too much memory. If the size of cached protobufs exceeds this value, stop @@ -73,56 +84,234 @@ const char kQuipperHeapProfile[] = "input_heap_profile"; const char kQuipperProcessPid[] = "pid"; -// Deletes the temp file when the object goes out of scope. -class FileDeleter { - public: - explicit FileDeleter(const base::FilePath& temp_dir) : temp_dir_(temp_dir) {} - ~FileDeleter(); - - private: - const base::FilePath temp_dir_; - - DISALLOW_COPY_AND_ASSIGN(FileDeleter); -}; - -FileDeleter::~FileDeleter() { +void DeleteFileAsync(const base::FilePath& path) { base::PostTaskWithTraits(FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, base::BindOnce(base::IgnoreResult(&base::DeleteFile), - std::move(temp_dir_), false)); + std::move(path), false)); } -void SetHeapSamplingPeriod(size_t sampling_period) { - bool res = base::allocator::SetNumericProperty( - "tcmalloc.sampling_period_bytes", sampling_period); - DCHECK(res); +// Deletes the temp file when the object goes out of scope. +class FileDeleter { + public: + explicit FileDeleter(const base::FilePath& path) : path_(path) {} + ~FileDeleter() { DeleteFileAsync(path_); } + + private: + const base::FilePath path_; + + DISALLOW_COPY_AND_ASSIGN(FileDeleter); +}; + +void SetHeapSamplingPeriod(size_t sampling_period, HeapCollectionMode mode) { + switch (mode) { + case HeapCollectionMode::kNone: + break; + case HeapCollectionMode::kTcmalloc: { + bool res = base::allocator::SetNumericProperty( + "tcmalloc.sampling_period_bytes", sampling_period); + DCHECK(res); + break; + } + case HeapCollectionMode::kShimLayer: { + base::SamplingHeapProfiler::Get()->SetSamplingInterval(sampling_period); + break; + } + } +} + +std::string CountAndSizeToString(uintptr_t count, uintptr_t size) { + return base::StringPrintf("%" PRIuPTR ": %" PRIuPTR " [%" PRIuPTR + ": %" PRIuPTR "] @", + count, size, count, size); +} + +void WriteProfileHeader( + base::File* out, + base::StringPiece label, + const std::vector<base::SamplingHeapProfiler::Sample>& samples) { + // Compute the total count and total size + uintptr_t total_count = samples.size(); + uintptr_t total_size = 0; + for (const auto& sample : samples) { + total_size += sample.total; + } + + std::string header = base::StrCat( + {"heap profile: ", CountAndSizeToString(total_count, total_size), " ", + label, "\n"}); + int res = out->WriteAtCurrentPos(header.c_str(), header.length()); + DCHECK_EQ(res, static_cast<int>(header.length())); +} + +// Prints the process runtime mappings. Returns if the operation was a success. +bool PrintProcSelfMaps(base::File* out, const std::string& proc_maps) { + std::vector<base::debug::MappedMemoryRegion> regions; + if (!base::debug::ParseProcMaps(proc_maps, ®ions)) + return false; + + int res = out->WriteAtCurrentPos("\nMAPPED_LIBRARIES:\n", 19); + DCHECK_EQ(res, 19); + + for (const auto& region : regions) { + // We assume 'flags' looks like 'rwxp' or 'rwx'. + char r = (region.permissions & base::debug::MappedMemoryRegion::READ) ? 'r' + : '-'; + char w = (region.permissions & base::debug::MappedMemoryRegion::WRITE) + ? 'w' + : '-'; + char x = (region.permissions & base::debug::MappedMemoryRegion::EXECUTE) + ? 'x' + : '-'; + char p = (region.permissions & base::debug::MappedMemoryRegion::PRIVATE) + ? 'p' + : '-'; + + // The devices major / minor values and the inode are not filled by + // ParseProcMaps, so write them as zero values. They are not relevant for + // symbolization. + std::string row = base::StringPrintf("%08" PRIx64 "-%08" PRIx64 + " %c%c%c%c %08llx 00:00 0 %s\n", + region.start, region.end, r, w, x, p, + region.offset, region.path.c_str()); + + int res = out->WriteAtCurrentPos(row.c_str(), row.length()); + DCHECK_EQ(res, static_cast<int>(row.length())); + } + return true; +} + +// Fetches profile from shim layer sampler and attempts to write it to the given +// output file in the format used by the tcmalloc based heap sampler, with a +// header line, followed by a row for each sample, and a section with the +// process runtime mappings. +bool FetchShimProfileAndSaveToFile(base::File* out) { + std::vector<base::SamplingHeapProfiler::Sample> samples = + base::SamplingHeapProfiler::Get()->GetSamples(0); + std::string proc_maps; + if (!base::debug::ReadProcMaps(&proc_maps)) + return false; + + return internal::WriteHeapProfileToFile(out, samples, proc_maps); +} + +bool FetchProfileAndSaveToFile(base::File* out, HeapCollectionMode mode) { + switch (mode) { + case HeapCollectionMode::kNone: + DCHECK(false) << "Collection attempted for collection mode NONE"; + return true; + case HeapCollectionMode::kTcmalloc: { + std::string writer; + base::allocator::GetHeapSample(&writer); + int res = out->WriteAtCurrentPos(writer.c_str(), writer.length()); + DCHECK_EQ(res, static_cast<int>(writer.length())); + return true; + } + case HeapCollectionMode::kShimLayer: + return FetchShimProfileAndSaveToFile(out); + } } } // namespace -HeapCollector::HeapCollector() +namespace internal { + +bool WriteHeapProfileToFile( + base::File* out, + const std::vector<base::SamplingHeapProfiler::Sample>& samples, + const std::string& proc_maps) { + WriteProfileHeader(out, "heap_v2/1", samples); + for (const auto& sample : samples) { + std::string row = CountAndSizeToString(1, sample.total); + for (const void* frame : sample.stack) { + base::StringAppendF(&row, " %p", frame); + } + row.append("\n", 1); + int res = out->WriteAtCurrentPos(row.c_str(), row.length()); + DCHECK_EQ(res, static_cast<int>(row.length())); + } + return PrintProcSelfMaps(out, proc_maps); +} + +} // namespace internal + +// static +HeapCollectionMode HeapCollector::CollectionModeFromString(std::string mode) { + if (mode == kCollectionModeTcmalloc) + return HeapCollectionMode::kTcmalloc; + if (mode == kCollectionModeShimLayer) + return HeapCollectionMode::kShimLayer; + return HeapCollectionMode::kNone; +} + +HeapCollector::HeapCollector(HeapCollectionMode mode) : MetricCollector(kHeapCollectorName), - sampling_period_bytes_(kHeapSamplingIntervalBytes) { + sampling_period_bytes_(kHeapSamplingIntervalBytes), + mode_(mode), + is_enabled_(false) { BrowserList::AddObserver(this); + + if (mode_ == HeapCollectionMode::kShimLayer) { + base::SamplingHeapProfiler::Init(); + } } HeapCollector::~HeapCollector() { // Disable heap sampling when the collector exits. - SetHeapSamplingPeriod(0); + DisableSampling(); BrowserList::RemoveObserver(this); } +void HeapCollector::EnableSampling() { + if (is_enabled_) + return; + switch (mode_) { + case HeapCollectionMode::kNone: + break; + case HeapCollectionMode::kTcmalloc: + SetHeapSamplingPeriod(sampling_period_bytes_, mode_); + break; + case HeapCollectionMode::kShimLayer: + base::SamplingHeapProfiler::Get()->Start(); + break; + } + is_enabled_ = true; +} + +void HeapCollector::DisableSampling() { + if (!is_enabled_) + return; + switch (mode_) { + case HeapCollectionMode::kNone: + break; + case HeapCollectionMode::kTcmalloc: + SetHeapSamplingPeriod(0, mode_); + break; + case HeapCollectionMode::kShimLayer: + base::SamplingHeapProfiler::Get()->Stop(); + break; + } + is_enabled_ = false; +} + void HeapCollector::Init() { - if (base::FeatureList::IsEnabled(kCWPHeapCollection)) + if (base::FeatureList::IsEnabled(heap_profiling::kOOPHeapProfilingFeature)) SetCollectionParamsFromFeatureParams(); - size_t sampling_period = 0; + // For the tcmalloc collector, we set the sampling period every time we enable + // it. The shim layer sampler has a separate API for starting and stopping, so + // we must set its sampling period once explicitly. + if (mode_ == HeapCollectionMode::kShimLayer) { + SetHeapSamplingPeriod(sampling_period_bytes_, mode_); + } + // Enable sampling if no incognito session is active. if (!BrowserList::IsIncognitoSessionActive()) { - sampling_period = sampling_period_bytes_; + EnableSampling(); + } else { + DisableSampling(); } - SetHeapSamplingPeriod(sampling_period); MetricCollector::Init(); } @@ -130,14 +319,14 @@ void HeapCollector::OnBrowserAdded(Browser* browser) { // Pause heap sampling when an incognito session is opened. if (browser->profile()->IsOffTheRecord()) { - SetHeapSamplingPeriod(0); + DisableSampling(); } } void HeapCollector::OnBrowserRemoved(Browser* browser) { // Resume heap sampling if no incognito sessions are active. if (!BrowserList::IsIncognitoSessionActive()) { - SetHeapSamplingPeriod(sampling_period_bytes_); + EnableSampling(); } } @@ -167,6 +356,9 @@ void HeapCollector::CollectProfile( std::unique_ptr<SampledProfile> sampled_profile) { + if (mode_ == HeapCollectionMode::kNone) + return; + base::Optional<base::FilePath> temp_file = DumpProfileToTempFile(); if (!temp_file) return; @@ -181,16 +373,20 @@ AddToUmaHistogram(CollectionAttemptStatus::UNABLE_TO_COLLECT); return base::nullopt; } - std::string writer; - base::allocator::GetHeapSample(&writer); base::File temp(temp_path, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_READ | base::File::FLAG_WRITE); DCHECK(temp.created()); DCHECK(temp.IsValid()); - int res = temp.WriteAtCurrentPos(writer.c_str(), writer.length()); - DCHECK_EQ(res, static_cast<int>(writer.length())); + + bool success = FetchProfileAndSaveToFile(&temp, mode_); temp.Close(); + + if (!success) { + AddToUmaHistogram(CollectionAttemptStatus::DATA_COLLECTION_FAILED); + DeleteFileAsync(temp_path); + return base::nullopt; + } return base::make_optional<base::FilePath>(temp_path); }
diff --git a/chrome/browser/metrics/perf/heap_collector.h b/chrome/browser/metrics/perf/heap_collector.h index d715627..843f714 100644 --- a/chrome/browser/metrics/perf/heap_collector.h +++ b/chrome/browser/metrics/perf/heap_collector.h
@@ -8,9 +8,11 @@ #include <map> #include <memory> #include <string> +#include <vector> #include "base/feature_list.h" #include "base/optional.h" +#include "base/sampling_heap_profiler/sampling_heap_profiler.h" #include "chrome/browser/metrics/perf/metric_collector.h" #include "chrome/browser/metrics/perf/perf_output.h" #include "chrome/browser/ui/browser_list_observer.h" @@ -19,24 +21,34 @@ namespace base { class CommandLine; +class File; class FilePath; } // namespace base namespace metrics { -// Feature for controlling the heap collection parameters. -extern const base::Feature kCWPHeapCollection; +// Collection mode type. +enum class HeapCollectionMode { + // No heap collection. + kNone = 0, + // Use allocation sampling inside tcmalloc. + kTcmalloc = 1, + // Use allocation sampling at the shim layer. + kShimLayer = 2, +}; // Enables collection of heap profiles using the tcmalloc heap sampling // profiler. class HeapCollector : public MetricCollector, public BrowserListObserver { public: - HeapCollector(); + explicit HeapCollector(HeapCollectionMode mode); ~HeapCollector() override; // MetricCollector: void Init() override; + static HeapCollectionMode CollectionModeFromString(std::string mode); + protected: // MetricCollector: bool ShouldCollect() const override; @@ -60,6 +72,12 @@ const base::FilePath& profile_path, std::unique_ptr<SampledProfile> sampled_profile); + // Start and stop the collection. + void EnableSampling(); + void DisableSampling(); + HeapCollectionMode Mode() const { return mode_; } + bool IsEnabled() const { return is_enabled_; } + private: // Change the values in |collection_params_| based on the values of field // trial parameters. @@ -68,9 +86,27 @@ // Heap sampling period. size_t sampling_period_bytes_; + // Heap collection mode. + HeapCollectionMode mode_; + + // The collector state. + bool is_enabled_; + DISALLOW_COPY_AND_ASSIGN(HeapCollector); }; +// Exposed for unit testing. +namespace internal { + +// Writes the given heap samples and runtime mappings to the given output file +// in the same format as the one produced by the tcmalloc sampler. +bool WriteHeapProfileToFile( + base::File* out, + const std::vector<base::SamplingHeapProfiler::Sample>& samples, + const std::string& proc_maps); + +} // namespace internal + } // namespace metrics #endif // CHROME_BROWSER_METRICS_PERF_HEAP_COLLECTOR_H_
diff --git a/chrome/browser/metrics/perf/heap_collector_unittest.cc b/chrome/browser/metrics/perf/heap_collector_unittest.cc index d3ab1af..7941c406 100644 --- a/chrome/browser/metrics/perf/heap_collector_unittest.cc +++ b/chrome/browser/metrics/perf/heap_collector_unittest.cc
@@ -15,6 +15,8 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/macros.h" +#include "base/sampling_heap_profiler/poisson_allocation_sampler.h" +#include "base/sampling_heap_profiler/sampling_heap_profiler.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_simple_task_runner.h" #include "base/threading/thread_task_runner_handle.h" @@ -22,6 +24,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/test/base/test_browser_window.h" #include "chrome/test/base/testing_profile.h" +#include "components/services/heap_profiling/public/cpp/settings.h" #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/sampled_profile.pb.h" @@ -128,22 +131,29 @@ // Allows access to some private methods for testing. class TestHeapCollector : public HeapCollector { public: - TestHeapCollector() {} + TestHeapCollector() : HeapCollector(HeapCollectionMode::kTcmalloc) {} + explicit TestHeapCollector(HeapCollectionMode mode) : HeapCollector(mode) {} using HeapCollector::collection_params; using HeapCollector::CollectProfile; using HeapCollector::DumpProfileToTempFile; + using HeapCollector::IsEnabled; using HeapCollector::MakeQuipperCommand; + using HeapCollector::Mode; using HeapCollector::ParseAndSaveProfile; private: DISALLOW_COPY_AND_ASSIGN(TestHeapCollector); }; -void ReadHeapSamplingPeriod(size_t* sampling_period) { - ASSERT_TRUE(base::allocator::GetNumericProperty( - "tcmalloc.sampling_period_bytes", sampling_period)) +size_t HeapSamplingPeriod(const TestHeapCollector& collector) { + CHECK_EQ(collector.Mode(), HeapCollectionMode::kTcmalloc) + << "Reading heap sampling period works only with tcmalloc sampling"; + size_t sampling_period; + CHECK(base::allocator::GetNumericProperty("tcmalloc.sampling_period_bytes", + &sampling_period)) << "Failed to read heap sampling period"; + return sampling_period; } } // namespace @@ -180,10 +190,10 @@ // Instantiate a testing profile. TestingProfile::Builder profile_builder; profile_ = profile_builder.Build(); + } - // Create a heap collector. - heap_collector_ = std::make_unique<TestHeapCollector>(); - + void MakeHeapCollector(HeapCollectionMode mode) { + heap_collector_ = std::make_unique<TestHeapCollector>(mode); // HeapCollector requires the user to be logged in. heap_collector_->OnUserLoggedIn(); } @@ -215,7 +225,8 @@ size_t HeapCollectorTest::next_browser_id = 1; -TEST_F(HeapCollectorTest, CheckSetup) { +TEST_F(HeapCollectorTest, CheckSetup_Tcmalloc) { + MakeHeapCollector(HeapCollectionMode::kTcmalloc); heap_collector_->Init(); // No profiles are cached on start. @@ -224,55 +235,118 @@ EXPECT_TRUE(stored_profiles.empty()); // Heap sampling is enabled when no incognito window is open. - size_t sampling_period; - ReadHeapSamplingPeriod(&sampling_period); + size_t sampling_period = HeapSamplingPeriod(*heap_collector_); EXPECT_GT(sampling_period, 0u); } -TEST_F(HeapCollectorTest, IncognitoWindowDisablesSamplingOnInit) { +TEST_F(HeapCollectorTest, CheckSetup_ShimLayer) { + MakeHeapCollector(HeapCollectionMode::kShimLayer); + heap_collector_->Init(); + + // No profiles are cached on start. + std::vector<SampledProfile> stored_profiles; + EXPECT_FALSE(heap_collector_->GetSampledProfiles(&stored_profiles)); + EXPECT_TRUE(stored_profiles.empty()); + + EXPECT_TRUE(heap_collector_->IsEnabled()); +} + +TEST_F(HeapCollectorTest, IncognitoWindowDisablesSamplingOnInit_Tcmalloc) { + MakeHeapCollector(HeapCollectionMode::kTcmalloc); OpenBrowserWindow(/*incognito=*/true); heap_collector_->Init(); // Heap sampling is disabled when an incognito session is active. - size_t sampling_period; - ReadHeapSamplingPeriod(&sampling_period); + size_t sampling_period = HeapSamplingPeriod(*heap_collector_); EXPECT_EQ(sampling_period, 0u); } -TEST_F(HeapCollectorTest, IncognitoWindowPausesSampling) { +TEST_F(HeapCollectorTest, IncognitoWindowDisablesSamplingOnInit_ShimLayer) { + MakeHeapCollector(HeapCollectionMode::kShimLayer); + OpenBrowserWindow(/*incognito=*/true); + heap_collector_->Init(); + + // Heap sampling is disabled when an incognito session is active. + EXPECT_FALSE(heap_collector_->IsEnabled()); +} + +TEST_F(HeapCollectorTest, IncognitoWindowPausesSampling_Tcmalloc) { + MakeHeapCollector(HeapCollectionMode::kTcmalloc); heap_collector_->Init(); // Heap sampling is enabled. - size_t sampling_period; - ReadHeapSamplingPeriod(&sampling_period); + size_t sampling_period = HeapSamplingPeriod(*heap_collector_); EXPECT_GT(sampling_period, 0u); // Opening an incognito window disables sampling. auto win1 = OpenBrowserWindow(/*incognito=*/true); - ReadHeapSamplingPeriod(&sampling_period); + sampling_period = HeapSamplingPeriod(*heap_collector_); EXPECT_EQ(sampling_period, 0u); // Opening a regular window doesn't resume sampling. OpenBrowserWindow(/*incognito=*/false); // Heap sampling is still disabled. - ReadHeapSamplingPeriod(&sampling_period); + sampling_period = HeapSamplingPeriod(*heap_collector_); EXPECT_EQ(sampling_period, 0u); // Open another incognito window and close the first one. auto win3 = OpenBrowserWindow(/*incognito=*/true); CloseBrowserWindow(win1); // Heap sampling is still disabled. - ReadHeapSamplingPeriod(&sampling_period); + sampling_period = HeapSamplingPeriod(*heap_collector_); EXPECT_EQ(sampling_period, 0u); // Closing the last incognito window resumes heap sampling. CloseBrowserWindow(win3); // Heap sampling is enabled. - ReadHeapSamplingPeriod(&sampling_period); + sampling_period = HeapSamplingPeriod(*heap_collector_); EXPECT_GT(sampling_period, 0u); } -TEST_F(HeapCollectorTest, DumpProfileToTempFile) { +TEST_F(HeapCollectorTest, IncognitoWindowPausesSampling_ShimLayer) { + MakeHeapCollector(HeapCollectionMode::kShimLayer); + heap_collector_->Init(); + + // Heap sampling is enabled. + EXPECT_TRUE(heap_collector_->IsEnabled()); + + // Opening an incognito window disables sampling and doesn't crash the test. + auto win1 = OpenBrowserWindow(/*incognito=*/true); + EXPECT_FALSE(heap_collector_->IsEnabled()); + + // Open also a regular window. Sampling still disabled. + OpenBrowserWindow(/*incognito=*/false); + EXPECT_FALSE(heap_collector_->IsEnabled()); + + // Open another incognito window and close the first one. + auto win3 = OpenBrowserWindow(/*incognito=*/true); + CloseBrowserWindow(win1); + EXPECT_FALSE(heap_collector_->IsEnabled()); + + // Closing the last incognito window resumes heap sampling, without + // crashing the test. + CloseBrowserWindow(win3); + EXPECT_TRUE(heap_collector_->IsEnabled()); +} + +TEST_F(HeapCollectorTest, DumpProfileToTempFile_Tcmalloc) { + MakeHeapCollector(HeapCollectionMode::kTcmalloc); + base::Optional<base::FilePath> got_path = + heap_collector_->DumpProfileToTempFile(); + // Check that we got a path. + ASSERT_TRUE(got_path); + // Check that the file is readable and not empty. + base::File temp(got_path.value(), + base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_TRUE(temp.IsValid()); + EXPECT_GT(temp.GetLength(), 0); + temp.Close(); + // We must be able to remove the temp file. + ASSERT_TRUE(base::DeleteFile(got_path.value(), false)); +} + +TEST_F(HeapCollectorTest, DumpProfileToTempFile_ShimLayer) { + MakeHeapCollector(HeapCollectionMode::kShimLayer); base::Optional<base::FilePath> got_path = heap_collector_->DumpProfileToTempFile(); // Check that we got a path. @@ -304,7 +378,59 @@ std::to_string(base::GetCurrentProcId())); } -TEST_F(HeapCollectorTest, ParseAndSaveProfile) { +TEST_F(HeapCollectorTest, ParseAndSaveProfile_Tcmalloc) { + MakeHeapCollector(HeapCollectionMode::kTcmalloc); + // Write a sample perf data proto to a temp file. + const base::FilePath kTempProfile( + FILE_PATH_LITERAL("/tmp/ParseAndSaveProfile.test")); + PerfDataProto heap_proto = GetSampleHeapPerfDataProto(); + std::string serialized_proto = heap_proto.SerializeAsString(); + + base::File temp(kTempProfile, base::File::FLAG_CREATE_ALWAYS | + base::File::FLAG_READ | + base::File::FLAG_WRITE); + EXPECT_TRUE(temp.created()); + EXPECT_TRUE(temp.IsValid()); + int res = temp.WriteAtCurrentPos(serialized_proto.c_str(), + serialized_proto.length()); + EXPECT_EQ(res, static_cast<int>(serialized_proto.length())); + temp.Close(); + + // Create a command line that copies the input file to the output. + base::CommandLine::StringVector argv; + argv.push_back("cat"); + argv.push_back(kTempProfile.value()); + base::CommandLine cat(argv); + + // Run the command. + auto sampled_profile = std::make_unique<SampledProfile>(); + sampled_profile->set_trigger_event(SampledProfile::PERIODIC_COLLECTION); + heap_collector_->ParseAndSaveProfile(cat, kTempProfile, + std::move(sampled_profile)); + + // Check that the profile was cached. + std::vector<SampledProfile> stored_profiles; + EXPECT_TRUE(heap_collector_->GetSampledProfiles(&stored_profiles)); + ASSERT_EQ(1U, stored_profiles.size()); + + const SampledProfile& profile = stored_profiles[0]; + EXPECT_EQ(SampledProfile::PERIODIC_COLLECTION, profile.trigger_event()); + EXPECT_TRUE(profile.has_ms_after_boot()); + EXPECT_TRUE(profile.has_ms_after_login()); + + ASSERT_TRUE(profile.has_perf_data()); + EXPECT_EQ(serialized_proto, profile.perf_data().SerializeAsString()); + + // Check that the temp profile file is removed after pending tasks complete. + heap_collector_->Deactivate(); + test_browser_thread_bundle_.RunUntilIdle(); + temp = + base::File(kTempProfile, base::File::FLAG_OPEN | base::File::FLAG_READ); + ASSERT_FALSE(temp.IsValid()); +} + +TEST_F(HeapCollectorTest, ParseAndSaveProfile_ShimLayer) { + MakeHeapCollector(HeapCollectionMode::kShimLayer); // Write a sample perf data proto to a temp file. const base::FilePath kTempProfile( FILE_PATH_LITERAL("/tmp/ParseAndSaveProfile.test")); @@ -367,7 +493,7 @@ DISALLOW_COPY_AND_ASSIGN(HeapCollectorCollectionParamsTest); }; -TEST_F(HeapCollectorCollectionParamsTest, Parameters_Override) { +TEST_F(HeapCollectorCollectionParamsTest, ParametersOverride_Tcmalloc) { std::map<std::string, std::string> params; params.insert(std::make_pair("SamplingIntervalBytes", "800000")); params.insert(std::make_pair("PeriodicCollectionIntervalMs", "3600000")); @@ -377,15 +503,14 @@ params.insert(std::make_pair("RestoreSession::MaxDelaySec", "20")); base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters(kCWPHeapCollection, - params); + scoped_feature_list.InitAndEnableFeatureWithParameters( + heap_profiling::kOOPHeapProfilingFeature, params); - TestHeapCollector heap_collector; + TestHeapCollector heap_collector(HeapCollectionMode::kTcmalloc); const auto& parsed_params = heap_collector.collection_params(); // Not initialized yet: - size_t sampling_period; - ReadHeapSamplingPeriod(&sampling_period); + size_t sampling_period = HeapSamplingPeriod(heap_collector); EXPECT_NE(800000u, sampling_period); EXPECT_NE(base::TimeDelta::FromHours(1), parsed_params.periodic_interval); EXPECT_NE(1, parsed_params.resume_from_suspend.sampling_factor); @@ -397,7 +522,7 @@ heap_collector.Init(); - ReadHeapSamplingPeriod(&sampling_period); + sampling_period = HeapSamplingPeriod(heap_collector); EXPECT_EQ(800000u, sampling_period); EXPECT_EQ(base::TimeDelta::FromHours(1), parsed_params.periodic_interval); EXPECT_EQ(1, parsed_params.resume_from_suspend.sampling_factor); @@ -408,4 +533,220 @@ parsed_params.restore_session.max_collection_delay); } +TEST_F(HeapCollectorCollectionParamsTest, ParametersOverride_ShimLayer) { + std::map<std::string, std::string> params; + params.insert(std::make_pair("SamplingIntervalBytes", "800000")); + params.insert(std::make_pair("PeriodicCollectionIntervalMs", "3600000")); + params.insert(std::make_pair("ResumeFromSuspend::SamplingFactor", "1")); + params.insert(std::make_pair("ResumeFromSuspend::MaxDelaySec", "10")); + params.insert(std::make_pair("RestoreSession::SamplingFactor", "2")); + params.insert(std::make_pair("RestoreSession::MaxDelaySec", "20")); + + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeatureWithParameters( + heap_profiling::kOOPHeapProfilingFeature, params); + + TestHeapCollector heap_collector(HeapCollectionMode::kShimLayer); + const auto& parsed_params = heap_collector.collection_params(); + + // Not initialized yet: + EXPECT_NE(base::TimeDelta::FromHours(1), parsed_params.periodic_interval); + EXPECT_NE(1, parsed_params.resume_from_suspend.sampling_factor); + EXPECT_NE(base::TimeDelta::FromSeconds(10), + parsed_params.resume_from_suspend.max_collection_delay); + EXPECT_NE(2, parsed_params.restore_session.sampling_factor); + EXPECT_NE(base::TimeDelta::FromSeconds(20), + parsed_params.restore_session.max_collection_delay); + + heap_collector.Init(); + + EXPECT_EQ(base::TimeDelta::FromHours(1), parsed_params.periodic_interval); + EXPECT_EQ(1, parsed_params.resume_from_suspend.sampling_factor); + EXPECT_EQ(base::TimeDelta::FromSeconds(10), + parsed_params.resume_from_suspend.max_collection_delay); + EXPECT_EQ(2, parsed_params.restore_session.sampling_factor); + EXPECT_EQ(base::TimeDelta::FromSeconds(20), + parsed_params.restore_session.max_collection_delay); +} + +namespace { + +std::vector<base::SamplingHeapProfiler::Sample> SamplingHeapProfilerSamples() { + // Generate a sample using the SamplingHeapProfiler collector. Then, duplicate + // and customize their values. + base::SamplingHeapProfiler::Init(); + auto* collector = base::SamplingHeapProfiler::Get(); + collector->Start(); + + auto* sampler = base::PoissonAllocationSampler::Get(); + sampler->SuppressRandomnessForTest(true); + sampler->SetSamplingInterval(1000000); + // Generate and remove a dummy sample, because the first sample is potentially + // ignored by the SHP profiler. + sampler->RecordAlloc(reinterpret_cast<void*>(1), 1000000, + base::PoissonAllocationSampler::AllocatorType::kMalloc, + nullptr); + sampler->RecordFree(reinterpret_cast<void*>(1)); + // Generate a second sample that we are going to retrieve. + sampler->RecordAlloc(reinterpret_cast<void*>(2), 1000000, + base::PoissonAllocationSampler::AllocatorType::kMalloc, + nullptr); + + auto samples = collector->GetSamples(0); + EXPECT_EQ(1lu, samples.size()); + sampler->RecordFree(reinterpret_cast<void*>(2)); + collector->Stop(); + + // Customize the sample. + auto& sample1 = samples[0]; + sample1.size = 100; + sample1.total = 1000; + sample1.stack = {reinterpret_cast<void*>(0x10000), + reinterpret_cast<void*>(0x10100), + reinterpret_cast<void*>(0x10200)}; + + samples.emplace_back(samples.back()); + EXPECT_EQ(2lu, samples.size()); + auto& sample2 = samples[1]; + sample2.size = 200; + sample2.total = 2000; + sample2.stack = { + reinterpret_cast<void*>(0x20000), reinterpret_cast<void*>(0x20100), + reinterpret_cast<void*>(0x20200), reinterpret_cast<void*>(0x20300)}; + + samples.emplace_back(samples.back()); + EXPECT_EQ(3lu, samples.size()); + auto& sample3 = samples[2]; + sample3.size = 300; + sample3.total = 3000; + sample3.stack = {reinterpret_cast<void*>(0x30000), + reinterpret_cast<void*>(0x30100), + reinterpret_cast<void*>(0x30200)}; + + return samples; +} + +std::string GetProcMaps() { + return R"text(304acba71000-304acba72000 ---p 00000000 00:00 0 +304acba72000-304acd86a000 rw-p 00000000 00:00 0 +304acd86a000-304acd86b000 ---p 00000000 00:00 0 +304acd86b000-304acd88a000 rw-p 00000000 00:00 0 +304acd88a000-304acd88b000 ---p 00000000 00:00 0 +304acd88b000-304acd8aa000 rw-p 00000000 00:00 0 +5ffa92db8000-5ffa93d15000 r--p 00000000 b3:03 71780 /opt/google/chrome/chrome +5ffa93d15000-5ffa93d16000 r--p 00f5d000 b3:03 71780 /opt/google/chrome/chrome +5ffa93d16000-5ffa93d17000 r--p 00f5e000 b3:03 71780 /opt/google/chrome/chrome +5ffa93d17000-5ffa9d176000 r-xp 00f5f000 b3:03 71780 /opt/google/chrome/chrome +5ffa9d176000-5ffa9d1ca000 rw-p 0a3be000 b3:03 71780 /opt/google/chrome/chrome +5ffa9d1ca000-5ffa9d8ff000 r--p 0a412000 b3:03 71780 /opt/google/chrome/chrome +5ffa9d8ff000-5ffa9db6c000 rw-p 00000000 00:00 0 +7f9c9e11c000-7f9c9e11d000 ---p 00000000 00:00 0 +7f9c9e11d000-7f9c9e91d000 rw-p 00000000 00:00 0 [stack:1843] +7f9c9e91d000-7f9c9e91e000 ---p 00000000 00:00 0 +7f9c9e91e000-7f9c9f11e000 rw-p 00000000 00:00 0 +7f9ca0d47000-7f9ca0d4c000 r-xp 00000000 b3:03 46090 /lib64/libnss_dns-2.27.so +7f9ca0d4c000-7f9ca0f4b000 ---p 00005000 b3:03 46090 /lib64/libnss_dns-2.27.so +7f9ca0f4b000-7f9ca0f4c000 r--p 00004000 b3:03 46090 /lib64/libnss_dns-2.27.so +7f9ca0f4c000-7f9ca0f4d000 rw-p 00005000 b3:03 46090 /lib64/libnss_dns-2.27.so +7f9ca0f4d000-7f9ca114d000 rw-s 00000000 00:13 16382 /dev/shm/.com.google.Chrome.nohIdv (deleted) +7f9ca26a0000-7f9ca26a1000 ---p 00000000 00:00 0 +7f9ca26a1000-7f9ca2ea1000 rw-p 00000000 00:00 0 [stack:1796] +7f9ca2ea1000-7f9ca2f31000 r-xp 00000000 b3:03 46120 /lib64/libpcre.so.1.2.9 +7f9ca2f31000-7f9ca2f32000 r--p 0008f000 b3:03 46120 /lib64/libpcre.so.1.2.9 +7f9ca2f32000-7f9ca2f33000 rw-p 00090000 b3:03 46120 /lib64/libpcre.so.1.2.9 +7f9ca2f33000-7f9ca302d000 r-xp 00000000 b3:03 40207 /usr/lib64/libglib-2.0.so.0.5200.3 +7f9ca302e000-7f9ca302f000 r--p 000fa000 b3:03 40207 /usr/lib64/libglib-2.0.so.0.5200.3 +7f9ca4687000-7f9ca4887000 rw-s 00000000 00:13 12699 /dev/shm/.com.google.Chrome.KWz8dN (deleted) +7f9ca4887000-7f9ca4888000 ---p 00000000 00:00 0 +7f9ca4888000-7f9ca5088000 rw-p 00000000 00:00 0 [stack:1423] +7f9ca52c8000-7f9ca52c9000 ---p 00000000 00:00 0 +7f9ca52c9000-7f9ca5ac9000 rw-p 00000000 00:00 0 [stack:1411] +7f9ca5aec000-7f9ca5b66000 r--p 00000000 b3:03 39083 /usr/share/fonts/roboto/Roboto-Light.ttf +7f9ca5b66000-7f9ca5d66000 rw-s 00000000 00:13 10081 /dev/shm/.com.google.Chrome.MLuvgs (deleted) +)text"; +} + +} // namespace + +TEST(HeapCollectorShimLayerTest, WriteHeapProfileToFile_InvalidProcMaps) { + base::FilePath temp_path; + ASSERT_TRUE(base::CreateTemporaryFile(&temp_path)); + base::File temp(temp_path, base::File::FLAG_CREATE_ALWAYS | + base::File::FLAG_READ | + base::File::FLAG_WRITE); + ASSERT_TRUE(temp.created()); + ASSERT_TRUE(temp.IsValid()); + + auto samples = SamplingHeapProfilerSamples(); + std::string proc_maps = "Bogus proc maps\n"; + EXPECT_FALSE(internal::WriteHeapProfileToFile(&temp, samples, proc_maps)); + temp.Close(); + base::DeleteFile(temp_path, false); +} + +TEST(HeapCollectorShimLayerTest, WriteHeapProfileToFile) { + base::FilePath temp_path; + ASSERT_TRUE(base::CreateTemporaryFile(&temp_path)); + base::File temp(temp_path, base::File::FLAG_CREATE_ALWAYS | + base::File::FLAG_READ | + base::File::FLAG_WRITE); + ASSERT_TRUE(temp.created()); + ASSERT_TRUE(temp.IsValid()); + + auto samples = SamplingHeapProfilerSamples(); + auto proc_maps = GetProcMaps(); + EXPECT_TRUE(internal::WriteHeapProfileToFile(&temp, samples, proc_maps)); + temp.Close(); + + std::string got; + EXPECT_TRUE(base::ReadFileToString(temp_path, &got)); + + std::string want = R"text(heap profile: 3: 6000 [3: 6000] @ heap_v2/1 +1: 1000 [1: 1000] @ 0x10000 0x10100 0x10200 +1: 2000 [1: 2000] @ 0x20000 0x20100 0x20200 0x20300 +1: 3000 [1: 3000] @ 0x30000 0x30100 0x30200 + +MAPPED_LIBRARIES: +304acba71000-304acba72000 ---p 00000000 00:00 0 +304acba72000-304acd86a000 rw-p 00000000 00:00 0 +304acd86a000-304acd86b000 ---p 00000000 00:00 0 +304acd86b000-304acd88a000 rw-p 00000000 00:00 0 +304acd88a000-304acd88b000 ---p 00000000 00:00 0 +304acd88b000-304acd8aa000 rw-p 00000000 00:00 0 +5ffa92db8000-5ffa93d15000 r--p 00000000 00:00 0 /opt/google/chrome/chrome +5ffa93d15000-5ffa93d16000 r--p 00f5d000 00:00 0 /opt/google/chrome/chrome +5ffa93d16000-5ffa93d17000 r--p 00f5e000 00:00 0 /opt/google/chrome/chrome +5ffa93d17000-5ffa9d176000 r-xp 00f5f000 00:00 0 /opt/google/chrome/chrome +5ffa9d176000-5ffa9d1ca000 rw-p 0a3be000 00:00 0 /opt/google/chrome/chrome +5ffa9d1ca000-5ffa9d8ff000 r--p 0a412000 00:00 0 /opt/google/chrome/chrome +5ffa9d8ff000-5ffa9db6c000 rw-p 00000000 00:00 0 +7f9c9e11c000-7f9c9e11d000 ---p 00000000 00:00 0 +7f9c9e11d000-7f9c9e91d000 rw-p 00000000 00:00 0 [stack:1843] +7f9c9e91d000-7f9c9e91e000 ---p 00000000 00:00 0 +7f9c9e91e000-7f9c9f11e000 rw-p 00000000 00:00 0 +7f9ca0d47000-7f9ca0d4c000 r-xp 00000000 00:00 0 /lib64/libnss_dns-2.27.so +7f9ca0d4c000-7f9ca0f4b000 ---p 00005000 00:00 0 /lib64/libnss_dns-2.27.so +7f9ca0f4b000-7f9ca0f4c000 r--p 00004000 00:00 0 /lib64/libnss_dns-2.27.so +7f9ca0f4c000-7f9ca0f4d000 rw-p 00005000 00:00 0 /lib64/libnss_dns-2.27.so +7f9ca0f4d000-7f9ca114d000 rw-- 00000000 00:00 0 /dev/shm/.com.google.Chrome.nohIdv (deleted) +7f9ca26a0000-7f9ca26a1000 ---p 00000000 00:00 0 +7f9ca26a1000-7f9ca2ea1000 rw-p 00000000 00:00 0 [stack:1796] +7f9ca2ea1000-7f9ca2f31000 r-xp 00000000 00:00 0 /lib64/libpcre.so.1.2.9 +7f9ca2f31000-7f9ca2f32000 r--p 0008f000 00:00 0 /lib64/libpcre.so.1.2.9 +7f9ca2f32000-7f9ca2f33000 rw-p 00090000 00:00 0 /lib64/libpcre.so.1.2.9 +7f9ca2f33000-7f9ca302d000 r-xp 00000000 00:00 0 /usr/lib64/libglib-2.0.so.0.5200.3 +7f9ca302e000-7f9ca302f000 r--p 000fa000 00:00 0 /usr/lib64/libglib-2.0.so.0.5200.3 +7f9ca4687000-7f9ca4887000 rw-- 00000000 00:00 0 /dev/shm/.com.google.Chrome.KWz8dN (deleted) +7f9ca4887000-7f9ca4888000 ---p 00000000 00:00 0 +7f9ca4888000-7f9ca5088000 rw-p 00000000 00:00 0 [stack:1423] +7f9ca52c8000-7f9ca52c9000 ---p 00000000 00:00 0 +7f9ca52c9000-7f9ca5ac9000 rw-p 00000000 00:00 0 [stack:1411] +7f9ca5aec000-7f9ca5b66000 r--p 00000000 00:00 0 /usr/share/fonts/roboto/Roboto-Light.ttf +7f9ca5b66000-7f9ca5d66000 rw-- 00000000 00:00 0 /dev/shm/.com.google.Chrome.MLuvgs (deleted) +)text"; + + EXPECT_EQ(want, got); + base::DeleteFile(temp_path, false); +} + } // namespace metrics
diff --git a/chrome/browser/metrics/perf/metric_collector.h b/chrome/browser/metrics/perf/metric_collector.h index 9b3e071..2e0b3de 100644 --- a/chrome/browser/metrics/perf/metric_collector.h +++ b/chrome/browser/metrics/perf/metric_collector.h
@@ -72,6 +72,7 @@ ILLEGAL_DATA_RETURNED, ALREADY_COLLECTING, UNABLE_TO_COLLECT, + DATA_COLLECTION_FAILED, NUM_OUTCOMES };
diff --git a/chrome/browser/metrics/perf/profile_provider_chromeos.cc b/chrome/browser/metrics/perf/profile_provider_chromeos.cc index 79819aa..2696b83 100644 --- a/chrome/browser/metrics/perf/profile_provider_chromeos.cc +++ b/chrome/browser/metrics/perf/profile_provider_chromeos.cc
@@ -8,25 +8,18 @@ #include "base/bind.h" #include "base/metrics/field_trial_params.h" #include "base/rand_util.h" +#include "base/sampling_heap_profiler/sampling_heap_profiler.h" #include "chrome/browser/metrics/perf/heap_collector.h" #include "chrome/browser/metrics/perf/metric_collector.h" #include "chrome/browser/metrics/perf/perf_events_collector.h" #include "chromeos/dbus/dbus_thread_manager.h" +#include "components/services/heap_profiling/public/cpp/settings.h" #include "third_party/metrics_proto/sampled_profile.pb.h" namespace metrics { namespace { -#if BUILDFLAG(USE_NEW_TCMALLOC) -// Sampling factor for enabling the heap collector. The heap collector is -// enabled with a probability of 1 / <sampling_factor>. A value of 5 implies a -// 20% probability. A value of 1 implies a 100% probability. A value <= 0 -// disables the heap collector. -constexpr base::FeatureParam<int> kSamplingFactorForEnablingHeapCollector{ - &kCWPHeapCollection, "SamplingFactorForEnablingHeapCollector", 0}; -#endif - // Returns true if a normal user is logged in. Returns false otherwise (e.g. if // logged in as a guest or as a kiosk app). bool IsNormalUserLoggedIn() { @@ -47,11 +40,13 @@ void ProfileProvider::Init() { #if BUILDFLAG(USE_NEW_TCMALLOC) - if (base::FeatureList::IsEnabled(kCWPHeapCollection)) { - // Register a heap collector with a probability obtained from field params. - int sampling_factor = kSamplingFactorForEnablingHeapCollector.Get(); - if (sampling_factor > 0 && base::RandGenerator(sampling_factor) == 0) { - collectors_.push_back(std::make_unique<HeapCollector>()); + if (base::FeatureList::IsEnabled(heap_profiling::kOOPHeapProfilingFeature)) { + HeapCollectionMode mode = HeapCollector::CollectionModeFromString( + base::GetFieldTrialParamValueByFeature( + heap_profiling::kOOPHeapProfilingFeature, + heap_profiling::kOOPHeapProfilingFeatureMode)); + if (mode != HeapCollectionMode::kNone) { + collectors_.push_back(std::make_unique<HeapCollector>(mode)); } } #endif
diff --git a/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc b/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc index a23a04a9..d813df2 100644 --- a/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc +++ b/chrome/browser/metrics/perf/profile_provider_chromeos_unittest.cc
@@ -19,6 +19,7 @@ #include "chrome/browser/metrics/perf/heap_collector.h" #include "chrome/browser/metrics/perf/metric_collector.h" #include "chromeos/login/login_state/login_state.h" +#include "components/services/heap_profiling/public/cpp/settings.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/sampled_profile.pb.h" @@ -320,11 +321,12 @@ TEST_F(ProfileProviderFeatureParamsTest, HeapCollectorDisabled) { std::map<std::string, std::string> params; - params.insert(std::make_pair("SamplingFactorForEnablingHeapCollector", "0")); + params.insert( + std::make_pair(heap_profiling::kOOPHeapProfilingFeatureMode, "non-cwp")); base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters(kCWPHeapCollection, - params); + scoped_feature_list.InitAndEnableFeatureWithParameters( + heap_profiling::kOOPHeapProfilingFeature, params); TestParamsProfileProvider profile_provider; // We should have one collector registered. @@ -338,11 +340,12 @@ TEST_F(ProfileProviderFeatureParamsTest, HeapCollectorEnabled) { std::map<std::string, std::string> params; - params.insert(std::make_pair("SamplingFactorForEnablingHeapCollector", "1")); + params.insert(std::make_pair(heap_profiling::kOOPHeapProfilingFeatureMode, + "cwp-tcmalloc")); base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters(kCWPHeapCollection, - params); + scoped_feature_list.InitAndEnableFeatureWithParameters( + heap_profiling::kOOPHeapProfilingFeature, params); TestParamsProfileProvider profile_provider; // We should have one collector registered.
diff --git a/chrome/browser/net/chrome_extensions_network_delegate.cc b/chrome/browser/net/chrome_extensions_network_delegate.cc index feee2e8..1181d56 100644 --- a/chrome/browser/net/chrome_extensions_network_delegate.cc +++ b/chrome/browser/net/chrome_extensions_network_delegate.cc
@@ -197,22 +197,13 @@ return result; } -namespace { -void OnHeadersReceivedAdapter(net::CompletionOnceCallback callback, - const std::set<std::string>& removed_headers, - const std::set<std::string>& set_headers, - int error_code) { - std::move(callback).Run(error_code); -} -} // namespace - int ChromeExtensionsNetworkDelegateImpl::OnBeforeStartTransaction( net::URLRequest* request, net::CompletionOnceCallback callback, net::HttpRequestHeaders* headers) { return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders( profile_, extension_info_map_.get(), GetWebRequestInfo(request), - base::BindOnce(OnHeadersReceivedAdapter, std::move(callback)), headers); + std::move(callback), headers); } void ChromeExtensionsNetworkDelegateImpl::OnStartTransaction(
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc index ac6dfd3..ed83f7f 100644 --- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
@@ -230,17 +230,25 @@ ReportLayoutStability(info); } +void UkmPageLoadMetricsObserver::OnResourceDataUseObserved( + content::RenderFrameHost* content, + const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>& + resources) { + if (was_hidden_) + return; + for (auto const& resource : resources) { + network_bytes_ += resource->delta_bytes; + if (resource->is_complete && resource->was_fetched_via_cache) { + cache_bytes_ += resource->encoded_body_length; + } + } +} + void UkmPageLoadMetricsObserver::OnLoadedResource( const page_load_metrics::ExtraRequestCompleteInfo& extra_request_complete_info) { if (was_hidden_) return; - if (extra_request_complete_info.was_cached) { - cache_bytes_ += extra_request_complete_info.raw_body_bytes; - } else { - network_bytes_ += extra_request_complete_info.raw_body_bytes; - } - if (extra_request_complete_info.resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { DCHECK(!main_frame_timing_.has_value()); @@ -357,7 +365,7 @@ // Use a bucket spacing factor of 1.3 for bytes. builder.SetNet_CacheBytes(ukm::GetExponentialBucketMin(cache_bytes_, 1.3)); - builder.SetNet_NetworkBytes( + builder.SetNet_NetworkBytes2( ukm::GetExponentialBucketMin(network_bytes_, 1.3)); if (main_frame_timing_)
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h index dd1fcc7..e0b1654 100644 --- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.h
@@ -71,6 +71,11 @@ void OnComplete(const page_load_metrics::mojom::PageLoadTiming& timing, const page_load_metrics::PageLoadExtraInfo& info) override; + void OnResourceDataUseObserved( + content::RenderFrameHost* content, + const std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr>& + resources) override; + void OnLoadedResource(const page_load_metrics::ExtraRequestCompleteInfo& extra_request_complete_info) override;
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc index 6707aa8..39efd28 100644 --- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
@@ -907,42 +907,27 @@ } } -TEST_F(UkmPageLoadMetricsObserverTest, BodySizeMetrics) { +TEST_F(UkmPageLoadMetricsObserverTest, PageSizeMetrics) { NavigateAndCommit(GURL(kTestUrl1)); - page_load_metrics::ExtraRequestCompleteInfo resources[] = { - // Cached request. - {GURL(kResourceUrl), - net::IPEndPoint(), - -1 /* frame_tree_node_id */, - true /* was_cached */, - 1024 * 20 /* raw_body_bytes */, - 0 /* original_network_content_length */, - nullptr /* data_reduction_proxy_data */, - content::ResourceType::RESOURCE_TYPE_SCRIPT, - 0, - {} /* load_timing_info */}, - // Uncached non-proxied request. - {GURL(kResourceUrl), - net::IPEndPoint(), - -1 /* frame_tree_node_id */, - false /* was_cached */, - 1024 * 40 /* raw_body_bytes */, - 1024 * 40 /* original_network_content_length */, - nullptr /* data_reduction_proxy_data */, - content::ResourceType::RESOURCE_TYPE_SCRIPT, - 0, - {} /* load_timing_info */}, - }; + std::vector<page_load_metrics::mojom::ResourceDataUpdatePtr> resources; + // Cached resource. + resources.push_back(CreateResource(true /* was_cached */, 0 /* delta_bytes */, + 20 * 1024 /* encoded_body_length */, + true /* is_complete */)); + // Uncached resource. + resources.push_back(CreateResource( + false /* was_cached */, 40 * 1024 /* delta_bytes */, + 40 * 1024 /* encoded_body_length */, true /* is_complete */)); + SimulateResourceDataUseUpdate(resources); int64_t network_bytes = 0; int64_t cache_bytes = 0; for (const auto& request : resources) { - SimulateLoadedResource(request); - if (!request.was_cached) { - network_bytes += request.raw_body_bytes; + if (!request->was_fetched_via_cache) { + network_bytes += request->delta_bytes; } else { - cache_bytes += request.raw_body_bytes; + cache_bytes += request->encoded_body_length; } } @@ -960,7 +945,7 @@ for (const auto& kv : merged_entries) { test_ukm_recorder().ExpectEntrySourceHasUrl(kv.second.get(), GURL(kTestUrl1)); - test_ukm_recorder().ExpectEntryMetric(kv.second.get(), "Net.NetworkBytes", + test_ukm_recorder().ExpectEntryMetric(kv.second.get(), "Net.NetworkBytes2", bucketed_network_bytes); test_ukm_recorder().ExpectEntryMetric(kv.second.get(), "Net.CacheBytes", bucketed_cache_bytes);
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 31e72753..b2d101462 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -56,6 +56,7 @@ #include "chrome/browser/push_messaging/push_messaging_app_identifier.h" #include "chrome/browser/renderer_host/pepper/device_id_fetcher.h" #include "chrome/browser/rlz/chrome_rlz_tracker_delegate.h" +#include "chrome/browser/search/local_ntp_first_run_field_trial_handler.h" #include "chrome/browser/search/search.h" #include "chrome/browser/ssl/chrome_ssl_host_state_delegate.h" #include "chrome/browser/ssl/ssl_config_service_manager.h" @@ -521,6 +522,7 @@ gcm::GCMChannelStatusSyncer::RegisterPrefs(registry); gcm::RegisterPrefs(registry); metrics::TabStatsTracker::RegisterPrefs(registry); + ntp_first_run::RegisterLocalStatePrefs(registry); RegisterBrowserPrefs(registry); StartupBrowserCreator::RegisterLocalStatePrefs(registry); task_manager::TaskManagerInterface::RegisterPrefs(registry);
diff --git a/chrome/browser/printing/print_browsertest.cc b/chrome/browser/printing/print_browsertest.cc index 5f68baf..a2f6e6af 100644 --- a/chrome/browser/printing/print_browsertest.cc +++ b/chrome/browser/printing/print_browsertest.cc
@@ -47,10 +47,12 @@ constexpr int kDefaultDocumentCookie = 1234; -class PrintPreviewObserver : PrintPreviewUI::TestingDelegate { +class PrintPreviewObserver : PrintPreviewUI::TestDelegate { public: PrintPreviewObserver() { PrintPreviewUI::SetDelegateForTesting(this); } - ~PrintPreviewObserver() { PrintPreviewUI::SetDelegateForTesting(nullptr); } + ~PrintPreviewObserver() override { + PrintPreviewUI::SetDelegateForTesting(nullptr); + } void WaitUntilPreviewIsReady() { if (rendered_page_count_ >= total_page_count_) @@ -62,12 +64,12 @@ } private: - // PrintPreviewUI::TestingDelegate implementation. + // PrintPreviewUI::TestDelegate: void DidGetPreviewPageCount(int page_count) override { total_page_count_ = page_count; } - // PrintPreviewUI::TestingDelegate implementation. + // PrintPreviewUI::TestDelegate: void DidRenderPreviewPage(content::WebContents* preview_dialog) override { ++rendered_page_count_; CHECK(rendered_page_count_ <= total_page_count_); @@ -79,6 +81,35 @@ int total_page_count_ = 1; int rendered_page_count_ = 0; base::RunLoop* run_loop_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(PrintPreviewObserver); +}; + +class NupPrintingTestDelegate : public PrintingMessageFilter::TestDelegate { + public: + NupPrintingTestDelegate() { + PrintingMessageFilter::SetDelegateForTesting(this); + } + ~NupPrintingTestDelegate() override { + PrintingMessageFilter::SetDelegateForTesting(nullptr); + } + + // PrintingMessageFilter::TestDelegate: + PrintMsg_Print_Params GetPrintParams() override { + PrintMsg_Print_Params params; + params.page_size = gfx::Size(612, 792); + params.content_size = gfx::Size(540, 720); + params.printable_area = gfx::Rect(612, 792); + params.dpi = gfx::Size(72, 72); + params.document_cookie = kDefaultDocumentCookie; + params.pages_per_sheet = 4; + params.printed_doc_type = + IsOopifEnabled() ? SkiaDocumentType::MSKP : SkiaDocumentType::PDF; + return params; + } + + private: + DISALLOW_COPY_AND_ASSIGN(NupPrintingTestDelegate); }; class TestPrintFrameContentMsgFilter : public content::BrowserMessageFilter { @@ -204,19 +235,6 @@ return params; } - static PrintMsg_Print_Params GetNupPrintParams() { - PrintMsg_Print_Params params; - params.page_size = gfx::Size(612, 792); - params.content_size = gfx::Size(540, 720); - params.printable_area = gfx::Rect(612, 792); - params.dpi = gfx::Size(72, 72); - params.document_cookie = kDefaultDocumentCookie; - params.pages_per_sheet = 4; - params.printed_doc_type = - IsOopifEnabled() ? SkiaDocumentType::MSKP : SkiaDocumentType::PDF; - return params; - } - private: unsigned int num_expected_messages_; unsigned int num_received_messages_; @@ -587,21 +605,21 @@ // Printing frame content for the main frame of a generic webpage with N-up // priting. This is a regression test for https://crbug.com/937247 IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintNup) { + NupPrintingTestDelegate test_delegate; ASSERT_TRUE(embedded_test_server()->Started()); GURL url(embedded_test_server()->GetURL("/printing/test1.html")); ui_test_utils::NavigateToURL(browser(), url); - PrintingMessageFilter::SetTestUpdatePrintSettingsReply(GetNupPrintParams()); PrintAndWaitUntilPreviewIsReady(/*print_only_selection=*/false); } // Site per process version of PrintBrowserTest.PrintNup. IN_PROC_BROWSER_TEST_F(SitePerProcessPrintBrowserTest, PrintNup) { + NupPrintingTestDelegate test_delegate; ASSERT_TRUE(embedded_test_server()->Started()); GURL url(embedded_test_server()->GetURL("/printing/test1.html")); ui_test_utils::NavigateToURL(browser(), url); - PrintingMessageFilter::SetTestUpdatePrintSettingsReply(GetNupPrintParams()); PrintAndWaitUntilPreviewIsReady(/*print_only_selection=*/false); }
diff --git a/chrome/browser/printing/printing_message_filter.cc b/chrome/browser/printing/printing_message_filter.cc index 3f6007d..0291dfde 100644 --- a/chrome/browser/printing/printing_message_filter.cc +++ b/chrome/browser/printing/printing_message_filter.cc
@@ -10,7 +10,6 @@ #include "base/bind.h" #include "base/memory/singleton.h" -#include "base/no_destructor.h" #include "base/task/post_task.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" @@ -42,10 +41,7 @@ namespace { -PrintMsg_Print_Params& GetTestUpdatePrintSettingsReply() { - static base::NoDestructor<PrintMsg_Print_Params> params; - return *params; -} +PrintingMessageFilter::TestDelegate* g_test_delegate = nullptr; class PrintingMessageFilterShutdownNotifierFactory : public BrowserContextKeyedServiceShutdownNotifierFactory { @@ -89,10 +85,8 @@ } // namespace // static -void PrintingMessageFilter::SetTestUpdatePrintSettingsReply( - const PrintMsg_Print_Params& print_params) { - auto& test_params = GetTestUpdatePrintSettingsReply(); - test_params = print_params; +void PrintingMessageFilter::SetDelegateForTesting(TestDelegate* delegate) { + g_test_delegate = delegate; } PrintingMessageFilter::PrintingMessageFilter(int render_process_id, @@ -282,9 +276,8 @@ } #endif - auto& test_params = GetTestUpdatePrintSettingsReply(); - if (test_params.document_cookie > 0) - params.params = test_params; + if (g_test_delegate) + params.params = g_test_delegate->GetPrintParams(); PrintHostMsg_UpdatePrintSettings::WriteReplyParams(reply_msg, params, canceled);
diff --git a/chrome/browser/printing/printing_message_filter.h b/chrome/browser/printing/printing_message_filter.h index 4607c9a..04b76398 100644 --- a/chrome/browser/printing/printing_message_filter.h +++ b/chrome/browser/printing/printing_message_filter.h
@@ -33,9 +33,16 @@ // renderer process on the IPC thread. class PrintingMessageFilter : public content::BrowserMessageFilter { public: - // Sets a global override for print params in OnUpdatePrintSettingsReply(). - static void SetTestUpdatePrintSettingsReply( - const PrintMsg_Print_Params& print_params); + class TestDelegate { + public: + // Returns the print params to be used in OnUpdatePrintSettingsReply(). + virtual PrintMsg_Print_Params GetPrintParams() = 0; + + protected: + virtual ~TestDelegate() = default; + }; + + static void SetDelegateForTesting(TestDelegate* delegate); PrintingMessageFilter(int render_process_id, Profile* profile);
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index 9e2ee67..6ee37bc 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc
@@ -52,6 +52,7 @@ #include "chrome/browser/download/chrome_download_manager_delegate.h" #include "chrome/browser/download/download_core_service.h" #include "chrome/browser/download/download_core_service_factory.h" +#include "chrome/browser/download/download_manager_utils.h" #include "chrome/browser/gcm/gcm_profile_service_factory.h" #include "chrome/browser/media/media_device_id_salt.h" #include "chrome/browser/net/system_network_context_manager.h" @@ -190,9 +191,7 @@ #endif -#if defined(OS_ANDROID) -#include "chrome/browser/android/download/download_manager_service.h" -#else +#if !defined(OS_ANDROID) #include "chrome/services/app_service/app_service.h" #include "chrome/services/app_service/public/mojom/constants.mojom.h" #include "components/zoom/zoom_event_manager.h" @@ -1330,12 +1329,7 @@ download::InProgressDownloadManager* ProfileImpl::RetriveInProgressDownloadManager() { -#if defined(OS_ANDROID) - return DownloadManagerService::GetInstance() - ->RetriveInProgressDownloadManager(this); -#else - return nullptr; -#endif + return DownloadManagerUtils::RetrieveInProgressDownloadManager(this); } bool ProfileImpl::IsSameProfile(Profile* profile) {
diff --git a/chrome/browser/resources/chromeos/login/oobe_eula.html b/chrome/browser/resources/chromeos/login/oobe_eula.html index ddff8a8..9bc2a14 100644 --- a/chrome/browser/resources/chromeos/login/oobe_eula.html +++ b/chrome/browser/resources/chromeos/login/oobe_eula.html
@@ -71,7 +71,7 @@ </cr-toggle> <div id="usageStatsLabelContainer"> <span id="usageStatsLabel" i18n-content="checkboxLogging"></span> - <a id="" href="#" i18n-content="learnMore" + <a id="learn-more" href="#" i18n-content="learnMore" on-tap="onUsageStatsHelpLinkClicked_"> </a> </div> @@ -109,7 +109,7 @@ </div> <div class='password-row layout horizontal'> <div class="flex"></div> - <div>{{password}}</div> + <div id="eula-password">{{password}}</div> <div class="flex"></div> </div> </div>
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css index 98324a15..10ab1260 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.css +++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -285,6 +285,7 @@ #fakebox-cursor { background: #333; + /* Total 20px height: 44px fakebox height - 12px top - 12px bottom */ bottom: 12px; left: 20px; position: absolute; @@ -303,9 +304,10 @@ } .alternate-fakebox #fakebox-cursor { - /* Total 16px height: 46px fakebox height - 15px top - 15px bottom */ - bottom: 15px; - top: 15px; + /* Total 16px height: (46px fakebox height - 2px border) - 14px top - 14px + * bottom */ + bottom: 14px; + top: 14px; } .show-fakebox-icon.alternate-fakebox #fakebox-cursor {
diff --git a/chrome/browser/resources/settings/people_page/sync_page.html b/chrome/browser/resources/settings/people_page/sync_page.html index 93259ac..c8dc8bf 100644 --- a/chrome/browser/resources/settings/people_page/sync_page.html +++ b/chrome/browser/resources/settings/people_page/sync_page.html
@@ -120,7 +120,8 @@ </div> <template is="dom-if" if="[[shouldShowExistingPassphraseBelowAccount_( - unifiedConsentEnabled, syncPrefs.passphraseRequired)]]"> + unifiedConsentEnabled, syncPrefs.passphraseRequired)]]" + notify-dom-change on-dom-change="focusPassphraseInput_"> <div id="existingPassphrase" class="list-frame"> <div id="existingPassphraseTitle" class="list-item"> <div class="start settings-box-text"> @@ -169,7 +170,8 @@ <!-- TODO(http://crbug.com/862983) Remove this section once the Unified Consent feature is launched. --> <template is="dom-if" if="[[shouldShowExistingPassphraseInSyncSection_( - unifiedConsentEnabled, syncPrefs.passphraseRequired)]]"> + unifiedConsentEnabled, syncPrefs.passphraseRequired)]]" + notify-dom-change on-dom-change="focusPassphraseInput_"> <div id="existingPassphrase" class="list-frame"> <div class="list-item"> <div class="settings-box-text"
diff --git a/chrome/browser/resources/settings/people_page/sync_page.js b/chrome/browser/resources/settings/people_page/sync_page.js index 848b0ce..feee9e0 100644 --- a/chrome/browser/resources/settings/people_page/sync_page.js +++ b/chrome/browser/resources/settings/people_page/sync_page.js
@@ -402,18 +402,6 @@ (this.syncStatus && this.syncStatus.supervisedUser)) { this.creatingNewPassphrase_ = false; } - - // Focus the password input box if password is needed to start sync. - if (this.syncPrefs.passphraseRequired) { - // Wait for the dom-if templates to render and subpage to become visible. - listenOnce(document, 'show-container', () => { - const input = /** @type {!CrInputElement} */ ( - this.$$('#existingPassphraseInput')); - if (!input.matches(':focus-within')) { - input.focus(); - } - }); - } }, /** @private */ @@ -685,6 +673,19 @@ } settings.navigateTo(settings.routes.BASIC); }, + + /** + * Focuses the passphrase input element if it is available and the page is + * visible. + * @private + */ + focusPassphraseInput_: function() { + const passphraseInput = + /** @type {!CrInputElement} */ (this.$$('#existingPassphraseInput')); + if (passphraseInput && settings.getCurrentRoute() == settings.routes.SYNC) { + passphraseInput.focus(); + } + }, }); })();
diff --git a/chrome/browser/safe_browsing/safe_browsing_controller_client.cc b/chrome/browser/safe_browsing/safe_browsing_controller_client.cc index a967e2a..f32e475 100644 --- a/chrome/browser/safe_browsing/safe_browsing_controller_client.cc +++ b/chrome/browser/safe_browsing/safe_browsing_controller_client.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) SafeBrowsingControllerClient::SafeBrowsingControllerClient( @@ -38,8 +39,7 @@ // to a regular Chrome window and proceed as usual there. Browser* browser = chrome::FindBrowserWithWebContents(web_contents_); if (browser && - extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser)) { + WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser)) { chrome::OpenInChrome(browser); } #endif // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/search/local_ntp_first_run_field_trial_handler.cc b/chrome/browser/search/local_ntp_first_run_field_trial_handler.cc new file mode 100644 index 0000000..884aeb7 --- /dev/null +++ b/chrome/browser/search/local_ntp_first_run_field_trial_handler.cc
@@ -0,0 +1,120 @@ +// Copyright 2019 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 "chrome/browser/search/local_ntp_first_run_field_trial_handler.h" + +#include "base/feature_list.h" +#include "chrome/browser/first_run/first_run.h" +#include "chrome/browser/metrics/chrome_metrics_service_accessor.h" +#include "chrome/browser/search/local_ntp_first_run_field_trials.h" +#include "chrome/browser/search/ntp_features.h" +#include "chrome/common/channel_info.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" +#include "components/version_info/version_info.h" + +namespace { + +// Probabilities for all field trial groups add up to kTotalProbability. +const base::FieldTrial::Probability kTotalProbability = 100; + +const char kTrialName[] = "HideShortcutsOnNtp"; +// Each field trial has 3 groups. +// HideShortcutsExperiment - see the NTP with shortcuts hidden. +// HideShortcutsControl - see shortcuts on the NTP; same size as the +// HideShortcutsExperiment group. +// Default - see shortcuts on the NTP; are not part of the experiment. +const char kExperimentGroup[] = "HideShortcutsExperiment"; +const char kControlGroup[] = "HideShortcutsControl"; +const char kDefaultGroup[] = "Default"; + +void LoadConfigByChannel(const version_info::Channel& channel, + variations::VariationID* experiment_id, + variations::VariationID* control_id, + base::FieldTrial::Probability* experiment_size) { + switch (channel) { + // Shortcuts are hidden for 100% of new users on the Canary / Dev Channels. + case version_info::Channel::CANARY: + case version_info::Channel::DEV: + case version_info::Channel::UNKNOWN: + *experiment_id = 3315271; + *control_id = 3315272; + *experiment_size = 50; + break; + // Shortcuts are hidden for 50% of new users on the Beta Channel. + case version_info::Channel::BETA: + *experiment_id = 3315273; + *control_id = 3315274; + *experiment_size = 50; + break; + // Shortcuts are hidden for 1% of new users on the Stable Channel. + case version_info::Channel::STABLE: + *experiment_id = 3315275; + *control_id = 3315276; + *experiment_size = 1; + break; + } +} + +} // namespace + +namespace ntp_first_run { + +void RegisterLocalStatePrefs(PrefRegistrySimple* registry) { + registry->RegisterBooleanPref(prefs::kNtpActivateHideShortcutsFieldTrial, + false); +} + +void ActivateHideShortcutsOnNtpFieldTrial(base::FeatureList* feature_list, + PrefService* local_state) { + // The field trial is activated for fresh installs, or for clients that were + // previously activated (during a fresh install). For all other existing + // clients, the trial is not activated, and the experiment is unavailable. + if (!first_run::IsChromeFirstRun() && + !local_state->GetBoolean(prefs::kNtpActivateHideShortcutsFieldTrial)) { + return; + } + // Field trials do not take effect until configurations have been downloaded. + // In order for field trials involving substantial UI changes to take effect + // at first run, the configuration must be pre-defined in client code. + variations::VariationID experiment_id; + variations::VariationID control_id; + base::FieldTrial::Probability experiment_size; + LoadConfigByChannel(chrome::GetChannel(), &experiment_id, &control_id, + &experiment_size); + + LocalNtpFirstRunFieldTrialConfig config(kTrialName); + config.AddGroup(kExperimentGroup, experiment_id, experiment_size); + config.AddGroup(kControlGroup, control_id, experiment_size); + + // The field trial can only be loaded once per browser session + scoped_refptr<base::FieldTrial> trial( + base::FieldTrialList::FactoryGetFieldTrial( + config.trial_name(), kTotalProbability, kDefaultGroup, + config.expire_year(), config.expire_month(), + config.expire_day_of_month(), base::FieldTrial::ONE_TIME_RANDOMIZED, + /*default_group_number=*/nullptr)); + for (const auto& group : config.groups()) { + variations::AssociateGoogleVariationID(variations::GOOGLE_WEB_PROPERTIES, + config.trial_name(), group.name(), + group.variation()); + trial->AppendGroup(group.name(), group.percentage()); + } + + const std::string& chosen_group_name = trial->GetGroupNameWithoutActivation(); + base::FeatureList::OverrideState feature_state = + (chosen_group_name == kExperimentGroup) + ? base::FeatureList::OVERRIDE_ENABLE_FEATURE + : base::FeatureList::OVERRIDE_DISABLE_FEATURE; + + feature_list->RegisterFieldTrialOverride(features::kHideShortcutsOnNtp.name, + feature_state, trial.get()); + + // This pref ensures the field trial can be loaded again for clients that + // were activated in a previous browser session. + local_state->SetBoolean(prefs::kNtpActivateHideShortcutsFieldTrial, true); +} + +} // namespace ntp_first_run
diff --git a/chrome/browser/search/local_ntp_first_run_field_trial_handler.h b/chrome/browser/search/local_ntp_first_run_field_trial_handler.h new file mode 100644 index 0000000..8928853 --- /dev/null +++ b/chrome/browser/search/local_ntp_first_run_field_trial_handler.h
@@ -0,0 +1,27 @@ +// Copyright 2019 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. + +#ifndef CHROME_BROWSER_SEARCH_LOCAL_NTP_FIRST_RUN_FIELD_TRIAL_HANDLER_H_ +#define CHROME_BROWSER_SEARCH_LOCAL_NTP_FIRST_RUN_FIELD_TRIAL_HANDLER_H_ + +class PrefRegistrySimple; +class PrefService; + +namespace base { +class FeatureList; +} + +namespace ntp_first_run { + +// Registers hide shortcuts field trial activation in Local State. +void RegisterLocalStatePrefs(PrefRegistrySimple* registry); + +// Loads the HideShortcutsOnNtp field trial config, and establishes the chosen +// group for this client as being part of the experiment, control or default. +void ActivateHideShortcutsOnNtpFieldTrial(base::FeatureList* feature_list, + PrefService* local_state); + +} // namespace ntp_first_run + +#endif // CHROME_BROWSER_SEARCH_LOCAL_NTP_FIRST_RUN_FIELD_TRIAL_HANDLER_H_
diff --git a/chrome/browser/search/local_ntp_first_run_field_trials.cc b/chrome/browser/search/local_ntp_first_run_field_trials.cc new file mode 100644 index 0000000..e00812fd --- /dev/null +++ b/chrome/browser/search/local_ntp_first_run_field_trials.cc
@@ -0,0 +1,29 @@ +// Copyright 2019 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 "chrome/browser/search/local_ntp_first_run_field_trials.h" + +LocalNtpFirstRunFieldTrialGroup::LocalNtpFirstRunFieldTrialGroup( + const std::string& name, + variations::VariationID variation, + base::FieldTrial::Probability percentage) + : name_(name), variation_(variation), percentage_(percentage) {} + +LocalNtpFirstRunFieldTrialGroup::~LocalNtpFirstRunFieldTrialGroup() = default; + +LocalNtpFirstRunFieldTrialConfig::LocalNtpFirstRunFieldTrialConfig( + const std::string& trial_name) + : trial_name_(trial_name), + expire_year_(base::FieldTrialList::kNoExpirationYear), + expire_month_(1), + expire_day_of_month_(1) {} + +LocalNtpFirstRunFieldTrialConfig::~LocalNtpFirstRunFieldTrialConfig() = default; + +void LocalNtpFirstRunFieldTrialConfig::AddGroup( + const std::string& name, + variations::VariationID variation, + base::FieldTrial::Probability percentage) { + groups_.emplace_back(name, variation, percentage); +}
diff --git a/chrome/browser/search/local_ntp_first_run_field_trials.h b/chrome/browser/search/local_ntp_first_run_field_trials.h new file mode 100644 index 0000000..6e943ac --- /dev/null +++ b/chrome/browser/search/local_ntp_first_run_field_trials.h
@@ -0,0 +1,68 @@ +// Copyright 2019 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. + +#ifndef CHROME_BROWSER_SEARCH_LOCAL_NTP_FIRST_RUN_FIELD_TRIALS_H_ +#define CHROME_BROWSER_SEARCH_LOCAL_NTP_FIRST_RUN_FIELD_TRIALS_H_ + +#include "base/macros.h" +#include "components/variations/variations_associated_data.h" + +// Defines a FieldTrial group. +class LocalNtpFirstRunFieldTrialGroup { + public: + LocalNtpFirstRunFieldTrialGroup(const std::string& name, + variations::VariationID variation, + base::FieldTrial::Probability percentage); + ~LocalNtpFirstRunFieldTrialGroup(); + + // Accessors for this FieldTrial group. + const std::string& name() const { return name_; } + variations::VariationID variation() const { return variation_; } + base::FieldTrial::Probability percentage() const { return percentage_; } + + private: + std::string name_; + variations::VariationID variation_; + base::FieldTrial::Probability percentage_; +}; + +// Defines a FieldTrial configuration that will be valid at the time of Chrome +// First Run. Since server-provided FieldTrial configurations need to be +// downloaded, they do not take effect until at least the second run. +// FieldTrials involving substantial UI changes that need to take effect at +// first run must be pre-defined in client code. +class LocalNtpFirstRunFieldTrialConfig { + public: + // Initializes with |trial_name| as the name of the FieldTrial with default + // duration. + explicit LocalNtpFirstRunFieldTrialConfig(const std::string& trial_name); + ~LocalNtpFirstRunFieldTrialConfig(); + + // Adds a new FieldTrial group of |name| with a probability of |percentage|. + // |variation| defines a server-side variation configuration. + void AddGroup(const std::string& name, + variations::VariationID variation, + base::FieldTrial::Probability percentage); + + // Returns a vector of FieldTrial groups for this FieldTrial configuration. + const std::vector<LocalNtpFirstRunFieldTrialGroup>& groups() const { + return groups_; + } + // Accessors for this FieldTrial. + const std::string& trial_name() { return trial_name_; } + int expire_year() { return expire_year_; } + int expire_month() { return expire_month_; } + int expire_day_of_month() { return expire_day_of_month_; } + + private: + std::string trial_name_; + std::vector<LocalNtpFirstRunFieldTrialGroup> groups_; + int expire_year_; + int expire_month_; + int expire_day_of_month_; + + DISALLOW_COPY_AND_ASSIGN(LocalNtpFirstRunFieldTrialConfig); +}; + +#endif // CHROME_BROWSER_SEARCH_LOCAL_NTP_FIRST_RUN_FIELD_TRIALS_H_
diff --git a/chrome/browser/send_tab_to_self/send_tab_to_self_util.cc b/chrome/browser/send_tab_to_self/send_tab_to_self_util.cc index 84dd4d5..77137e3 100644 --- a/chrome/browser/send_tab_to_self/send_tab_to_self_util.cc +++ b/chrome/browser/send_tab_to_self/send_tab_to_self_util.cc
@@ -8,6 +8,7 @@ #include "chrome/browser/sync/device_info_sync_service_factory.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/sync/send_tab_to_self_sync_service_factory.h" +#include "components/send_tab_to_self/features.h" #include "components/send_tab_to_self/send_tab_to_self_model.h" #include "components/send_tab_to_self/send_tab_to_self_sync_service.h" #include "components/sync/device_info/device_info.h" @@ -23,10 +24,15 @@ namespace send_tab_to_self { -bool IsFlagEnabled() { +bool IsReceivingEnabled() { return base::FeatureList::IsEnabled(switches::kSyncSendTabToSelf); } +bool IsSendingEnabled() { + return IsReceivingEnabled() && + base::FeatureList::IsEnabled(kSendTabToSelfShowSendingUI); +} + bool IsUserSyncTypeActive(Profile* profile) { return SendTabToSelfSyncServiceFactory::GetForProfile(profile) ->GetSendTabToSelfModel() @@ -53,7 +59,9 @@ return false; Profile* profile = Profile::FromBrowserContext(web_contents->GetBrowserContext()); - return IsFlagEnabled() && IsUserSyncTypeActive(profile) && + + // If sending is enabled, then so is receiving. + return IsSendingEnabled() && IsUserSyncTypeActive(profile) && IsSyncingOnMultipleDevices(profile) && IsContentRequirementsMet(web_contents->GetURL(), profile); } @@ -64,7 +72,7 @@ return false; Profile* profile = Profile::FromBrowserContext(web_contents->GetBrowserContext()); - return IsFlagEnabled() && IsUserSyncTypeActive(profile) && + return IsSendingEnabled() && IsUserSyncTypeActive(profile) && IsSyncingOnMultipleDevices(profile) && (IsContentRequirementsMet(web_contents->GetURL(), profile) || IsContentRequirementsMet(link_url, profile));
diff --git a/chrome/browser/send_tab_to_self/send_tab_to_self_util.h b/chrome/browser/send_tab_to_self/send_tab_to_self_util.h index 2c3f52f7..80f5c769 100644 --- a/chrome/browser/send_tab_to_self/send_tab_to_self_util.h +++ b/chrome/browser/send_tab_to_self/send_tab_to_self_util.h
@@ -15,7 +15,11 @@ namespace send_tab_to_self { // Returns true if the 'send tab to self' flag is enabled. -bool IsFlagEnabled(); +bool IsReceivingEnabled(); + +// Returns true if the send-tab-to-self' and 'send-tab-to-self-show-sending-ui' +// flags are enabled. +bool IsSendingEnabled(); // Returns true if the SendTabToSelf sync datatype is active. bool IsUserSyncTypeActive(Profile* profile);
diff --git a/chrome/browser/send_tab_to_self/send_tab_to_self_util_unittest.cc b/chrome/browser/send_tab_to_self/send_tab_to_self_util_unittest.cc index ef3b34d..f86e9ab 100644 --- a/chrome/browser/send_tab_to_self/send_tab_to_self_util_unittest.cc +++ b/chrome/browser/send_tab_to_self/send_tab_to_self_util_unittest.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/sync/send_tab_to_self_sync_service_factory.h" #include "chrome/test/base/browser_with_test_window_test.h" +#include "components/send_tab_to_self/features.h" #include "components/send_tab_to_self/send_tab_to_self_sync_service.h" #include "components/sync/device_info/device_info.h" #include "components/sync/device_info/device_info_sync_bridge.h" @@ -122,7 +123,8 @@ // Set up all test conditions to let ShouldOfferFeature() return true void SetUpAllTrueEnv() { - scoped_feature_list_.InitAndEnableFeature(switches::kSyncSendTabToSelf); + scoped_feature_list_.InitWithFeatures( + {switches::kSyncSendTabToSelf, kSendTabToSelfShowSendingUI}, {}); syncer::ModelTypeSet enabled_modeltype(syncer::SEND_TAB_TO_SELF); test_sync_service_->SetPreferredDataTypes(enabled_modeltype); @@ -134,7 +136,8 @@ // Set up a environment in which the feature flag is disabled void SetUpFeatureDisabledEnv() { - scoped_feature_list_.InitAndDisableFeature(switches::kSyncSendTabToSelf); + scoped_feature_list_.InitWithFeatures( + {}, {switches::kSyncSendTabToSelf, kSendTabToSelfShowSendingUI}); syncer::ModelTypeSet enabled_modeltype(syncer::SEND_TAB_TO_SELF); test_sync_service_->SetPreferredDataTypes(enabled_modeltype); @@ -153,15 +156,36 @@ base::string16 title_; }; -TEST_F(SendTabToSelfUtilTest, IsFlagEnabled_True) { - scoped_feature_list_.InitAndEnableFeature(switches::kSyncSendTabToSelf); +TEST_F(SendTabToSelfUtilTest, AreFlagsEnabled_True) { + scoped_feature_list_.InitWithFeatures( + {switches::kSyncSendTabToSelf, kSendTabToSelfShowSendingUI}, {}); - EXPECT_TRUE(IsFlagEnabled()); + EXPECT_TRUE(IsSendingEnabled()); + EXPECT_TRUE(IsReceivingEnabled()); } -TEST_F(SendTabToSelfUtilTest, IsFlagEnabled_False) { - scoped_feature_list_.InitAndDisableFeature(switches::kSyncSendTabToSelf); - EXPECT_FALSE(IsFlagEnabled()); +TEST_F(SendTabToSelfUtilTest, AreFlagsEnabled_False) { + scoped_feature_list_.InitWithFeatures( + {}, {switches::kSyncSendTabToSelf, kSendTabToSelfShowSendingUI}); + + EXPECT_FALSE(IsSendingEnabled()); + EXPECT_FALSE(IsReceivingEnabled()); +} + +TEST_F(SendTabToSelfUtilTest, IsReceivingEnabled_True) { + scoped_feature_list_.InitWithFeatures({switches::kSyncSendTabToSelf}, + {kSendTabToSelfShowSendingUI}); + + EXPECT_FALSE(IsSendingEnabled()); + EXPECT_TRUE(IsReceivingEnabled()); +} + +TEST_F(SendTabToSelfUtilTest, IsOnlySendingEnabled_False) { + scoped_feature_list_.InitWithFeatures({kSendTabToSelfShowSendingUI}, + {switches::kSyncSendTabToSelf}); + + EXPECT_FALSE(IsSendingEnabled()); + EXPECT_FALSE(IsReceivingEnabled()); } TEST_F(SendTabToSelfUtilTest, IsSyncingOnMultipleDevices_True) {
diff --git a/chrome/browser/ssl/ssl_error_controller_client.cc b/chrome/browser/ssl/ssl_error_controller_client.cc index a04a9105..0fedc7c 100644 --- a/chrome/browser/ssl/ssl_error_controller_client.cc +++ b/chrome/browser/ssl/ssl_error_controller_client.cc
@@ -197,8 +197,7 @@ // to a regular Chrome window and proceed as usual there. Browser* browser = chrome::FindBrowserWithWebContents(web_contents_); if (browser && - extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser)) { + WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser)) { chrome::OpenInChrome(browser); } #endif // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/ssl/ssl_error_navigation_throttle.cc b/chrome/browser/ssl/ssl_error_navigation_throttle.cc index 0f2621c..15bc6607 100644 --- a/chrome/browser/ssl/ssl_error_navigation_throttle.cc +++ b/chrome/browser/ssl/ssl_error_navigation_throttle.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) SSLErrorNavigationThrottle::SSLErrorNavigationThrottle( @@ -85,8 +86,7 @@ Browser* browser = chrome::FindBrowserWithWebContents(handle->GetWebContents()); if (browser && - extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser)) { + WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser)) { QueueShowInterstitial(std::move(handle_ssl_error_callback_), handle->GetWebContents(), cert_status, info, handle->GetURL(), std::move(ssl_cert_reporter_));
diff --git a/chrome/browser/sync/test/integration/single_client_send_tab_to_self_sync_test.cc b/chrome/browser/sync/test/integration/single_client_send_tab_to_self_sync_test.cc index 6ba109bf..42d65504a 100644 --- a/chrome/browser/sync/test/integration/single_client_send_tab_to_self_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_send_tab_to_self_sync_test.cc
@@ -74,7 +74,7 @@ IN_PROC_BROWSER_TEST_F(SingleClientSendTabToSelfSyncTest, IsFlagEnabled) { ASSERT_TRUE(SetupSync()); - EXPECT_TRUE(send_tab_to_self::IsFlagEnabled()); + EXPECT_TRUE(send_tab_to_self::IsReceivingEnabled()); } IN_PROC_BROWSER_TEST_F(SingleClientSendTabToSelfSyncTest, ShouldOfferFeature) {
diff --git a/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc b/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc index bc12919..18a1ee5 100644 --- a/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_send_tab_to_self_sync_test.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/sync/test/integration/send_tab_to_self_helper.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "components/history/core/browser/history_service.h" +#include "components/send_tab_to_self/features.h" #include "components/send_tab_to_self/send_tab_to_self_model.h" #include "components/send_tab_to_self/send_tab_to_self_sync_service.h" #include "components/sync/device_info/device_info_sync_service.h" @@ -20,7 +21,10 @@ class TwoClientSendTabToSelfSyncTest : public SyncTest { public: TwoClientSendTabToSelfSyncTest() : SyncTest(TWO_CLIENT) { - scoped_list_.InitAndEnableFeature(switches::kSyncSendTabToSelf); + scoped_list_.InitWithFeatures( + {switches::kSyncSendTabToSelf, + send_tab_to_self::kSendTabToSelfShowSendingUI}, + {}); } ~TwoClientSendTabToSelfSyncTest() override {}
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 3de926fc..8f617131 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1800,6 +1800,7 @@ "//chromeos/dbus", "//chromeos/dbus/cryptohome", "//chromeos/dbus/cryptohome:cryptohome_proto", + "//chromeos/dbus/power", "//chromeos/dbus/session_manager", "//chromeos/dbus/system_clock", "//chromeos/login/auth", @@ -2590,6 +2591,8 @@ "views/frame/system_menu_model_builder.h", "views/frame/system_menu_model_delegate.cc", "views/frame/system_menu_model_delegate.h", + "views/frame/tab_strip_region_view.cc", + "views/frame/tab_strip_region_view.h", "views/frame/toolbar_button_provider.h", "views/frame/top_container_view.cc", "views/frame/top_container_view.h", @@ -2938,6 +2941,8 @@ "views/webauthn/sheet_view_factory.h", "views_mode_controller.cc", "views_mode_controller.h", + "web_app_browser_controller.cc", + "web_app_browser_controller.h", "webauthn/authenticator_request_sheet_model.h", "webauthn/ble_device_hover_list_model.cc", "webauthn/ble_device_hover_list_model.h",
diff --git a/chrome/browser/ui/app_list/app_list_client_impl.cc b/chrome/browser/ui/app_list/app_list_client_impl.cc index 6cee5ce..6cc25cac 100644 --- a/chrome/browser/ui/app_list/app_list_client_impl.cc +++ b/chrome/browser/ui/app_list/app_list_client_impl.cc
@@ -56,15 +56,6 @@ } // namespace -AppListClientImpl::MojoRecorderForTest::MojoRecorderForTest() = default; -AppListClientImpl::MojoRecorderForTest::~MojoRecorderForTest() = default; - -int AppListClientImpl::MojoRecorderForTest::Query(int profile_id) const { - auto iter = recorder_.find(profile_id); - return iter == recorder_.end() ? 0 : iter->second; -} -/////////////////////////////////////////////////////////////////////////////// - AppListClientImpl::AppListClientImpl() : template_url_service_observer_(this), binding_(this), @@ -186,32 +177,21 @@ } void AppListClientImpl::ViewShown(int64_t display_id) { - if (current_model_updater_) { + if (model_updater_) { base::RecordAction(base::UserMetricsAction("Launcher_Show")); base::UmaHistogramSparse("Apps.AppListBadgedAppsCount", - current_model_updater_->BadgedItemCount()); + model_updater_->BadgedItemCount()); } display_id_ = display_id; } -void AppListClientImpl::ActivateItem(int profile_id, - const std::string& id, - int event_flags) { - auto* requested_model_updater = profile_model_mappings_[profile_id]; - - // Pointless to notify the AppListModelUpdater of the activated item if the - // |requested_model_updater| is not the current one, which means that the - // active profile is changed. The same rule applies to the GetContextMenuModel - // and ContextMenuItemSelected. - if (requested_model_updater != current_model_updater_ || - !requested_model_updater) { +void AppListClientImpl::ActivateItem(const std::string& id, int event_flags) { + if (!model_updater_) return; - } - - requested_model_updater->ActivateChromeItem(id, event_flags); + model_updater_->ActivateChromeItem(id, event_flags); // Send a training signal to the search controller. - const auto* item = current_model_updater_->FindItem(id); + const auto* item = model_updater_->FindItem(id); if (item) { search_controller_->Train( id, app_list::RankingItemTypeFromChromeAppListItem(*item)); @@ -221,16 +201,13 @@ } void AppListClientImpl::GetContextMenuModel( - int profile_id, const std::string& id, GetContextMenuModelCallback callback) { - auto* requested_model_updater = profile_model_mappings_[profile_id]; - if (requested_model_updater != current_model_updater_ || - !requested_model_updater) { + if (!model_updater_) { std::move(callback).Run(std::vector<ash::mojom::MenuItemPtr>()); return; } - requested_model_updater->GetContextMenuModel( + model_updater_->GetContextMenuModel( id, base::BindOnce( [](GetContextMenuModelCallback callback, @@ -241,17 +218,12 @@ std::move(callback))); } -void AppListClientImpl::ContextMenuItemSelected(int profile_id, - const std::string& id, +void AppListClientImpl::ContextMenuItemSelected(const std::string& id, int command_id, int event_flags) { - auto* requested_model_updater = profile_model_mappings_[profile_id]; - if (requested_model_updater != current_model_updater_ || - !requested_model_updater) { + if (!model_updater_) return; - } - - requested_model_updater->ContextMenuItemSelected(id, command_id, event_flags); + model_updater_->ContextMenuItemSelected(id, command_id, event_flags); } void AppListClientImpl::OnAppListTargetVisibilityChanged(bool visible) { @@ -263,52 +235,39 @@ } void AppListClientImpl::OnFolderCreated( - int profile_id, ash::mojom::AppListItemMetadataPtr item) { - if (mojo_recorder_for_test_.get()) - mojo_recorder_for_test_->Record(profile_id); - - auto* requested_model_updater = profile_model_mappings_[profile_id]; - if (!requested_model_updater) + if (!model_updater_) return; DCHECK(item->is_folder); - requested_model_updater->OnFolderCreated(std::move(item)); + model_updater_->OnFolderCreated(std::move(item)); } void AppListClientImpl::OnFolderDeleted( - int profile_id, ash::mojom::AppListItemMetadataPtr item) { - auto* requested_model_updater = profile_model_mappings_[profile_id]; - if (!requested_model_updater) + if (!model_updater_) return; DCHECK(item->is_folder); - requested_model_updater->OnFolderDeleted(std::move(item)); + model_updater_->OnFolderDeleted(std::move(item)); } -void AppListClientImpl::OnItemUpdated(int profile_id, - ash::mojom::AppListItemMetadataPtr item) { - auto* requested_model_updater = profile_model_mappings_[profile_id]; - if (!requested_model_updater) +void AppListClientImpl::OnItemUpdated(ash::mojom::AppListItemMetadataPtr item) { + if (!model_updater_) return; - requested_model_updater->OnItemUpdated(std::move(item)); + model_updater_->OnItemUpdated(std::move(item)); } void AppListClientImpl::OnPageBreakItemAdded( - int profile_id, const std::string& id, const syncer::StringOrdinal& position) { - auto* requested_model_updater = profile_model_mappings_[profile_id]; - if (!requested_model_updater) + if (!model_updater_) return; - requested_model_updater->OnPageBreakItemAdded(id, position); + model_updater_->OnPageBreakItemAdded(id, position); } -void AppListClientImpl::OnPageBreakItemDeleted(int profile_id, - const std::string& id) { - auto* requested_model_updater = profile_model_mappings_[profile_id]; - if (!requested_model_updater) +void AppListClientImpl::OnPageBreakItemDeleted(const std::string& id) { + if (!model_updater_) return; - requested_model_updater->OnPageBreakItemDeleted(id); + model_updater_->OnPageBreakItemDeleted(id); } void AppListClientImpl::GetNavigableContentsFactory( @@ -351,13 +310,13 @@ return; if (profile_) { - DCHECK(current_model_updater_); - current_model_updater_->SetActive(false); + DCHECK(model_updater_); + model_updater_->SetActive(false); search_resource_manager_.reset(); search_controller_.reset(); app_sync_ui_state_watcher_.reset(); - current_model_updater_ = nullptr; + model_updater_ = nullptr; } template_url_service_observer_.RemoveAll(); @@ -379,33 +338,26 @@ app_list::AppListSyncableService* syncable_service = app_list::AppListSyncableServiceFactory::GetForProfile(profile_); - current_model_updater_ = syncable_service->GetModelUpdater(); - current_model_updater_->SetActive(true); - - // On ChromeOS, there is no way to sign-off just one user. When signing off - // all users, AppListClientImpl instance is destructed before profiles are - // unloaded. So we don't need to remove elements from - // |profile_model_mappings_| explicitly. - profile_model_mappings_[current_model_updater_->model_id()] = - current_model_updater_; + model_updater_ = syncable_service->GetModelUpdater(); + model_updater_->SetActive(true); app_sync_ui_state_watcher_ = - std::make_unique<AppSyncUIStateWatcher>(profile_, current_model_updater_); + std::make_unique<AppSyncUIStateWatcher>(profile_, model_updater_); SetUpSearchUI(); OnTemplateURLServiceChanged(); // Clear search query. - current_model_updater_->UpdateSearchBox(base::string16(), - false /* initiated_by_user */); + model_updater_->UpdateSearchBox(base::string16(), + false /* initiated_by_user */); } void AppListClientImpl::SetUpSearchUI() { search_resource_manager_ = std::make_unique<app_list::SearchResourceManager>( - profile_, current_model_updater_); + profile_, model_updater_); search_controller_ = - app_list::CreateSearchController(profile_, current_model_updater_, this); + app_list::CreateSearchController(profile_, model_updater_, this); } app_list::SearchController* AppListClientImpl::search_controller() { @@ -413,20 +365,11 @@ } AppListModelUpdater* AppListClientImpl::GetModelUpdaterForTest() { - return current_model_updater_; -} - -void AppListClientImpl::SetUpMojoRecorderForTest() { - mojo_recorder_for_test_ = std::make_unique<MojoRecorderForTest>(); -} - -int AppListClientImpl::QueryMojoRecorderForTest(int profile_id) { - DCHECK(mojo_recorder_for_test_.get()); - return mojo_recorder_for_test_->Query(profile_id); + return model_updater_; } void AppListClientImpl::OnTemplateURLServiceChanged() { - DCHECK(current_model_updater_); + DCHECK(model_updater_); TemplateURLService* template_url_service = TemplateURLServiceFactory::GetForProfile(profile_); @@ -437,7 +380,7 @@ default_provider->GetEngineType( template_url_service->search_terms_data()) == SEARCH_ENGINE_GOOGLE; - current_model_updater_->SetSearchEngineIsGoogle(is_google); + model_updater_->SetSearchEngineIsGoogle(is_google); } void AppListClientImpl::ShowAndSwitchToState(ash::AppListState state) {
diff --git a/chrome/browser/ui/app_list/app_list_client_impl.h b/chrome/browser/ui/app_list/app_list_client_impl.h index aa9571f8..402a98da 100644 --- a/chrome/browser/ui/app_list/app_list_client_impl.h +++ b/chrome/browser/ui/app_list/app_list_client_impl.h
@@ -31,7 +31,6 @@ class SearchResourceManager; } // namespace app_list -class AppListClientWithProfileTest; class AppListModelUpdater; class AppSyncUIStateWatcher; class Profile; @@ -42,23 +41,6 @@ public user_manager::UserManager::UserSessionStateObserver, public TemplateURLServiceObserver { public: - class MojoRecorderForTest { - public: - MojoRecorderForTest(); - ~MojoRecorderForTest(); - - void Record(int profile_id) { recorder_[profile_id]++; } - - int Query(int profile_id) const; - - private: - // For each pair in the map, the key is a profile id while the value is the - // mojo calling times associated with the particular profile. - std::map<int, int> recorder_; - - DISALLOW_COPY_AND_ASSIGN(MojoRecorderForTest); - }; - AppListClientImpl(); ~AppListClientImpl() override; @@ -82,28 +64,20 @@ int event_flags) override; void ViewClosing() override; void ViewShown(int64_t display_id) override; - void ActivateItem(int profile_id, - const std::string& id, - int event_flags) override; - void GetContextMenuModel(int profile_id, - const std::string& id, + void ActivateItem(const std::string& id, int event_flags) override; + void GetContextMenuModel(const std::string& id, GetContextMenuModelCallback callback) override; - void ContextMenuItemSelected(int profile_id, - const std::string& id, + void ContextMenuItemSelected(const std::string& id, int command_id, int event_flags) override; void OnAppListTargetVisibilityChanged(bool visible) override; void OnAppListVisibilityChanged(bool visible) override; - void OnFolderCreated(int profile_id, - ash::mojom::AppListItemMetadataPtr item) override; - void OnFolderDeleted(int profile_id, - ash::mojom::AppListItemMetadataPtr item) override; - void OnItemUpdated(int profile_id, - ash::mojom::AppListItemMetadataPtr item) override; - void OnPageBreakItemAdded(int profile_id, - const std::string& id, + void OnFolderCreated(ash::mojom::AppListItemMetadataPtr item) override; + void OnFolderDeleted(ash::mojom::AppListItemMetadataPtr item) override; + void OnItemUpdated(ash::mojom::AppListItemMetadataPtr item) override; + void OnPageBreakItemAdded(const std::string& id, const syncer::StringOrdinal& position) override; - void OnPageBreakItemDeleted(int profile_id, const std::string& id) override; + void OnPageBreakItemDeleted(const std::string& id) override; void GetNavigableContentsFactory( mojo::PendingReceiver<content::mojom::NavigableContentsFactory> receiver) override; @@ -162,16 +136,10 @@ AppListModelUpdater* GetModelUpdaterForTest(); - void SetUpMojoRecorderForTest(); - - int QueryMojoRecorderForTest(int profile_id); - // Flushes all pending mojo call to Ash for testing. void FlushMojoForTesting(); private: - FRIEND_TEST_ALL_PREFIXES(AppListClientWithProfileTest, CheckDataRace); - // Overridden from TemplateURLServiceObserver: void OnTemplateURLServiceChanged() override; @@ -190,25 +158,14 @@ // called. Profile* profile_ = nullptr; - // Unowned pointer to the model updater owned by AppListSyncableService. Will - // change if |profile_| changes. - AppListModelUpdater* current_model_updater_ = nullptr; - - // Store the mappings between profiles and AppListModelUpdater instances. - // In multi-profile mode, mojo callings from the Ash process to access the app - // list items should be dealt with the correct AppListModelUpdater instance. - // Otherwise data race may happen, like the issue 939755 - // (https://crbug.com/939755). - // TODO: Replace the mojo interface functions provided by AppListClient with - // callbacks. - std::map<int, AppListModelUpdater*> profile_model_mappings_; + // Unowned pointer to the model updater owned by AppListSyncableService. + // Will change if |profile_| changes. + AppListModelUpdater* model_updater_ = nullptr; std::unique_ptr<app_list::SearchResourceManager> search_resource_manager_; std::unique_ptr<app_list::SearchController> search_controller_; std::unique_ptr<AppSyncUIStateWatcher> app_sync_ui_state_watcher_; - std::unique_ptr<MojoRecorderForTest> mojo_recorder_for_test_; - ScopedObserver<TemplateURLService, AppListClientImpl> template_url_service_observer_;
diff --git a/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc b/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc index 9279307..cc7eaca 100644 --- a/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc +++ b/chrome/browser/ui/app_list/app_list_client_impl_browsertest.cc
@@ -20,16 +20,12 @@ #include "chrome/browser/apps/platform_apps/app_browsertest_util.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h" -#include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/search_engines/template_url_service_factory.h" -#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/browser/ui/app_list/app_list_client_impl.h" #include "chrome/browser/ui/app_list/app_list_controller_delegate.h" #include "chrome/browser/ui/app_list/app_list_model_updater.h" -#include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" #include "chrome/browser/ui/app_list/chrome_app_list_item.h" #include "chrome/browser/ui/app_list/search/search_controller.h" #include "chrome/browser/ui/app_list/test/chrome_app_list_test_support.h" @@ -43,9 +39,7 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/constants/chromeos_switches.h" -#include "components/browser_sync/browser_sync_switches.h" #include "components/prefs/pref_service.h" -#include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_names.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_types.h" @@ -363,124 +357,3 @@ "DemoMode.AppLaunchSource", chromeos::DemoSession::AppLaunchSource::kAppList, 1); } - -class AppListClientWithProfileTest : public InProcessBrowserTest { - protected: - AppListClientWithProfileTest() - : account_id1_( - AccountId::FromUserEmailGaiaId("test1@example.com", "ID1")), - account_id2_( - AccountId::FromUserEmailGaiaId("test2@example.com", "ID2")) {} - ~AppListClientWithProfileTest() override {} - - static std::unique_ptr<KeyedService> BuildTestSyncService( - content::BrowserContext* context) { - Profile* profile = Profile::FromBrowserContext(context); - return std::make_unique<app_list::AppListSyncableService>( - profile, extensions::ExtensionSystem::Get(profile)); - } - - static std::unique_ptr<KeyedService> BuildTestURLService( - content::BrowserContext* context) { - return std::make_unique<TemplateURLService>(nullptr, 0); - } - - void SetUpCommandLine(base::CommandLine* command_line) override { - // Disable the password sync service. Otherwise the test will crash. - command_line->AppendSwitchASCII( - switches::kDisableSyncTypes, - syncer::ModelTypeSetToString(syncer::PASSWORDS)); - } - - void SetUpOnMainThread() override { - user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>( - std::make_unique<chromeos::FakeChromeUserManager>()); - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - - profile1_ = BuildProfile(account_id1_); - profile2_ = BuildProfile(account_id2_); - - AppListClientImpl::GetInstance()->SetUpMojoRecorderForTest(); - } - - void TearDownOnMainThread() override { - GetFakeUserManager()->RemoveUserFromList(account_id1_); - profile1_.reset(); - profile2_.reset(); - base::RunLoop().RunUntilIdle(); - user_manager_enabler_.reset(); - } - - chromeos::FakeChromeUserManager* GetFakeUserManager() const { - return static_cast<chromeos::FakeChromeUserManager*>( - user_manager::UserManager::Get()); - } - - TestingProfile* GetProfile1() { return profile1_.get(); } - TestingProfile* GetProfile2() { return profile2_.get(); } - - private: - std::unique_ptr<TestingProfile> BuildProfile(AccountId account_id) { - GetFakeUserManager()->AddUser(account_id); - GetFakeUserManager()->LoginUser(account_id); - - TestingProfile::Builder profile_builder; - profile_builder.SetPath( - temp_dir_.GetPath().AppendASCII(account_id.GetUserEmail())); - profile_builder.SetProfileName(account_id.GetUserEmail()); - - // Add service factories needed by AppListClientImpl::SetProfile. - profile_builder.AddTestingFactory( - app_list::AppListSyncableServiceFactory::GetInstance(), - base::BindRepeating(&BuildTestSyncService)); - profile_builder.AddTestingFactory( - TemplateURLServiceFactory::GetInstance(), - base::BindRepeating(&BuildTestURLService)); - - return IdentityTestEnvironmentProfileAdaptor:: - CreateProfileForIdentityTestEnvironment(profile_builder); - } - - AccountId account_id1_; - AccountId account_id2_; - std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_; - std::unique_ptr<TestingProfile> profile1_; - std::unique_ptr<TestingProfile> profile2_; - base::ScopedTempDir temp_dir_; -}; - -// Verifies that in multi-profile mode, mojo callings from Ash side to access -// the app list are handled by the correct AppListModelUpdater. (see -// https://crbug.com/939755) -IN_PROC_BROWSER_TEST_F(AppListClientWithProfileTest, CheckDataRace) { - AppListClientImpl* client = AppListClientImpl::GetInstance(); - - // Emulate that the default profile is the profile 1. - client->SetProfile(GetProfile1()); - int profile_id1 = client->GetModelUpdaterForTest()->model_id(); - - // Emulate that the AppListSyncableService adds an item within the folder. - // So the AppListClientImpl should receive OnFolderCreated event later. - auto* model_updater = client->GetModelUpdaterForTest(); - std::unique_ptr<ChromeAppListItem> item = std::make_unique<ChromeAppListItem>( - GetProfile1(), "item 1", model_updater); - item->SetFolderId("folder"); - model_updater->AddItem(std::move(item)); - - // Emulate that the current profile is switched to the profile 2. Wait until - // the AppListClientImpl receives the mojo callings from Ash side. - client->SetProfile(GetProfile2()); - client->FlushMojoForTesting(); - - int profile_id2 = client->GetModelUpdaterForTest()->model_id(); - - // Check the following things: - // (1) The model updater associated with the profile 2 should not process the - // OnFolderCreated event. - // (2) The model updater associated with the profile 1 should process the On- - // FolderCreated event. - EXPECT_EQ(0, client->QueryMojoRecorderForTest(profile_id2)); - EXPECT_EQ(1, client->QueryMojoRecorderForTest(profile_id1)); - - client->SetProfile(nullptr); -}
diff --git a/chrome/browser/ui/app_list/app_list_model_updater.cc b/chrome/browser/ui/app_list/app_list_model_updater.cc index 38be0bd..9ff3210 100644 --- a/chrome/browser/ui/app_list/app_list_model_updater.cc +++ b/chrome/browser/ui/app_list/app_list_model_updater.cc
@@ -8,15 +8,6 @@ #include "ash/public/cpp/app_list/app_list_config.h" #include "chrome/browser/ui/app_list/chrome_app_list_item.h" -namespace { - -int g_next_unique_model_id = 0; - -} // namespace - -AppListModelUpdater::AppListModelUpdater() - : model_id_(g_next_unique_model_id++) {} - // static syncer::StringOrdinal AppListModelUpdater::GetFirstAvailablePositionInternal( const std::vector<ChromeAppListItem*>& top_level_items) {
diff --git a/chrome/browser/ui/app_list/app_list_model_updater.h b/chrome/browser/ui/app_list/app_list_model_updater.h index cc45a96..a62fb91 100644 --- a/chrome/browser/ui/app_list/app_list_model_updater.h +++ b/chrome/browser/ui/app_list/app_list_model_updater.h
@@ -39,8 +39,6 @@ virtual ~AppListModelUpdater() {} - int model_id() const { return model_id_; } - // Set whether this model updater is active. // When we have multiple user profiles, only the active one has access to the // model. All others profile can only cache model changes in Chrome. @@ -148,16 +146,11 @@ virtual void RemoveObserver(AppListModelUpdaterObserver* observer) = 0; protected: - AppListModelUpdater(); - // Returns the first available position in app list. |top_level_items| are // items without parents. Note that all items in |top_level_items| should have // valid position. static syncer::StringOrdinal GetFirstAvailablePositionInternal( const std::vector<ChromeAppListItem*>& top_level_items); - - private: - const int model_id_; }; #endif // CHROME_BROWSER_UI_APP_LIST_APP_LIST_MODEL_UPDATER_H_
diff --git a/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc b/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc index 29aa515..2b831591 100644 --- a/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc +++ b/chrome/browser/ui/app_list/chrome_app_list_model_updater.cc
@@ -37,9 +37,7 @@ std::vector<ash::mojom::AppListItemMetadataPtr> items_to_sync; for (auto const& item : items_) items_to_sync.push_back(item.second->CloneMetadata()); - - DCHECK(profile_); - app_list_controller_->SetModelData(model_id(), std::move(items_to_sync), + app_list_controller_->SetModelData(std::move(items_to_sync), search_engine_is_google_); }
diff --git a/chrome/browser/ui/ash/ash_util.cc b/chrome/browser/ui/ash/ash_util.cc index a45cde3..3977d5b 100644 --- a/chrome/browser/ui/ash/ash_util.cc +++ b/chrome/browser/ui/ash/ash_util.cc
@@ -84,13 +84,17 @@ } void BounceWindow(aura::Window* window) { - if (features::IsUsingWindowService()) { - const uint64_t window_id = - aura::WindowMus::Get(window->GetRootWindow())->server_id(); + // Some launcher item controllers may pass |window| on Shell even when Mash is + // enabled. In that case it should not use WindowMus. See + // https://crbug.com/950629 and https://crbug.com/887156. + aura::WindowMus* window_mus = nullptr; + if (features::IsUsingWindowService()) + window_mus = aura::WindowMus::Get(window->GetRootWindow()); + if (window_mus) { views::MusClient::Get() ->window_tree_client() ->BindWindowManagerInterface<ash::mojom::AshWindowManager>() - ->BounceWindow(window_id); + ->BounceWindow(window_mus->server_id()); } else { wm::AnimateWindow(window, wm::WINDOW_ANIMATION_TYPE_BOUNCE); }
diff --git a/chrome/browser/ui/autofill/payments/manage_migration_ui_controller.cc b/chrome/browser/ui/autofill/payments/manage_migration_ui_controller.cc index 198ccb53..b4eec61 100644 --- a/chrome/browser/ui/autofill/payments/manage_migration_ui_controller.cc +++ b/chrome/browser/ui/autofill/payments/manage_migration_ui_controller.cc
@@ -146,7 +146,8 @@ if (!dialog_controller_) return; - DCHECK_EQ(flow_step_, LocalCardMigrationFlowStep::MIGRATION_FINISHED); + DCHECK(flow_step_ == LocalCardMigrationFlowStep::MIGRATION_FINISHED || + flow_step_ == LocalCardMigrationFlowStep::MIGRATION_FAILED); flow_step_ = LocalCardMigrationFlowStep::FEEDBACK_DIALOG; dialog_controller_->ShowFeedbackDialog(); }
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index fc04d24..9814f062 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -145,6 +145,7 @@ #include "chrome/browser/ui/tabs/tab_menu_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_utils.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" #include "chrome/browser/ui/window_sizer/window_sizer.h" @@ -279,8 +280,8 @@ #endif } -std::unique_ptr<extensions::HostedAppBrowserController> -MaybeCreateHostedAppController(Browser* browser) { +std::unique_ptr<WebAppBrowserController> MaybeCreateWebAppController( + Browser* browser) { #if BUILDFLAG(ENABLE_EXTENSIONS) const std::string extension_id = web_app::GetAppIdFromApplicationName(browser->app_name()); @@ -422,7 +423,7 @@ location_bar_model_delegate_(new BrowserLocationBarModelDelegate(this)), live_tab_context_(new BrowserLiveTabContext(this)), synced_window_delegate_(new BrowserSyncedWindowDelegate(this)), - hosted_app_controller_(MaybeCreateHostedAppController(this)), + web_app_controller_(MaybeCreateWebAppController(this)), bookmark_bar_state_(BookmarkBar::HIDDEN), command_controller_(new chrome::BrowserCommandController(this)), window_has_shown_(false), @@ -478,8 +479,8 @@ : CreateBrowserWindow(std::unique_ptr<Browser>(this), params.user_gesture); - if (hosted_app_controller_) - hosted_app_controller_->UpdateToolbarVisibility(false); + if (web_app_controller_) + web_app_controller_->UpdateToolbarVisibility(false); // Create the extension window controller before sending notifications. extension_window_controller_.reset( @@ -673,8 +674,8 @@ // |contents| can be NULL because GetWindowTitleForCurrentTab is called by the // window during the window's creation (before tabs have been added). if (contents) { - title = FormatTitleForDisplay(hosted_app_controller_ - ? hosted_app_controller_->GetTitle() + title = FormatTitleForDisplay(web_app_controller_ + ? web_app_controller_->GetTitle() : contents->GetTitle()); } @@ -691,8 +692,8 @@ // ensures that the native window gets a title which is important for a11y, // for example the window selector uses the Aura window title. if (title.empty() && is_app() && include_app_name) { - return base::UTF8ToUTF16(hosted_app_controller_ - ? hosted_app_controller_->GetAppShortName() + return base::UTF8ToUTF16(web_app_controller_ + ? web_app_controller_->GetAppShortName() : app_name()); } @@ -1384,8 +1385,8 @@ content::INVALIDATE_TYPE_TAB)) command_controller_->TabStateChanged(); - if (hosted_app_controller_) - hosted_app_controller_->UpdateToolbarVisibility(true); + if (web_app_controller_) + web_app_controller_->UpdateToolbarVisibility(true); } void Browser::VisibleSecurityStateChanged(WebContents* source) { @@ -1395,8 +1396,8 @@ if (tab_strip_model_->GetActiveWebContents() == source) { UpdateToolbar(false); - if (hosted_app_controller_) - hosted_app_controller_->UpdateToolbarVisibility(true); + if (web_app_controller_) + web_app_controller_->UpdateToolbarVisibility(true); } } @@ -2569,8 +2570,8 @@ if (!is_app()) return !is_trusted_source(); - // Hosted apps always support a location bar. - if (hosted_app_controller_) + // Web apps always support a location bar. + if (web_app_controller_) return true; return false; @@ -2603,12 +2604,12 @@ features |= FEATURE_LOCATIONBAR; } - // Hosted apps should always support the toolbar, so the title/origin of the + // Web apps should always support the toolbar, so the title/origin of the // current page can be shown when browsing a url that is not inside the app. // Note: Final determination of whether or not the toolbar is shown is made by - // the |HostedAppBrowserController|. - if (hosted_app_controller() && - hosted_app_controller()->IsForExperimentalHostedAppBrowser()) { + // the |WebAppBrowserController|. + if (web_app_controller() && + web_app_controller()->IsForExperimentalHostedAppBrowser()) { features |= FEATURE_TOOLBAR; }
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h index 1e03cf08..ce0922d 100644 --- a/chrome/browser/ui/browser.h +++ b/chrome/browser/ui/browser.h
@@ -50,6 +50,7 @@ #include "ui/base/window_open_disposition.h" #include "ui/gfx/geometry/rect.h" #include "ui/shell_dialogs/select_file_dialog.h" +// #include "chrome/browser/ui/web_app_browser_controller.h" #if !defined(OS_ANDROID) #include "components/zoom/zoom_observer.h" @@ -86,7 +87,7 @@ namespace extensions { class BrowserExtensionWindowController; -class HostedAppBrowserController; + class Extension; class ExtensionRegistry; } @@ -106,6 +107,7 @@ namespace viz { class SurfaceId; } +class WebAppBrowserController; class Browser : public TabStripModelObserver, public content::WebContentsDelegate, @@ -323,11 +325,11 @@ BrowserInstantController* instant_controller() { return instant_controller_.get(); } - const extensions::HostedAppBrowserController* hosted_app_controller() const { - return hosted_app_controller_.get(); + const WebAppBrowserController* web_app_controller() const { + return web_app_controller_.get(); } - extensions::HostedAppBrowserController* hosted_app_controller() { - return hosted_app_controller_.get(); + WebAppBrowserController* web_app_controller() { + return web_app_controller_.get(); } #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) @@ -1082,8 +1084,7 @@ // Helper which handles bookmark app specific browser configuration. // This must be initialized before |command_controller_| to ensure the correct // set of commands are enabled. - std::unique_ptr<extensions::HostedAppBrowserController> - hosted_app_controller_; + std::unique_ptr<WebAppBrowserController> web_app_controller_; BookmarkBar::State bookmark_bar_state_;
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc index 409fb26d..9143298 100644 --- a/chrome/browser/ui/browser_command_controller.cc +++ b/chrome/browser/ui/browser_command_controller.cc
@@ -42,6 +42,7 @@ #include "chrome/browser/ui/page_info/page_info_dialog.h" #include "chrome/browser/ui/singleton_tabs.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/browser/ui/webui/inspect_ui.h" #include "chrome/common/chrome_features.h" #include "chrome/common/content_restriction.h" @@ -937,8 +938,7 @@ normal_window || browser_->is_app()); const bool is_experimental_hosted_app = - extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser_); + WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser_); // Hosted app browser commands. command_updater_.UpdateCommandEnabled(IDC_COPY_URL, is_experimental_hosted_app); @@ -1242,8 +1242,7 @@ void BrowserCommandController::UpdateCommandsForHostedAppAvailability() { bool has_toolbar = browser_->is_type_tabbed() || - extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser_); + WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser_); if (window() && window()->ShouldHideUIForFullscreen()) has_toolbar = false; command_updater_.UpdateCommandEnabled(IDC_FOCUS_TOOLBAR, has_toolbar);
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc index b474ab75..bf5a3fa 100644 --- a/chrome/browser/ui/browser_commands.cc +++ b/chrome/browser/ui/browser_commands.cc
@@ -1264,7 +1264,7 @@ } Browser* OpenInChrome(Browser* hosted_app_browser) { - DCHECK(hosted_app_browser->hosted_app_controller()); + DCHECK(hosted_app_browser->web_app_controller()); // Find a non-incognito browser. Browser* target_browser = chrome::FindTabbedBrowser(hosted_app_browser->profile(), false);
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc index fcb3214..9a1d8a2 100644 --- a/chrome/browser/ui/extensions/application_launch.cc +++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -417,7 +417,7 @@ WebContents* web_contents = nav_params.navigated_or_inserted_contents; extensions::HostedAppBrowserController::SetAppPrefsForWebContents( - browser->hosted_app_controller(), web_contents); + browser->web_app_controller(), web_contents); if (extension) { web_app::WebAppTabHelperBase* tab_helper = web_app::WebAppTabHelperBase::FromWebContents(web_contents);
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc index 15f3efa1..f4232f9e 100644 --- a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc +++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
@@ -109,15 +109,8 @@ } // static -bool HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - const Browser* browser) { - return browser && browser->hosted_app_controller() && - browser->hosted_app_controller()->IsForExperimentalHostedAppBrowser(); -} - -// static void HostedAppBrowserController::SetAppPrefsForWebContents( - HostedAppBrowserController* controller, + WebAppBrowserController* controller, content::WebContents* web_contents) { auto* rvh = web_contents->GetRenderViewHost(); @@ -125,29 +118,21 @@ rvh->SyncRendererPrefs(); // This function could be called for non Hosted Apps. - if (!controller) + if (!controller || !controller->IsHostedApp()) return; + // All hosted apps should specify an app ID. + DCHECK(controller->GetAppId()); extensions::TabHelper::FromWebContents(web_contents) - ->SetExtensionApp(controller->GetExtension()); + ->SetExtensionApp(ExtensionRegistry::Get(controller->browser()->profile()) + ->GetExtensionById(*controller->GetAppId(), + ExtensionRegistry::EVERYTHING)); web_contents->NotifyPreferencesChanged(); } -base::string16 HostedAppBrowserController::FormatUrlOrigin(const GURL& url) { - return url_formatter::FormatUrl( - url.GetOrigin(), - url_formatter::kFormatUrlOmitUsernamePassword | - url_formatter::kFormatUrlOmitHTTPS | - url_formatter::kFormatUrlOmitHTTP | - url_formatter::kFormatUrlOmitTrailingSlashOnBareHostname | - url_formatter::kFormatUrlOmitTrivialSubdomains, - net::UnescapeRule::SPACES, nullptr, nullptr, nullptr); -} - HostedAppBrowserController::HostedAppBrowserController(Browser* browser) - : content::WebContentsObserver(nullptr), - browser_(browser), + : WebAppBrowserController(browser), extension_id_(web_app::GetAppIdFromApplicationName(browser->app_name())), // If a bookmark app has a URL handler, then it is a PWA. // TODO(https://crbug.com/774918): Replace once there is a more explicit @@ -155,11 +140,19 @@ created_for_installed_pwa_( base::FeatureList::IsEnabled(::features::kDesktopPWAWindowing) && UrlHandlers::GetUrlHandlers(GetExtension())) { - browser_->tab_strip_model()->AddObserver(this); + WebAppBrowserController::browser()->tab_strip_model()->AddObserver(this); } HostedAppBrowserController::~HostedAppBrowserController() { - browser_->tab_strip_model()->RemoveObserver(this); + browser()->tab_strip_model()->RemoveObserver(this); +} + +base::Optional<std::string> HostedAppBrowserController::GetAppId() const { + return extension_id_; +} + +bool HostedAppBrowserController::CreatedForInstalledPwa() const { + return created_for_installed_pwa_; } bool HostedAppBrowserController::IsForSystemWebApp() const { @@ -173,6 +166,11 @@ return base::FeatureList::IsEnabled(::features::kDesktopPWAWindowing); } +// TODO(yiningwang): Correct this function. +bool HostedAppBrowserController::IsHostedApp() const { + return true; +} + bool HostedAppBrowserController::ShouldShowToolbar() const { const Extension* extension = GetExtension(); if (!extension) @@ -181,7 +179,7 @@ DCHECK(extension->is_hosted_app()); content::WebContents* web_contents = - browser_->tab_strip_model()->GetActiveWebContents(); + browser()->tab_strip_model()->GetActiveWebContents(); // Don't show a toolbar until a navigation has occurred. if (!web_contents || web_contents->GetLastCommittedURL().is_empty()) @@ -230,10 +228,6 @@ return false; } -void HostedAppBrowserController::UpdateToolbarVisibility(bool animate) const { - browser_->window()->UpdateToolbarVisibility(ShouldShowToolbar(), animate); -} - bool HostedAppBrowserController::ShouldShowHostedAppButtonContainer() const { // System Web Apps don't get the Hosted App buttons. return IsForExperimentalHostedAppBrowser() && !IsForSystemWebApp(); @@ -243,27 +237,27 @@ // TODO(calamity): Use the app name to retrieve the app icon without using the // extensions tab helper to make icon load more immediate. content::WebContents* contents = - browser_->tab_strip_model()->GetActiveWebContents(); + browser()->tab_strip_model()->GetActiveWebContents(); if (!contents) - return GetFallbackAppIcon(browser_); + return GetFallbackAppIcon(browser()); extensions::TabHelper* extensions_tab_helper = extensions::TabHelper::FromWebContents(contents); if (!extensions_tab_helper) - return GetFallbackAppIcon(browser_); + return GetFallbackAppIcon(browser()); const SkBitmap* icon_bitmap = extensions_tab_helper->GetExtensionAppIcon(); if (!icon_bitmap) - return GetFallbackAppIcon(browser_); + return GetFallbackAppIcon(browser()); return gfx::ImageSkia::CreateFrom1xBitmap(*icon_bitmap); } gfx::ImageSkia HostedAppBrowserController::GetWindowIcon() const { - if (IsForExperimentalHostedAppBrowser(browser_)) + if (IsForExperimentalHostedAppBrowser()) return GetWindowAppIcon(); - return browser_->GetCurrentPageIcon().AsImageSkia(); + return browser()->GetCurrentPageIcon().AsImageSkia(); } base::Optional<SkColor> HostedAppBrowserController::GetThemeColor() const { @@ -276,7 +270,7 @@ // HTML meta theme-color tag overrides manifest theme_color, see spec: // https://www.w3.org/TR/appmanifest/#theme_color-member content::WebContents* web_contents = - browser_->tab_strip_model()->GetActiveWebContents(); + browser()->tab_strip_model()->GetActiveWebContents(); if (web_contents) { base::Optional<SkColor> color = web_contents->GetThemeColor(); if (color) @@ -302,7 +296,7 @@ } content::WebContents* web_contents = - browser_->tab_strip_model()->GetActiveWebContents(); + browser()->tab_strip_model()->GetActiveWebContents(); if (!web_contents) return base::string16(); @@ -320,7 +314,7 @@ } const Extension* HostedAppBrowserController::GetExtension() const { - return ExtensionRegistry::Get(browser_->profile()) + return ExtensionRegistry::Get(browser()->profile()) ->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING); } @@ -338,7 +332,7 @@ } bool HostedAppBrowserController::CanUninstall() const { - return extensions::ExtensionSystem::Get(browser_->profile()) + return extensions::ExtensionSystem::Get(browser()->profile()) ->management_policy() ->UserMayModifySettings(GetExtension(), nullptr); } @@ -346,7 +340,7 @@ void HostedAppBrowserController::Uninstall(UninstallReason reason, UninstallSource source) { uninstall_dialog_ = ExtensionUninstallDialog::Create( - browser_->profile(), browser_->window()->GetNativeWindow(), this); + browser()->profile(), browser()->window()->GetNativeWindow(), this); uninstall_dialog_->ConfirmUninstall(GetExtension(), reason, source); } @@ -367,11 +361,6 @@ } } -void HostedAppBrowserController::DidChangeThemeColor( - base::Optional<SkColor> theme_color) { - browser_->window()->UpdateFrameColor(); -} - void HostedAppBrowserController::OnTabInserted(content::WebContents* contents) { DCHECK(!web_contents()) << "Hosted app windows are single tabbed only"; HostedAppBrowserController::SetAppPrefsForWebContents(this, contents);
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.h b/chrome/browser/ui/extensions/hosted_app_browser_controller.h index fb801c5..79d5b69 100644 --- a/chrome/browser/ui/extensions/hosted_app_browser_controller.h +++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_UI_EXTENSIONS_HOSTED_APP_BROWSER_CONTROLLER_H_ #define CHROME_BROWSER_UI_EXTENSIONS_HOSTED_APP_BROWSER_CONTROLLER_H_ +#include <memory> #include <string> #include "base/macros.h" @@ -12,7 +13,7 @@ #include "base/strings/string16.h" #include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" -#include "content/public/browser/web_contents_observer.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "third_party/skia/include/core/SkColor.h" class Browser; @@ -32,82 +33,70 @@ class Extension; -// Class to encapsulate logic to control the browser UI for hosted apps. +// Class to encapsulate logic to control the browser UI for extension based web +// apps. class HostedAppBrowserController : public TabStripModelObserver, public ExtensionUninstallDialog::Delegate, - public content::WebContentsObserver { + public WebAppBrowserController { public: - // Returns whether |browser| uses the experimental hosted app experience. - // Convenience wrapper for checking IsForExperimentalHostedAppBrowser() on - // |browser|'s HostedAppBrowserController if it exists. - static bool IsForExperimentalHostedAppBrowser(const Browser* browser); - // Functions to set preferences that are unique to app windows. - static void SetAppPrefsForWebContents(HostedAppBrowserController* controller, + static void SetAppPrefsForWebContents(WebAppBrowserController* controller, content::WebContents* web_contents); - // Renders |url|'s origin as Unicode. - static base::string16 FormatUrlOrigin(const GURL& url); - explicit HostedAppBrowserController(Browser* browser); ~HostedAppBrowserController() override; - const std::string& app_id() const { return extension_id_; } + base::Optional<std::string> GetAppId() const override; // Returns true if the associated Hosted App is for a PWA. - bool created_for_installed_pwa() const { return created_for_installed_pwa_; } + bool CreatedForInstalledPwa() const override; // Returns true if this controller is for a System Web App. bool IsForSystemWebApp() const; // Returns true if this controller is for an experimental hosted app browser. - bool IsForExperimentalHostedAppBrowser() const; + bool IsForExperimentalHostedAppBrowser() const override; // Whether the browser being controlled should be currently showing the // toolbar. - bool ShouldShowToolbar() const; + bool ShouldShowToolbar() const override; // Returns true if the hosted app buttons should be shown in the frame for // this BrowserView. - bool ShouldShowHostedAppButtonContainer() const; - - // Updates the location bar visibility based on whether it should be - // currently visible or not. If |animate| is set, the change will be - // animated. - void UpdateToolbarVisibility(bool animate) const; + bool ShouldShowHostedAppButtonContainer() const override; // Returns the app icon for the window to use in the task list. - gfx::ImageSkia GetWindowAppIcon() const; + gfx::ImageSkia GetWindowAppIcon() const override; // Returns the icon to be displayed in the window title bar. - gfx::ImageSkia GetWindowIcon() const; + gfx::ImageSkia GetWindowIcon() const override; // Returns the color of the title bar. - base::Optional<SkColor> GetThemeColor() const; + base::Optional<SkColor> GetThemeColor() const override; // Returns the title to be displayed in the window title bar. - base::string16 GetTitle() const; + base::string16 GetTitle() const override; // Gets the short name of the app. - std::string GetAppShortName() const; + std::string GetAppShortName() const override; // Gets the origin of the app start url suitable for display (e.g // example.com.au). - base::string16 GetFormattedUrlOrigin() const; + base::string16 GetFormattedUrlOrigin() const override; // Gets the launch url for the app. - GURL GetAppLaunchURL() const; + GURL GetAppLaunchURL() const override; // Gets the extension for this controller. const Extension* GetExtensionForTesting() const; - bool CanUninstall() const; + bool CanUninstall() const override; - void Uninstall(UninstallReason reason, UninstallSource source); + void Uninstall(UninstallReason reason, UninstallSource source) override; // Returns whether the app is installed (uninstallation may complete within // the lifetime of HostedAppBrowserController). - bool IsInstalled() const; + bool IsInstalled() const override; // TabStripModelObserver overrides. void OnTabStripModelChanged( @@ -115,8 +104,7 @@ const TabStripModelChange& change, const TabStripSelectionChange& selection) override; - // content::WebContentsObserver: - void DidChangeThemeColor(base::Optional<SkColor> theme_color) override; + bool IsHostedApp() const override; private: // Called by OnTabstripModelChanged(). @@ -126,7 +114,6 @@ // Will return nullptr if the extension has been uninstalled. const Extension* GetExtension() const; - Browser* const browser_; const std::string extension_id_; const bool created_for_installed_pwa_; std::unique_ptr<ExtensionUninstallDialog> uninstall_dialog_;
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc index 4be0617..d53a92a 100644 --- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc +++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -162,7 +162,7 @@ bool proceed_through_interstitial = false) { NavigateToURLAndWait(browser, url, proceed_through_interstitial); EXPECT_EQ(expected_visibility, - browser->hosted_app_controller()->ShouldShowToolbar()); + browser->web_app_controller()->ShouldShowToolbar()); } void CheckWebContentsHasAppPrefs(content::WebContents* web_contents) { @@ -240,7 +240,7 @@ }; AppMenuCommandState GetAppMenuCommandState(int command_id, Browser* browser) { - DCHECK(!browser->hosted_app_controller()) + DCHECK(!browser->web_app_controller()) << "This check only applies to regular browser windows."; auto app_menu_model = std::make_unique<AppMenuModel>(nullptr, browser); app_menu_model->Init(); @@ -624,7 +624,7 @@ app_browser_->tab_strip_model()->GetActiveWebContents(); EXPECT_TRUE(TryToLoadImage( web_contents, embedded_test_server()->GetURL("foo.com", kImagePath))); - EXPECT_TRUE(app_browser_->hosted_app_controller()->ShouldShowToolbar()); + EXPECT_TRUE(app_browser_->web_app_controller()->ShouldShowToolbar()); } IN_PROC_BROWSER_TEST_P(HostedAppTest, ShouldShowToolbarForHTTPAppSameOrigin) { @@ -1098,7 +1098,7 @@ NavigateToURLAndWait(app_browser_, GetSecureAppURL()); - ASSERT_TRUE(app_browser_->hosted_app_controller()); + ASSERT_TRUE(app_browser_->web_app_controller()); NavigateAndCheckForToolbar(app_browser_, GURL(kExampleURL), true); } @@ -1120,7 +1120,7 @@ NavigateToURLAndWait(app_browser_, GetSecureAppURL()); - ASSERT_TRUE(app_browser_->hosted_app_controller()); + ASSERT_TRUE(app_browser_->web_app_controller()); TestAppActionOpensForegroundTab( base::BindOnce( @@ -1155,7 +1155,7 @@ InstallSecurePWA(); // Toolbar should not be visible in the app. - ASSERT_FALSE(app_browser_->hosted_app_controller()->ShouldShowToolbar()); + ASSERT_FALSE(app_browser_->web_app_controller()->ShouldShowToolbar()); // The installed PWA's scope is app.com:{PORT}/ssl, // so app.com:{PORT}/accessibility_fail.html is out of scope. @@ -1164,7 +1164,7 @@ NavigateToURLAndWait(app_browser_, out_of_scope); // Location should be visible off scope. - ASSERT_TRUE(app_browser_->hosted_app_controller()->ShouldShowToolbar()); + ASSERT_TRUE(app_browser_->web_app_controller()->ShouldShowToolbar()); } // Tests that PWA menus have an uninstall option. @@ -1309,7 +1309,9 @@ Browser* app_browser = ReparentSecureActiveTabIntoPwaWindow(browser()); - ASSERT_EQ(app_browser->hosted_app_controller()->GetExtensionForTesting(), + ASSERT_EQ(static_cast<extensions::HostedAppBrowserController*>( + app_browser->web_app_controller()) + ->GetExtensionForTesting(), app_); } @@ -1322,7 +1324,9 @@ NavigateToURLAndWait(browser(), GetSecureAppURL()); Browser* app_browser = ReparentSecureActiveTabIntoPwaWindow(browser()); - ASSERT_EQ(app_browser->hosted_app_controller()->GetExtensionForTesting(), + ASSERT_EQ(static_cast<extensions::HostedAppBrowserController*>( + app_browser->web_app_controller()) + ->GetExtensionForTesting(), app_); ASSERT_TRUE(IsBrowserOpen(browser())); @@ -1552,15 +1556,17 @@ feature_list.InitAndDisableFeature(features::kDesktopPWAWindowing); Browser* app_browser = LaunchAppBrowser(app); - EXPECT_FALSE( - app_browser->hosted_app_controller()->created_for_installed_pwa()); + EXPECT_FALSE(static_cast<extensions::HostedAppBrowserController*>( + app_browser->web_app_controller()) + ->CreatedForInstalledPwa()); } IN_PROC_BROWSER_TEST_P(HostedAppTest, CreatedForInstalledPwaForNonPwas) { SetupApp("https_app"); - EXPECT_FALSE( - app_browser_->hosted_app_controller()->created_for_installed_pwa()); + EXPECT_FALSE(static_cast<extensions::HostedAppBrowserController*>( + app_browser_->web_app_controller()) + ->CreatedForInstalledPwa()); } IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, CreatedForInstalledPwaForPwa) { @@ -1571,8 +1577,9 @@ const extensions::Extension* app = InstallBookmarkApp(web_app_info); Browser* app_browser = LaunchAppBrowser(app); - EXPECT_TRUE( - app_browser->hosted_app_controller()->created_for_installed_pwa()); + EXPECT_TRUE(static_cast<extensions::HostedAppBrowserController*>( + app_browser->web_app_controller()) + ->CreatedForInstalledPwa()); } // Check the 'Copy URL' menu button for Hosted App windows. @@ -2727,7 +2734,7 @@ EXPECT_EQ(web_app::GetAppIdFromApplicationName(app_browser->app_name()), app->id()); EXPECT_EQ(SkColorSetA(*web_app_info.theme_color, SK_AlphaOPAQUE), - app_browser->hosted_app_controller()->GetThemeColor()); + app_browser->web_app_controller()->GetThemeColor()); } { WebApplicationInfo web_app_info; @@ -2740,7 +2747,7 @@ EXPECT_EQ(web_app::GetAppIdFromApplicationName(app_browser->app_name()), app->id()); EXPECT_EQ(base::nullopt, - app_browser->hosted_app_controller()->GetThemeColor()); + app_browser->web_app_controller()->GetThemeColor()); } }
diff --git a/chrome/browser/ui/extensions/hosted_app_menu_model.cc b/chrome/browser/ui/extensions/hosted_app_menu_model.cc index 889663b..101d4b7 100644 --- a/chrome/browser/ui/extensions/hosted_app_menu_model.cc +++ b/chrome/browser/ui/extensions/hosted_app_menu_model.cc
@@ -10,7 +10,7 @@ #include "chrome/browser/media/router/media_router_feature.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "components/strings/grit/components_strings.h" @@ -31,12 +31,11 @@ AddItemWithStringId(IDC_HOSTED_APP_MENU_APP_INFO, IDS_APP_CONTEXT_MENU_SHOW_INFO); int app_info_index = GetItemCount() - 1; - SetMinorText(app_info_index, - extensions::HostedAppBrowserController::FormatUrlOrigin( - browser() - ->tab_strip_model() - ->GetActiveWebContents() - ->GetVisibleURL())); + SetMinorText(app_info_index, WebAppBrowserController::FormatUrlOrigin( + browser() + ->tab_strip_model() + ->GetActiveWebContents() + ->GetVisibleURL())); SetMinorIcon(app_info_index, browser()->location_bar_model()->GetVectorIcon()); @@ -47,14 +46,14 @@ // Chrome OS's app list is prominent enough to not need a separate uninstall // option in the app menu. #if !defined(OS_CHROMEOS) - DCHECK(browser()->hosted_app_controller()); - if (browser()->hosted_app_controller()->IsInstalled()) { + DCHECK(browser()->web_app_controller()); + if (browser()->web_app_controller()->IsInstalled()) { AddSeparator(ui::NORMAL_SEPARATOR); AddItem(kUninstallAppCommandId, l10n_util::GetStringFUTF16( IDS_UNINSTALL_FROM_OS_LAUNCH_SURFACE, base::UTF8ToUTF16( - browser()->hosted_app_controller()->GetAppShortName()))); + browser()->web_app_controller()->GetAppShortName()))); } #endif // !defined(OS_CHROMEOS) AddSeparator(ui::LOWER_SEPARATOR); @@ -71,13 +70,13 @@ bool HostedAppMenuModel::IsCommandIdEnabled(int command_id) const { return command_id == kUninstallAppCommandId - ? browser()->hosted_app_controller()->CanUninstall() + ? browser()->web_app_controller()->CanUninstall() : AppMenuModel::IsCommandIdEnabled(command_id); } void HostedAppMenuModel::ExecuteCommand(int command_id, int event_flags) { if (command_id == kUninstallAppCommandId) { - browser()->hosted_app_controller()->Uninstall( + browser()->web_app_controller()->Uninstall( extensions::UNINSTALL_REASON_USER_INITIATED, extensions::UNINSTALL_SOURCE_HOSTED_APP_MENU); } else {
diff --git a/chrome/browser/ui/settings_window_manager_chromeos.cc b/chrome/browser/ui/settings_window_manager_chromeos.cc index b4d67bb..b590a83 100644 --- a/chrome/browser/ui/settings_window_manager_chromeos.cc +++ b/chrome/browser/ui/settings_window_manager_chromeos.cc
@@ -138,9 +138,10 @@ base::Optional<std::string> settings_app_id = web_app::GetAppIdForSystemWebApp(profile, web_app::SystemAppType::SETTINGS); - return settings_app_id && browser->hosted_app_controller() && - browser->hosted_app_controller()->app_id() == - settings_app_id.value(); + return settings_app_id && browser->web_app_controller() && + static_cast<extensions::HostedAppBrowserController*>( + browser->web_app_controller()) + ->GetAppId() == settings_app_id.value(); } else { auto iter = settings_session_map_.find(profile); return iter != settings_session_map_.end() &&
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc index 9b8866b0..c30e271 100644 --- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc +++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
@@ -129,10 +129,10 @@ } else { // The glass should extend to the bottom of the tabstrip. HWND hwnd = GetHWND(); - gfx::Rect tabstrip_bounds( - browser_frame_->GetBoundsForTabStrip(browser_view_->tabstrip())); - tabstrip_bounds = - display::win::ScreenWin::DIPToClientRect(hwnd, tabstrip_bounds); + gfx::Rect tabstrip_region_bounds( + browser_frame_->GetBoundsForTabStripRegion(browser_view_->tabstrip())); + tabstrip_region_bounds = + display::win::ScreenWin::DIPToClientRect(hwnd, tabstrip_region_bounds); // The 2 px (not DIP) at the inner edges of Win 7 glass are a light and dark // line, so we must inset further to account for those. @@ -140,8 +140,8 @@ const int inset = (base::win::GetVersion() < base::win::VERSION_WIN8) ? kWin7GlassInset : 0; - *insets = - gfx::Insets(tabstrip_bounds.bottom() + inset, inset, inset, inset); + *insets = gfx::Insets(tabstrip_region_bounds.bottom() + inset, inset, inset, + inset); } return true; }
diff --git a/chrome/browser/ui/views/frame/browser_frame.cc b/chrome/browser/ui/views/frame/browser_frame.cc index 948c8f8..4bafac5b 100644 --- a/chrome/browser/ui/views/frame/browser_frame.cc +++ b/chrome/browser/ui/views/frame/browser_frame.cc
@@ -120,11 +120,12 @@ return native_browser_frame_->GetMinimizeButtonOffset(); } -gfx::Rect BrowserFrame::GetBoundsForTabStrip( +gfx::Rect BrowserFrame::GetBoundsForTabStripRegion( const views::View* tabstrip) const { // This can be invoked before |browser_frame_view_| has been set. - return browser_frame_view_ ? - browser_frame_view_->GetBoundsForTabStrip(tabstrip) : gfx::Rect(); + return browser_frame_view_ + ? browser_frame_view_->GetBoundsForTabStripRegion(tabstrip) + : gfx::Rect(); } int BrowserFrame::GetTopInset() const { @@ -172,8 +173,8 @@ bool BrowserFrame::ShouldUseTheme() const { // Browser windows are always themed (including popups). - if (!extensions::HostedAppBrowserController:: - IsForExperimentalHostedAppBrowser(browser_view_->browser())) { + if (!WebAppBrowserController::IsForExperimentalHostedAppBrowser( + browser_view_->browser())) { return true; }
diff --git a/chrome/browser/ui/views/frame/browser_frame.h b/chrome/browser/ui/views/frame/browser_frame.h index f56be87c..f77b6b0 100644 --- a/chrome/browser/ui/views/frame/browser_frame.h +++ b/chrome/browser/ui/views/frame/browser_frame.h
@@ -56,9 +56,9 @@ // left edge of the window. Used in our Non-Client View's Layout. int GetMinimizeButtonOffset() const; - // Retrieves the bounds, in non-client view coordinates for the specified - // TabStrip view. - gfx::Rect GetBoundsForTabStrip(const views::View* tabstrip) const; + // Retrieves the bounds in non-client view coordinates for the + // TabStripRegionView that contains the specified TabStrip view. + gfx::Rect GetBoundsForTabStripRegion(const views::View* tabstrip) const; // Returns the inset of the topmost view in the client view from the top of // the non-client view. The topmost view depends on the window type. The
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc index 80018d7..b6663ce8 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
@@ -11,12 +11,12 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/themes/theme_properties.h" -#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/view_ids.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/hosted_app_button_container.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/theme_resources.h" #include "third_party/skia/include/core/SkColor.h" @@ -134,7 +134,7 @@ bool BrowserNonClientFrameView::CanDrawStrokes() const { // Hosted apps should not draw strokes, as they don't have a tab strip. - return !browser_view_->browser()->hosted_app_controller(); + return !browser_view_->browser()->web_app_controller(); } SkColor BrowserNonClientFrameView::GetCaptionColor( @@ -153,10 +153,10 @@ if (frame_->ShouldUseTheme()) return GetThemeProviderForProfile()->GetColor(color_id); - extensions::HostedAppBrowserController* hosted_app_controller = - browser_view_->browser()->hosted_app_controller(); - if (hosted_app_controller && hosted_app_controller->GetThemeColor()) - return *hosted_app_controller->GetThemeColor(); + WebAppBrowserController* web_app_controller = + browser_view_->browser()->web_app_controller(); + if (web_app_controller && web_app_controller->GetThemeColor()) + return *web_app_controller->GetThemeColor(); return ThemeProperties::GetDefaultColor(color_id, browser_view_->IsIncognito());
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h index e5bc48d..27e2b2ee 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
@@ -50,9 +50,10 @@ // left in LTR mode, or the right in RTL mode). virtual bool CaptionButtonsOnLeadingEdge() const; - // Retrieves the bounds, in non-client view coordinates within which the + // Retrieves the bounds in non-client view coordinates within which the // TabStrip should be laid out. - virtual gfx::Rect GetBoundsForTabStrip(const views::View* tabstrip) const = 0; + virtual gfx::Rect GetBoundsForTabStripRegion( + const views::View* tabstrip) const = 0; // Returns the inset of the topmost view in the client view from the top of // the non-client view. The topmost view depends on the window type. The
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc index 9d6684b3..955edaf 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
@@ -229,7 +229,7 @@ /////////////////////////////////////////////////////////////////////////////// // BrowserNonClientFrameView: -gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForTabStrip( +gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForTabStripRegion( const views::View* tabstrip) const { if (!tabstrip) return gfx::Rect(); @@ -309,7 +309,7 @@ // Hosted apps apply a theme color if specified by the extension. Browser* browser = browser_view()->browser(); base::Optional<SkColor> theme_color = - browser->hosted_app_controller()->GetThemeColor(); + browser->web_app_controller()->GetThemeColor(); if (theme_color) active_color = views::FrameCaptionButton::GetButtonColor(*theme_color); @@ -779,7 +779,7 @@ void BrowserNonClientFrameViewAsh::SetUpForHostedApp() { Browser* browser = browser_view()->browser(); - if (!browser->hosted_app_controller()->ShouldShowHostedAppButtonContainer()) + if (!browser->web_app_controller()->ShouldShowHostedAppButtonContainer()) return; // Add the container for extra hosted app buttons (e.g app menu button). @@ -797,7 +797,7 @@ inactive_color = GetFrameColor(kInactive); } else if (browser_view()->IsBrowserTypeHostedApp()) { active_color = - browser_view()->browser()->hosted_app_controller()->GetThemeColor(); + browser_view()->browser()->web_app_controller()->GetThemeColor(); } else if (!browser_view()->browser()->is_app()) { active_color = kMdWebUiFrameColor; }
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h index b115265..d119485 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h
@@ -61,7 +61,8 @@ ash::mojom::SplitViewObserverPtr CreateInterfacePtrForTesting(); // BrowserNonClientFrameView: - gfx::Rect GetBoundsForTabStrip(const views::View* tabstrip) const override; + gfx::Rect GetBoundsForTabStripRegion( + const views::View* tabstrip) const override; int GetTopInset(bool restored) const override; int GetThemeBackgroundXInset() const override; void UpdateThrobber(bool running) override;
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc index aecba76..bd33c401 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
@@ -469,8 +469,8 @@ // Frame paints by default. EXPECT_TRUE(frame_view->ShouldPaint()); - EXPECT_LT( - 0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom()); + EXPECT_LT(0, frame_view->GetBoundsForTabStripRegion(browser_view->tabstrip()) + .bottom()); // Enter both browser fullscreen and tab fullscreen. Entering browser // fullscreen should enable immersive fullscreen. @@ -490,8 +490,8 @@ revealed_lock.reset(); EXPECT_FALSE(immersive_mode_controller->IsRevealed()); EXPECT_FALSE(frame_view->ShouldPaint()); - EXPECT_EQ( - 0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom()); + EXPECT_EQ(0, frame_view->GetBoundsForTabStripRegion(browser_view->tabstrip()) + .bottom()); // Repeat test but without tab fullscreen. ExitFullscreenModeForTabAndWait(browser(), web_contents); @@ -501,23 +501,23 @@ ImmersiveModeController::ANIMATE_REVEAL_NO)); EXPECT_TRUE(immersive_mode_controller->IsRevealed()); EXPECT_TRUE(frame_view->ShouldPaint()); - EXPECT_LT( - 0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom()); + EXPECT_LT(0, frame_view->GetBoundsForTabStripRegion(browser_view->tabstrip()) + .bottom()); // Ending the reveal. Immersive browser should have the same behavior as full // screen, i.e., having an origin of (0,0). revealed_lock.reset(); EXPECT_FALSE(frame_view->ShouldPaint()); - EXPECT_EQ( - 0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom()); + EXPECT_EQ(0, frame_view->GetBoundsForTabStripRegion(browser_view->tabstrip()) + .bottom()); // Exiting immersive fullscreen should make the caption buttons and the frame // visible again. ExitFullscreenModeAndWait(browser_view); EXPECT_FALSE(immersive_mode_controller->IsEnabled()); EXPECT_TRUE(frame_view->ShouldPaint()); - EXPECT_LT( - 0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom()); + EXPECT_LT(0, frame_view->GetBoundsForTabStripRegion(browser_view->tabstrip()) + .bottom()); } // Tests IDC_SELECT_TAB_0, IDC_SELECT_NEXT_TAB, IDC_SELECT_PREVIOUS_TAB and
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h index de58767..05cac09 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h
@@ -27,7 +27,8 @@ // BrowserNonClientFrameView: void OnFullscreenStateChanged() override; bool CaptionButtonsOnLeadingEdge() const override; - gfx::Rect GetBoundsForTabStrip(const views::View* tabstrip) const override; + gfx::Rect GetBoundsForTabStripRegion( + const views::View* tabstrip) const override; int GetTopInset(bool restored) const override; int GetThemeBackgroundXInset() const override; void UpdateFullscreenTopUI(bool needs_check_tab_fullscreen) override;
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm index 740b04a..218b9b8 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
@@ -69,7 +69,7 @@ if (browser_view->IsBrowserTypeHostedApp()) { if (browser_view->browser() - ->hosted_app_controller() + ->web_app_controller() ->ShouldShowHostedAppButtonContainer()) { set_hosted_app_button_container(new HostedAppButtonContainer( frame, browser_view, GetCaptionColor(kActive), @@ -113,7 +113,7 @@ return true; } -gfx::Rect BrowserNonClientFrameViewMac::GetBoundsForTabStrip( +gfx::Rect BrowserNonClientFrameViewMac::GetBoundsForTabStripRegion( const views::View* tabstrip) const { // TODO(weili): In the future, we should hide the title bar, and show the // tab strip directly under the menu bar. For now, just lay our content
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index a306c4c4..70dd35b 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -55,7 +55,6 @@ #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window_state.h" -#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/recently_audible_helper.h" #include "chrome/browser/ui/sad_tab_helper.h" @@ -85,6 +84,7 @@ #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" #include "chrome/browser/ui/views/frame/contents_layout_manager.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" +#include "chrome/browser/ui/views/frame/tab_strip_region_view.h" #include "chrome/browser/ui/views/frame/top_container_view.h" #include "chrome/browser/ui/views/frame/web_contents_close_handler.h" #include "chrome/browser/ui/views/fullscreen_control/fullscreen_control_host.h" @@ -110,6 +110,7 @@ #include "chrome/browser/ui/views/toolbar/toolbar_view.h" #include "chrome/browser/ui/views/translate/translate_bubble_view.h" #include "chrome/browser/ui/views/update_recommended_message_box.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/browser/ui/window_sizer/window_sizer.h" #include "chrome/common/channel_info.h" #include "chrome/common/chrome_features.h" @@ -364,8 +365,8 @@ return browser_view_->IsTabStripVisible(); } - gfx::Rect GetBoundsForTabStripInBrowserView() const override { - gfx::RectF bounds_f(browser_view_->frame()->GetBoundsForTabStrip( + gfx::Rect GetBoundsForTabStripRegionInBrowserView() const override { + gfx::RectF bounds_f(browser_view_->frame()->GetBoundsForTabStripRegion( browser_view_->tabstrip())); views::View::ConvertRectToTarget(browser_view_->parent(), browser_view_, &bounds_f); @@ -620,8 +621,8 @@ } bool BrowserView::IsBrowserTypeHostedApp() const { - return extensions::HostedAppBrowserController:: - IsForExperimentalHostedAppBrowser(browser_.get()); + return WebAppBrowserController::IsForExperimentalHostedAppBrowser( + browser_.get()); } bool BrowserView::IsTopControlsSlideBehaviorEnabled() const { @@ -1993,7 +1994,7 @@ // The logic of this function needs to be same as GetWindowIcon(). if (browser_->is_devtools()) return false; - if (browser_->hosted_app_controller()) + if (browser_->web_app_controller()) return true; #if defined(OS_CHROMEOS) // On ChromeOS, the tabbed browser always use a static image for the window @@ -2021,8 +2022,7 @@ } gfx::ImageSkia BrowserView::GetWindowAppIcon() { - extensions::HostedAppBrowserController* app_controller = - browser()->hosted_app_controller(); + WebAppBrowserController* app_controller = browser()->web_app_controller(); return app_controller ? app_controller->GetWindowAppIcon() : GetWindowIcon(); } @@ -2032,8 +2032,7 @@ return gfx::ImageSkia(); // Hosted apps always show their app icon. - extensions::HostedAppBrowserController* app_controller = - browser()->hosted_app_controller(); + WebAppBrowserController* app_controller = browser()->web_app_controller(); if (app_controller) return app_controller->GetWindowIcon(); @@ -2504,17 +2503,19 @@ LoadAccelerators(); - // Top container holds tab strip and toolbar and lives at the front of the - // view hierarchy. + // Top container holds tab strip region and toolbar and lives at the front of + // the view hierarchy. top_container_ = new TopContainerView(this); AddChildView(top_container_); + tab_strip_region_view_ = new TabStripRegionView(); + top_container_->AddChildView(tab_strip_region_view_); // TabStrip takes ownership of the controller. BrowserTabStripController* tabstrip_controller = new BrowserTabStripController(browser_->tab_strip_model(), this); tabstrip_ = new TabStrip(std::unique_ptr<TabStripController>(tabstrip_controller)); - top_container_->AddChildView(tabstrip_); // Takes ownership. + tab_strip_region_view_->AddChildView(tabstrip_); // Takes ownership. tabstrip_controller->InitFromModel(tabstrip_); toolbar_ = new ToolbarView(browser_.get(), this); @@ -2561,15 +2562,10 @@ immersive_mode_controller_->AddObserver(this); auto browser_view_layout = std::make_unique<BrowserViewLayout>(); - browser_view_layout->Init(new BrowserViewLayoutDelegateImpl(this), - browser(), - this, - top_container_, - tabstrip_, - toolbar_, - infobar_container_, - contents_container_, - immersive_mode_controller_.get()); + browser_view_layout->Init( + new BrowserViewLayoutDelegateImpl(this), browser(), this, top_container_, + tab_strip_region_view_, tabstrip_, toolbar_, infobar_container_, + contents_container_, immersive_mode_controller_.get()); SetLayoutManager(std::move(browser_view_layout)); EnsureFocusOrder();
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index 9cf89c2..4059a9c 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -67,6 +67,7 @@ class PageActionIconContainer; class StatusBubbleViews; class TabStrip; +class TabStripRegionView; class ToolbarButtonProvider; class ToolbarView; class TopContainerView; @@ -723,6 +724,9 @@ // the top views in immersive fullscreen. TopContainerView* top_container_ = nullptr; + // The view that contains the tabstrip, new tab button, and grab handle space. + TabStripRegionView* tab_strip_region_view_ = nullptr; + // The TabStrip. TabStrip* tabstrip_ = nullptr;
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.cc b/chrome/browser/ui/views/frame/browser_view_layout.cc index 2c9f204d1..17cbbae 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout.cc +++ b/chrome/browser/ui/views/frame/browser_view_layout.cc
@@ -146,6 +146,7 @@ Browser* browser, views::ClientView* browser_view, views::View* top_container, + views::View* tab_strip_region_view, TabStrip* tab_strip, views::View* toolbar, InfoBarContainerView* infobar_container, @@ -155,6 +156,7 @@ browser_ = browser; browser_view_ = browser_view; top_container_ = top_container; + tab_strip_region_view_ = tab_strip_region_view; tab_strip_ = tab_strip; toolbar_ = toolbar; infobar_container_ = infobar_container; @@ -388,18 +390,20 @@ int BrowserViewLayout::LayoutTabStripRegion(int top) { if (!delegate_->IsTabStripVisible()) { - tab_strip_->SetVisible(false); - tab_strip_->SetBounds(0, 0, 0, 0); + tab_strip_region_view_->SetVisible(false); + tab_strip_region_view_->SetBounds(0, 0, 0, 0); return top; } // This retrieves the bounds for the tab strip based on whether or not we show // anything to the left of it, like the incognito avatar. - gfx::Rect tabstrip_bounds(delegate_->GetBoundsForTabStripInBrowserView()); + gfx::Rect tab_strip_region_bounds( + delegate_->GetBoundsForTabStripRegionInBrowserView()); - tab_strip_->SetVisible(true); - tab_strip_->SetBoundsRect(tabstrip_bounds); + tab_strip_region_view_->SetVisible(true); + tab_strip_region_view_->SetBoundsRect(tab_strip_region_bounds); - return tabstrip_bounds.bottom() - GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP); + return tab_strip_region_bounds.bottom() - + GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP); } int BrowserViewLayout::LayoutToolbar(int top) {
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.h b/chrome/browser/ui/views/frame/browser_view_layout.h index 5c81be2..f685e57 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout.h +++ b/chrome/browser/ui/views/frame/browser_view_layout.h
@@ -46,6 +46,7 @@ Browser* browser, views::ClientView* browser_view, views::View* top_container, + views::View* tab_strip_region_view, TabStrip* tab_strip, views::View* toolbar, InfoBarContainerView* infobar_container, @@ -130,6 +131,7 @@ // NOTE: If you add a view, try to add it as a views::View, which makes // testing much easier. views::View* top_container_; + views::View* tab_strip_region_view_; TabStrip* tab_strip_; views::View* toolbar_; BookmarkBarView* bookmark_bar_;
diff --git a/chrome/browser/ui/views/frame/browser_view_layout_delegate.h b/chrome/browser/ui/views/frame/browser_view_layout_delegate.h index 82e8b970..386bca99 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout_delegate.h +++ b/chrome/browser/ui/views/frame/browser_view_layout_delegate.h
@@ -22,7 +22,7 @@ virtual views::View* GetContentsWebView() const = 0; virtual bool IsTabStripVisible() const = 0; - virtual gfx::Rect GetBoundsForTabStripInBrowserView() const = 0; + virtual gfx::Rect GetBoundsForTabStripRegionInBrowserView() const = 0; virtual int GetTopInsetInBrowserView() const = 0; virtual int GetThemeBackgroundXInset() const = 0; virtual bool IsToolbarVisible() const = 0;
diff --git a/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc b/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc index 40637a4..9faa2c69 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc +++ b/chrome/browser/ui/views/frame/browser_view_layout_unittest.cc
@@ -9,7 +9,9 @@ #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" #include "chrome/browser/ui/views/frame/contents_layout_manager.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" +#include "chrome/browser/ui/views/frame/tab_strip_region_view.h" #include "chrome/browser/ui/views/infobars/infobar_container_view.h" +#include "chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chrome/browser/ui/views/tabs/tab_strip_controller.h" #include "chrome/test/base/browser_with_test_window_test.h" @@ -45,7 +47,7 @@ return contents_web_view_; } bool IsTabStripVisible() const override { return tab_strip_visible_; } - gfx::Rect GetBoundsForTabStripInBrowserView() const override { + gfx::Rect GetBoundsForTabStripRegionInBrowserView() const override { return gfx::Rect(); } int GetTopInsetInBrowserView() const override { return 0; } @@ -150,8 +152,10 @@ immersive_mode_controller_.reset(new MockImmersiveModeController); top_container_ = CreateFixedSizeView(gfx::Size(800, 60)); - tab_strip_ = new TabStrip(std::unique_ptr<TabStripController>()); - top_container_->AddChildView(tab_strip_); + views::View* tab_strip_region_view = new TabStripRegionView(); + tab_strip_ = new TabStrip(std::make_unique<FakeBaseTabStripController>()); + top_container_->AddChildView(tab_strip_region_view); + tab_strip_region_view->AddChildView(tab_strip_); toolbar_ = CreateFixedSizeView(gfx::Size(800, 30)); top_container_->AddChildView(toolbar_); root_view_->AddChildView(top_container_); @@ -175,14 +179,10 @@ // TODO(jamescook): Attach |layout_| to |root_view_|? layout_.reset(new BrowserViewLayout); delegate_ = new MockBrowserViewLayoutDelegate(contents_web_view_); - layout_->Init(delegate_, - browser(), + layout_->Init(delegate_, browser(), nullptr, // BrowserView. - top_container_, - tab_strip_, - toolbar_, - infobar_container_, - contents_container_, + top_container_, tab_strip_region_view, tab_strip_, toolbar_, + infobar_container_, contents_container_, immersive_mode_controller_.get()); }
diff --git a/chrome/browser/ui/views/frame/browser_view_unittest.cc b/chrome/browser/ui/views/frame/browser_view_unittest.cc index 3639907..595e9d9 100644 --- a/chrome/browser/ui/views/frame/browser_view_unittest.cc +++ b/chrome/browser/ui/views/frame/browser_view_unittest.cc
@@ -33,14 +33,13 @@ namespace { // Tab strip bounds depend on the window frame sizes. -gfx::Point ExpectedTabStripOrigin(BrowserView* browser_view) { - gfx::Rect tabstrip_bounds( - browser_view->frame()->GetBoundsForTabStrip(browser_view->tabstrip())); - gfx::Point tabstrip_origin(tabstrip_bounds.origin()); - views::View::ConvertPointToTarget(browser_view->parent(), - browser_view, - &tabstrip_origin); - return tabstrip_origin; +gfx::Point ExpectedTabStripRegionOrigin(BrowserView* browser_view) { + gfx::Rect tabstrip_bounds(browser_view->frame()->GetBoundsForTabStripRegion( + browser_view->tabstrip())); + gfx::Point tabstrip_region_origin(tabstrip_bounds.origin()); + views::View::ConvertPointToTarget(browser_view->parent(), browser_view, + &tabstrip_region_origin); + return tabstrip_region_origin; } // Helper function to take a printf-style format string and substitute the @@ -80,6 +79,7 @@ Browser* browser = browser_view()->browser(); TopContainerView* top_container = browser_view()->top_container(); TabStrip* tabstrip = browser_view()->tabstrip(); + views::View* tabstrip_region = browser_view()->tabstrip()->parent(); ToolbarView* toolbar = browser_view()->toolbar(); views::View* contents_container = browser_view()->GetContentsContainerForTest(); @@ -91,7 +91,8 @@ AddTab(browser, GURL("about:blank")); // Verify the view hierarchy. - EXPECT_EQ(top_container, browser_view()->tabstrip()->parent()); + EXPECT_EQ(top_container, tabstrip_region->parent()); + EXPECT_EQ(tabstrip_region, tabstrip->parent()); EXPECT_EQ(top_container, browser_view()->toolbar()->parent()); EXPECT_EQ(top_container, browser_view()->GetBookmarkBarView()->parent()); EXPECT_EQ(browser_view(), browser_view()->infobar_container()->parent()); @@ -108,13 +109,14 @@ EXPECT_EQ(0, top_container->y()); EXPECT_EQ(browser_view()->width(), top_container->width()); // Tabstrip layout varies based on window frame sizes. - gfx::Point expected_tabstrip_origin = ExpectedTabStripOrigin(browser_view()); - EXPECT_EQ(expected_tabstrip_origin.x(), tabstrip->x()); - EXPECT_EQ(expected_tabstrip_origin.y(), tabstrip->y()); + gfx::Point expected_tabstrip_region_origin = + ExpectedTabStripRegionOrigin(browser_view()); + EXPECT_EQ(expected_tabstrip_region_origin.x(), tabstrip_region->x()); + EXPECT_EQ(expected_tabstrip_region_origin.y(), tabstrip_region->y()); EXPECT_EQ(0, toolbar->x()); - EXPECT_EQ( - tabstrip->bounds().bottom() - GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP), - toolbar->y()); + EXPECT_EQ(tabstrip_region->bounds().bottom() - + GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP), + toolbar->y()); EXPECT_EQ(0, contents_container->x()); EXPECT_EQ(toolbar->bounds().bottom(), contents_container->y()); EXPECT_EQ(top_container->bounds().bottom(), contents_container->y()); @@ -150,7 +152,7 @@ // Bookmark bar layout on NTP. EXPECT_EQ(0, bookmark_bar->x()); - EXPECT_EQ(tabstrip->bounds().bottom() + toolbar->height() - + EXPECT_EQ(tabstrip_region->bounds().bottom() + toolbar->height() - GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP), bookmark_bar->y()); EXPECT_EQ(bookmark_bar->height() + bookmark_bar->y(),
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc index 4ef41f71..25e86d8 100644 --- a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc +++ b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
@@ -12,7 +12,6 @@ #include "chrome/app/chrome_command_ids.h" #include "chrome/app/chrome_dll_resource.h" #include "chrome/browser/themes/theme_properties.h" -#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" #include "chrome/browser/ui/view_ids.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/hosted_app_button_container.h" @@ -20,6 +19,7 @@ #include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/browser/win/titlebar_config.h" #include "content/public/browser/web_contents.h" #include "skia/ext/image_operations.h" @@ -111,8 +111,8 @@ AddChildView(window_title_); } - extensions::HostedAppBrowserController* controller = - browser_view->browser()->hosted_app_controller(); + WebAppBrowserController* controller = + browser_view->browser()->web_app_controller(); if (controller && controller->ShouldShowHostedAppButtonContainer()) { // TODO(alancutter): Avoid snapshotting GetCaptionColor() values here and // call it on demand in HostedAppButtonContainer::UpdateIconsColor() via a @@ -146,7 +146,7 @@ return !ShouldCustomDrawSystemTitlebar() && base::i18n::IsRTL(); } -gfx::Rect GlassBrowserFrameView::GetBoundsForTabStrip( +gfx::Rect GlassBrowserFrameView::GetBoundsForTabStripRegion( const views::View* tabstrip) const { const int x = CaptionButtonsOnLeadingEdge() ? (width() - frame()->GetMinimizeButtonOffset()) @@ -604,7 +604,7 @@ const int titlebar_height = browser_view()->IsTabStripVisible() - ? GetBoundsForTabStrip(browser_view()->tabstrip()).bottom() + ? GetBoundsForTabStripRegion(browser_view()->tabstrip()).bottom() : TitlebarHeight(false); const gfx::Rect titlebar_rect = gfx::ToEnclosingRect( gfx::RectF(0, y, width() * scale, titlebar_height * scale - y));
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view.h b/chrome/browser/ui/views/frame/glass_browser_frame_view.h index 90eb6b2..0630c64 100644 --- a/chrome/browser/ui/views/frame/glass_browser_frame_view.h +++ b/chrome/browser/ui/views/frame/glass_browser_frame_view.h
@@ -35,7 +35,8 @@ // BrowserNonClientFrameView: bool CaptionButtonsOnLeadingEdge() const override; - gfx::Rect GetBoundsForTabStrip(const views::View* tabstrip) const override; + gfx::Rect GetBoundsForTabStripRegion( + const views::View* tabstrip) const override; int GetTopInset(bool restored) const override; int GetThemeBackgroundXInset() const override; bool HasVisibleBackgroundTabShapes(ActiveState active_state) const override;
diff --git a/chrome/browser/ui/views/frame/hosted_app_button_container.cc b/chrome/browser/ui/views/frame/hosted_app_button_container.cc index d808a89a7..8f1e951 100644 --- a/chrome/browser/ui/views/frame/hosted_app_button_container.cc +++ b/chrome/browser/ui/views/frame/hosted_app_button_container.cc
@@ -184,7 +184,7 @@ inactive_color_(inactive_color) { DCHECK(browser_view_); DCHECK(browser_view_->browser() - ->hosted_app_controller() + ->web_app_controller() ->IsForExperimentalHostedAppBrowser()); set_id(VIEW_ID_HOSTED_APP_BUTTON_CONTAINER);
diff --git a/chrome/browser/ui/views/frame/hosted_app_menu_button.cc b/chrome/browser/ui/views/frame/hosted_app_menu_button.cc index b1b3eb7..9d44e078 100644 --- a/chrome/browser/ui/views/frame/hosted_app_menu_button.cc +++ b/chrome/browser/ui/views/frame/hosted_app_menu_button.cc
@@ -39,7 +39,7 @@ // Get the app name only, aka "Google Docs" instead of "My Doc - Google Docs", // because the menu applies to the entire app. base::string16 app_name = base::UTF8ToUTF16( - browser_view->browser()->hosted_app_controller()->GetAppShortName()); + browser_view->browser()->web_app_controller()->GetAppShortName()); SetAccessibleName(app_name); SetTooltipText( l10n_util::GetStringFUTF16(IDS_HOSTED_APPMENU_TOOLTIP, app_name));
diff --git a/chrome/browser/ui/views/frame/hosted_app_origin_text.cc b/chrome/browser/ui/views/frame/hosted_app_origin_text.cc index 5ecc9f5b..9e3c2ea 100644 --- a/chrome/browser/ui/views/frame/hosted_app_origin_text.cc +++ b/chrome/browser/ui/views/frame/hosted_app_origin_text.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" #include "chrome/browser/ui/views/chrome_typography.h" #include "chrome/browser/ui/views/frame/hosted_app_button_container.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "ui/accessibility/ax_node_data.h" #include "ui/compositor/layer_animation_element.h" #include "ui/compositor/layer_animation_sequence.h" @@ -24,14 +25,12 @@ } // namespace HostedAppOriginText::HostedAppOriginText(Browser* browser) { - DCHECK( - extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser)); + DCHECK(WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser)); SetLayoutManager(std::make_unique<views::FillLayout>()); label_ = std::make_unique<views::Label>( - browser->hosted_app_controller()->GetFormattedUrlOrigin(), + browser->web_app_controller()->GetFormattedUrlOrigin(), ChromeTextContext::CONTEXT_BODY_TEXT_SMALL, ChromeTextStyle::STYLE_EMPHASIZED) .release();
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc index e89d0bf..cad8e71 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -10,7 +10,6 @@ #include "build/build_config.h" #include "build/buildflag.h" #include "chrome/browser/themes/theme_properties.h" -#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/views/frame/browser_frame.h" #include "chrome/browser/ui/views/frame/browser_view.h" @@ -21,6 +20,7 @@ #include "chrome/browser/ui/views/tabs/new_tab_button.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/grit/generated_resources.h" #include "chrome/grit/theme_resources.h" #include "components/strings/grit/components_strings.h" @@ -181,8 +181,8 @@ window_title_->set_id(VIEW_ID_WINDOW_TITLE); AddChildView(window_title_); - extensions::HostedAppBrowserController* controller = - browser_view()->browser()->hosted_app_controller(); + WebAppBrowserController* controller = + browser_view()->browser()->web_app_controller(); if (controller && controller->ShouldShowHostedAppButtonContainer()) { set_hosted_app_button_container(new HostedAppButtonContainer( frame(), browser_view(), GetCaptionColor(kActive), @@ -194,12 +194,13 @@ /////////////////////////////////////////////////////////////////////////////// // OpaqueBrowserFrameView, BrowserNonClientFrameView implementation: -gfx::Rect OpaqueBrowserFrameView::GetBoundsForTabStrip( +gfx::Rect OpaqueBrowserFrameView::GetBoundsForTabStripRegion( const views::View* tabstrip) const { if (!tabstrip) return gfx::Rect(); - return layout_->GetBoundsForTabStrip(tabstrip->GetPreferredSize(), width()); + return layout_->GetBoundsForTabStripRegion(tabstrip->GetPreferredSize(), + width()); } int OpaqueBrowserFrameView::GetTopInset(bool restored) const { @@ -457,9 +458,10 @@ const int non_client_top_height = layout_->NonClientTopHeight(false); if (!browser_view()->IsTabStripVisible()) return non_client_top_height; - return std::max(non_client_top_height, - GetBoundsForTabStrip(browser_view()->tabstrip()).bottom() - - GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP)); + return std::max( + non_client_top_height, + GetBoundsForTabStripRegion(browser_view()->tabstrip()).bottom() - + GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP)); } bool OpaqueBrowserFrameView::UseCustomFrame() const {
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.h b/chrome/browser/ui/views/frame/opaque_browser_frame_view.h index 9fa5c90..dd0b91ad 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.h +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.h
@@ -58,7 +58,8 @@ void InitViews(); // BrowserNonClientFrameView: - gfx::Rect GetBoundsForTabStrip(const views::View* tabstrip) const override; + gfx::Rect GetBoundsForTabStripRegion( + const views::View* tabstrip) const override; int GetTopInset(bool restored) const override; int GetThemeBackgroundXInset() const override; void UpdateThrobber(bool running) override;
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc index 508cb2e..519f949 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc
@@ -85,7 +85,7 @@ trailing_buttons_ = trailing_buttons; } -gfx::Rect OpaqueBrowserFrameViewLayout::GetBoundsForTabStrip( +gfx::Rect OpaqueBrowserFrameViewLayout::GetBoundsForTabStripRegion( const gfx::Size& tabstrip_preferred_size, int total_width) const { const int x = available_space_leading_x_;
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h index 1e678ff0c..a95f154 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h
@@ -52,8 +52,8 @@ const std::vector<views::FrameButton>& leading_buttons, const std::vector<views::FrameButton>& trailing_buttons); - gfx::Rect GetBoundsForTabStrip(const gfx::Size& tabstrip_preferred_size, - int total_width) const; + gfx::Rect GetBoundsForTabStripRegion(const gfx::Size& tabstrip_preferred_size, + int total_width) const; // Returns the bounds of the window required to display the content area at // the specified bounds.
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc index 78b23af..0951d2a 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc
@@ -245,17 +245,18 @@ tabstrip_x += OpaqueBrowserFrameViewLayout::kFrameBorderThickness; } gfx::Size tabstrip_min_size(delegate_->GetTabstripPreferredSize()); - gfx::Rect tabstrip_bounds( - layout_manager_->GetBoundsForTabStrip(tabstrip_min_size, kWindowWidth)); - EXPECT_EQ(tabstrip_x, tabstrip_bounds.x()); + gfx::Rect tabstrip_region_bounds( + layout_manager_->GetBoundsForTabStripRegion(tabstrip_min_size, + kWindowWidth)); + EXPECT_EQ(tabstrip_x, tabstrip_region_bounds.x()); if (maximized) { - EXPECT_EQ(0, tabstrip_bounds.y()); + EXPECT_EQ(0, tabstrip_region_bounds.y()); } else { const int tabstrip_nonexcluded_y = OpaqueBrowserFrameViewLayout::kFrameBorderThickness + layout_manager_->GetNonClientRestoredExtraThickness() + OpaqueBrowserFrameViewLayout::kNonClientExtraTopThickness; - EXPECT_LE(tabstrip_bounds.y(), tabstrip_nonexcluded_y); + EXPECT_LE(tabstrip_region_bounds.y(), tabstrip_nonexcluded_y); } const bool showing_caption_buttons_on_right = show_caption_buttons && !caption_buttons_on_left; @@ -267,8 +268,8 @@ int spacing = maximized ? maximized_spacing : restored_spacing; const int tabstrip_width = kWindowWidth - tabstrip_x - caption_width - spacing; - EXPECT_EQ(tabstrip_width, tabstrip_bounds.width()); - EXPECT_EQ(tabstrip_min_size.height(), tabstrip_bounds.height()); + EXPECT_EQ(tabstrip_width, tabstrip_region_bounds.width()); + EXPECT_EQ(tabstrip_min_size.height(), tabstrip_region_bounds.height()); gfx::Size browser_view_min_size(delegate_->GetBrowserViewMinimumSize()); // The tabs and window control buttons (if present) sit above the toolstrip @@ -276,8 +277,9 @@ // is the tabstrip, so we should be able to find the minimum width of this // region by subtracting out the difference between the current tab strip // width and the minimum tab strip width. - const int top_bar_minimum_width = - kWindowWidth - tabstrip_bounds.width() + tabstrip_min_size.width(); + const int top_bar_minimum_width = kWindowWidth - + tabstrip_region_bounds.width() + + tabstrip_min_size.width(); // The minimum window width is then the minimum overall browser contents // or the minimum tab strip/control buttons size, whichever is larger, plus // the frame width.
diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view.cc b/chrome/browser/ui/views/frame/tab_strip_region_view.cc new file mode 100644 index 0000000..48a81b0 --- /dev/null +++ b/chrome/browser/ui/views/frame/tab_strip_region_view.cc
@@ -0,0 +1,27 @@ +// Copyright 2019 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 "chrome/browser/ui/views/frame/tab_strip_region_view.h" + +#include "ui/views/layout/flex_layout.h" + +TabStripRegionView::TabStripRegionView() { + views::FlexLayout* layout_manager = + SetLayoutManager(std::make_unique<views::FlexLayout>()); + + layout_manager->SetOrientation(views::LayoutOrientation::kHorizontal) + .SetDefaultFlex(views::FlexSpecification::ForSizeRule( + views::MinimumFlexSizeRule::kScaleToZero, + views::MaximumFlexSizeRule::kUnbounded)); +} + +TabStripRegionView::~TabStripRegionView() {} + +const char* TabStripRegionView::GetClassName() const { + return "TabStripRegionView"; +} + +void TabStripRegionView::ChildPreferredSizeChanged(views::View* child) { + PreferredSizeChanged(); +}
diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view.h b/chrome/browser/ui/views/frame/tab_strip_region_view.h new file mode 100644 index 0000000..169966ea --- /dev/null +++ b/chrome/browser/ui/views/frame/tab_strip_region_view.h
@@ -0,0 +1,25 @@ +// Copyright 2019 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. + +#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_TAB_STRIP_REGION_VIEW_H_ +#define CHROME_BROWSER_UI_VIEWS_FRAME_TAB_STRIP_REGION_VIEW_H_ + +#include "ui/views/view.h" + +// Container for the tabstrip, new tab button, and reserved grab handle space. +// TODO (https://crbug.com/949660) Under construction. +class TabStripRegionView final : public views::View { + public: + TabStripRegionView(); + ~TabStripRegionView() override; + + // views::View overrides: + const char* GetClassName() const override; + void ChildPreferredSizeChanged(views::View* child) override; + + private: + DISALLOW_COPY_AND_ASSIGN(TabStripRegionView); +}; + +#endif // CHROME_BROWSER_UI_VIEWS_FRAME_TAB_STRIP_REGION_VIEW_H_
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc index 4d2bba9..12244b7 100644 --- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc +++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc
@@ -162,7 +162,7 @@ tab_strip_model_observer_(this) { Browser* browser = browser_view->browser(); base::Optional<SkColor> optional_theme_color = - browser->hosted_app_controller()->GetThemeColor(); + browser->web_app_controller()->GetThemeColor(); // If we have a theme color, use that, otherwise fall back to the default // frame color. @@ -231,7 +231,7 @@ // scope (it doesn't make sense to show a 'back-to-scope' button in scope). close_button_->SetVisible(!extensions::IsSameScope( chrome::FindBrowserWithWebContents(contents) - ->hosted_app_controller() + ->web_app_controller() ->GetAppLaunchURL(), contents->GetVisibleURL(), contents->GetBrowserContext())); @@ -339,7 +339,7 @@ void CustomTabBarView::GoBackToApp() { content::WebContents* web_contents = GetWebContents(); Browser* browser = chrome::FindBrowserWithWebContents(web_contents); - GURL launch_url = browser->hosted_app_controller()->GetAppLaunchURL(); + GURL launch_url = browser->web_app_controller()->GetAppLaunchURL(); content::NavigationController& controller = web_contents->GetController(); content::BrowserContext* context = web_contents->GetBrowserContext();
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc index a71947c..82ff8a5 100644 --- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc +++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
@@ -6,9 +6,9 @@ #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/ssl/chrome_mock_cert_verifier.h" #include "chrome/browser/ui/browser_finder.h" -#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/toolbar/toolbar_view.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/web_application_info.h" @@ -172,7 +172,7 @@ BrowserView* browser_view_; LocationBarView* location_bar_; CustomTabBarView* custom_tab_bar_; - extensions::HostedAppBrowserController* hosted_app_controller_; + WebAppBrowserController* web_app_controller_; net::EmbeddedTestServer* https_server() { return &https_server_; } @@ -188,8 +188,8 @@ DCHECK(app_browser_); DCHECK(app_browser_ != browser()); - hosted_app_controller_ = app_browser_->hosted_app_controller(); - DCHECK(hosted_app_controller_); + web_app_controller_ = app_browser_->web_app_controller(); + DCHECK(web_app_controller_); } base::test::ScopedFeatureList scoped_feature_list_; @@ -312,11 +312,11 @@ const GURL& other_app_url = https_server()->GetURL("app.com", "/ssl/blank_page.html"); NavigateAndWait(web_contents, other_app_url); - EXPECT_FALSE(hosted_app_controller_->ShouldShowToolbar()); + EXPECT_FALSE(web_app_controller_->ShouldShowToolbar()); // Navigate out of scope. NavigateAndWait(web_contents, GURL("http://example.test/")); - EXPECT_TRUE(hosted_app_controller_->ShouldShowToolbar()); + EXPECT_TRUE(web_app_controller_->ShouldShowToolbar()); // Simulate clicking the close button and wait for navigation to finish. content::TestNavigationObserver nav_observer(web_contents); @@ -347,12 +347,12 @@ const GURL& other_app_url = https_server()->GetURL("app.com", "/ssl/blank_page.html"); NavigateAndWait(web_contents, other_app_url); - EXPECT_FALSE(hosted_app_controller_->ShouldShowToolbar()); + EXPECT_FALSE(web_app_controller_->ShouldShowToolbar()); // Navigate above the scope of the app, on the same origin. NavigateAndWait(web_contents, https_server()->GetURL( "app.com", "/accessibility_fail.html")); - EXPECT_TRUE(hosted_app_controller_->ShouldShowToolbar()); + EXPECT_TRUE(web_app_controller_->ShouldShowToolbar()); // Simulate clicking the close button and wait for navigation to finish. content::TestNavigationObserver nav_observer(web_contents); @@ -386,7 +386,7 @@ EXPECT_TRUE(content::ExecuteScript( web_contents, "window.location.replace('http://example.com');")); nav_observer.Wait(); - EXPECT_TRUE(hosted_app_controller_->ShouldShowToolbar()); + EXPECT_TRUE(web_app_controller_->ShouldShowToolbar()); } { // Simulate clicking the close button and wait for navigation to finish.
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc index 93ec4cb..b57bbc4 100644 --- a/chrome/browser/ui/views/location_bar/location_bar_view.cc +++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -57,6 +57,7 @@ #include "chrome/browser/ui/views/page_action/page_action_icon_container_view.h" #include "chrome/browser/ui/views/page_info/page_info_bubble_view.h" #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" @@ -841,8 +842,7 @@ } bool LocationBarView::RefreshContentSettingViews() { - if (extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser_)) { + if (WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser_)) { // For hosted apps, the location bar is normally hidden and icons appear in // the window frame instead. GetWidget()->non_client_view()->ResetWindowControls(); @@ -859,8 +859,7 @@ } void LocationBarView::RefreshPageActionIconViews() { - if (extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser_)) { + if (WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser_)) { // For hosted apps, the location bar is normally hidden and icons appear in // the window frame instead. GetWidget()->non_client_view()->ResetWindowControls();
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc index e3a1f6a..b5debd2 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -64,7 +64,7 @@ keyword_view_->icon()->SizeToPreferredSize(); if (base::FeatureList::IsEnabled( - omnibox::kOmniboxContextMenuForSuggestions)) { + omnibox::kOmniboxSuggestionTransparencyOptions)) { // TODO(tommycli): Replace this with the real translated string from UX. context_menu_contents_.AddItem(COMMAND_REMOVE_SUGGESTION, base::ASCIIToUTF16("Remove suggestion..."));
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc index c54d2592..2b7f5550 100644 --- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc +++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -26,6 +26,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" #include "chrome/browser/ui/sync/sync_promo_ui.h" #include "chrome/browser/ui/views/accessibility/non_accessible_image_view.h" @@ -47,6 +48,7 @@ #include "services/identity/public/cpp/primary_account_mutator.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/image/image_skia_operations.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/button/md_text_button.h" @@ -82,6 +84,13 @@ return BadgedProfilePhoto::BADGE_TYPE_NONE; } +void NavigateToGoogleAccountPage(Profile* profile) { + NavigateParams params(profile, GURL(chrome::kGoogleAccountURL), + ui::PAGE_TRANSITION_LINK); + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; + Navigate(¶ms); +} + } // namespace // ProfileChooserView --------------------------------------------------------- @@ -125,6 +134,7 @@ credit_cards_button_ = nullptr; addresses_button_ = nullptr; signout_button_ = nullptr; + manage_google_account_button_ = nullptr; } void ProfileChooserView::Init() { @@ -232,7 +242,9 @@ void ProfileChooserView::ButtonPressed(views::Button* sender, const ui::Event& event) { - if (sender == passwords_button_) { + if (sender == manage_google_account_button_) { + NavigateToGoogleAccountPage(browser()->profile()); + } else if (sender == passwords_button_) { base::RecordAction( base::UserMetricsAction("ProfileChooser_PasswordsClicked")); NavigateToManagePasswordsPage( @@ -371,15 +383,17 @@ AddGuestProfileView(); } +#if defined(GOOGLE_CHROME_BUILD) + if (dice_enabled_ && active_item->signed_in) { + AddManageGoogleAccountButton(); + } +#endif + if (browser()->profile()->IsSupervised()) AddSupervisedUserDisclaimerView(); - // If the user is signed in, then the autofill data is a part of the - // account logically. Otherwise, add as a new group. - if (active_item) { - const bool add_as_new_group = !active_item->signed_in || sync_error; - AddAutofillHomeView(add_as_new_group); - } + if (active_item) + AddAutofillHomeView(); const bool display_lock = active_item && active_item->signed_in && profiles::IsLockAvailable(browser()->profile()); @@ -832,7 +846,7 @@ AddMenuItems(menu_items, true); } -void ProfileChooserView::AddAutofillHomeView(bool as_new_group) { +void ProfileChooserView::AddAutofillHomeView() { if (browser()->profile()->IsGuestSession()) return; @@ -859,9 +873,33 @@ addresses_button_ = button.get(); menu_items.push_back(std::move(button)); - AddMenuItems(menu_items, as_new_group); + AddMenuItems(menu_items, /*new_group=*/true); } +#if defined(GOOGLE_CHROME_BUILD) +void ProfileChooserView::AddManageGoogleAccountButton() { + ProfileMenuViewBase::MenuItems menu_items; + + SkColor icon_color = + ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor( + ui::NativeTheme::kColorId_DefaultIconColor); + // |CreateVectorIcon()| doesn't override colors specified in the .icon file, + // therefore the image has to be colored manually with |CreateColorMask()|. + gfx::ImageSkia google_logo = gfx::CreateVectorIcon( + kGoogleGLogoIcon, GetDefaultIconSize(), gfx::kPlaceholderColor); + gfx::ImageSkia grey_google_logo = + gfx::ImageSkiaOperations::CreateColorMask(google_logo, icon_color); + + std::unique_ptr<HoverButton> button = std::make_unique<HoverButton>( + this, grey_google_logo, + l10n_util::GetStringUTF16(IDS_SETTINGS_MANAGE_GOOGLE_ACCOUNT)); + manage_google_account_button_ = button.get(); + menu_items.push_back(std::move(button)); + + AddMenuItems(menu_items, /*new_group=*/false); +} +#endif + void ProfileChooserView::PostActionPerformed( ProfileMetrics::ProfileDesktopMenu action_performed) { ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_);
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.h b/chrome/browser/ui/views/profiles/profile_chooser_view.h index 62aee0b..52be09c 100644 --- a/chrome/browser/ui/views/profiles/profile_chooser_view.h +++ b/chrome/browser/ui/views/profiles/profile_chooser_view.h
@@ -99,8 +99,10 @@ void AddGuestProfileView(); void AddOptionsView(bool display_lock, AvatarMenu* avatar_menu); void AddSupervisedUserDisclaimerView(); - // If |as_new_group| is true, a separator will be added before this view. - void AddAutofillHomeView(bool as_new_group); + void AddAutofillHomeView(); +#if defined(GOOGLE_CHROME_BUILD) + void AddManageGoogleAccountButton(); +#endif // Adds the DICE UI view to sign in and turn on sync. It includes an // illustration, a promo and a button. @@ -157,6 +159,7 @@ views::LabelButton* credit_cards_button_; views::LabelButton* addresses_button_; views::LabelButton* signout_button_; + views::LabelButton* manage_google_account_button_; // View for the signin/turn-on-sync button in the dice promo. DiceSigninButtonView* dice_signin_button_view_;
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc index db66b21..7f99416 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
@@ -1488,10 +1488,11 @@ // tabstrip. const BrowserView* const browser_view2 = BrowserView::GetBrowserViewForBrowser(browser2); - const gfx::Rect tabstrip2_bounds = - browser_view2->frame()->GetBoundsForTabStrip(browser_view2->tabstrip()); + const gfx::Rect tabstrip_region2_bounds = + browser_view2->frame()->GetBoundsForTabStripRegion( + browser_view2->tabstrip()); gfx::Rect bounds = initial_bounds; - bounds.Offset(0, tabstrip2_bounds.bottom()); + bounds.Offset(0, tabstrip_region2_bounds.bottom()); browser()->window()->SetBounds(bounds); // Ensure the first browser is on top so clicks go to it.
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc index 3d740c7..c908bae7 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -48,6 +48,7 @@ #include "chrome/browser/ui/views/toolbar/reload_button.h" #include "chrome/browser/ui/views/toolbar/toolbar_button.h" #include "chrome/browser/ui/views/toolbar/toolbar_page_action_icon_container_view.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "chrome/browser/upgrade_detector/upgrade_detector.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" @@ -104,9 +105,8 @@ if (browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP)) return ToolbarView::DisplayMode::NORMAL; - if (browser->hosted_app_controller() && - extensions::HostedAppBrowserController::IsForExperimentalHostedAppBrowser( - browser) && + if (browser->web_app_controller() && + WebAppBrowserController::IsForExperimentalHostedAppBrowser(browser) && base::FeatureList::IsEnabled(features::kDesktopPWAsCustomTabUI)) return ToolbarView::DisplayMode::CUSTOM_TAB;
diff --git a/chrome/browser/ui/web_app_browser_controller.cc b/chrome/browser/ui/web_app_browser_controller.cc new file mode 100644 index 0000000..7c2829e3 --- /dev/null +++ b/chrome/browser/ui/web_app_browser_controller.cc
@@ -0,0 +1,95 @@ +// Copyright 2015 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 "chrome/browser/ui/web_app_browser_controller.h" +#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" + +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/extensions/extension_util.h" +#include "chrome/browser/extensions/tab_helper.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ssl/security_state_tab_helper.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/location_bar/location_bar.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/common/chrome_features.h" +#include "chrome/common/extensions/api/url_handlers/url_handlers_parser.h" +#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" +#include "chrome/common/extensions/manifest_handlers/app_theme_color_info.h" +#include "components/security_state/core/security_state.h" +#include "components/url_formatter/url_formatter.h" +#include "content/public/browser/browser_context.h" +#include "content/public/browser/navigation_entry.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/url_constants.h" +#include "content/public/common/web_preferences.h" +#include "extensions/browser/extension_registry.h" +#include "extensions/browser/extension_system.h" +#include "extensions/browser/management_policy.h" +#include "extensions/common/constants.h" +#include "extensions/common/extension.h" +#include "third_party/blink/public/mojom/renderer_preferences.mojom.h" +#include "ui/gfx/favicon_size.h" +#include "ui/gfx/image/image_skia.h" +#include "url/gurl.h" + +// static +bool WebAppBrowserController::IsForExperimentalHostedAppBrowser( + const Browser* browser) { + return browser && browser->web_app_controller() && + browser->web_app_controller()->IsForExperimentalHostedAppBrowser(); +} + +// static +base::string16 WebAppBrowserController::FormatUrlOrigin(const GURL& url) { + return url_formatter::FormatUrl( + url.GetOrigin(), + url_formatter::kFormatUrlOmitUsernamePassword | + url_formatter::kFormatUrlOmitHTTPS | + url_formatter::kFormatUrlOmitHTTP | + url_formatter::kFormatUrlOmitTrailingSlashOnBareHostname | + url_formatter::kFormatUrlOmitTrivialSubdomains, + net::UnescapeRule::SPACES, nullptr, nullptr, nullptr); +} + +WebAppBrowserController::WebAppBrowserController(Browser* browser) + : content::WebContentsObserver(nullptr), browser_(browser) {} + +WebAppBrowserController::~WebAppBrowserController() { + return; +} + +bool WebAppBrowserController::CreatedForInstalledPwa() const { + return false; +} + +bool WebAppBrowserController::IsInstalled() const { + return false; +} + +bool WebAppBrowserController::IsHostedApp() const { + return false; +} + +bool WebAppBrowserController::CanUninstall() const { + return false; +} + +void WebAppBrowserController::Uninstall(extensions::UninstallReason reason, + extensions::UninstallSource source) { + NOTREACHED(); + return; +} + +void WebAppBrowserController::UpdateToolbarVisibility(bool animate) const { + browser()->window()->UpdateToolbarVisibility(ShouldShowToolbar(), animate); +} + +void WebAppBrowserController::DidChangeThemeColor( + base::Optional<SkColor> theme_color) { + browser_->window()->UpdateFrameColor(); +}
diff --git a/chrome/browser/ui/web_app_browser_controller.h b/chrome/browser/ui/web_app_browser_controller.h new file mode 100644 index 0000000..8150954 --- /dev/null +++ b/chrome/browser/ui/web_app_browser_controller.h
@@ -0,0 +1,107 @@ +// Copyright 2019 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. + +#ifndef CHROME_BROWSER_UI_WEB_APP_BROWSER_CONTROLLER_H_ +#define CHROME_BROWSER_UI_WEB_APP_BROWSER_CONTROLLER_H_ + +#include <string> + +#include "base/macros.h" +#include "base/optional.h" +#include "base/strings/string16.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" +#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" +#include "chrome/browser/ui/web_app_browser_controller.h" +#include "content/public/browser/web_contents_observer.h" +#include "third_party/skia/include/core/SkColor.h" + +class Browser; + +namespace gfx { +class ImageSkia; +} + +// Class to encapsulate logic to control the browser UI for web apps. +class WebAppBrowserController : public content::WebContentsObserver { + public: + ~WebAppBrowserController() override; + + // Returns whether |browser| uses the experimental hosted app experience. + // Convenience wrapper for checking IsForExperimentalHostedAppBrowser() on + // |browser|'s HostedAppBrowserController if it exists. + static bool IsForExperimentalHostedAppBrowser(const Browser* browser); + + // Renders |url|'s origin as Unicode. + static base::string16 FormatUrlOrigin(const GURL& url); + + // Returns true if this controller is for an experimental hosted app browser. + virtual bool IsForExperimentalHostedAppBrowser() const = 0; + + // Returns whether this controller was created for an installed PWA. + virtual bool IsHostedApp() const; + + virtual base::Optional<std::string> GetAppId() const = 0; + + // Returns true if the associated Hosted App is for a PWA. + virtual bool CreatedForInstalledPwa() const; + + // Whether the browser being controlled should be currently showing the + // toolbar. + virtual bool ShouldShowToolbar() const = 0; + + // Returns true if the hosted app buttons should be shown in the frame for + // this BrowserView. + virtual bool ShouldShowHostedAppButtonContainer() const = 0; + + // Returns the app icon for the window to use in the task list. + virtual gfx::ImageSkia GetWindowAppIcon() const = 0; + + // Returns the icon to be displayed in the window title bar. + virtual gfx::ImageSkia GetWindowIcon() const = 0; + + // Returns the color of the title bar. + virtual base::Optional<SkColor> GetThemeColor() const = 0; + + // Returns the title to be displayed in the window title bar. + virtual base::string16 GetTitle() const = 0; + + // Gets the short name of the app. + virtual std::string GetAppShortName() const = 0; + + // Gets the origin of the app start url suitable for display (e.g + // example.com.au). + virtual base::string16 GetFormattedUrlOrigin() const = 0; + + // Gets the launch url for the app. + virtual GURL GetAppLaunchURL() const = 0; + + virtual bool CanUninstall() const; + + virtual void Uninstall(extensions::UninstallReason reason, + extensions::UninstallSource source); + + // Returns whether the app is installed (uninstallation may complete within + // the lifetime of HostedAppBrowserController). + virtual bool IsInstalled() const; + + // Updates the location bar visibility based on whether it should be + // currently visible or not. If |animate| is set, the change will be + // animated. + void UpdateToolbarVisibility(bool animate) const; + + Browser* browser() const { return browser_; } + + // content::WebContentsObserver: + void DidChangeThemeColor(base::Optional<SkColor> theme_color) override; + + protected: + explicit WebAppBrowserController(Browser* browser); + + private: + Browser* const browser_; + + DISALLOW_COPY_AND_ASSIGN(WebAppBrowserController); +}; + +#endif // CHROME_BROWSER_UI_WEB_APP_BROWSER_CONTROLLER_H_
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller_unittest.cc b/chrome/browser/ui/web_app_browser_controller_unittest.cc similarity index 84% rename from chrome/browser/ui/extensions/hosted_app_browser_controller_unittest.cc rename to chrome/browser/ui/web_app_browser_controller_unittest.cc index 339c634..3698a2e4 100644 --- a/chrome/browser/ui/extensions/hosted_app_browser_controller_unittest.cc +++ b/chrome/browser/ui/web_app_browser_controller_unittest.cc
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" +#include "chrome/browser/ui/web_app_browser_controller.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" // Tests that various URLs get formatted as an origin string in the desired way. -TEST(HostedAppBrowserController, FormatUrlOrigin) { +TEST(WebAppBrowserController, FormatUrlOrigin) { constexpr struct { const char* const input; const wchar_t* const expectation; @@ -29,8 +29,7 @@ {"https://xn--36c-tfa.com", L"xn--36c-tfa.com"}, }; for (auto test_case : kTestCases) { - EXPECT_EQ(extensions::HostedAppBrowserController::FormatUrlOrigin( - GURL(test_case.input)), + EXPECT_EQ(WebAppBrowserController::FormatUrlOrigin(GURL(test_case.input)), base::WideToUTF16(test_case.expectation)); } }
diff --git a/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc b/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc index 76399f9..0a6f876 100644 --- a/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc +++ b/chrome/browser/ui/web_applications/bookmark_app_browsertest.cc
@@ -261,7 +261,7 @@ InstallBookmarkAppAndCountApps(web_app_info); Browser* browser = LaunchBrowserForAppInTab(app); - EXPECT_FALSE(browser->hosted_app_controller()); + EXPECT_FALSE(browser->web_app_controller()); NavigateToURLAndWait(browser, example_url); Histograms histograms; @@ -292,7 +292,7 @@ EXPECT_EQ(web_app::GetAppIdFromApplicationName(browser->app_name()), app->id()); - EXPECT_TRUE(browser->hosted_app_controller()); + EXPECT_TRUE(browser->web_app_controller()); NavigateToURLAndWait(browser, example_url); Histograms histograms; @@ -433,7 +433,7 @@ InstallBookmarkAppAndCountApps(web_app_info); Browser* browser = LaunchBrowserForAppInTab(app); - EXPECT_FALSE(browser->hosted_app_controller()); + EXPECT_FALSE(browser->web_app_controller()); NavigateToURLAndWait(browser, app_url); {
diff --git a/chrome/browser/ui/web_applications/web_app_metrics.cc b/chrome/browser/ui/web_applications/web_app_metrics.cc index fc7577bd..a2605c3 100644 --- a/chrome/browser/ui/web_applications/web_app_metrics.cc +++ b/chrome/browser/ui/web_applications/web_app_metrics.cc
@@ -102,7 +102,7 @@ return; // No HostedAppBrowserController if app is running as a tab in common browser. - const bool in_window = !!browser->hosted_app_controller(); + const bool in_window = !!browser->web_app_controller(); const bool from_install_button = tab_helper->IsFromInstallButton(); const bool user_installed = tab_helper->IsUserInstalled();
diff --git a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc index 40a07e8..0e68320 100644 --- a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc +++ b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.cc
@@ -141,25 +141,22 @@ public: explicit CrasAudioObserver(DeviceEmulatorMessageHandler* owner) : owner_(owner) { - owner_->fake_cras_audio_client_->AddObserver(this); + chromeos::FakeCrasAudioClient::Get()->AddObserver(this); } ~CrasAudioObserver() override { - owner_->fake_cras_audio_client_->RemoveObserver(this); + chromeos::FakeCrasAudioClient::Get()->RemoveObserver(this); } // chromeos::CrasAudioClient::Observer. - void NodesChanged() override; + void NodesChanged() override { owner_->HandleRequestAudioNodes(nullptr); } private: DeviceEmulatorMessageHandler* owner_; + DISALLOW_COPY_AND_ASSIGN(CrasAudioObserver); }; -void DeviceEmulatorMessageHandler::CrasAudioObserver::NodesChanged() { - owner_->HandleRequestAudioNodes(nullptr); -} - class DeviceEmulatorMessageHandler::PowerObserver : public PowerManagerClient::Observer { public: @@ -201,8 +198,6 @@ : fake_bluetooth_device_client_( static_cast<bluez::FakeBluetoothDeviceClient*>( bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient())), - fake_cras_audio_client_(static_cast<chromeos::FakeCrasAudioClient*>( - chromeos::DBusThreadManager::Get()->GetCrasAudioClient())), fake_power_manager_client_(chromeos::FakePowerManagerClient::Get()), weak_ptr_factory_(this) { device::BluetoothAdapterFactory::GetAdapter( @@ -307,7 +302,8 @@ // Get every active audio node and create a dictionary to // send it to JavaScript. base::ListValue audio_nodes; - for (const AudioNode& node : fake_cras_audio_client_->node_list()) { + for (const AudioNode& node : + chromeos::FakeCrasAudioClient::Get()->node_list()) { std::unique_ptr<base::DictionaryValue> audio_node( new base::DictionaryValue()); @@ -339,7 +335,7 @@ CHECK(device_dict->GetString("id", &tmp_id)); CHECK(base::StringToUint64(tmp_id, &audio_node.id)); - fake_cras_audio_client_->InsertAudioNodeToList(audio_node); + chromeos::FakeCrasAudioClient::Get()->InsertAudioNodeToList(audio_node); } void DeviceEmulatorMessageHandler::HandleRemoveAudioNode( @@ -349,7 +345,7 @@ CHECK(args->GetString(0, &tmp_id)); CHECK(base::StringToUint64(tmp_id, &id)); - fake_cras_audio_client_->RemoveAudioNodeFromList(id); + chromeos::FakeCrasAudioClient::Get()->RemoveAudioNodeFromList(id); } void DeviceEmulatorMessageHandler::HandleSetHasTouchpad(
diff --git a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.h b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.h index 3f77fc4..0aca35b 100644 --- a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.h +++ b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_message_handler.h
@@ -30,7 +30,6 @@ namespace chromeos { -class FakeCrasAudioClient; class FakePowerManagerClient; // Handler class for the Device Emulator page operations. @@ -70,11 +69,11 @@ // that there can be multiple current active nodes. void HandleRequestAudioNodes(const base::ListValue* args); - // Create a node and add the node to the current AudioNodeList in - // |fake_cras_audio_client_|. + // Create a node and add the node to the current AudioNodeList in the + // FakeCrasAudioClient. void HandleInsertAudioNode(const base::ListValue* args); - // Removes an AudioNode from the current list in |fake_cras_audio_client_|. + // Removes an AudioNode from the current list in the FakeCrasAudioClient // based on the node id. void HandleRemoveAudioNode(const base::ListValue* args); @@ -131,7 +130,6 @@ bluez::FakeBluetoothDeviceClient* fake_bluetooth_device_client_; std::unique_ptr<BluetoothObserver> bluetooth_observer_; - FakeCrasAudioClient* fake_cras_audio_client_; std::unique_ptr<CrasAudioObserver> cras_audio_observer_; FakePowerManagerClient* fake_power_manager_client_;
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc index f609d39..f5463f4c 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -80,7 +80,7 @@ const char kBasicPrintShortcut[] = "(Ctrl+Shift+P)"; #endif -PrintPreviewUI::TestingDelegate* g_testing_delegate = nullptr; +PrintPreviewUI::TestDelegate* g_test_delegate = nullptr; // Thread-safe wrapper around a std::map to keep track of mappings from // PrintPreviewUI IDs to most recent print preview request IDs. @@ -652,8 +652,8 @@ page_size_ = params.page_size; ClearAllPreviewData(); - if (g_testing_delegate) - g_testing_delegate->DidGetPreviewPageCount(params.page_count); + if (g_test_delegate) + g_test_delegate->DidGetPreviewPageCount(params.page_count); handler_->SendPageCountReady(params.page_count, params.fit_to_page_scaling, request_id); } @@ -704,8 +704,8 @@ SetPrintPreviewDataForIndex(page_number, std::move(data)); - if (g_testing_delegate) - g_testing_delegate->DidRenderPreviewPage(web_ui()->GetWebContents()); + if (g_test_delegate) + g_test_delegate->DidRenderPreviewPage(web_ui()->GetWebContents()); handler_->SendPagePreviewReady(page_number, *id_, preview_request_id); } @@ -781,8 +781,8 @@ } // static -void PrintPreviewUI::SetDelegateForTesting(TestingDelegate* delegate) { - g_testing_delegate = delegate; +void PrintPreviewUI::SetDelegateForTesting(TestDelegate* delegate) { + g_test_delegate = delegate; } void PrintPreviewUI::SetSelectedFileForTesting(const base::FilePath& path) {
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.h b/chrome/browser/ui/webui/print_preview/print_preview_ui.h index 39b654ae..2958b36 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.h +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.h
@@ -8,6 +8,7 @@ #include <stdint.h> #include <memory> +#include <string> #include <vector> #include "base/callback_forward.h" @@ -185,13 +186,16 @@ int request_id); // Allows tests to wait until the print preview dialog is loaded. - class TestingDelegate { + class TestDelegate { public: virtual void DidGetPreviewPageCount(int page_count) = 0; virtual void DidRenderPreviewPage(content::WebContents* preview_dialog) = 0; + + protected: + virtual ~TestDelegate() = default; }; - static void SetDelegateForTesting(TestingDelegate* delegate); + static void SetDelegateForTesting(TestDelegate* delegate); // Allows for tests to set a file path to print a PDF to. This also initiates // the printing without having to click a button on the print preview dialog.
diff --git a/chrome/browser/ui/webui/settings/people_handler.cc b/chrome/browser/ui/webui/settings/people_handler.cc index e28d332e..d069926 100644 --- a/chrome/browser/ui/webui/settings/people_handler.cc +++ b/chrome/browser/ui/webui/settings/people_handler.cc
@@ -682,6 +682,11 @@ Observe(web_ui()->GetWebContents()); PushSyncPrefs(); + + // Focus the web contents in case the location bar was focused before. This + // makes sure that page elements for resolving sync errors can be focused. + web_ui()->GetWebContents()->Focus(); + // Always let the page open when unified consent is enabled. return; }
diff --git a/chrome/browser/vr/elements/indicator_spec.cc b/chrome/browser/vr/elements/indicator_spec.cc index 80c5251..4912143d 100644 --- a/chrome/browser/vr/elements/indicator_spec.cc +++ b/chrome/browser/vr/elements/indicator_spec.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "chrome/browser/vr/elements/indicator_spec.h" + #include "build/build_config.h" #include "chrome/browser/vr/ui_support.h" #include "chrome/grit/generated_resources.h"
diff --git a/chrome/browser/vr/ui_host/vr_ui_host_impl.cc b/chrome/browser/vr/ui_host/vr_ui_host_impl.cc index bac0a6b..26dbe760c 100644 --- a/chrome/browser/vr/ui_host/vr_ui_host_impl.cc +++ b/chrome/browser/vr/ui_host/vr_ui_host_impl.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/usb/usb_tab_helper.h" #include "chrome/browser/vr/metrics/session_metrics_helper.h" #include "chrome/browser/vr/service/browser_xr_runtime.h" #include "chrome/browser/vr/service/xr_runtime_manager.h" @@ -295,6 +296,12 @@ ContentSettingsType::CONTENT_SETTINGS_TYPE_GEOLOCATION, rfh, origin) .content_setting == CONTENT_SETTING_ALLOW; + potential_capturing_.midi_connected = + permission_manager + ->GetPermissionStatusForFrame( + ContentSettingsType::CONTENT_SETTINGS_TYPE_MIDI_SYSEX, rfh, + origin) + .content_setting == CONTENT_SETTING_ALLOW; indicators_shown_start_time_ = base::Time::Now(); indicators_visible_ = false; @@ -307,7 +314,7 @@ FROM_HERE, poll_capturing_state_task_.callback(), kPollCapturingStateInterval); - // Microphone, Camera, location. + // location, microphone, camera, midi. CapturingStateModel active_capturing = active_capturing_; TabSpecificContentSettings* settings = TabSpecificContentSettings::FromWebContents(web_contents_); @@ -320,27 +327,41 @@ active_capturing.location_access_enabled = !!( state_flags & ContentSettingsUsagesState::TABSTATE_HAS_ANY_ALLOWED); } + active_capturing.audio_capture_enabled = (settings->GetMicrophoneCameraState() & TabSpecificContentSettings::MICROPHONE_ACCESSED) && !(settings->GetMicrophoneCameraState() & TabSpecificContentSettings::MICROPHONE_BLOCKED); + active_capturing.video_capture_enabled = (settings->GetMicrophoneCameraState() & TabSpecificContentSettings::CAMERA_ACCESSED) & !(settings->GetMicrophoneCameraState() & TabSpecificContentSettings::CAMERA_BLOCKED); + + active_capturing.midi_connected = + settings->IsContentAllowed(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); } - // Screen capture, bluetooth. + // Screen capture. scoped_refptr<MediaStreamCaptureIndicator> indicator = MediaCaptureDevicesDispatcher::GetInstance() ->GetMediaStreamCaptureIndicator(); active_capturing.screen_capture_enabled = - indicator->IsBeingMirrored(web_contents_); + indicator->IsBeingMirrored(web_contents_) || + indicator->IsCapturingDesktop(web_contents_); + + // Bluetooth. active_capturing.bluetooth_connected = web_contents_->IsConnectedToBluetoothDevice(); + // USB. + UsbTabHelper* usb_tab_helper = + UsbTabHelper::GetOrCreateForWebContents(web_contents_); + DCHECK(usb_tab_helper != nullptr); + active_capturing.usb_connected = usb_tab_helper->IsDeviceConnected(); + if (active_capturing_ != active_capturing) { indicators_shown_start_time_ = base::Time::Now(); }
diff --git a/chrome/browser/web_applications/bookmark_apps/system_web_app_manager_browsertest.cc b/chrome/browser/web_applications/bookmark_apps/system_web_app_manager_browsertest.cc index d3fa45d7..6f21ab0 100644 --- a/chrome/browser/web_applications/bookmark_apps/system_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/bookmark_apps/system_web_app_manager_browsertest.cc
@@ -174,9 +174,10 @@ // Test that System Apps install correctly with a manifest. IN_PROC_BROWSER_TEST_F(SystemWebAppManagerBrowserTest, Install) { - const extensions::Extension* app = WaitForSystemAppInstallAndLaunch() - ->hosted_app_controller() - ->GetExtensionForTesting(); + const extensions::Extension* app = + static_cast<extensions::HostedAppBrowserController*>( + WaitForSystemAppInstallAndLaunch()->web_app_controller()) + ->GetExtensionForTesting(); EXPECT_EQ("Test System App", app->name()); EXPECT_EQ(SkColorSetRGB(0, 0xFF, 0), extensions::AppThemeColorInfo::GetThemeColor(app));
diff --git a/chrome/common/mac/cfbundle_blocker.mm b/chrome/common/mac/cfbundle_blocker.mm index e9795a05..86b3a730 100644 --- a/chrome/common/mac/cfbundle_blocker.mm +++ b/chrome/common/mac/cfbundle_blocker.mm
@@ -7,6 +7,7 @@ #include <CoreFoundation/CoreFoundation.h> #import <Foundation/Foundation.h> +#include <Security/Security.h> #include <stddef.h> #include "base/logging.h" @@ -186,9 +187,49 @@ bundle, force_global, error); } +#if !defined(MAC_OS_X_VERSION_10_14) || \ + MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_14 +constexpr SecCodeSignatureFlags kSecCodeSignatureRuntime = 0x10000; +#endif + +// The kSecCodeSignatureEnforcement flag, which is implied with +// kSecCodeSignatureRuntime, means that all executable pages must be backed by +// a valid code signature. The use of mach_override will break that requirement, +// so the CFBundleBlocker must be disabled. +bool IsSignedWithEnforcement() { + base::ScopedCFTypeRef<SecCodeRef> self_code; + OSStatus status = + SecCodeCopySelf(kSecCSDefaultFlags, self_code.InitializeInto()); + if (status != noErr) + return false; + + base::ScopedCFTypeRef<CFDictionaryRef> signing_info; + status = SecCodeCopySigningInformation(self_code, kSecCSDefaultFlags, + signing_info.InitializeInto()); + if (status != noErr) + return false; + + CFNumberRef signing_flags_cf = base::mac::GetValueFromDictionary<CFNumberRef>( + signing_info, kSecCodeInfoFlags); + if (!signing_flags_cf) + return false; + + int signing_flags = 0; + if (!CFNumberGetValue(signing_flags_cf, kCFNumberIntType, &signing_flags)) + return false; + + return (signing_flags & kSecCodeSignatureRuntime) || + (signing_flags & kSecCodeSignatureEnforcement); +} + } // namespace bool EnableCFBundleBlocker() { + // If the binary is signed with enforcement, loading third-party bundles will + // be blocked by macOS. + if (IsSignedWithEnforcement()) + return true; + mach_error_t err = mach_override_ptr( reinterpret_cast<void*>(_CFBundleLoadExecutableAndReturnError), reinterpret_cast<void*>(ChromeCFBundleLoadExecutableAndReturnError),
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index d805619..ebb9105 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -1539,6 +1539,11 @@ const char kContentSuggestionsNotificationsSentCount[] = "ntp.content_suggestions.notifications.sent_count"; #else +// Tracks whether a field trial to hide shortcuts on the NTP has been activated. +// It is only activated for fresh installs, and remains active for those clients +// after a browser restart. +const char kNtpActivateHideShortcutsFieldTrial[] = + "ntp.activate_hide_shortcuts_field_trial"; // Holds info for New Tab Page custom background const char kNtpCustomBackgroundDict[] = "ntp.custom_background_dict"; const char kNtpCustomBackgroundLocalToDevice[] =
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 403842e..cba8345 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -533,6 +533,7 @@ extern const char kContentSuggestionsNotificationsSentDay[]; extern const char kContentSuggestionsNotificationsSentCount[]; #else +extern const char kNtpActivateHideShortcutsFieldTrial[]; extern const char kNtpCustomBackgroundDict[]; extern const char kNtpCustomBackgroundLocalToDevice[]; extern const char kNtpSearchSuggestionsBlocklist[];
diff --git a/chrome/credential_provider/gaiacp/auth_utils.cc b/chrome/credential_provider/gaiacp/auth_utils.cc index 0f450f7..08d6641 100644 --- a/chrome/credential_provider/gaiacp/auth_utils.cc +++ b/chrome/credential_provider/gaiacp/auth_utils.cc
@@ -188,7 +188,7 @@ input_logon->UserName.Length + input_logon->Password.Length; KERB_INTERACTIVE_UNLOCK_LOGON* output_unlock_logon = - reinterpret_cast<KERB_INTERACTIVE_UNLOCK_LOGON*>(CoTaskMemAlloc(cb)); + reinterpret_cast<KERB_INTERACTIVE_UNLOCK_LOGON*>(::CoTaskMemAlloc(cb)); if (!output_unlock_logon) { LOGFN(ERROR) << "Failed to allocate kerberos logon package."; return E_OUTOFMEMORY;
diff --git a/chrome/credential_provider/gaiacp/gaia_credential_provider.cc b/chrome/credential_provider/gaiacp/gaia_credential_provider.cc index 38b413a..ff0e21e 100644 --- a/chrome/credential_provider/gaiacp/gaia_credential_provider.cc +++ b/chrome/credential_provider/gaiacp/gaia_credential_provider.cc
@@ -388,7 +388,6 @@ HRESULT CGaiaCredentialProvider::SetSerialization( const CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcs) { - LOGFN(ERROR); DCHECK(pcpcs); if (pcpcs->clsidCredentialProvider != CLSID_GaiaCredentialProvider)
diff --git a/chrome/credential_provider/gaiacp/gaia_credential_provider_unittests.cc b/chrome/credential_provider/gaiacp/gaia_credential_provider_unittests.cc index 4a1ebcb..2532902 100644 --- a/chrome/credential_provider/gaiacp/gaia_credential_provider_unittests.cc +++ b/chrome/credential_provider/gaiacp/gaia_credential_provider_unittests.cc
@@ -13,6 +13,7 @@ #include "base/win/registry.h" #include "chrome/credential_provider/common/gcp_strings.h" #include "chrome/credential_provider/gaiacp/associated_user_validator.h" +#include "chrome/credential_provider/gaiacp/auth_utils.h" #include "chrome/credential_provider/gaiacp/gaia_credential_provider.h" #include "chrome/credential_provider/gaiacp/gaia_credential_provider_i.h" #include "chrome/credential_provider/gaiacp/mdm_utils.h" @@ -241,6 +242,107 @@ } } +// Tests auto logon enabled when set serialization is called. +// Parameters: +// 1. bool: are the users' token handles still valid. +// 2. CREDENTIAL_PROVIDER_USAGE_SCENARIO - the usage scenario. +class GcpCredentialProviderSetSerializationTest + : public GcpCredentialProviderTest, + public testing::WithParamInterface< + std::tuple<bool, CREDENTIAL_PROVIDER_USAGE_SCENARIO>> {}; + +TEST_P(GcpCredentialProviderSetSerializationTest, CheckAutoLogon) { + FakeAssociatedUserValidator associated_user_validator; + FakeInternetAvailabilityChecker internet_checker; + + const bool valid_token_handles = std::get<0>(GetParam()); + const CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus = std::get<1>(GetParam()); + + ASSERT_EQ(S_OK, SetGlobalFlagForTesting(kRegMdmUrl, L"https://mdm.com")); + GoogleMdmEnrolledStatusForTesting forced_status(true); + + CComBSTR first_sid; + constexpr wchar_t first_username[] = L"username"; + CreateGCPWUser(first_username, L"foo@gmail.com", L"password", L"Full Name", + L"Comment", L"gaia-id", &first_sid); + + CComBSTR second_sid; + constexpr wchar_t second_username[] = L"username2"; + CreateGCPWUser(second_username, L"foo2@gmail.com", L"password", L"Full Name", + L"Comment", L"gaia-id2", &second_sid); + + // Token fetch result. + fake_http_url_fetcher_factory()->SetFakeResponse( + GURL(AssociatedUserValidator::kTokenInfoUrl), + FakeWinHttpUrlFetcher::Headers(), + valid_token_handles ? "{\"expires_in\":1}" : "{}"); + + // Start token handle refresh threads. + associated_user_validator.StartRefreshingTokenHandleValidity(); + + // Lock users as needed based on the validity of their token handles. + associated_user_validator.DenySigninForUsersWithInvalidTokenHandles(cpus); + + // Build a dummy authentication buffer that can be passed to SetSerialization. + CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION cpcs; + base::string16 local_domain = OSUserManager::GetLocalDomain(); + base::string16 serialization_username = second_username; + base::string16 serialization_password = L"password"; + std::vector<wchar_t> dummy_domain( + local_domain.c_str(), local_domain.c_str() + local_domain.size() + 1); + std::vector<wchar_t> dummy_username( + serialization_username.c_str(), + serialization_username.c_str() + serialization_username.size() + 1); + std::vector<wchar_t> dummy_password( + serialization_password.c_str(), + serialization_password.c_str() + serialization_password.size() + 1); + ASSERT_EQ(S_OK, BuildCredPackAuthenticationBuffer( + &dummy_domain[0], &dummy_username[0], &dummy_password[0], + cpus, &cpcs)); + + cpcs.clsidCredentialProvider = CLSID_GaiaCredentialProvider; + + CComPtr<ICredentialProviderSetUserArray> user_array; + ASSERT_EQ( + S_OK, + CComCreator<CComObject<CGaiaCredentialProvider>>::CreateInstance( + nullptr, IID_ICredentialProviderSetUserArray, (void**)&user_array)); + CComPtr<ICredentialProvider> provider; + ASSERT_EQ(S_OK, user_array.QueryInterface(&provider)); + + ASSERT_EQ(S_OK, provider->SetUsageScenario(cpus, 0)); + + ASSERT_EQ(S_OK, provider->SetSerialization(&cpcs)); + + ::CoTaskMemFree(cpcs.rgbSerialization); + + FakeCredentialProviderUserArray array; + array.AddUser(OLE2CW(first_sid), first_username); + array.AddUser(OLE2CW(second_sid), second_username); + + ASSERT_EQ(S_OK, user_array->SetUserArray(&array)); + + // Check the correct number of credentials are created and whether autologon + // is enabled based on the token handle validity. + DWORD count; + DWORD default_index; + BOOL autologon; + ASSERT_EQ(S_OK, + provider->GetCredentialCount(&count, &default_index, &autologon)); + + bool should_autologon = !valid_token_handles; + EXPECT_EQ(valid_token_handles ? 0u : 2u, count); + EXPECT_EQ(autologon, should_autologon); + EXPECT_EQ(default_index, + should_autologon ? 1 : CREDENTIAL_PROVIDER_NO_DEFAULT); +} + +INSTANTIATE_TEST_SUITE_P( + , + GcpCredentialProviderSetSerializationTest, + ::testing::Combine(::testing::Bool(), + ::testing::Values(CPUS_UNLOCK_WORKSTATION, CPUS_LOGON))); + // Tests the effect of the MDM settings on the credential provider. // Parameters: // bool: whether the MDM URL is configured.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 843e48e..21b188c 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3432,7 +3432,6 @@ "../browser/ui/exclusive_access/fullscreen_controller_state_unittest.cc", "../browser/ui/extensions/extension_action_view_controller_unittest.cc", "../browser/ui/extensions/extension_message_bubble_bridge_unittest.cc", - "../browser/ui/extensions/hosted_app_browser_controller_unittest.cc", "../browser/ui/global_error/global_error_service_unittest.cc", "../browser/ui/omnibox/chrome_omnibox_navigation_observer_unittest.cc", "../browser/ui/omnibox/clipboard_utils_unittest.cc", @@ -3465,6 +3464,7 @@ "../browser/ui/toolbar/toolbar_actions_bar_unittest.cc", "../browser/ui/toolbar/toolbar_actions_bar_unittest.h", "../browser/ui/toolbar/toolbar_actions_model_unittest.cc", + "../browser/ui/web_app_browser_controller_unittest.cc", "../browser/ui/webui/browsing_history_handler_unittest.cc", "../browser/ui/webui/dark_mode_handler_unittest.cc", "../browser/ui/webui/downloads/downloads_dom_handler_unittest.cc",
diff --git a/chrome/test/data/extensions/api_test/help_app/manifest.json b/chrome/test/data/extensions/api_test/help_app/manifest.json new file mode 100644 index 0000000..5b9d0ef --- /dev/null +++ b/chrome/test/data/extensions/api_test/help_app/manifest.json
@@ -0,0 +1,8 @@ +{ + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuCAA3/rQ/X5xUBc2DhjXGB7U0Fn6memyWN5u3XYc1QzNdKodI5hmqVRi6yVePzmQuSdsA2M7wG0enGkg7qfQKNydcHPM7z/J0GEmSqzadrtz5QzWN2JemkIB3ilB7gO1RcyEluuHDhepCbVCwIr3VbguaaoatW4zYndqgC9mNOF5M73G44s6GkCunNcHtUaleaRiwt12y+WZsKIfRW90ijyESlSOEmGVhWwMld9SnAJv/P7apNr2HfQR4Bemriu02ypAPuJQ6zpvK+DRFdXu1bb7gOuN10+zPCjrt8SLs79rZ974bA56gAqUjDf3kLtJiHXMavCPUf3Fs1mvpzKTJwIDAQAB", + "name": "Help", + "version": "4.0", + "description" : "Test Chrome OS Help", + "manifest_version": 2, + "incognito" : "split" +}
diff --git a/chrome/test/data/extensions/api_test/help_app/oobe.html b/chrome/test/data/extensions/api_test/help_app/oobe.html new file mode 100644 index 0000000..058b00e --- /dev/null +++ b/chrome/test/data/extensions/api_test/help_app/oobe.html
@@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html> +<head> +<title>Fake Help App</title> +</head> +<body> + In official builds this shows help pages. +</body> +</html>
diff --git a/chrome/test/data/extensions/api_test/webrequest/test_extra_headers.js b/chrome/test/data/extensions/api_test/webrequest/test_extra_headers.js index e0936f2..1d012b63 100644 --- a/chrome/test/data/extensions/api_test/webrequest/test_extra_headers.js +++ b/chrome/test/data/extensions/api_test/webrequest/test_extra_headers.js
@@ -8,56 +8,6 @@ return getServerURL('set-cookie?' + name + '=' + value); } -function testModifyHeadersOnRedirect(useExtraHeaders) { - // Use /echoheader instead of observing headers in onSendHeaders to - // ensure we're looking at what the server receives. This avoids bugs in the - // webRequest implementation from being masked. - var finalURL = getServerURL('echoheader?User-Agent&Accept&X-New-Header'); - var url = getServerURL('server-redirect?' + finalURL); - var listener = callbackPass(function(details) { - var headers = details.requestHeaders; - - // Test modification. - var accept_value; - for (var i = 0; i < headers.length; i++) { - if (headers[i].name.toLowerCase() === 'user-agent') { - headers[i].value = 'foo'; - } else if (headers[i].name.toLowerCase() === 'accept') { - accept_value = headers[i].value; - } - } - - // Test removal. - chrome.test.assertTrue(accept_value.indexOf('image/webp') >= 0); - removeHeader(headers, 'accept'); - - // Test addition. - headers.push({name: 'X-New-Header', value: 'Baz'}); - - return {requestHeaders: headers}; - }); - - var extraInfo = ['requestHeaders', 'blocking']; - if (useExtraHeaders) - extraInfo.push('extraHeaders'); - chrome.webRequest.onBeforeSendHeaders.addListener(listener, - {urls: [finalURL]}, extraInfo); - - navigateAndWait(url, function(tab) { - chrome.webRequest.onBeforeSendHeaders.removeListener(listener); - chrome.tabs.executeScript(tab.id, { - code: 'document.body.innerText' - }, callbackPass(function(results) { - chrome.test.assertTrue(results[0].indexOf('foo') >= 0, - 'User-Agent should be modified.'); - chrome.test.assertTrue(results[0].indexOf('image/webp') == -1, - 'Accept should be removed.'); - chrome.test.assertTrue(results[0].indexOf('Baz') >= 0, - 'X-New-Header should be added.'); - })); - }); -} - runTests([ function testSpecialRequestHeadersVisible() { // Set a cookie so the cookie request header is set. @@ -250,14 +200,6 @@ }); }, - function testModifyHeadersOnRedirectWithoutExtraHeaders() { - testModifyHeadersOnRedirect(false); - }, - - function testModifyHeadersOnRedirectWithExtraHeaders() { - testModifyHeadersOnRedirect(true); - }, - // Successful Set-Cookie modification is tested in test_blocking_cookie.js. function testCannotModifySpecialResponseHeadersWithoutExtraHeaders() { // Use unique name and value so other tests don't interfere.
diff --git a/chrome/test/data/webui/settings/people_page_sync_page_interactive_test.js b/chrome/test/data/webui/settings/people_page_sync_page_interactive_test.js index 3e71ffa..3868031f 100644 --- a/chrome/test/data/webui/settings/people_page_sync_page_interactive_test.js +++ b/chrome/test/data/webui/settings/people_page_sync_page_interactive_test.js
@@ -8,18 +8,24 @@ setup(function() { PolymerTest.clearBody(); + settings.navigateTo(settings.routes.SYNC); syncPage = document.createElement('settings-sync-page'); document.body.appendChild(syncPage); }); - test('autofocus correctly after container is shown', function() { - cr.webUIListenerCallback('sync-prefs-changed', {passphraseRequired: true}); - syncPage.unifiedConsentEnabled = false; + test('autofocus passphrase input', function() { + syncPage.unifiedConsentEnabled = true; Polymer.dom.flush(); - // Simulate event normally fired by main_page_behavior after subpage - // animation ends. - syncPage.fire('show-container'); + cr.webUIListenerCallback('sync-prefs-changed', {passphraseRequired: false}); + Polymer.dom.flush(); + // Passphrase input is not available when no passphrase is required. + assertFalse(!!syncPage.$$('#existingPassphraseInput')); + + cr.webUIListenerCallback('sync-prefs-changed', {passphraseRequired: true}); + Polymer.dom.flush(); + // Passphrase input is available and focused when a passphrase is required. + assertTrue(!!syncPage.$$('#existingPassphraseInput')); assertEquals( syncPage.$$('#existingPassphraseInput').inputElement, syncPage.$$('#existingPassphraseInput').shadowRoot.activeElement);
diff --git a/chromeos/audio/cras_audio_handler.cc b/chromeos/audio/cras_audio_handler.cc index fc6d19e..226342d 100644 --- a/chromeos/audio/cras_audio_handler.cc +++ b/chromeos/audio/cras_audio_handler.cc
@@ -21,7 +21,6 @@ #include "base/system/system_monitor.h" #include "base/threading/thread_task_runner_handle.h" #include "chromeos/audio/audio_devices_pref_handler_stub.h" -#include "chromeos/dbus/dbus_thread_manager.h" using std::max; using std::min; @@ -34,15 +33,9 @@ // Used when sound is unmuted, but volume was less than kMuteThresholdPercent. const int kDefaultUnmuteVolumePercent = 4; -// Default output buffer size in frames. -const int kDefaultOutputBufferSize = 512; - // Volume value which should be considered as muted in range [0, 100]. const int kMuteThresholdPercent = 1; -// The duration of HDMI output re-discover grace period in milliseconds. -const int kHDMIRediscoverGracePeriodDurationInMs = 2000; - // Mixer matrix, [0.5, 0.5; 0.5, 0.5] const double kStereoToMono[] = {0.5, 0.5, 0.5, 0.5}; // Mixer matrix, [1, 0; 0, 1] @@ -63,15 +56,6 @@ return false; } -CrasAudioClient* GetCrasAudioClient() { - return DBusThreadManager::Get()->GetCrasAudioClient(); -} - -bool HasCrasAudioClient() { - return DBusThreadManager::IsInitialized() && DBusThreadManager::Get() && - DBusThreadManager::Get()->GetCrasAudioClient(); -} - } // namespace CrasAudioHandler::AudioObserver::AudioObserver() = default; @@ -90,17 +74,13 @@ void CrasAudioHandler::AudioObserver::OnOutputMuteChanged(bool /* mute_on */) {} -void CrasAudioHandler::AudioObserver::OnInputMuteChanged(bool /* mute_on */) { -} +void CrasAudioHandler::AudioObserver::OnInputMuteChanged(bool /* mute_on */) {} -void CrasAudioHandler::AudioObserver::OnAudioNodesChanged() { -} +void CrasAudioHandler::AudioObserver::OnAudioNodesChanged() {} -void CrasAudioHandler::AudioObserver::OnActiveOutputNodeChanged() { -} +void CrasAudioHandler::AudioObserver::OnActiveOutputNodeChanged() {} -void CrasAudioHandler::AudioObserver::OnActiveInputNodeChanged() { -} +void CrasAudioHandler::AudioObserver::OnActiveInputNodeChanged() {} void CrasAudioHandler::AudioObserver::OnOutputChannelRemixingChanged( bool /* mono_on */) {} @@ -116,32 +96,25 @@ // static void CrasAudioHandler::Initialize( scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler) { - CHECK(!g_cras_audio_handler); g_cras_audio_handler = new CrasAudioHandler(audio_pref_handler); } // static void CrasAudioHandler::InitializeForTesting() { - CHECK(!g_cras_audio_handler); + // Make sure CrasAudioClient has been initialized. + if (!CrasAudioClient::Get()) + CrasAudioClient::InitializeFake(); CrasAudioHandler::Initialize(new AudioDevicesPrefHandlerStub()); } // static void CrasAudioHandler::Shutdown() { - CHECK(g_cras_audio_handler); delete g_cras_audio_handler; g_cras_audio_handler = nullptr; } // static -bool CrasAudioHandler::IsInitialized() { - return g_cras_audio_handler != nullptr; -} - -// static CrasAudioHandler* CrasAudioHandler::Get() { - CHECK(g_cras_audio_handler) - << "CrasAudioHandler::Get() called before Initialize()."; return g_cras_audio_handler; } @@ -478,7 +451,7 @@ for (const auto& item : audio_devices_) { const AudioDevice& device = item.second; if (!device.is_input && device.type == AUDIO_TYPE_INTERNAL_SPEAKER) { - GetCrasAudioClient()->SwapLeftRight(device.id, swap); + CrasAudioClient::Get()->SwapLeftRight(device.id, swap); break; } } @@ -489,11 +462,11 @@ return; output_mono_enabled_ = enabled; if (enabled) { - GetCrasAudioClient()->SetGlobalOutputChannelRemix( + CrasAudioClient::Get()->SetGlobalOutputChannelRemix( output_channels_, std::vector<double>(kStereoToMono, std::end(kStereoToMono))); } else { - GetCrasAudioClient()->SetGlobalOutputChannelRemix( + CrasAudioClient::Get()->SetGlobalOutputChannelRemix( output_channels_, std::vector<double>(kStereoToStereo, std::end(kStereoToStereo))); } @@ -567,9 +540,9 @@ bool notify, DeviceActivateType activate_by) { if (active_device.is_input) - GetCrasAudioClient()->SetActiveInputNode(active_device.id); + CrasAudioClient::Get()->SetActiveInputNode(active_device.id); else - GetCrasAudioClient()->SetActiveOutputNode(active_device.id); + CrasAudioClient::Get()->SetActiveOutputNode(active_device.id); if (notify) NotifyActiveNodeChanged(active_device.is_input); @@ -661,45 +634,28 @@ CrasAudioHandler::CrasAudioHandler( scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler) - : audio_pref_handler_(audio_pref_handler), - output_mute_on_(false), - input_mute_on_(false), - output_volume_(0), - input_gain_(0), - active_output_node_id_(0), - active_input_node_id_(0), - has_alternative_input_(false), - has_alternative_output_(false), - output_mute_locked_(false), - output_channels_(2), - output_mono_enabled_(false), - hdmi_rediscover_grace_period_duration_in_ms_( - kHDMIRediscoverGracePeriodDurationInMs), - hdmi_rediscovering_(false), - default_output_buffer_size_(kDefaultOutputBufferSize), - weak_ptr_factory_(this) { - if (!audio_pref_handler.get()) - return; - // If the DBusThreadManager or the CrasAudioClient aren't available, there - // isn't much we can do. This should only happen when running tests. - if (!HasCrasAudioClient()) - return; - GetCrasAudioClient()->AddObserver(this); + : audio_pref_handler_(audio_pref_handler) { + DCHECK(audio_pref_handler); + DCHECK(CrasAudioClient::Get()); + CrasAudioClient::Get()->AddObserver(this); audio_pref_handler_->AddAudioPrefObserver(this); InitializeAudioState(); // Unittest may not have the task runner for the current thread. if (base::ThreadTaskRunnerHandle::IsSet()) main_task_runner_ = base::ThreadTaskRunnerHandle::Get(); + + DCHECK(!g_cras_audio_handler); + g_cras_audio_handler = this; } CrasAudioHandler::~CrasAudioHandler() { hdmi_rediscover_timer_.Stop(); - if (!HasCrasAudioClient()) - return; - GetCrasAudioClient()->RemoveObserver(this); - if (audio_pref_handler_.get()) - audio_pref_handler_->RemoveAudioPrefObserver(this); - audio_pref_handler_ = nullptr; + DCHECK(CrasAudioClient::Get()); + CrasAudioClient::Get()->RemoveObserver(this); + audio_pref_handler_->RemoveAudioPrefObserver(this); + + DCHECK(g_cras_audio_handler); + g_cras_audio_handler = nullptr; } void CrasAudioHandler::AudioClientRestarted() { @@ -895,7 +851,7 @@ // Defer querying cras for GetNodes until cras service becomes available. cras_service_available_ = false; - GetCrasAudioClient()->WaitForServiceToBeAvailable(base::BindOnce( + CrasAudioClient::Get()->WaitForServiceToBeAvailable(base::BindOnce( &CrasAudioHandler::InitializeAudioAfterCrasServiceAvailable, weak_ptr_factory_.GetWeakPtr())); } @@ -934,7 +890,7 @@ } void CrasAudioHandler::SetOutputNodeVolume(uint64_t node_id, int volume) { - GetCrasAudioClient()->SetOutputNodeVolume(node_id, volume); + CrasAudioClient::Get()->SetOutputNodeVolume(node_id, volume); } void CrasAudioHandler::SetOutputNodeVolumePercent(uint64_t node_id, @@ -960,12 +916,12 @@ return false; output_mute_on_ = mute_on; - GetCrasAudioClient()->SetOutputUserMute(mute_on); + CrasAudioClient::Get()->SetOutputUserMute(mute_on); return true; } void CrasAudioHandler::SetInputNodeGain(uint64_t node_id, int gain) { - GetCrasAudioClient()->SetInputNodeGain(node_id, gain); + CrasAudioClient::Get()->SetInputNodeGain(node_id, gain); } void CrasAudioHandler::SetInputNodeGainPercent(uint64_t node_id, @@ -990,16 +946,16 @@ void CrasAudioHandler::SetInputMuteInternal(bool mute_on) { input_mute_on_ = mute_on; - GetCrasAudioClient()->SetInputMute(mute_on); + CrasAudioClient::Get()->SetInputMute(mute_on); } void CrasAudioHandler::GetNodes() { - GetCrasAudioClient()->GetNodes(base::BindOnce( + CrasAudioClient::Get()->GetNodes(base::BindOnce( &CrasAudioHandler::HandleGetNodes, weak_ptr_factory_.GetWeakPtr())); } void CrasAudioHandler::GetNumberOfOutputStreams() { - GetCrasAudioClient()->GetNumberOfActiveOutputStreams( + CrasAudioClient::Get()->GetNumberOfActiveOutputStreams( base::BindOnce(&CrasAudioHandler::HandleGetNumActiveOutputStreams, weak_ptr_factory_.GetWeakPtr())); } @@ -1504,12 +1460,12 @@ if (device->is_input) { DCHECK(node_id != active_input_node_id_); - GetCrasAudioClient()->AddActiveInputNode(node_id); + CrasAudioClient::Get()->AddActiveInputNode(node_id); if (notify) NotifyActiveNodeChanged(true); } else { DCHECK(node_id != active_output_node_id_); - GetCrasAudioClient()->AddActiveOutputNode(node_id); + CrasAudioClient::Get()->AddActiveOutputNode(node_id); if (notify) NotifyActiveNodeChanged(false); } @@ -1527,13 +1483,13 @@ if (device->is_input) { if (node_id == active_input_node_id_) active_input_node_id_ = 0; - GetCrasAudioClient()->RemoveActiveInputNode(node_id); + CrasAudioClient::Get()->RemoveActiveInputNode(node_id); if (notify) NotifyActiveNodeChanged(true); } else { if (node_id == active_output_node_id_) active_output_node_id_ = 0; - GetCrasAudioClient()->RemoveActiveOutputNode(node_id); + CrasAudioClient::Get()->RemoveActiveOutputNode(node_id); if (notify) NotifyActiveNodeChanged(false); } @@ -1655,7 +1611,7 @@ } void CrasAudioHandler::GetDefaultOutputBufferSizeInternal() { - GetCrasAudioClient()->GetDefaultOutputBufferSize( + CrasAudioClient::Get()->GetDefaultOutputBufferSize( base::BindOnce(&CrasAudioHandler::HandleGetDefaultOutputBufferSize, weak_ptr_factory_.GetWeakPtr())); } @@ -1680,7 +1636,7 @@ // thread check, because unittest may not have the task runner // for the current thread. void CrasAudioHandler::GetSystemAecSupported() { - GetCrasAudioClient()->GetSystemAecSupported( + CrasAudioClient::Get()->GetSystemAecSupported( base::BindOnce(&CrasAudioHandler::HandleGetSystemAecSupported, weak_ptr_factory_.GetWeakPtr())); } @@ -1704,7 +1660,7 @@ // thread check, because unittest may not have the task runner // for the current thread. void CrasAudioHandler::GetSystemAecGroupId() { - GetCrasAudioClient()->GetSystemAecGroupId( + CrasAudioClient::Get()->GetSystemAecGroupId( base::BindOnce(&CrasAudioHandler::HandleGetSystemAecGroupId, weak_ptr_factory_.GetWeakPtr())); }
diff --git a/chromeos/audio/cras_audio_handler.h b/chromeos/audio/cras_audio_handler.h index ebd187d..4cd58f5e 100644 --- a/chromeos/audio/cras_audio_handler.h +++ b/chromeos/audio/cras_audio_handler.h
@@ -106,9 +106,6 @@ // Destroys the global instance. static void Shutdown(); - // Returns true if the global instance is initialized. - static bool IsInitialized(); - // Gets the global instance. Initialize must be called first. static CrasAudioHandler* Get(); @@ -510,29 +507,28 @@ AudioDevicePriorityQueue input_devices_pq_; AudioDevicePriorityQueue output_devices_pq_; - bool output_mute_on_; - bool input_mute_on_; - int output_volume_; - int input_gain_; - uint64_t active_output_node_id_; - uint64_t active_input_node_id_; - bool has_alternative_input_; - bool has_alternative_output_; + bool output_mute_on_ = false; + bool input_mute_on_ = false; + int output_volume_ = 0; + int input_gain_ = 0; + uint64_t active_output_node_id_ = 0; + uint64_t active_input_node_id_ = 0; + bool has_alternative_input_ = false; + bool has_alternative_output_ = false; - bool output_mute_locked_; + bool output_mute_locked_ = false; // Audio output channel counts. - int32_t output_channels_; - bool output_mono_enabled_; + int32_t output_channels_ = 2; + bool output_mono_enabled_ = false; // Timer for HDMI re-discovering grace period. base::OneShotTimer hdmi_rediscover_timer_; - int hdmi_rediscover_grace_period_duration_in_ms_; - bool hdmi_rediscovering_; + int hdmi_rediscover_grace_period_duration_in_ms_ = 2000; + bool hdmi_rediscovering_ = false; bool cras_service_available_ = false; - bool initializing_audio_state_ = false; int init_volume_; uint64_t init_node_id_; @@ -542,7 +538,7 @@ bool rear_camera_on_ = false; // Default output buffer size in frames. - int32_t default_output_buffer_size_; + int32_t default_output_buffer_size_ = 512; bool system_aec_supported_ = false; int32_t system_aec_group_id_ = kSystemAecGroupIdNotAvailable; @@ -553,7 +549,7 @@ // on this thread. scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; - base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_; + base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(CrasAudioHandler); };
diff --git a/chromeos/audio/cras_audio_handler_unittest.cc b/chromeos/audio/cras_audio_handler_unittest.cc index 14419c4..3cda8e30 100644 --- a/chromeos/audio/cras_audio_handler_unittest.cc +++ b/chromeos/audio/cras_audio_handler_unittest.cc
@@ -21,7 +21,6 @@ #include "chromeos/audio/audio_devices_pref_handler.h" #include "chromeos/audio/audio_devices_pref_handler_stub.h" #include "chromeos/dbus/audio_node.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_cras_audio_client.h" #include "media/base/video_facing.h" #include "testing/gtest/include/gtest/gtest.h" @@ -279,7 +278,7 @@ video_capture_manager_.reset(); CrasAudioHandler::Shutdown(); audio_pref_handler_ = nullptr; - DBusThreadManager::Shutdown(); + CrasAudioClient::Shutdown(); } AudioNode GenerateAudioNode(const AudioNodeInfo* node_info) { @@ -301,10 +300,8 @@ } void SetUpCrasAudioHandler(const AudioNodeList& audio_nodes) { - DBusThreadManager::Initialize(); - fake_cras_audio_client_ = static_cast<FakeCrasAudioClient*>( - DBusThreadManager::Get()->GetCrasAudioClient()); - fake_cras_audio_client_->SetAudioNodesForTesting(audio_nodes); + CrasAudioClient::InitializeFake(); + fake_cras_audio_client()->SetAudioNodesForTesting(audio_nodes); audio_pref_handler_ = new AudioDevicesPrefHandlerStub(); CrasAudioHandler::Initialize(audio_pref_handler_); cras_audio_handler_ = CrasAudioHandler::Get(); @@ -322,9 +319,7 @@ const AudioNodeList& audio_nodes_in_pref, const AudioDevice& active_device_in_pref, bool activate_by_user) { - DBusThreadManager::Initialize(); - fake_cras_audio_client_ = static_cast<FakeCrasAudioClient*>( - DBusThreadManager::Get()->GetCrasAudioClient()); + CrasAudioClient::InitializeFake(); audio_pref_handler_ = new AudioDevicesPrefHandlerStub(); bool active; for (const AudioNode& node : audio_nodes_in_pref) { @@ -339,7 +334,7 @@ EXPECT_TRUE(active); EXPECT_EQ(activate_by, activate_by_user); - fake_cras_audio_client_->SetAudioNodesForTesting(audio_nodes); + fake_cras_audio_client()->SetAudioNodesForTesting(audio_nodes); CrasAudioHandler::Initialize(audio_pref_handler_); cras_audio_handler_ = CrasAudioHandler::Get(); @@ -351,11 +346,9 @@ void SetUpCrasAudioHandlerWithPrimaryActiveNode( const AudioNodeList& audio_nodes, const AudioNode& primary_active_node) { - DBusThreadManager::Initialize(); - fake_cras_audio_client_ = static_cast<FakeCrasAudioClient*>( - DBusThreadManager::Get()->GetCrasAudioClient()); - fake_cras_audio_client_->SetAudioNodesForTesting(audio_nodes); - fake_cras_audio_client_->SetActiveOutputNode(primary_active_node.id); + CrasAudioClient::InitializeFake(); + fake_cras_audio_client()->SetAudioNodesForTesting(audio_nodes); + fake_cras_audio_client()->SetActiveOutputNode(primary_active_node.id); audio_pref_handler_ = new AudioDevicesPrefHandlerStub(); CrasAudioHandler::Initialize(audio_pref_handler_); cras_audio_handler_ = CrasAudioHandler::Get(); @@ -365,7 +358,7 @@ } void ChangeAudioNodes(const AudioNodeList& audio_nodes) { - fake_cras_audio_client_->SetAudioNodesAndNotifyObserversForTesting( + fake_cras_audio_client()->SetAudioNodesAndNotifyObserversForTesting( audio_nodes); base::RunLoop().RunUntilIdle(); } @@ -434,11 +427,14 @@ } protected: + FakeCrasAudioClient* fake_cras_audio_client() { + return FakeCrasAudioClient::Get(); + } + base::test::ScopedTaskEnvironment scoped_task_environment_; base::SystemMonitor system_monitor_; SystemMonitorObserver system_monitor_observer_; CrasAudioHandler* cras_audio_handler_ = nullptr; // Not owned. - FakeCrasAudioClient* fake_cras_audio_client_ = nullptr; // Not owned. std::unique_ptr<TestObserver> test_observer_; scoped_refptr<AudioDevicesPrefHandlerStub> audio_pref_handler_; std::unique_ptr<FakeVideoCaptureManager> video_capture_manager_; @@ -1996,16 +1992,16 @@ const int kDefaultVolume = cras_audio_handler_->GetOutputVolumePercent(); // Disable the auto OutputNodeVolumeChanged signal. - fake_cras_audio_client_->set_notify_volume_change_with_delay(true); + fake_cras_audio_client()->set_notify_volume_change_with_delay(true); - fake_cras_audio_client_->SetAudioNodesForTesting(audio_nodes); + fake_cras_audio_client()->SetAudioNodesForTesting(audio_nodes); RestartAudioClient(); EXPECT_EQ(0, test_observer_->output_volume_changed_count()); EXPECT_EQ(kDefaultVolume, cras_audio_handler_->GetOutputVolumePercent()); // The correct initialization OutputNodeVolumeChanged event is fired. We // should avoid notifying observers. - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kDefaultVolume); EXPECT_EQ(0, test_observer_->output_volume_changed_count()); EXPECT_EQ(kDefaultVolume, cras_audio_handler_->GetOutputVolumePercent()); @@ -2013,7 +2009,7 @@ // The later OutputNodeVolumeChanged event after initialization should notify // observers. const int kVolume = 60; - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kVolume); EXPECT_EQ(1, test_observer_->output_volume_changed_count()); EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent()); @@ -2026,9 +2022,9 @@ const int kDefaultVolume = cras_audio_handler_->GetOutputVolumePercent(); // Disable the auto OutputNodeVolumeChanged signal. - fake_cras_audio_client_->set_notify_volume_change_with_delay(true); + fake_cras_audio_client()->set_notify_volume_change_with_delay(true); - fake_cras_audio_client_->SetAudioNodesForTesting(audio_nodes); + fake_cras_audio_client()->SetAudioNodesForTesting(audio_nodes); RestartAudioClient(); EXPECT_EQ(0, test_observer_->output_volume_changed_count()); EXPECT_EQ(kDefaultVolume, cras_audio_handler_->GetOutputVolumePercent()); @@ -2038,14 +2034,14 @@ // to log warning message, clear the pending automated volume change reasons, // and notify observers about this change. const int kVolume1 = 30; - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kVolume1); EXPECT_EQ(1, test_observer_->output_volume_changed_count()); EXPECT_EQ(kVolume1, cras_audio_handler_->GetOutputVolumePercent()); // The later OutputNodeVolumeChanged event should notify observers. const int kVolume2 = 60; - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kVolume2); EXPECT_EQ(2, test_observer_->output_volume_changed_count()); EXPECT_EQ(kVolume2, cras_audio_handler_->GetOutputVolumePercent()); @@ -2060,7 +2056,7 @@ EXPECT_EQ(kDefaultVolume, cras_audio_handler_->GetOutputVolumePercent()); // Disable the auto OutputNodeVolumeChanged signal. - fake_cras_audio_client_->set_notify_volume_change_with_delay(true); + fake_cras_audio_client()->set_notify_volume_change_with_delay(true); // Verify the volume state is not changed before OutputNodeVolumeChanged // signal fires. @@ -2072,7 +2068,7 @@ // Verify the output volume is changed to the designated value after // OnOutputNodeVolumeChanged cras signal fires, and the volume change event // has been fired to notify the observers. - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kVolume); EXPECT_EQ(1, test_observer_->output_volume_changed_count()); EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent()); @@ -2092,7 +2088,7 @@ EXPECT_EQ(kDefaultVolume, cras_audio_handler_->GetOutputVolumePercent()); // Disable the auto OutputNodeVolumeChanged signal. - fake_cras_audio_client_->set_notify_volume_change_with_delay(true); + fake_cras_audio_client()->set_notify_volume_change_with_delay(true); // Verify the volume state is not changed before OutputNodeVolumeChanged // signal fires. @@ -2108,12 +2104,12 @@ // to 50 then 60, but the volume changed signal for 50 comes back after // chrome sets the volume to 60. Verify chrome will sync to the designated // volume level after all signals arrive. - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kVolume1); EXPECT_EQ(1, test_observer_->output_volume_changed_count()); EXPECT_EQ(kVolume1, cras_audio_handler_->GetOutputVolumePercent()); - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kVolume2); EXPECT_EQ(2, test_observer_->output_volume_changed_count()); EXPECT_EQ(kVolume2, cras_audio_handler_->GetOutputVolumePercent()); @@ -2133,7 +2129,7 @@ // Verify chrome will sync its volume state to the volume from the signal, // and notify its observers for the volume change event. const int kVolume = 20; - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kInternalSpeaker->id, kVolume); EXPECT_EQ(1, test_observer_->output_volume_changed_count()); EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent()); @@ -2859,7 +2855,7 @@ EXPECT_EQ(kDefaultVolume, cras_audio_handler_->GetOutputVolumePercent()); // Disable the auto OutputNodeVolumeChanged signal. - fake_cras_audio_client_->set_notify_volume_change_with_delay(true); + fake_cras_audio_client()->set_notify_volume_change_with_delay(true); test_observer_->reset_output_volume_changed_count(); // Adjust the volume of output devices continuously. @@ -2867,13 +2863,13 @@ cras_audio_handler_->SetOutputVolumePercent(30); // Sends delayed OutputNodeVolumeChanged signals. - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kUSBJabraSpeakerOutput2->id, 20); - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kUSBJabraSpeakerOutput1->id, 20); - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kUSBJabraSpeakerOutput2->id, 30); - fake_cras_audio_client_->NotifyOutputNodeVolumeChangedForTesting( + fake_cras_audio_client()->NotifyOutputNodeVolumeChangedForTesting( kUSBJabraSpeakerOutput1->id, 30); // Verify that both speakers are set to the designated volume level after
diff --git a/chromeos/components/power/BUILD.gn b/chromeos/components/power/BUILD.gn index f45b728..3c1fbff 100644 --- a/chromeos/components/power/BUILD.gn +++ b/chromeos/components/power/BUILD.gn
@@ -9,10 +9,7 @@ defines = [ "IS_CHROMEOS_POWER_IMPL" ] deps = [ "//base", - - # TODO(stevenjb): Replace this with //chromeos/dbus/power once extracted. - # https://crbug.com/644348. - "//chromeos/dbus", + "//chromeos/dbus/power", "//services/device/public/mojom", "//services/service_manager/public/cpp", ] @@ -33,7 +30,7 @@ deps = [ ":power", "//base/test:test_support", - "//chromeos/dbus", + "//chromeos/dbus/power", "//services/device/public/cpp/test:test_support", "//services/device/public/mojom", "//services/service_manager/public/cpp/test:test_support",
diff --git a/chromeos/components/proximity_auth/BUILD.gn b/chromeos/components/proximity_auth/BUILD.gn index fe71bb2..0ffd7d52 100644 --- a/chromeos/components/proximity_auth/BUILD.gn +++ b/chromeos/components/proximity_auth/BUILD.gn
@@ -55,7 +55,7 @@ "//chromeos/components/multidevice/logging", "//chromeos/components/proximity_auth/public/interfaces", "//chromeos/constants", - "//chromeos/dbus", + "//chromeos/dbus/power", "//chromeos/dbus/session_manager", "//chromeos/services/multidevice_setup/public/cpp", "//chromeos/services/multidevice_setup/public/cpp:prefs", @@ -121,7 +121,6 @@ "//chromeos/components/multidevice:test_support", "//chromeos/components/multidevice/logging", "//chromeos/constants", - "//chromeos/dbus:test_support", "//chromeos/services/multidevice_setup/public/cpp:prefs", "//chromeos/services/multidevice_setup/public/cpp:test_support", "//chromeos/services/secure_channel:test_support",
diff --git a/chromeos/components/tether/BUILD.gn b/chromeos/components/tether/BUILD.gn index 8b9e355..577a05f 100644 --- a/chromeos/components/tether/BUILD.gn +++ b/chromeos/components/tether/BUILD.gn
@@ -119,7 +119,7 @@ "//chromeos/components/multidevice/logging", "//chromeos/components/tether/proto", "//chromeos/constants", - "//chromeos/dbus", + "//chromeos/dbus/power", "//chromeos/login/login_state", "//chromeos/network", "//chromeos/services/device_sync/public/cpp", @@ -268,7 +268,7 @@ "//chromeos/components/multidevice:test_support", "//chromeos/components/tether/proto", "//chromeos/constants", - "//chromeos/dbus:test_support", + "//chromeos/dbus/power", "//chromeos/login/login_state", "//chromeos/network:test_support", "//chromeos/services/device_sync:test_support",
diff --git a/chromeos/components/tether/network_configuration_remover_unittest.cc b/chromeos/components/tether/network_configuration_remover_unittest.cc index c7f03ba4..46161b0 100644 --- a/chromeos/components/tether/network_configuration_remover_unittest.cc +++ b/chromeos/components/tether/network_configuration_remover_unittest.cc
@@ -7,7 +7,6 @@ #include <memory> #include "base/memory/ptr_util.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/network/mock_managed_network_configuration_handler.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chromeos/dbus/BUILD.gn b/chromeos/dbus/BUILD.gn index cd8e95b..931208b 100644 --- a/chromeos/dbus/BUILD.gn +++ b/chromeos/dbus/BUILD.gn
@@ -22,7 +22,6 @@ ":metrics_event_proto", ":oobe_config_proto", ":plugin_vm_service_proto", - ":power_manager_proto", ":runtime_probe_proto", ":seneschal_proto", ":smbprovider_proto", @@ -59,8 +58,6 @@ "dbus_client_implementation_type.h", "dbus_clients_browser.cc", "dbus_clients_browser.h", - "dbus_clients_common.cc", - "dbus_clients_common.h", "dbus_thread_manager.cc", "dbus_thread_manager.h", "debug_daemon_client.cc", @@ -123,14 +120,6 @@ "lorgnette_manager_client.h", "oobe_configuration_client.cc", "oobe_configuration_client.h", - "power/fake_power_manager_client.cc", - "power/fake_power_manager_client.h", - "power/native_timer.cc", - "power/native_timer.h", - "power/power_manager_client.cc", - "power/power_manager_client.h", - "power/power_policy_controller.cc", - "power/power_policy_controller.h", "runtime_probe_client.cc", "runtime_probe_client.h", "seneschal_client.cc", @@ -194,7 +183,6 @@ deps = [ ":dbus", ":oobe_config_proto", - ":power_manager_proto", ":test_support", "//base", "//base/test:test_support", @@ -202,6 +190,8 @@ "//chromeos/dbus/biod:test_support", "//chromeos/dbus/cryptohome", "//chromeos/dbus/cryptohome:attestation_proto", + "//chromeos/dbus/power:power_manager_proto", + "//chromeos/dbus/power:test_support", "//chromeos/dbus/session_manager", "//chromeos/dbus/shill:test_support", "//components/account_id", @@ -225,9 +215,6 @@ "native_timer_unittest.cc", "oobe_configuration_client_unittest.cc", "pipe_reader_unittest.cc", - "power/fake_power_manager_client_unittest.cc", - "power/power_manager_client_unittest.cc", - "power/power_policy_controller_unittest.cc", "update_engine_client_unittest.cc", "util/version_loader_unittest.cc", ] @@ -273,21 +260,6 @@ proto_out_dir = "chromeos/dbus/plugin_vm_service" } -proto_library("power_manager_proto") { - sources = [ - "//third_party/cros_system_api/dbus/power_manager/backlight.proto", - "//third_party/cros_system_api/dbus/power_manager/idle.proto", - "//third_party/cros_system_api/dbus/power_manager/input_event.proto", - "//third_party/cros_system_api/dbus/power_manager/peripheral_battery_status.proto", - "//third_party/cros_system_api/dbus/power_manager/policy.proto", - "//third_party/cros_system_api/dbus/power_manager/power_supply_properties.proto", - "//third_party/cros_system_api/dbus/power_manager/suspend.proto", - "//third_party/cros_system_api/dbus/power_manager/switch_states.proto", - ] - - proto_out_dir = "chromeos/dbus/power_manager" -} - proto_library("runtime_probe_proto") { sources = [ "//third_party/cros_system_api/dbus/runtime_probe/runtime_probe.proto",
diff --git a/chromeos/dbus/README.md b/chromeos/dbus/README.md index 48bb688b..00b22d98 100644 --- a/chromeos/dbus/README.md +++ b/chromeos/dbus/README.md
@@ -45,8 +45,8 @@ Shill clients will eventually only be available to Chrome. As such, the DBusThreadManager::GetShill*Client() methods have been left intact for now. -However, the clients are no longer owned by DBusClientsCommon so that they can -be initialized independent of DBusThreadManager. +However, the clients are no longer owned by DBusThreadManager so that they can +be initialized independently. New code should prefer Shill*Client::Get() over the DBusThreadManager accessors.
diff --git a/chromeos/dbus/cras_audio_client.cc b/chromeos/dbus/cras_audio_client.cc index b165c4af..04eb8c87 100644 --- a/chromeos/dbus/cras_audio_client.cc +++ b/chromeos/dbus/cras_audio_client.cc
@@ -13,6 +13,7 @@ #include "base/format_macros.h" #include "base/macros.h" #include "base/strings/stringprintf.h" +#include "chromeos/dbus/fake_cras_audio_client.h" #include "dbus/bus.h" #include "dbus/message.h" #include "dbus/object_path.h" @@ -21,10 +22,90 @@ namespace chromeos { +namespace { + +CrasAudioClient* g_instance = nullptr; + // The CrasAudioClient implementation used in production. class CrasAudioClientImpl : public CrasAudioClient { public: - CrasAudioClientImpl() : cras_proxy_(NULL), weak_ptr_factory_(this) {} + explicit CrasAudioClientImpl(dbus::Bus* bus) { + cras_proxy_ = bus->GetObjectProxy(cras::kCrasServiceName, + dbus::ObjectPath(cras::kCrasServicePath)); + + // Monitor NameOwnerChanged signal. + cras_proxy_->SetNameOwnerChangedCallback( + base::BindRepeating(&CrasAudioClientImpl::NameOwnerChangedReceived, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for output mute change. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kOutputMuteChanged, + base::BindRepeating(&CrasAudioClientImpl::OutputMuteChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for input mute change. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kInputMuteChanged, + base::BindRepeating(&CrasAudioClientImpl::InputMuteChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for nodes change. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kNodesChanged, + base::BindRepeating(&CrasAudioClientImpl::NodesChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for active output node change. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kActiveOutputNodeChanged, + base::BindRepeating( + &CrasAudioClientImpl::ActiveOutputNodeChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for active input node change. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kActiveInputNodeChanged, + base::BindRepeating( + &CrasAudioClientImpl::ActiveInputNodeChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for output node volume change. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kOutputNodeVolumeChanged, + base::BindRepeating( + &CrasAudioClientImpl::OutputNodeVolumeChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for hotword. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kHotwordTriggered, + base::BindRepeating(&CrasAudioClientImpl::HotwordTriggeredReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + + // Monitor the D-Bus signal for changes in number of active streams. + cras_proxy_->ConnectToSignal( + cras::kCrasControlInterface, cras::kNumberOfActiveStreamsChanged, + base::BindRepeating( + &CrasAudioClientImpl::NumberOfActiveStreamsChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrasAudioClientImpl::SignalConnected, + weak_ptr_factory_.GetWeakPtr())); + } ~CrasAudioClientImpl() override = default; @@ -227,82 +308,6 @@ cras_proxy_->WaitForServiceToBeAvailable(std::move(callback)); } - protected: - void Init(dbus::Bus* bus) override { - cras_proxy_ = bus->GetObjectProxy(cras::kCrasServiceName, - dbus::ObjectPath(cras::kCrasServicePath)); - - // Monitor NameOwnerChanged signal. - cras_proxy_->SetNameOwnerChangedCallback( - base::Bind(&CrasAudioClientImpl::NameOwnerChangedReceived, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for output mute change. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kOutputMuteChanged, - base::Bind(&CrasAudioClientImpl::OutputMuteChangedReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for input mute change. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kInputMuteChanged, - base::Bind(&CrasAudioClientImpl::InputMuteChangedReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for nodes change. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kNodesChanged, - base::Bind(&CrasAudioClientImpl::NodesChangedReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for active output node change. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kActiveOutputNodeChanged, - base::Bind(&CrasAudioClientImpl::ActiveOutputNodeChangedReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for active input node change. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kActiveInputNodeChanged, - base::Bind(&CrasAudioClientImpl::ActiveInputNodeChangedReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for output node volume change. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kOutputNodeVolumeChanged, - base::Bind(&CrasAudioClientImpl::OutputNodeVolumeChangedReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for hotword. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kHotwordTriggered, - base::Bind(&CrasAudioClientImpl::HotwordTriggeredReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - - // Monitor the D-Bus signal for changes in number of active streams. - cras_proxy_->ConnectToSignal( - cras::kCrasControlInterface, cras::kNumberOfActiveStreamsChanged, - base::BindRepeating( - &CrasAudioClientImpl::NumberOfActiveStreamsChangedReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CrasAudioClientImpl::SignalConnected, - weak_ptr_factory_.GetWeakPtr())); - } - private: // Called when the cras signal is initially connected. void SignalConnected(const std::string& interface_name, @@ -594,50 +599,69 @@ return true; } - dbus::ObjectProxy* cras_proxy_; + dbus::ObjectProxy* cras_proxy_ = nullptr; base::ObserverList<Observer>::Unchecked observers_; // Note: This should remain the last member so it'll be destroyed and // invalidate its weak pointers before any other members are destroyed. - base::WeakPtrFactory<CrasAudioClientImpl> weak_ptr_factory_; + base::WeakPtrFactory<CrasAudioClientImpl> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(CrasAudioClientImpl); }; +} // namespace + CrasAudioClient::Observer::~Observer() = default; -void CrasAudioClient::Observer::AudioClientRestarted() { -} +void CrasAudioClient::Observer::AudioClientRestarted() {} -void CrasAudioClient::Observer::OutputMuteChanged(bool mute_on) { -} +void CrasAudioClient::Observer::OutputMuteChanged(bool mute_on) {} -void CrasAudioClient::Observer::InputMuteChanged(bool mute_on) { -} +void CrasAudioClient::Observer::InputMuteChanged(bool mute_on) {} -void CrasAudioClient::Observer::NodesChanged() { -} +void CrasAudioClient::Observer::NodesChanged() {} void CrasAudioClient::Observer::ActiveOutputNodeChanged(uint64_t node_id) {} void CrasAudioClient::Observer::ActiveInputNodeChanged(uint64_t node_id) {} void CrasAudioClient::Observer::OutputNodeVolumeChanged(uint64_t node_id, - int volume) { -} + int volume) {} void CrasAudioClient::Observer::HotwordTriggered(uint64_t tv_sec, uint64_t tv_nsec) {} void CrasAudioClient::Observer::NumberOfActiveStreamsChanged() {} -CrasAudioClient::CrasAudioClient() = default; +CrasAudioClient::CrasAudioClient() { + DCHECK(!g_instance); + g_instance = this; +} -CrasAudioClient::~CrasAudioClient() = default; +CrasAudioClient::~CrasAudioClient() { + DCHECK_EQ(this, g_instance); + g_instance = nullptr; +} // static -CrasAudioClient* CrasAudioClient::Create() { - return new CrasAudioClientImpl(); +void CrasAudioClient::Initialize(dbus::Bus* bus) { + DCHECK(bus); + new CrasAudioClientImpl(bus); +} + +// static +void CrasAudioClient::InitializeFake() { + new FakeCrasAudioClient(); +} + +// static +void CrasAudioClient::Shutdown() { + delete g_instance; +} + +// static +CrasAudioClient* CrasAudioClient::Get() { + return g_instance; } } // namespace chromeos
diff --git a/chromeos/dbus/cras_audio_client.h b/chromeos/dbus/cras_audio_client.h index 4b2aadbd..3ef45d09 100644 --- a/chromeos/dbus/cras_audio_client.h +++ b/chromeos/dbus/cras_audio_client.h
@@ -22,7 +22,7 @@ namespace chromeos { // CrasAudioClient is used to communicate with the cras audio dbus interface. -class COMPONENT_EXPORT(CHROMEOS_DBUS) CrasAudioClient : public DBusClient { +class COMPONENT_EXPORT(CHROMEOS_DBUS) CrasAudioClient { public: // Interface for observing changes from the cras audio changes. class Observer { @@ -59,7 +59,17 @@ virtual ~Observer(); }; - ~CrasAudioClient() override; + // Creates and initializes the global instance. |bus| must not be null. + static void Initialize(dbus::Bus* bus); + + // Creates and initializes a fake global instance if not already created. + static void InitializeFake(); + + // Destroys the global instance which must have been initialized. + static void Shutdown(); + + // Returns the global instance if initialized. May return null. + static CrasAudioClient* Get(); // Adds and removes the observer. virtual void AddObserver(Observer* observer) = 0; @@ -140,14 +150,11 @@ virtual void WaitForServiceToBeAvailable( WaitForServiceToBeAvailableCallback callback) = 0; - // Creates the instance. - static CrasAudioClient* Create(); - protected: friend class CrasAudioClientTest; - // Create() should be used instead. CrasAudioClient(); + virtual ~CrasAudioClient(); private: DISALLOW_COPY_AND_ASSIGN(CrasAudioClient);
diff --git a/chromeos/dbus/cras_audio_client_unittest.cc b/chromeos/dbus/cras_audio_client_unittest.cc index dda721a3..23b00b5 100644 --- a/chromeos/dbus/cras_audio_client_unittest.cc +++ b/chromeos/dbus/cras_audio_client_unittest.cc
@@ -361,8 +361,7 @@ EXPECT_CALL(*mock_bus_.get(), ShutdownAndBlock()).WillOnce(Return()); // Create a client with the mock bus. - client_.reset(CrasAudioClient::Create()); - client_->Init(mock_bus_.get()); + CrasAudioClient::Initialize(mock_bus_.get()); // Run the message loop to run the signal connection result callback. base::RunLoop().RunUntilIdle(); } @@ -431,10 +430,10 @@ number_of_active_streams_changed_handler_.Run(signal); } + CrasAudioClient* client() { return CrasAudioClient::Get(); } + // The interface name. const std::string interface_name_; - // The client to be tested. - std::unique_ptr<CrasAudioClient> client_; // A message loop to emulate asynchronous behavior. base::MessageLoop message_loop_; // The mock bus. @@ -617,13 +616,13 @@ EXPECT_CALL(observer, OutputMuteChanged(kUserMuteOn)).Times(1); // Add the observer. - client_->AddObserver(&observer); + client()->AddObserver(&observer); // Run the signal callback. SendOutputMuteChangedSignal(&signal); // Remove the observer. - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, OutputMuteChanged(_)).Times(0); @@ -646,13 +645,13 @@ EXPECT_CALL(observer, InputMuteChanged(kInputMuteOn)).Times(1); // Add the observer. - client_->AddObserver(&observer); + client()->AddObserver(&observer); // Run the signal callback. SendInputMuteChangedSignal(&signal); // Remove the observer. - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, InputMuteChanged(_)).Times(0); @@ -674,13 +673,13 @@ EXPECT_CALL(observer, HotwordTriggered(_, _)).Times(1); // Add the observer. - client_->AddObserver(&observer); + client()->AddObserver(&observer); // Run the signal callback. SendHotwordTriggeredSignal(&signal); // Remove the observer. - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, HotwordTriggered(_, _)).Times(0); @@ -696,11 +695,11 @@ MockObserver observer; EXPECT_CALL(observer, NumberOfActiveStreamsChanged()).Times(1); - client_->AddObserver(&observer); + client()->AddObserver(&observer); SendNumberOfActiveStreamsChangedSignal(&signal); - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, NumberOfActiveStreamsChanged()).Times(0); @@ -719,13 +718,13 @@ EXPECT_CALL(observer, NodesChanged()).Times(1); // Add the observer. - client_->AddObserver(&observer); + client()->AddObserver(&observer); // Run the signal callback. SendNodesChangedSignal(&signal); // Remove the observer. - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, NodesChanged()).Times(0); @@ -748,13 +747,13 @@ EXPECT_CALL(observer, ActiveOutputNodeChanged(kNodeId)).Times(1); // Add the observer. - client_->AddObserver(&observer); + client()->AddObserver(&observer); // Run the signal callback. SendActiveOutputNodeChangedSignal(&signal); // Remove the observer. - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, ActiveOutputNodeChanged(_)).Times(0); // Run the signal callback again and make sure the observer isn't called. @@ -776,13 +775,13 @@ EXPECT_CALL(observer, ActiveInputNodeChanged(kNodeId)).Times(1); // Add the observer. - client_->AddObserver(&observer); + client()->AddObserver(&observer); // Run the signal callback. SendActiveInputNodeChangedSignal(&signal); // Remove the observer. - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, ActiveInputNodeChanged(_)).Times(0); // Run the signal callback again and make sure the observer isn't called. @@ -806,13 +805,13 @@ EXPECT_CALL(observer, OutputNodeVolumeChanged(kNodeId, volume)).Times(1); // Add the observer. - client_->AddObserver(&observer); + client()->AddObserver(&observer); // Run the signal callback. SendOutputNodeVolumeChangedSignal(&signal); // Remove the observer. - client_->RemoveObserver(&observer); + client()->RemoveObserver(&observer); EXPECT_CALL(observer, OutputNodeVolumeChanged(_, _)).Times(0); // Run the signal callback again and make sure the observer isn't called. @@ -836,7 +835,7 @@ response.get()); // Call method. bool called = false; - client_->GetNodes( + client()->GetNodes( base::BindOnce(&ExpectAudioNodeListResult, &called, expected_node_list)); // Run the message loop. base::RunLoop().RunUntilIdle(); @@ -858,7 +857,7 @@ // Call method. bool called = false; - client_->GetNodes( + client()->GetNodes( base::BindOnce(&ExpectAudioNodeListResult, &called, expected_node_list)); // Run the message loop. base::RunLoop().RunUntilIdle(); @@ -878,7 +877,7 @@ kVolume), response.get()); // Call method. - client_->SetOutputNodeVolume(kNodeId, kVolume); + client()->SetOutputNodeVolume(kNodeId, kVolume); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -893,7 +892,7 @@ base::Bind(&ExpectBoolArgument, kUserMuteOn), response.get()); // Call method. - client_->SetOutputUserMute(kUserMuteOn); + client()->SetOutputUserMute(kUserMuteOn); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -911,7 +910,7 @@ kInputGain), response.get()); // Call method. - client_->SetInputNodeGain(kNodeId, kInputGain); + client()->SetInputNodeGain(kNodeId, kInputGain); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -926,7 +925,7 @@ base::Bind(&ExpectBoolArgument, kInputMuteOn), response.get()); // Call method. - client_->SetInputMute(kInputMuteOn); + client()->SetInputMute(kInputMuteOn); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -941,7 +940,7 @@ base::Bind(&ExpectUint64Argument, kNodeId), response.get()); // Call method. - client_->SetActiveOutputNode(kNodeId); + client()->SetActiveOutputNode(kNodeId); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -956,7 +955,7 @@ base::Bind(&ExpectUint64Argument, kNodeId), response.get()); // Call method. - client_->SetActiveInputNode(kNodeId); + client()->SetActiveInputNode(kNodeId); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -971,7 +970,7 @@ base::Bind(&ExpectUint64Argument, kNodeId), response.get()); // Call method. - client_->AddActiveInputNode(kNodeId); + client()->AddActiveInputNode(kNodeId); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -986,7 +985,7 @@ base::Bind(&ExpectUint64Argument, kNodeId), response.get()); // Call method. - client_->RemoveActiveInputNode(kNodeId); + client()->RemoveActiveInputNode(kNodeId); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -1001,7 +1000,7 @@ base::Bind(&ExpectUint64Argument, kNodeId), response.get()); // Call method. - client_->AddActiveOutputNode(kNodeId); + client()->AddActiveOutputNode(kNodeId); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -1016,7 +1015,7 @@ base::Bind(&ExpectUint64Argument, kNodeId), response.get()); // Call method. - client_->RemoveActiveOutputNode(kNodeId); + client()->RemoveActiveOutputNode(kNodeId); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -1034,7 +1033,7 @@ kSwap), response.get()); // Call method. - client_->SwapLeftRight(kNodeId, kSwap); + client()->SwapLeftRight(kNodeId, kSwap); // Run the message loop. base::RunLoop().RunUntilIdle(); } @@ -1053,7 +1052,7 @@ response.get()); // Call method. - client_->SetGlobalOutputChannelRemix(kChannels, kMixer); + client()->SetGlobalOutputChannelRemix(kChannels, kMixer); // Run the message loop. base::RunLoop().RunUntilIdle(); }
diff --git a/chromeos/dbus/cryptohome/fake_cryptohome_client.cc b/chromeos/dbus/cryptohome/fake_cryptohome_client.cc index 587fcafb..2e108ca 100644 --- a/chromeos/dbus/cryptohome/fake_cryptohome_client.cc +++ b/chromeos/dbus/cryptohome/fake_cryptohome_client.cc
@@ -47,6 +47,9 @@ } // namespace +// static +constexpr char FakeCryptohomeClient::kStubTpmPassword[] = "Stub-TPM-password"; + FakeCryptohomeClient::FakeCryptohomeClient() : service_is_available_(true), remove_firmware_management_parameters_from_tpm_call_count_(0), @@ -184,7 +187,6 @@ void FakeCryptohomeClient::TpmGetPassword( DBusMethodCallback<std::string> callback) { - constexpr char kStubTpmPassword[] = "Stub-TPM-password"; base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), std::string(kStubTpmPassword)));
diff --git a/chromeos/dbus/cryptohome/fake_cryptohome_client.h b/chromeos/dbus/cryptohome/fake_cryptohome_client.h index 982127e..e28d25d8 100644 --- a/chromeos/dbus/cryptohome/fake_cryptohome_client.h +++ b/chromeos/dbus/cryptohome/fake_cryptohome_client.h
@@ -36,6 +36,9 @@ // Checks that a FakeCryptohome instance was initialized and returns it. static FakeCryptohomeClient* Get(); + // Expose stub password for tests. + static const char kStubTpmPassword[]; + // CryptohomeClient overrides void AddObserver(Observer* observer) override; void RemoveObserver(Observer* observer) override;
diff --git a/chromeos/dbus/dbus_client.h b/chromeos/dbus/dbus_client.h index b39755f..59254f013 100644 --- a/chromeos/dbus/dbus_client.h +++ b/chromeos/dbus/dbus_client.h
@@ -27,7 +27,6 @@ private: friend class DBusClientsBrowser; - friend class DBusClientsCommon; DISALLOW_ASSIGN(DBusClient); };
diff --git a/chromeos/dbus/dbus_clients_common.cc b/chromeos/dbus/dbus_clients_common.cc deleted file mode 100644 index 6367250e..0000000 --- a/chromeos/dbus/dbus_clients_common.cc +++ /dev/null
@@ -1,29 +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 "chromeos/dbus/dbus_clients_common.h" - -#include "chromeos/dbus/cras_audio_client.h" -#include "chromeos/dbus/dbus_client_implementation_type.h" -#include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/fake_cras_audio_client.h" - -namespace chromeos { - -DBusClientsCommon::DBusClientsCommon(bool use_real_clients) { - if (use_real_clients) - cras_audio_client_.reset(CrasAudioClient::Create()); - else - cras_audio_client_.reset(new FakeCrasAudioClient); -} - -DBusClientsCommon::~DBusClientsCommon() = default; - -void DBusClientsCommon::Initialize(dbus::Bus* system_bus) { - DCHECK(DBusThreadManager::IsInitialized()); - - cras_audio_client_->Init(system_bus); -} - -} // namespace chromeos
diff --git a/chromeos/dbus/dbus_clients_common.h b/chromeos/dbus/dbus_clients_common.h deleted file mode 100644 index f8d26ce..0000000 --- a/chromeos/dbus/dbus_clients_common.h +++ /dev/null
@@ -1,43 +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. - -#ifndef CHROMEOS_DBUS_DBUS_CLIENTS_COMMON_H_ -#define CHROMEOS_DBUS_DBUS_CLIENTS_COMMON_H_ - -#include <memory> - -#include "base/component_export.h" -#include "base/macros.h" - -namespace dbus { -class Bus; -} - -namespace chromeos { - -class CrasAudioClient; - -// D-Bus clients used in multiple processes (e.g. ash, browser, mus). -class COMPONENT_EXPORT(CHROMEOS_DBUS) DBusClientsCommon { - public: - // Creates real implementations if |use_real_clients| is true and fakes - // otherwise. Fakes are used when running on Linux desktop and in tests. - explicit DBusClientsCommon(bool use_real_clients); - ~DBusClientsCommon(); - - // Initialize proper runtime environment for its dbus clients. - void Initialize(dbus::Bus* system_bus); - - private: - friend class DBusThreadManager; - friend class DBusThreadManagerSetter; - - std::unique_ptr<CrasAudioClient> cras_audio_client_; - - DISALLOW_COPY_AND_ASSIGN(DBusClientsCommon); -}; - -} // namespace chromeos - -#endif // CHROMEOS_DBUS_DBUS_CLIENTS_COMMON_H_
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc index de4e5cd4..e5ecdab 100644 --- a/chromeos/dbus/dbus_thread_manager.cc +++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -18,11 +18,9 @@ #include "chromeos/dbus/cicerone_client.h" #include "chromeos/dbus/concierge_client.h" #include "chromeos/dbus/constants/dbus_switches.h" -#include "chromeos/dbus/cras_audio_client.h" #include "chromeos/dbus/cros_disks_client.h" #include "chromeos/dbus/dbus_client.h" #include "chromeos/dbus/dbus_clients_browser.h" -#include "chromeos/dbus/dbus_clients_common.h" #include "chromeos/dbus/debug_daemon_client.h" #include "chromeos/dbus/easy_unlock_client.h" #include "chromeos/dbus/image_burner_client.h" @@ -52,8 +50,7 @@ DBusThreadManager::DBusThreadManager(ClientSet client_set, bool use_real_clients) - : use_real_clients_(use_real_clients), - clients_common_(new DBusClientsCommon(use_real_clients)) { + : use_real_clients_(use_real_clients) { if (client_set == DBusThreadManager::kAll) clients_browser_.reset(new DBusClientsBrowser(use_real_clients)); // NOTE: When there are clients only used by ash, create them here. @@ -79,7 +76,6 @@ DBusThreadManager::~DBusThreadManager() { // Delete all D-Bus clients before shutting down the system bus. clients_browser_.reset(); - clients_common_.reset(); // Shut down the bus. During the browser shutdown, it's ok to shut down // the bus synchronously. @@ -142,10 +138,6 @@ return clients_browser_ ? clients_browser_->concierge_client_.get() : nullptr; } -CrasAudioClient* DBusThreadManager::GetCrasAudioClient() { - return clients_common_->cras_audio_client_.get(); -} - CrosDisksClient* DBusThreadManager::GetCrosDisksClient() { return clients_browser_ ? clients_browser_->cros_disks_client_.get() : nullptr; @@ -251,8 +243,6 @@ // Some clients call DBusThreadManager::Get() during initialization. DCHECK(g_dbus_thread_manager); - clients_common_->Initialize(GetSystemBus()); - // TODO(stevenjb): Move these to dbus_helper.cc in src/chrome and any tests // that require Shill clients. https://crbug.com/948390. if (use_real_clients_) @@ -352,12 +342,6 @@ std::move(client); } -void DBusThreadManagerSetter::SetCrasAudioClient( - std::unique_ptr<CrasAudioClient> client) { - DBusThreadManager::Get()->clients_common_->cras_audio_client_ = - std::move(client); -} - void DBusThreadManagerSetter::SetCrosDisksClient( std::unique_ptr<CrosDisksClient> client) { DBusThreadManager::Get()->clients_browser_->cros_disks_client_ =
diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h index b5efc2e..8e56bbb 100644 --- a/chromeos/dbus/dbus_thread_manager.h +++ b/chromeos/dbus/dbus_thread_manager.h
@@ -31,10 +31,8 @@ class CecServiceClient; class CiceroneClient; class ConciergeClient; -class CrasAudioClient; class CrosDisksClient; class DBusClientsBrowser; -class DBusClientsCommon; class DBusThreadManagerSetter; class DebugDaemonClient; class DiagnosticsdClient; @@ -123,7 +121,6 @@ CecServiceClient* GetCecServiceClient(); CiceroneClient* GetCiceroneClient(); ConciergeClient* GetConciergeClient(); - CrasAudioClient* GetCrasAudioClient(); CrosDisksClient* GetCrosDisksClient(); DebugDaemonClient* GetDebugDaemonClient(); DiagnosticsdClient* GetDiagnosticsdClient(); @@ -168,9 +165,6 @@ // Whether to use real or fake dbus clients. const bool use_real_clients_; - // Clients used by multiple processes. - std::unique_ptr<DBusClientsCommon> clients_common_; - // Clients used only by the browser process. Null in other processes. std::unique_ptr<DBusClientsBrowser> clients_browser_; @@ -184,7 +178,6 @@ void SetCiceroneClient(std::unique_ptr<CiceroneClient> client); void SetConciergeClient(std::unique_ptr<ConciergeClient> client); - void SetCrasAudioClient(std::unique_ptr<CrasAudioClient> client); void SetCrosDisksClient(std::unique_ptr<CrosDisksClient> client); void SetDebugDaemonClient(std::unique_ptr<DebugDaemonClient> client); void SetImageBurnerClient(std::unique_ptr<ImageBurnerClient> client);
diff --git a/chromeos/dbus/dbus_thread_manager_unittest.cc b/chromeos/dbus/dbus_thread_manager_unittest.cc index 4262eeaf..9898cbc 100644 --- a/chromeos/dbus/dbus_thread_manager_unittest.cc +++ b/chromeos/dbus/dbus_thread_manager_unittest.cc
@@ -25,7 +25,6 @@ EXPECT_TRUE(manager->GetArcOemCryptoClient()); EXPECT_TRUE(manager->GetCiceroneClient()); EXPECT_TRUE(manager->GetConciergeClient()); - EXPECT_TRUE(manager->GetCrasAudioClient()); EXPECT_TRUE(manager->GetCrosDisksClient()); EXPECT_TRUE(manager->GetDebugDaemonClient()); EXPECT_TRUE(manager->GetEasyUnlockClient()); @@ -54,7 +53,6 @@ ASSERT_TRUE(manager); // Common clients were created. - EXPECT_TRUE(manager->GetCrasAudioClient()); EXPECT_TRUE(manager->GetGsmSMSClient()); EXPECT_TRUE(manager->GetModemMessagingClient()); EXPECT_TRUE(manager->GetShillDeviceClient()); @@ -89,7 +87,6 @@ ASSERT_TRUE(manager); // Common clients were created. - EXPECT_TRUE(manager->GetCrasAudioClient()); EXPECT_TRUE(manager->GetGsmSMSClient()); EXPECT_TRUE(manager->GetModemMessagingClient()); EXPECT_TRUE(manager->GetShillDeviceClient());
diff --git a/chromeos/dbus/fake_cras_audio_client.cc b/chromeos/dbus/fake_cras_audio_client.cc index a6739c8..7e51b5da 100644 --- a/chromeos/dbus/fake_cras_audio_client.cc +++ b/chromeos/dbus/fake_cras_audio_client.cc
@@ -8,14 +8,16 @@ namespace chromeos { -FakeCrasAudioClient::FakeCrasAudioClient() - : active_input_node_id_(0), - active_output_node_id_(0) { -} +namespace { -FakeCrasAudioClient::~FakeCrasAudioClient() = default; +FakeCrasAudioClient* g_instance = nullptr; -void FakeCrasAudioClient::Init(dbus::Bus* bus) { +} // namespace + +FakeCrasAudioClient::FakeCrasAudioClient() { + CHECK(!g_instance); + g_instance = this; + VLOG(1) << "FakeCrasAudioClient is created"; // Fake audio output nodes. @@ -84,6 +86,16 @@ node_list_.push_back(input_3); } +FakeCrasAudioClient::~FakeCrasAudioClient() { + CHECK_EQ(this, g_instance); + g_instance = nullptr; +} + +// static +FakeCrasAudioClient* FakeCrasAudioClient::Get() { + return g_instance; +} + void FakeCrasAudioClient::AddObserver(Observer* observer) { observers_.AddObserver(observer); }
diff --git a/chromeos/dbus/fake_cras_audio_client.h b/chromeos/dbus/fake_cras_audio_client.h index 8a8b239..e26ff85 100644 --- a/chromeos/dbus/fake_cras_audio_client.h +++ b/chromeos/dbus/fake_cras_audio_client.h
@@ -22,8 +22,9 @@ FakeCrasAudioClient(); ~FakeCrasAudioClient() override; + static FakeCrasAudioClient* Get(); + // CrasAudioClient overrides: - void Init(dbus::Bus* bus) override; void AddObserver(Observer* observer) override; void RemoveObserver(Observer* observer) override; bool HasObserver(const Observer* observer) const override; @@ -86,8 +87,8 @@ VolumeState volume_state_; AudioNodeList node_list_; - uint64_t active_input_node_id_; - uint64_t active_output_node_id_; + uint64_t active_input_node_id_ = 0; + uint64_t active_output_node_id_ = 0; // By default, immediately sends OutputNodeVolumeChange signal following the // SetOutputNodeVolume fake dbus call. bool notify_volume_change_with_delay_ = false;
diff --git a/chromeos/dbus/power/BUILD.gn b/chromeos/dbus/power/BUILD.gn new file mode 100644 index 0000000..1255b64 --- /dev/null +++ b/chromeos/dbus/power/BUILD.gn
@@ -0,0 +1,66 @@ +# Copyright 2019 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. + +import("//third_party/protobuf/proto_library.gni") + +assert(is_chromeos, "Non-Chrome-OS builds cannot depend on //chromeos") + +component("power") { + defines = [ "IS_DBUS_POWER_IMPL" ] + + deps = [ + ":power_manager_proto", + "//base", + "//chromeos/dbus:common", + "//components/device_event_log", + "//dbus", + ] + + sources = [ + "fake_power_manager_client.cc", + "fake_power_manager_client.h", + "native_timer.cc", + "native_timer.h", + "power_manager_client.cc", + "power_manager_client.h", + "power_policy_controller.cc", + "power_policy_controller.h", + ] +} + +source_set("test_support") { + testonly = true + public_deps = [ + ":power", + ] + deps = [ + ":power_manager_proto", + "//base", + "//base/test:test_support", + "//dbus:test_support", + "//testing/gmock", + "//testing/gtest", + ] + + sources = [ + "fake_power_manager_client_unittest.cc", + "power_manager_client_unittest.cc", + "power_policy_controller_unittest.cc", + ] +} + +proto_library("power_manager_proto") { + sources = [ + "//third_party/cros_system_api/dbus/power_manager/backlight.proto", + "//third_party/cros_system_api/dbus/power_manager/idle.proto", + "//third_party/cros_system_api/dbus/power_manager/input_event.proto", + "//third_party/cros_system_api/dbus/power_manager/peripheral_battery_status.proto", + "//third_party/cros_system_api/dbus/power_manager/policy.proto", + "//third_party/cros_system_api/dbus/power_manager/power_supply_properties.proto", + "//third_party/cros_system_api/dbus/power_manager/suspend.proto", + "//third_party/cros_system_api/dbus/power_manager/switch_states.proto", + ] + + proto_out_dir = "chromeos/dbus/power_manager" +}
diff --git a/chromeos/dbus/power/fake_power_manager_client.h b/chromeos/dbus/power/fake_power_manager_client.h index 77ec74f..9ba5e1f 100644 --- a/chromeos/dbus/power/fake_power_manager_client.h +++ b/chromeos/dbus/power/fake_power_manager_client.h
@@ -31,7 +31,7 @@ // A fake implementation of PowerManagerClient. This remembers the policy passed // to SetPolicy() and the user of this class can inspect the last set policy by // get_policy(). -class COMPONENT_EXPORT(CHROMEOS_DBUS) FakePowerManagerClient +class COMPONENT_EXPORT(DBUS_POWER) FakePowerManagerClient : public PowerManagerClient { public: FakePowerManagerClient();
diff --git a/chromeos/dbus/power/native_timer.h b/chromeos/dbus/power/native_timer.h index 242a192da..da492aa 100644 --- a/chromeos/dbus/power/native_timer.h +++ b/chromeos/dbus/power/native_timer.h
@@ -27,7 +27,7 @@ // Sets timers that can also wake up the device from suspend by making D-Bus // calls to the power daemon. -class COMPONENT_EXPORT(CHROMEOS_DBUS) NativeTimer { +class COMPONENT_EXPORT(DBUS_POWER) NativeTimer { public: explicit NativeTimer(const std::string& tag);
diff --git a/chromeos/dbus/power/power_manager_client.cc b/chromeos/dbus/power/power_manager_client.cc index ecbf593..971d7ac 100644 --- a/chromeos/dbus/power/power_manager_client.cc +++ b/chromeos/dbus/power/power_manager_client.cc
@@ -23,7 +23,6 @@ #include "base/strings/stringprintf.h" #include "base/threading/platform_thread.h" #include "base/timer/timer.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/dbus/power_manager/backlight.pb.h" #include "chromeos/dbus/power_manager/idle.pb.h"
diff --git a/chromeos/dbus/power/power_manager_client.h b/chromeos/dbus/power/power_manager_client.h index 5b6fbc0..26d25e5 100644 --- a/chromeos/dbus/power/power_manager_client.h +++ b/chromeos/dbus/power/power_manager_client.h
@@ -37,7 +37,7 @@ namespace chromeos { // PowerManagerClient is used to communicate with the power manager. -class COMPONENT_EXPORT(CHROMEOS_DBUS) PowerManagerClient { +class COMPONENT_EXPORT(DBUS_POWER) PowerManagerClient { public: using TimerId = int32_t;
diff --git a/chromeos/dbus/power/power_policy_controller.h b/chromeos/dbus/power/power_policy_controller.h index 26fff7b8..2c6ef8f 100644 --- a/chromeos/dbus/power/power_policy_controller.h +++ b/chromeos/dbus/power/power_policy_controller.h
@@ -18,7 +18,7 @@ // PowerPolicyController is responsible for sending Chrome's assorted power // management preferences to the Chrome OS power manager. -class COMPONENT_EXPORT(CHROMEOS_DBUS) PowerPolicyController +class COMPONENT_EXPORT(DBUS_POWER) PowerPolicyController : public PowerManagerClient::Observer { public: // Sets the global instance. Must be called before any calls to Get().
diff --git a/chromeos/disks/BUILD.gn b/chromeos/disks/BUILD.gn index 90b73ced..1f8f7d7 100644 --- a/chromeos/disks/BUILD.gn +++ b/chromeos/disks/BUILD.gn
@@ -12,7 +12,8 @@ "//base", "//chromeos/constants", "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", ] sources = [ "disk.cc", @@ -32,8 +33,8 @@ deps = [ "//base", "//base/test:test_support", - "//chromeos/dbus:power_manager_proto", "//chromeos/dbus:test_support", + "//chromeos/dbus/power:power_manager_proto", "//testing/gmock", "//testing/gtest", ] @@ -50,8 +51,9 @@ ":test_support", "//base/test:test_support", "//chromeos/constants", - "//chromeos/dbus:power_manager_proto", "//chromeos/dbus:test_support", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//testing/gmock", "//testing/gtest", ]
diff --git a/chromeos/services/assistant/BUILD.gn b/chromeos/services/assistant/BUILD.gn index 4533515c..677dbf8 100644 --- a/chromeos/services/assistant/BUILD.gn +++ b/chromeos/services/assistant/BUILD.gn
@@ -37,7 +37,8 @@ "//chromeos/audio", "//chromeos/constants", "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//components/account_id", "//services/device/public/mojom", "//services/identity/public/mojom", @@ -133,6 +134,7 @@ "//base", "//base/test:test_support", "//chromeos/dbus:test_support", + "//chromeos/dbus/power", "//chromeos/services/assistant/public/mojom", "//mojo/public/cpp/bindings:bindings", "//services/device/public/mojom",
diff --git a/chromeos/services/assistant/service_unittest.cc b/chromeos/services/assistant/service_unittest.cc index 9ab76f11..fa756e466 100644 --- a/chromeos/services/assistant/service_unittest.cc +++ b/chromeos/services/assistant/service_unittest.cc
@@ -189,15 +189,18 @@ std::make_unique<FakeAssistantManagerServiceImpl>(); fake_assistant_manager_ = fake_assistant_manager.get(); service_->SetAssistantManagerForTesting(std::move(fake_assistant_manager)); - } - void SetUp() override { GetPlatform()->Init(fake_assistant_client_.CreateInterfacePtrAndBind(), fake_device_actions_.CreateInterfacePtrAndBind()); platform_.FlushForTesting(); base::RunLoop().RunUntilIdle(); } + ~AssistantServiceTest() override { + service_.reset(); + PowerManagerClient::Shutdown(); + } + mojom::AssistantPlatform* GetPlatform() { if (!platform_) connector_->BindInterface(mojom::kServiceName, &platform_);
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index f43fdd8..ae0a271 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -85,9 +85,10 @@ "//chromeos/audio", "//chromeos/constants", "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", "//chromeos/dbus/cryptohome", "//chromeos/dbus/permission_broker", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//chromeos/dbus/session_manager", "//chromeos/dbus/session_manager:login_manager_proto", "//chromeos/disks", @@ -353,9 +354,10 @@ "//base/test:test_support", "//chromeos/constants", "//chromeos/cryptohome:test_support", - "//chromeos/dbus:power_manager_proto", "//chromeos/dbus:test_support", "//chromeos/dbus/permission_broker", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//chromeos/dbus/session_manager", "//chromeos/dbus/session_manager:login_manager_proto", "//chromeos/dbus/upstart",
diff --git a/components/arc/audio/arc_audio_bridge.cc b/components/arc/audio/arc_audio_bridge.cc index 0048eca..a47d06711 100644 --- a/components/arc/audio/arc_audio_bridge.cc +++ b/components/arc/audio/arc_audio_bridge.cc
@@ -48,18 +48,15 @@ ArcAudioBridge::ArcAudioBridge(content::BrowserContext* context, ArcBridgeService* bridge_service) - : arc_bridge_service_(bridge_service) { + : arc_bridge_service_(bridge_service), + cras_audio_handler_(chromeos::CrasAudioHandler::Get()) { arc_bridge_service_->audio()->SetHost(this); arc_bridge_service_->audio()->AddObserver(this); - if (chromeos::CrasAudioHandler::IsInitialized()) { - cras_audio_handler_ = chromeos::CrasAudioHandler::Get(); - cras_audio_handler_->AddAudioObserver(this); - } + cras_audio_handler_->AddAudioObserver(this); } ArcAudioBridge::~ArcAudioBridge() { - if (cras_audio_handler_) - cras_audio_handler_->RemoveAudioObserver(this); + cras_audio_handler_->RemoveAudioObserver(this); arc_bridge_service_->audio()->RemoveObserver(this); arc_bridge_service_->audio()->SetHost(nullptr); }
diff --git a/components/arc/audio/arc_audio_bridge.h b/components/arc/audio/arc_audio_bridge.h index 9a352f4..347b91c 100644 --- a/components/arc/audio/arc_audio_bridge.h +++ b/components/arc/audio/arc_audio_bridge.h
@@ -53,7 +53,7 @@ ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager. - chromeos::CrasAudioHandler* cras_audio_handler_ = nullptr; + chromeos::CrasAudioHandler* cras_audio_handler_; int volume_ = 0; // Volume range: 0-100. bool muted_ = false;
diff --git a/components/flags_ui/resources/flags.js b/components/flags_ui/resources/flags.js index 8cc6672d..6531c06 100644 --- a/components/flags_ui/resources/flags.js +++ b/components/flags_ui/resources/flags.js
@@ -325,7 +325,8 @@ document.querySelectorAll('#tab-content-unavailable p'); if (!this.initialized) { - this.searchBox_.addEventListener('keyup', this.debounceSearch.bind(this)); + this.searchBox_.addEventListener('input', this.debounceSearch.bind(this)); + document.querySelector('.clear-search').addEventListener('click', this.clearSearch.bind(this)); @@ -457,9 +458,8 @@ /** * Performs a search against the experiment title, description, permalink. - * @param {Event} e */ - doSearch: function(e) { + doSearch: function() { var searchTerm = this.searchBox_.value.trim().toLowerCase(); @@ -479,9 +479,8 @@ /** * Debounces the search to improve performance and prevent too many searches * from being initiated. - * @param {Event} e */ - debounceSearch: function(e) { + debounceSearch: function() { // Don't search if the search term did not change. if (this.searchValue_ == this.searchBox_.value) { return;
diff --git a/components/history/core/browser/history_database.cc b/components/history/core/browser/history_database.cc index 8499bc5..55e8c4e 100644 --- a/components/history/core/browser/history_database.cc +++ b/components/history/core/browser/history_database.cc
@@ -333,7 +333,7 @@ "SELECT segment_id FROM visits WHERE id = ?")); s.BindInt64(0, visit_id); - if (!s.Step() || s.ColumnType(0) == sql::ColumnType::kNull) + if (!s.Step() || s.GetColumnType(0) == sql::ColumnType::kNull) return 0; return s.ColumnInt64(0); }
diff --git a/components/history/core/browser/thumbnail_database.cc b/components/history/core/browser/thumbnail_database.cc index 3664870..cfc3a9c 100644 --- a/components/history/core/browser/thumbnail_database.cc +++ b/components/history/core/browser/thumbnail_database.cc
@@ -655,7 +655,7 @@ return false; // Return false also if there there is no bitmap with |icon_id|. - if (statement.ColumnType(0) == sql::ColumnType::kNull) + if (statement.GetColumnType(0) == sql::ColumnType::kNull) return false; if (last_updated) {
diff --git a/components/language/core/browser/language_prefs.cc b/components/language/core/browser/language_prefs.cc index df258ca..41ef9d0d 100644 --- a/components/language/core/browser/language_prefs.cc +++ b/components/language/core/browser/language_prefs.cc
@@ -6,6 +6,7 @@ #include <algorithm> #include <set> +#include <string> #include <utility> #include <vector>
diff --git a/components/offline_pages/core/model/add_page_task.cc b/components/offline_pages/core/model/add_page_task.cc index 4dff380..0e3df54d6 100644 --- a/components/offline_pages/core/model/add_page_task.cc +++ b/components/offline_pages/core/model/add_page_task.cc
@@ -39,12 +39,12 @@ sql::Database* db) { static const char kSql[] = "INSERT OR IGNORE INTO offlinepages_v1" - " (offline_id,online_url,client_namespace,client_id,file_path," - "file_size,creation_time,last_access_time,access_count," - "title,original_url,request_origin,system_download_id," - "file_missing_time,digest)" + " (offline_id,online_url,client_namespace,client_id,file_path,file_size," + "creation_time,last_access_time,access_count,title,original_url," + "request_origin,system_download_id,file_missing_time,digest," + "snippet,attribution)" " VALUES " - "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); statement.BindInt64(0, item.offline_id); @@ -62,6 +62,8 @@ statement.BindInt64(12, item.system_download_id); statement.BindInt64(13, store_utils::ToDatabaseTime(item.file_missing_time)); statement.BindString(14, item.digest); + statement.BindString(15, item.snippet); + statement.BindString(16, item.attribution); if (!statement.Run()) return ItemActionStatus::STORE_ERROR;
diff --git a/components/offline_pages/core/model/add_page_task_unittest.cc b/components/offline_pages/core/model/add_page_task_unittest.cc index 9f54ccc..903ea15 100644 --- a/components/offline_pages/core/model/add_page_task_unittest.cc +++ b/components/offline_pages/core/model/add_page_task_unittest.cc
@@ -37,6 +37,8 @@ const base::string16 kTestTitle = base::UTF8ToUTF16("a title"); const int64_t kTestDownloadId = 767574LL; const std::string kTestDigest("TesTIngDigEst=="); +const std::string kTestAttribution = "attribution"; +const std::string kTestSnippet = "snippet"; } // namespace @@ -99,6 +101,8 @@ page.system_download_id = kTestDownloadId; page.file_missing_time = base::Time::Now(); page.digest = kTestDigest; + page.attribution = kTestAttribution; + page.snippet = kTestSnippet; AddPage(page);
diff --git a/components/offline_pages/core/model/offline_page_test_utils.cc b/components/offline_pages/core/model/offline_page_test_utils.cc index 3d36207..c962a4b 100644 --- a/components/offline_pages/core/model/offline_page_test_utils.cc +++ b/components/offline_pages/core/model/offline_page_test_utils.cc
@@ -78,6 +78,12 @@ if (!item.digest.empty()) { value.SetKey("digest", Value(item.digest)); } + if (!item.snippet.empty()) { + value.SetKey("snippet", Value(item.snippet)); + } + if (!item.attribution.empty()) { + value.SetKey("attribution", Value(item.attribution)); + } std::string value_string; base::JSONWriter::Write(value, &value_string);
diff --git a/components/offline_pages/core/model/store_thumbnail_task.cc b/components/offline_pages/core/model/store_thumbnail_task.cc index 67e0fb57..7eaf2711 100644 --- a/components/offline_pages/core/model/store_thumbnail_task.cc +++ b/components/offline_pages/core/model/store_thumbnail_task.cc
@@ -18,12 +18,13 @@ bool StoreThumbnailSync(const OfflinePageThumbnail& thumbnail, sql::Database* db) { static const char kSql[] = - "INSERT OR REPLACE INTO page_thumbnails (offline_id, expiration, " - "thumbnail) VALUES (?, ?, ?)"; + "INSERT OR REPLACE INTO page_thumbnails (offline_id,expiration,thumbnail," + "favicon) VALUES (?,?,?,?)"; sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); statement.BindInt64(0, thumbnail.offline_id); statement.BindInt64(1, store_utils::ToDatabaseTime(thumbnail.expiration)); statement.BindString(2, thumbnail.thumbnail); + statement.BindString(3, std::string()); return statement.Run(); }
diff --git a/components/offline_pages/core/offline_page_item.h b/components/offline_pages/core/offline_page_item.h index 578fce40..291475f 100644 --- a/components/offline_pages/core/offline_page_item.h +++ b/components/offline_pages/core/offline_page_item.h
@@ -92,6 +92,10 @@ // page can be trusted. This field will always be an empty string for // temporary and shared pages. std::string digest; + // Snippet from the article. + std::string snippet; + // Text indicating the article's publisher. + std::string attribution; }; // This operator is for testing only, see offline_page_test_utils.cc.
diff --git a/components/offline_pages/core/offline_page_metadata_store.cc b/components/offline_pages/core/offline_page_metadata_store.cc index 75c36878..b7eff48 100644 --- a/components/offline_pages/core/offline_page_metadata_store.cc +++ b/components/offline_pages/core/offline_page_metadata_store.cc
@@ -41,7 +41,7 @@ } bool CreateOfflinePagesTable(sql::Database* db) { - static const char kSql[] = + static const char kCreateLatestOfflinePagesTableSql[] = "CREATE TABLE IF NOT EXISTS " OFFLINE_PAGES_TABLE_NAME "(offline_id INTEGER PRIMARY KEY NOT NULL," " creation_time INTEGER NOT NULL," @@ -60,9 +60,11 @@ " title VARCHAR NOT NULL DEFAULT ''," " original_url VARCHAR NOT NULL DEFAULT ''," " request_origin VARCHAR NOT NULL DEFAULT ''," - " digest VARCHAR NOT NULL DEFAULT ''" + " digest VARCHAR NOT NULL DEFAULT ''," + " snippet VARCHAR NOT NULL DEFAULT ''," + " attribution VARCHAR NOT NULL DEFAULT ''" ")"; - return db->Execute(kSql); + return db->Execute(kCreateLatestOfflinePagesTableSql); } bool UpgradeWithQuery(sql::Database* db, const char* upgrade_sql) { @@ -70,7 +72,26 @@ " RENAME TO temp_" OFFLINE_PAGES_TABLE_NAME)) { return false; } - if (!CreateOfflinePagesTable(db)) + static const char kCreateOfflinePagesTableVersion1Sql[] = + "CREATE TABLE IF NOT EXISTS " OFFLINE_PAGES_TABLE_NAME + "(offline_id INTEGER PRIMARY KEY NOT NULL," + " creation_time INTEGER NOT NULL," + " file_size INTEGER NOT NULL," + " last_access_time INTEGER NOT NULL," + " access_count INTEGER NOT NULL," + " system_download_id INTEGER NOT NULL DEFAULT 0," + " file_missing_time INTEGER NOT NULL DEFAULT 0," + " upgrade_attempt INTEGER NOT NULL DEFAULT 0," + " client_namespace VARCHAR NOT NULL," + " client_id VARCHAR NOT NULL," + " online_url VARCHAR NOT NULL," + " file_path VARCHAR NOT NULL," + " title VARCHAR NOT NULL DEFAULT ''," + " original_url VARCHAR NOT NULL DEFAULT ''," + " request_origin VARCHAR NOT NULL DEFAULT ''," + " digest VARCHAR NOT NULL DEFAULT ''" + ")"; + if (!db->Execute(kCreateOfflinePagesTableVersion1Sql)) return false; if (!db->Execute(upgrade_sql)) return false; @@ -178,11 +199,14 @@ } bool CreatePageThumbnailsTable(sql::Database* db) { + // TODO: The next schema change that modifies existing columns on this table + // should also add "DEFAULT x''" to the definition of the "thumbnail" column. static const char kSql[] = "CREATE TABLE IF NOT EXISTS page_thumbnails" " (offline_id INTEGER PRIMARY KEY NOT NULL," " expiration INTEGER NOT NULL," - " thumbnail BLOB NOT NULL" + " thumbnail BLOB NOT NULL," + " favicon BLOB NOT NULL DEFAULT x''" ")"; return db->Execute(kSql); } @@ -259,13 +283,42 @@ if (!transaction.Begin()) return false; - if (!CreatePageThumbnailsTable(db)) { + static const char kCreatePageThumbnailsSql[] = + "CREATE TABLE IF NOT EXISTS page_thumbnails" + " (offline_id INTEGER PRIMARY KEY NOT NULL," + "expiration INTEGER NOT NULL," + "thumbnail BLOB NOT NULL" + ")"; + if (!db->Execute(kCreatePageThumbnailsSql)) return false; - } + meta_table->SetVersionNumber(3); return transaction.Commit(); } +bool UpgradeFromVersion3ToVersion4(sql::Database* db, + sql::MetaTable* meta_table) { + sql::Transaction transaction(db); + if (!transaction.Begin()) + return false; + + const char kSql[] = "ALTER TABLE " OFFLINE_PAGES_TABLE_NAME + " ADD COLUMN snippet VARCHAR NOT NULL DEFAULT ''; " + "ALTER TABLE " OFFLINE_PAGES_TABLE_NAME + " ADD COLUMN attribution VARCHAR NOT NULL DEFAULT '';"; + if (!db->Execute(kSql)) + return false; + + const char kUpgradeThumbnailsTableSql[] = + "ALTER TABLE page_thumbnails" + " ADD COLUMN favicon BLOB NOT NULL DEFAULT x''"; + if (!db->Execute(kUpgradeThumbnailsTableSql)) + return false; + + meta_table->SetVersionNumber(4); + return transaction.Commit(); +} + bool CreateSchema(sql::Database* db) { if (!sql::MetaTable::DoesTableExist(db)) { // If this looks like a completely empty DB, simply start from scratch. @@ -292,6 +345,10 @@ if (!UpgradeFromVersion2ToVersion3(db, &meta_table)) return false; break; + case 3: + if (!UpgradeFromVersion3ToVersion4(db, &meta_table)) + return false; + break; case OfflinePageMetadataStore::kCurrentVersion: return true; default:
diff --git a/components/offline_pages/core/offline_page_metadata_store.h b/components/offline_pages/core/offline_page_metadata_store.h index ebfb0d4f..e823c88 100644 --- a/components/offline_pages/core/offline_page_metadata_store.h +++ b/components/offline_pages/core/offline_page_metadata_store.h
@@ -35,43 +35,29 @@ // OfflinePageMetadataStore keeps metadata for the offline pages in an SQLite // database. // -// This store has a history of schema updates in pretty much every release. -// Original schema was delivered in M52. Since then, the following changes -// happened: -// * In M53 expiration_time was added, -// * In M54 title was added, -// * In M55 we dropped the following fields (never used): version, status, -// offline_url, user_initiated. -// * In M56 original_url was added. -// * In M57 expiration_time was dropped. Existing expired pages would be -// removed when metadata consistency check happens. -// * In M58-M60 there were no changes. -// * In M61 request_origin was added. -// * In M62 system_download_id, file_missing_time, upgrade_attempt and digest -// were added to support P2P sharing feature. +// When updating the schema, be sure to do the following: +// * Increment the version number kCurrentVersion (let's call its new value N). +// * Write a function "UpgradeFromVersion<N-1>ToVersion<N>". This function +// should upgrade an existing database of the (previously) latest version and +// should call meta_table->SetVersionNumber(N). Add a case for version N-1 to +// the loop in CreateSchema. +// * Update CreateLatestSchema() as necessary: this function creates a new empty +// DB. If there were changes to existing tables, their original "CREATE" +// queries should be copied into the new "UpgradeFromVersion..." function. +// * Update `kCompatibleVersion` when a new schema becomes incompatible with +// old code (for instance, if a column is removed). Change it to the earliest +// version that is compatible with the new schema; that is very likely to be +// the version that broke compatibility. +// * Add a test for upgrading to the latest database version to +// offline_page_metadata_store_unittest.cc. Good luck. // -// Here is a procedure to update the schema for this store: -// * Decide how to detect that the store is on a particular version, which -// typically means that a certain field exists or is missing. This happens in -// Upgrade section of |CreateSchema| -// * Work out appropriate change and apply it to all existing upgrade paths. In -// the interest of performing a single update of the store, it upgrades from a -// detected version to the current one. This means that when making a change, -// more than a single query may have to be updated (in case of fields being -// removed or needed to be initialized to a specific, non-default value). -// Such approach is preferred to doing N updates for every changed version on -// a startup after browser update. -// * New upgrade method should specify which version it is upgrading from, e.g. -// |UpgradeFrom54|. -// * Upgrade should use |UpgradeWithQuery| and simply specify SQL command to -// move data from old table (prefixed by temp_) to the new one. class OfflinePageMetadataStore : public SqlStoreBase { public: // This is the first version saved in the meta table, which was introduced in // the store in M65. It is set once a legacy upgrade is run successfully for // the last time in |UpgradeFromLegacyVersion|. static const int kFirstPostLegacyVersion = 1; - static const int kCurrentVersion = 3; + static const int kCurrentVersion = 4; static const int kCompatibleVersion = kFirstPostLegacyVersion; // TODO(fgorski): Move to private and expose ForTest factory.
diff --git a/components/offline_pages/core/offline_page_metadata_store_unittest.cc b/components/offline_pages/core/offline_page_metadata_store_unittest.cc index 3b696dd..3c89827 100644 --- a/components/offline_pages/core/offline_page_metadata_store_unittest.cc +++ b/components/offline_pages/core/offline_page_metadata_store_unittest.cc
@@ -51,6 +51,12 @@ int64_t kTestSystemDownloadId = 42LL; const char kTestDigest[] = "test-digest"; const base::Time kThumbnailExpiration = store_utils::FromDatabaseTime(42); +const char kTestSnippet[] = "test snippet"; +const char kTestAttribution[] = "test attribution"; + +OfflinePageThumbnail TestThumbnailVersion3() { + return {1, base::Time(), "abc"}; +} // Build a store with outdated schema to simulate the upgrading process. void BuildTestStoreWithSchemaFromM52(const base::FilePath& file) { @@ -470,15 +476,40 @@ sql::Database db; ASSERT_TRUE(db.Open(file.Append(FILE_PATH_LITERAL("OfflinePages.db")))); sql::MetaTable meta_table; - ASSERT_TRUE(meta_table.Init(&db, OfflinePageMetadataStore::kCurrentVersion, - OfflinePageMetadataStore::kCompatibleVersion)); + ASSERT_TRUE( + meta_table.Init(&db, 2, OfflinePageMetadataStore::kCompatibleVersion)); +} + +bool InsertThumbnailVersion3(sql::Database* db, + const OfflinePageThumbnail& thumbnail) { + static const char kInsertThumbnailSql[] = + "INSERT INTO page_thumbnails" + " (offline_id,expiration,thumbnail) VALUES (?,?,?)"; + sql::Statement statement( + db->GetCachedStatement(SQL_FROM_HERE, kInsertThumbnailSql)); + statement.BindInt64(0, thumbnail.offline_id); + statement.BindInt64(1, store_utils::ToDatabaseTime(thumbnail.expiration)); + statement.BindBlob(2, thumbnail.thumbnail.data(), thumbnail.thumbnail.size()); + return statement.Run(); +} + +void BuildTestStoreWithSchemaVersion3(const base::FilePath& file) { + BuildTestStoreWithSchemaVersion2(file); + sql::Database db; + ASSERT_TRUE(db.Open(file.Append(FILE_PATH_LITERAL("OfflinePages.db")))); + sql::MetaTable meta_table; + ASSERT_TRUE( + meta_table.Init(&db, 3, OfflinePageMetadataStore::kCompatibleVersion)); + static const char kSql[] = "CREATE TABLE page_thumbnails" " (offline_id INTEGER PRIMARY KEY NOT NULL," " expiration INTEGER NOT NULL," " thumbnail BLOB NOT NULL" - ")"; + ");"; ASSERT_TRUE(db.Execute(kSql)); + + ASSERT_TRUE(InsertThumbnailVersion3(&db, TestThumbnailVersion3())); } // Create an offline page item from a SQL result. Expects complete rows with @@ -503,6 +534,8 @@ GURL original_url(statement->ColumnString(13)); std::string request_origin = statement->ColumnString(14); std::string digest = statement->ColumnString(15); + std::string snippet = statement->ColumnString(16); + std::string attribution = statement->ColumnString(17); OfflinePageItem item(url, id, client_id, path, file_size, creation_time); item.last_access_time = last_access_time; @@ -513,6 +546,8 @@ item.system_download_id = system_download_id; item.file_missing_time = file_missing_time; item.digest = digest; + item.snippet = snippet; + item.attribution = attribution; return item; } @@ -578,6 +613,8 @@ offline_page.original_url_if_different = GURL(kOriginalTestURL); offline_page.system_download_id = kTestSystemDownloadId; offline_page.digest = kTestDigest; + offline_page.snippet = kTestSnippet; + offline_page.attribution = kTestAttribution; EXPECT_EQ(ItemActionStatus::SUCCESS, AddOfflinePage(store.get(), offline_page)); @@ -598,11 +635,12 @@ thumbnail.offline_id = kOfflineId; thumbnail.expiration = kThumbnailExpiration; thumbnail.thumbnail = "content"; + std::vector<OfflinePageThumbnail> thumbnails_before = GetThumbnails(store); AddThumbnail(store, thumbnail); std::vector<OfflinePageThumbnail> thumbnails = GetThumbnails(store); - EXPECT_EQ(1UL, thumbnails.size()); - EXPECT_EQ(thumbnail, thumbnails[0]); + EXPECT_EQ(thumbnails_before.size() + 1, thumbnails.size()); + EXPECT_EQ(thumbnail, thumbnails.back()); } void VerifyMetaVersions() { @@ -637,11 +675,20 @@ std::vector<OfflinePageItem> pages = GetOfflinePages(store.get()); EXPECT_EQ(5U, pages.size()); - // TODO(fgorski): Use persistent namespaces from the client policy - // controller once an appropriate method is available. - std::set<std::string> upgradeable_namespaces{ - kAsyncNamespace, kDownloadNamespace, kBrowserActionsNamespace, - kNTPSuggestionsNamespace}; + CheckThatPageThumbnailCanBeSaved((OfflinePageMetadataStore*)store.get()); + CheckThatOfflinePageCanBeSaved(std::move(store)); + VerifyMetaVersions(); + } + + void LoadAndCheckStoreFromMetaVersion3AndUp() { + auto store = std::make_unique<OfflinePageMetadataStore>( + base::ThreadTaskRunnerHandle::Get(), TempPath()); + std::vector<OfflinePageItem> pages = GetOfflinePages(store.get()); + EXPECT_EQ(5U, pages.size()); + + std::vector<OfflinePageThumbnail> thumbnails = GetThumbnails(store.get()); + EXPECT_EQ(1U, thumbnails.size()); + EXPECT_EQ(TestThumbnailVersion3(), thumbnails.back()); CheckThatPageThumbnailCanBeSaved((OfflinePageMetadataStore*)store.get()); CheckThatOfflinePageCanBeSaved(std::move(store)); @@ -689,9 +736,9 @@ "file_path," "file_size,creation_time,last_access_time,access_count," "title,original_url,request_origin,system_download_id," - "file_missing_time,digest)" + "file_missing_time,digest,snippet,attribution)" " VALUES " - "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); statement.BindInt64(0, item.offline_id); @@ -711,6 +758,8 @@ statement.BindInt64(13, store_utils::ToDatabaseTime(item.file_missing_time)); statement.BindString(14, item.digest); + statement.BindString(15, item.snippet); + statement.BindString(16, item.attribution); if (!statement.Run()) return ItemActionStatus::STORE_ERROR; @@ -751,12 +800,13 @@ auto run_callback = base::BindLambdaForTesting([&](sql::Database* db) { static const char kSql[] = "INSERT INTO page_thumbnails" - " (offline_id, expiration, thumbnail) VALUES (?, ?, ?)"; + " (offline_id, expiration, thumbnail, favicon) VALUES (?, ?, ?, ?)"; sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); statement.BindInt64(0, thumbnail.offline_id); statement.BindInt64(1, store_utils::ToDatabaseTime(thumbnail.expiration)); statement.BindString(2, thumbnail.thumbnail); + statement.BindString(3, std::string()); EXPECT_TRUE(statement.Run()); return thumbnails; }); @@ -852,6 +902,11 @@ LoadAndCheckStoreFromMetaVersion1AndUp(); } +TEST_F(OfflinePageMetadataStoreTest, LoadStoreWithMetaVersion3) { + BuildTestStoreWithSchemaVersion3(TempPath()); + LoadAndCheckStoreFromMetaVersion3AndUp(); +} + // Adds metadata of an offline page into a store and then opens the store // again to make sure that stored metadata survives store restarts. TEST_F(OfflinePageMetadataStoreTest, AddOfflinePage) {
diff --git a/components/offline_pages/core/prefetch/prefetch_importer_impl.cc b/components/offline_pages/core/prefetch/prefetch_importer_impl.cc index ed0923b..d391183 100644 --- a/components/offline_pages/core/prefetch/prefetch_importer_impl.cc +++ b/components/offline_pages/core/prefetch/prefetch_importer_impl.cc
@@ -104,6 +104,8 @@ dest_path, archive.file_size, base::Time::Now()); offline_page.original_url_if_different = original_url; offline_page.title = archive.title; + offline_page.snippet = archive.snippet; + offline_page.attribution = archive.attribution; outstanding_import_offline_ids_.emplace(archive.offline_id);
diff --git a/components/offline_pages/core/prefetch/prefetch_importer_impl_unittest.cc b/components/offline_pages/core/prefetch/prefetch_importer_impl_unittest.cc index 80baf72c..d683cbe 100644 --- a/components/offline_pages/core/prefetch/prefetch_importer_impl_unittest.cc +++ b/components/offline_pages/core/prefetch/prefetch_importer_impl_unittest.cc
@@ -23,9 +23,18 @@ const GURL kTestURL("http://sample.org"); const GURL kTestFinalURL("https://sample.org/foo"); const ClientId kTestClientID("Foo", "C56A4180-65AA-42EC-A945-5FD21DEC0538"); -const base::string16 kTestTitle = base::ASCIIToUTF16("Hello"); +const base::string16 kTestTitle = base::UTF8ToUTF16("Hello"); const base::FilePath kTestFilePath(FILE_PATH_LITERAL("foo")); const int64_t kTestFileSize = 88888; +GURL TestFaviconURL() { + return GURL("http://sample.org/favicon.png"); +} +std::string TestSnippet() { + return "test snippet"; +} +std::string TestAttribution() { + return "sample.org"; +} class TestOfflinePageModel : public StubOfflinePageModel { public: @@ -77,6 +86,9 @@ archive.title = kTestTitle; archive.file_path = file_path; archive.file_size = kTestFileSize; + archive.favicon_url = TestFaviconURL(); + archive.snippet = TestSnippet(); + archive.attribution = TestAttribution(); importer.ImportArchive(archive); task_runner_->RunUntilIdle(); } @@ -114,6 +126,10 @@ offline_page_model()->last_added_page().original_url_if_different); EXPECT_EQ(kTestTitle, offline_page_model()->last_added_page().title); EXPECT_EQ(kTestFileSize, offline_page_model()->last_added_page().file_size); + + EXPECT_EQ(TestSnippet(), offline_page_model()->last_added_page().snippet); + EXPECT_EQ(TestAttribution(), + offline_page_model()->last_added_page().attribution); } TEST_F(PrefetchImporterImplTest, MoveFileError) {
diff --git a/components/offline_pages/core/prefetch/prefetch_item.h b/components/offline_pages/core/prefetch/prefetch_item.h index d0af634..de3e54b 100644 --- a/components/offline_pages/core/prefetch/prefetch_item.h +++ b/components/offline_pages/core/prefetch/prefetch_item.h
@@ -69,12 +69,6 @@ // The URL to the favicon image of the article's hosting web site. GURL favicon_url; - // A snippet of the article's contents. - std::string snippet; - - // The publisher name/web site the article is attributed to. - std::string attribution; - // Number of attempts to request OPS to generate an archive for this item. int generate_bundle_attempts = 0; @@ -124,6 +118,12 @@ // The title of the page. base::string16 title; + // A snippet of the article's contents. + std::string snippet; + + // The publisher name/web site the article is attributed to. + std::string attribution; + // The file path to the archive of the page. base::FilePath file_path;
diff --git a/components/offline_pages/core/prefetch/prefetch_item_unittest.cc b/components/offline_pages/core/prefetch/prefetch_item_unittest.cc index 8e01d2d..23c926e 100644 --- a/components/offline_pages/core/prefetch/prefetch_item_unittest.cc +++ b/components/offline_pages/core/prefetch/prefetch_item_unittest.cc
@@ -103,12 +103,6 @@ item1.favicon_url = GURL("http://favicon"); CheckFieldAndResetItem(item1, "favicon_url"); - item1.snippet = "snippet"; - CheckFieldAndResetItem(item1, "snippet"); - - item1.attribution = "attribution"; - CheckFieldAndResetItem(item1, "attribution"); - item1.generate_bundle_attempts = 10; CheckFieldAndResetItem(item1, "generate_bundle_attempts"); @@ -145,6 +139,12 @@ item1.file_size = 30; CheckFieldAndResetItem(item1, "file_size"); + item1.snippet = "G"; + CheckFieldAndResetItem(item1, "snippet"); + + item1.attribution = "H"; + CheckFieldAndResetItem(item1, "attribution"); + CheckAllFieldsWereTested(); }
diff --git a/components/offline_pages/core/prefetch/prefetch_types.cc b/components/offline_pages/core/prefetch/prefetch_types.cc index 2b4ca22c..05177eaa 100644 --- a/components/offline_pages/core/prefetch/prefetch_types.cc +++ b/components/offline_pages/core/prefetch/prefetch_types.cc
@@ -142,13 +142,7 @@ PrefetchURL::PrefetchURL(const std::string& id, const GURL& url, const base::string16& title) - : id(id), - url(url), - title(title), - thumbnail_url(GURL()), - favicon_url(GURL()), - snippet(std::string()), - attribution(std::string()) {} + : id(id), url(url), title(title) {} PrefetchURL::PrefetchURL(const std::string& id, const GURL& url,
diff --git a/components/offline_pages/core/prefetch/prefetch_types.h b/components/offline_pages/core/prefetch/prefetch_types.h index 2816518..e45f82f 100644 --- a/components/offline_pages/core/prefetch/prefetch_types.h +++ b/components/offline_pages/core/prefetch/prefetch_types.h
@@ -290,6 +290,9 @@ base::string16 title; base::FilePath file_path; int64_t file_size = 0; + GURL favicon_url; + std::string snippet; + std::string attribution; }; // These operators are implemented for testing only, see test_util.cc.
diff --git a/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc b/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc index 28c4169..c69810e8 100644 --- a/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc +++ b/components/offline_pages/core/prefetch/tasks/add_unique_urls_task_unittest.cc
@@ -33,7 +33,7 @@ PrefetchURL PrefetchURL1() { return {kClientId1, GURL("https://www.url1.com/"), - base::ASCIIToUTF16("Title 1"), + base::UTF8ToUTF16("Title 1"), GURL("https://www.url1.com/thumbnail.png"), GURL("https://www.url1.com/favicon.png"), "snippet 1", @@ -42,7 +42,7 @@ PrefetchURL PrefetchURL2() { return {kClientId2, GURL("https://www.url2.com/"), - base::ASCIIToUTF16("Title 2"), + base::UTF8ToUTF16("Title 2"), GURL("https://www.url2.com/thumbnail.png"), GURL("https://www.url2.com/favicon.png"), "snippet 2", @@ -51,7 +51,7 @@ PrefetchURL PrefetchURL3() { return {kClientId3, GURL("https://www.url3.com/"), - base::ASCIIToUTF16("Title 3"), + base::UTF8ToUTF16("Title 3"), GURL("https://www.url3.com/thumbnail.png"), GURL("https://www.url3.com/favicon.png"), "snippet 3",
diff --git a/components/offline_pages/core/prefetch/tasks/import_archives_task.cc b/components/offline_pages/core/prefetch/tasks/import_archives_task.cc index 84fa73c..f23498b2 100644 --- a/components/offline_pages/core/prefetch/tasks/import_archives_task.cc +++ b/components/offline_pages/core/prefetch/tasks/import_archives_task.cc
@@ -24,10 +24,11 @@ std::unique_ptr<std::vector<PrefetchArchiveInfo>> GetArchivesSync( sql::Database* db) { static const char kSql[] = - "SELECT offline_id, client_namespace, guid, requested_url," - " final_archived_url, title, file_path, file_size" + "SELECT offline_id,client_namespace,guid,requested_url," + "final_archived_url,title,file_path,file_size,favicon_url,snippet," + "attribution" " FROM prefetch_items" - " WHERE state = ?"; + " WHERE state=?"; sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); statement.BindInt(0, static_cast<int>(PrefetchItemState::DOWNLOADED)); @@ -45,6 +46,9 @@ archive.file_path = store_utils::FromDatabaseFilePath(statement.ColumnString(6)); archive.file_size = statement.ColumnInt64(7); + archive.favicon_url = GURL(statement.ColumnString(8)); + archive.snippet = statement.ColumnString(9); + archive.attribution = statement.ColumnString(10); if (!archives) archives = std::make_unique<std::vector<PrefetchArchiveInfo>>(); archives->push_back(archive); @@ -56,8 +60,8 @@ bool UpdateToImportingStateSync(int64_t offline_id, sql::Database* db) { static const char kSql[] = "UPDATE prefetch_items" - " SET state = ?" - " WHERE offline_id = ?"; + " SET state=?" + " WHERE offline_id=?"; sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); statement.BindInt(0, static_cast<int>(PrefetchItemState::IMPORTING));
diff --git a/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc b/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc index 31e46fe..d89b6f9 100644 --- a/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc +++ b/components/offline_pages/core/prefetch/tasks/import_archives_task_unittest.cc
@@ -29,20 +29,62 @@ const int64_t kTestOfflineID = 1111; const int64_t kTestOfflineID2 = 223344; const int64_t kTestOfflineID3 = 987; -const GURL kTestURL("http://sample.org"); -const GURL kTestURL2("http://sample.org"); -const GURL kTestFinalURL("https://sample.org/foo"); -const GURL kTestFinalURL2("https://sample.org/foo"); -const std::string kTestGUID("C56A4180-65AA-42EC-A945-5FD21DEC0538"); -const ClientId kTestClientID("Foo", kTestGUID); -const std::string kTestGUID2("784f1b8b-6a32-4535-9751-ade05f947aa9"); -const ClientId kTestClientID2("Foo2", kTestGUID2); -const base::string16 kTestTitle = base::ASCIIToUTF16("Hello"); -const base::string16 kTestTitle2 = base::ASCIIToUTF16("Hello2"); -const base::FilePath kTestFilePath(FILE_PATH_LITERAL("foo")); -const base::FilePath kTestFilePath2(FILE_PATH_LITERAL("foo2")); +GURL TestURL() { + return GURL("http://sample.org"); +} +GURL TestURL2() { + return GURL("http://sample.org"); +} +GURL TestFinalURL() { + return GURL("https://sample.org/foo"); +} +GURL TestFinalURL2() { + return GURL("https://sample.org/foo"); +} +std::string TestGUID() { + return "C56A4180-65AA-42EC-A945-5FD21DEC0538"; +} +ClientId TestClientID() { + return ClientId("Foo", TestGUID()); +} +std::string TestGUID2() { + return "784f1b8b-6a32-4535-9751-ade05f947aa9"; +} +ClientId TestClientID2() { + return ClientId("Foo2", TestGUID2()); +} +base::string16 TestTitle() { + return base::UTF8ToUTF16("Hello"); +} +base::string16 TestTitle2() { + return base::UTF8ToUTF16("Hello2"); +} +base::FilePath TestFilePath() { + return base::FilePath(FILE_PATH_LITERAL("foo")); +} +base::FilePath TestFilePath2() { + return base::FilePath(FILE_PATH_LITERAL("foo2")); +} const int64_t kTestFileSize = 88888; const int64_t kTestFileSize2 = 999; +GURL TestFaviconURL() { + return GURL("http://sample.org/favicon.png"); +} +GURL TestFaviconURL2() { + return GURL("http://sample.org/favicon2.png"); +} +std::string TestSnippet() { + return "test snippet"; +} +std::string TestSnippet2() { + return "test snippet 2"; +} +std::string TestAttribution() { + return "test attribution"; +} +std::string TestAttribution2() { + return "test attribution 2"; +} class TestPrefetchImporter : public PrefetchImporter { public: @@ -82,29 +124,35 @@ PrefetchItem item; item.offline_id = kTestOfflineID; item.state = PrefetchItemState::DOWNLOADED; - item.url = kTestURL; - item.guid = kTestGUID; - item.final_archived_url = kTestFinalURL; - item.client_id = kTestClientID; - item.title = kTestTitle; - item.file_path = kTestFilePath; + item.url = TestURL(); + item.guid = TestGUID(); + item.final_archived_url = TestFinalURL(); + item.client_id = TestClientID(); + item.title = TestTitle(); + item.file_path = TestFilePath(); item.file_size = kTestFileSize; item.creation_time = base::Time::Now(); item.freshness_time = item.creation_time; + item.favicon_url = TestFaviconURL(); + item.snippet = TestSnippet(); + item.attribution = TestAttribution(); EXPECT_TRUE(store_util()->InsertPrefetchItem(item)); PrefetchItem item2; item2.offline_id = kTestOfflineID2; item2.state = PrefetchItemState::DOWNLOADED; - item2.url = kTestURL2; - item2.guid = kTestGUID2; - item2.final_archived_url = kTestFinalURL2; - item2.client_id = kTestClientID2; - item2.title = kTestTitle2; - item2.file_path = kTestFilePath2; + item2.url = TestURL2(); + item2.guid = TestGUID2(); + item2.final_archived_url = TestFinalURL2(); + item2.client_id = TestClientID2(); + item2.title = TestTitle2(); + item2.file_path = TestFilePath2(); item2.file_size = kTestFileSize2; item2.creation_time = base::Time::Now(); item2.freshness_time = item.creation_time; + item2.favicon_url = TestFaviconURL2(); + item2.snippet = TestSnippet2(); + item2.attribution = TestAttribution2(); EXPECT_TRUE(store_util()->InsertPrefetchItem(item2)); PrefetchItem item3; @@ -149,20 +197,26 @@ archive2 = importer()->archives()[0]; } EXPECT_EQ(kTestOfflineID, archive1.offline_id); - EXPECT_EQ(kTestClientID, archive1.client_id); - EXPECT_EQ(kTestURL, archive1.url); - EXPECT_EQ(kTestFinalURL, archive1.final_archived_url); - EXPECT_EQ(kTestTitle, archive1.title); - EXPECT_EQ(kTestFilePath, archive1.file_path); + EXPECT_EQ(TestClientID(), archive1.client_id); + EXPECT_EQ(TestURL(), archive1.url); + EXPECT_EQ(TestFinalURL(), archive1.final_archived_url); + EXPECT_EQ(TestTitle(), archive1.title); + EXPECT_EQ(TestFilePath(), archive1.file_path); EXPECT_EQ(kTestFileSize, archive1.file_size); + EXPECT_EQ(TestFaviconURL(), archive1.favicon_url); + EXPECT_EQ(TestSnippet(), archive1.snippet); + EXPECT_EQ(TestAttribution(), archive1.attribution); EXPECT_EQ(kTestOfflineID2, archive2.offline_id); - EXPECT_EQ(kTestClientID2, archive2.client_id); - EXPECT_EQ(kTestURL2, archive2.url); - EXPECT_EQ(kTestFinalURL2, archive2.final_archived_url); - EXPECT_EQ(kTestTitle2, archive2.title); - EXPECT_EQ(kTestFilePath2, archive2.file_path); + EXPECT_EQ(TestClientID2(), archive2.client_id); + EXPECT_EQ(TestURL2(), archive2.url); + EXPECT_EQ(TestFinalURL2(), archive2.final_archived_url); + EXPECT_EQ(TestTitle2(), archive2.title); + EXPECT_EQ(TestFilePath2(), archive2.file_path); EXPECT_EQ(kTestFileSize2, archive2.file_size); + EXPECT_EQ(TestFaviconURL2(), archive2.favicon_url); + EXPECT_EQ(TestSnippet2(), archive2.snippet); + EXPECT_EQ(TestAttribution2(), archive2.attribution); } } // namespace offline_pages
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc index ccf306c9..d6b0f94 100644 --- a/components/omnibox/browser/omnibox_edit_model.cc +++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -41,7 +41,6 @@ #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_prepopulate_data.h" #include "components/search_engines/template_url_service.h" -#include "components/url_formatter/url_fixer.h" #include "third_party/metrics_proto/omnibox_event.pb.h" #include "ui/gfx/image/image.h" #include "url/url_util.h" @@ -271,11 +270,6 @@ (!has_focus() || (!user_input_in_progress_ && !PopupIsOpen())); } -GURL OmniboxEditModel::PermanentURL() const { - return url_formatter::FixupURL(base::UTF16ToUTF8(url_for_editing_), - std::string()); -} - base::string16 OmniboxEditModel::GetPermanentDisplayText() const { return display_text_; } @@ -372,7 +366,7 @@ // If the user has not modified the display text and is copying the whole // display text, copy the omnibox contents as a hyperlink to the current page. if (!user_input_in_progress_ && *text == display_text_) { - *url_from_text = PermanentURL(); + *url_from_text = controller()->GetLocationBarModel()->GetURL(); *write_url = true; // If the omnibox is displaying a URL, set the hyperlink text to the URL's @@ -399,7 +393,7 @@ *url_from_text = match_from_text.destination_url; - GURL current_page_url = PermanentURL(); + GURL current_page_url = controller()->GetLocationBarModel()->GetURL(); if (PopupIsOpen()) { AutocompleteMatch current_match = CurrentMatch(nullptr); if (!AutocompleteMatch::IsSearchType(current_match.type) && @@ -621,7 +615,8 @@ if (ui::PageTransitionCoreTypeIs(match.transition, ui::PAGE_TRANSITION_TYPED) && - (match.destination_url == PermanentURL())) { + (match.destination_url == + controller()->GetLocationBarModel()->GetURL())) { // When the user hit enter on the existing permanent URL, treat it like a // reload for scoring purposes. We could detect this by just checking // user_input_in_progress_, but it seems better to treat "edits" that end @@ -1039,9 +1034,6 @@ // off). // TODO(hfung): Remove this when crbug/271590 is fixed. if (client_->CurrentPageExists() && !user_input_in_progress_) { - // We avoid PermanentURL() here because it's not guaranteed to give us the - // actual underlying current URL, e.g. if we're on the NTP and the - // |url_for_editing_| is empty. input_ = AutocompleteInput(url_for_editing_, ClassifyPage(), client_->GetSchemeClassifier()); input_.set_current_url(client_->GetURL());
diff --git a/components/omnibox/browser/omnibox_edit_model.h b/components/omnibox/browser/omnibox_edit_model.h index 259ee8fa..ed97b98 100644 --- a/components/omnibox/browser/omnibox_edit_model.h +++ b/components/omnibox/browser/omnibox_edit_model.h
@@ -158,9 +158,6 @@ // either the user is not editing or the edit does not have focus. bool ResetDisplayTexts(); - // Returns the URL corresponding to the permanent text. - GURL PermanentURL() const; - // Returns the permanent display text for the current page and Omnibox state. base::string16 GetPermanentDisplayText() const;
diff --git a/components/omnibox/browser/omnibox_edit_model_unittest.cc b/components/omnibox/browser/omnibox_edit_model_unittest.cc index e0bf8665..fc50cafb 100644 --- a/components/omnibox/browser/omnibox_edit_model_unittest.cc +++ b/components/omnibox/browser/omnibox_edit_model_unittest.cc
@@ -22,6 +22,7 @@ #include "components/omnibox/browser/test_omnibox_edit_controller.h" #include "components/omnibox/browser/test_omnibox_edit_model.h" #include "components/omnibox/browser/test_omnibox_view.h" +#include "components/url_formatter/url_fixer.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/omnibox_event.pb.h" @@ -140,6 +141,12 @@ base::ASCIIToUTF16(input[i].url_for_editing)); location_bar_model()->set_url_for_display( base::ASCIIToUTF16(input[i].url_for_display)); + + // Set the location bar model's URL to be a valid GURL that would generate + // the test case's url_for_editing. + location_bar_model()->set_url( + url_formatter::FixupURL(input[i].url_for_editing, "")); + model()->ResetDisplayTexts(); model()->SetInputInProgress(input[i].is_match_selected_in_popup);
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc index 1d927bd..873ac9f5 100644 --- a/components/omnibox/common/omnibox_features.cc +++ b/components/omnibox/common/omnibox_features.cc
@@ -114,11 +114,12 @@ const base::Feature kOmniboxPedalSuggestions{"OmniboxPedalSuggestions", base::FEATURE_DISABLED_BY_DEFAULT}; -// Feature used to show a context menu for suggestions when the user -// right-clicks a suggestion in the omnibox dropdown. It's currently disabled -// by default during development, but will eventually be enabled by default. -const base::Feature kOmniboxContextMenuForSuggestions{ - "OmniboxContextMenuForSuggestions", base::FEATURE_DISABLED_BY_DEFAULT}; +// Feature used for UI that improves transparency of and control over omnibox +// suggestions. This includes UI cues (like a clock icon for Search History +// suggestions), as well as user controls to delete personalized suggestions. +// This will be eventually enabled by default. +const base::Feature kOmniboxSuggestionTransparencyOptions{ + "OmniboxSuggestionTransparencyOptions", base::FEATURE_DISABLED_BY_DEFAULT}; // Feature to enable clipboard provider to suggest copied text. const base::Feature kEnableClipboardProviderTextSuggestions{
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h index 4b07be28..b05a7e09 100644 --- a/components/omnibox/common/omnibox_features.h +++ b/components/omnibox/common/omnibox_features.h
@@ -23,7 +23,7 @@ extern const base::Feature kOmniboxReverseTabSwitchLogic; extern const base::Feature kExperimentalKeywordMode; extern const base::Feature kOmniboxPedalSuggestions; -extern const base::Feature kOmniboxContextMenuForSuggestions; +extern const base::Feature kOmniboxSuggestionTransparencyOptions; extern const base::Feature kEnableClipboardProviderTextSuggestions; extern const base::Feature kEnableClipboardProviderImageSuggestions; extern const base::Feature kSearchProviderWarmUpOnFocus;
diff --git a/components/optimization_guide/proto/hints.proto b/components/optimization_guide/proto/hints.proto index b896e5d9..828c7f1 100644 --- a/components/optimization_guide/proto/hints.proto +++ b/components/optimization_guide/proto/hints.proto
@@ -113,6 +113,8 @@ RESOURCE_LOADING = 2; // This optimization redirects the navigation through a lite page server. LITE_PAGE_REDIRECT = 3; + // This optimization does nothing (no-op). + OPTIMIZATION_NONE = 4; } // Presents semantics for how page load URLs should be matched.
diff --git a/components/previews/content/previews_hints.cc b/components/previews/content/previews_hints.cc index 005ad55..a62d523 100644 --- a/components/previews/content/previews_hints.cc +++ b/components/previews/content/previews_hints.cc
@@ -122,6 +122,8 @@ return PreviewsType::RESOURCE_LOADING_HINTS; case optimization_guide::proto::LITE_PAGE_REDIRECT: return PreviewsType::LITE_PAGE_REDIRECT; + case optimization_guide::proto::OPTIMIZATION_NONE: + return PreviewsType::NONE; } } @@ -137,6 +139,9 @@ return previews::params::IsResourceLoadingHintsEnabled(); case optimization_guide::proto::LITE_PAGE_REDIRECT: return previews::params::IsLitePageServerPreviewsEnabled(); + case optimization_guide::proto::OPTIMIZATION_NONE: + // Always consider enabled to allow as no-op optimization. + return true; } }
diff --git a/components/previews/content/previews_hints_unittest.cc b/components/previews/content/previews_hints_unittest.cc index 1df01fc..7b488e0 100644 --- a/components/previews/content/previews_hints_unittest.cc +++ b/components/previews/content/previews_hints_unittest.cc
@@ -623,6 +623,74 @@ } } +TEST_F(PreviewsHintsTest, IsWhitelistedForNoopExperimentalPreview) { + base::test::ScopedFeatureList scoped_list; + scoped_list.InitAndEnableFeature(features::kResourceLoadingHints); + optimization_guide::proto::Configuration config; + + optimization_guide::proto::Hint* hint1 = config.add_hints(); + hint1->set_key("somedomain.org"); + hint1->set_key_representation(optimization_guide::proto::HOST_SUFFIX); + + // Page hint for "/experimental_preview/" + optimization_guide::proto::PageHint* page_hint1 = hint1->add_page_hints(); + page_hint1->set_page_pattern("/experimental_preview/"); + page_hint1->set_max_ect_trigger( + optimization_guide::proto::EffectiveConnectionType:: + EFFECTIVE_CONNECTION_TYPE_3G); + + // First add OPTIMIZATION_NONE as no-op experimental PageHint optimization. + optimization_guide::proto::Optimization* experimental_optimization = + page_hint1->add_whitelisted_optimizations(); + experimental_optimization->set_experiment_name("foo_experiment"); + experimental_optimization->set_optimization_type( + optimization_guide::proto::OPTIMIZATION_NONE); + + // Add a non-experimental PageHint optimization with same resource pattern. + optimization_guide::proto::Optimization* default_pagehint_optimization = + page_hint1->add_whitelisted_optimizations(); + default_pagehint_optimization->set_optimization_type( + optimization_guide::proto::RESOURCE_LOADING); + optimization_guide::proto::ResourceLoadingHint* default_resourcehint = + default_pagehint_optimization->add_resource_loading_hints(); + default_resourcehint->set_loading_optimization_type( + optimization_guide::proto::LOADING_BLOCK_RESOURCE); + default_resourcehint->set_resource_pattern("default_resource.js"); + + ParseConfig(config); + + // Test with the experiment disabled. + { + // Verify resource loading hints whitelisted. + int inflation_percent = 0; + net::EffectiveConnectionType ect_threshold = + net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN; + EXPECT_TRUE(MaybeLoadHintAndCheckIsWhitelisted( + GURL("https://www.somedomain.org/experimental_preview/" + "experimental_resource.js"), + PreviewsType::RESOURCE_LOADING_HINTS, &inflation_percent, + &ect_threshold)); + } + + // Now enable the experiment and verify experimental no-op screens the + // resource loading hints from being whitelisted. + { + base::test::ScopedFeatureList scoped_list2; + scoped_list2.InitAndEnableFeatureWithParameters( + features::kOptimizationHintsExperiments, + {{"experiment_name", "foo_experiment"}}); + + int inflation_percent = 0; + net::EffectiveConnectionType ect_threshold = + net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_2G; + EXPECT_FALSE(MaybeLoadHintAndCheckIsWhitelisted( + GURL("https://www.somedomain.org/experimental_preview/" + "experimental_resource.js"), + PreviewsType::RESOURCE_LOADING_HINTS, &inflation_percent, + &ect_threshold)); + } +} + TEST_F(PreviewsHintsTest, ParseDuplicateConfigs) { base::test::ScopedFeatureList scoped_list; scoped_list.InitAndEnableFeature(features::kResourceLoadingHints);
diff --git a/components/printing/browser/print_composite_client.cc b/components/printing/browser/print_composite_client.cc index 4942956..e7abd8e 100644 --- a/components/printing/browser/print_composite_client.cc +++ b/components/printing/browser/print_composite_client.cc
@@ -240,9 +240,8 @@ return iter->second; } - auto iterator = - compositor_map_.emplace(cookie, CreateCompositeRequest()).first; - return iterator->second; + iter = compositor_map_.emplace(cookie, CreateCompositeRequest()).first; + return iter->second; } void PrintCompositeClient::RemoveCompositeRequest(int cookie) {
diff --git a/components/printing/browser/print_composite_client.h b/components/printing/browser/print_composite_client.h index b43be78..f207fdb 100644 --- a/components/printing/browser/print_composite_client.h +++ b/components/printing/browser/print_composite_client.h
@@ -84,7 +84,7 @@ base::ReadOnlySharedMemoryRegion region); // Get the request or create a new one if none exists. - // Since printed pages always share content with it document, they share the + // Since printed pages always share content with its document, they share the // same composite request. mojom::PdfCompositorPtr& GetCompositeRequest(int cookie);
diff --git a/components/send_tab_to_self/features.cc b/components/send_tab_to_self/features.cc index 4db29f6..0b78144 100644 --- a/components/send_tab_to_self/features.cc +++ b/components/send_tab_to_self/features.cc
@@ -6,7 +6,7 @@ namespace send_tab_to_self { -const base::Feature kSendTabToSelfReceive{"SendTabToSelfReceive", - base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kSendTabToSelfShowSendingUI{ + "SendTabToSelfShowSendingUI", base::FEATURE_DISABLED_BY_DEFAULT}; } // namespace send_tab_to_self
diff --git a/components/send_tab_to_self/features.h b/components/send_tab_to_self/features.h index 56c9723..57db15e 100644 --- a/components/send_tab_to_self/features.h +++ b/components/send_tab_to_self/features.h
@@ -9,9 +9,9 @@ namespace send_tab_to_self { -// If this feature is enabled, we handle notifying users of sent tabs even if -// the sync feature is disabled. -extern const base::Feature kSendTabToSelfReceive; +// If this feature is enabled, we will display the UI to send tabs if the Sync +// datatype is also enabled. +extern const base::Feature kSendTabToSelfShowSendingUI; } // namespace send_tab_to_self #endif // COMPONENTS_SEND_TAB_TO_SELF_FEATURES_H_
diff --git a/components/send_tab_to_self/send_tab_to_self_bridge.cc b/components/send_tab_to_self/send_tab_to_self_bridge.cc index 17eff71..ed59d2ff 100644 --- a/components/send_tab_to_self/send_tab_to_self_bridge.cc +++ b/components/send_tab_to_self/send_tab_to_self_bridge.cc
@@ -12,6 +12,7 @@ #include "base/optional.h" #include "base/time/clock.h" #include "components/history/core/browser/history_service.h" +#include "components/send_tab_to_self/features.h" #include "components/send_tab_to_self/proto/send_tab_to_self.pb.h" #include "components/sync/device_info/device_info.h" #include "components/sync/device_info/local_device_info_provider.h" @@ -252,6 +253,11 @@ return nullptr; } + // AddEntry should be a no-op if the UI is disabled + if (!base::FeatureList::IsEnabled(kSendTabToSelfShowSendingUI)) { + return nullptr; + } + // In the case where the user has attempted to send an identical URL // within the last |kDedupeTime| we think it is likely that user still // has the first sent tab in progress, and so we will not attempt to resend.
diff --git a/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc b/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc index ea171871..8357f5ec 100644 --- a/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc +++ b/components/send_tab_to_self/send_tab_to_self_bridge_unittest.cc
@@ -11,9 +11,11 @@ #include "base/bind.h" #include "base/run_loop.h" #include "base/strings/stringprintf.h" +#include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" #include "base/test/simple_test_clock.h" #include "components/history/core/browser/history_service.h" +#include "components/send_tab_to_self/features.h" #include "components/send_tab_to_self/proto/send_tab_to_self.pb.h" #include "components/sync/device_info/local_device_info_provider_mock.h" #include "components/sync/model/entity_change.h" @@ -76,6 +78,7 @@ SendTabToSelfBridgeTest() : store_(syncer::ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()) { provider_.Initialize("cache_guid", "machine"); + scoped_feature_list_.InitAndEnableFeature(kSendTabToSelfShowSendingUI); } // Initialized the bridge based on the current local device and store. Can @@ -176,6 +179,8 @@ testing::NiceMock<MockSendTabToSelfModelObserver> mock_observer_; + base::test::ScopedFeatureList scoped_feature_list_; + DISALLOW_COPY_AND_ASSIGN(SendTabToSelfBridgeTest); };
diff --git a/components/sync/syncable/directory_backing_store_unittest.cc b/components/sync/syncable/directory_backing_store_unittest.cc index 6f5c4095..15bc32e 100644 --- a/components/sync/syncable/directory_backing_store_unittest.cc +++ b/components/sync/syncable/directory_backing_store_unittest.cc
@@ -3596,7 +3596,7 @@ "SELECT metahandle, server_position_in_parent " "FROM metas WHERE unique_server_tag = 'google_chrome'")); ASSERT_TRUE(s.Step()); - ASSERT_EQ(sql::ColumnType::kInteger, s.ColumnType(1)); + ASSERT_EQ(sql::ColumnType::kInteger, s.GetColumnType(1)); TestDirectoryBackingStore dbs(GetUsername(), &connection); EXPECT_TRUE(dbs.MigrateVersion80To81()); @@ -3607,7 +3607,7 @@ "SELECT metahandle, server_ordinal_in_parent " "FROM metas WHERE unique_server_tag = 'google_chrome'")); ASSERT_TRUE(new_s.Step()); - EXPECT_EQ(sql::ColumnType::kBlob, new_s.ColumnType(1)); + EXPECT_EQ(sql::ColumnType::kBlob, new_s.GetColumnType(1)); std::string expected_ordinal = Int64ToNodeOrdinal(1048576).ToInternalValue(); std::string actual_ordinal;
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-25.png.sha1 index 7d037b1..b7af035 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-25.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-25.png.sha1
@@ -1 +1 @@ -a8f2df2fd6bdcdcec46507685ffe10949bf9a896 \ No newline at end of file +2e43d01c6c3701a096da20305e999daebebbd327 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-26.png.sha1 index 4fb87be..a76c136 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-26.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_bottom.Pixel_XL-26.png.sha1
@@ -1 +1 @@ -3c7c6d188174f6b4dd6fb5a0295e9e64c745e119 \ No newline at end of file +785ed16a1915a87c5c372c551c22e7653ee92b0b \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-25.png.sha1 index 04d9ba5..87de8f3 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-25.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-25.png.sha1
@@ -1 +1 @@ -e5a62dc906e8612044ef351e044a778488a11df3 \ No newline at end of file +53a11c2b33f9b157820cfffbedb6ee85805eca92 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-26.png.sha1 index ff8aef7..04f0565 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-26.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_left.Pixel_XL-26.png.sha1
@@ -1 +1 @@ -dcb2dad069defa7b4a2bde0d9be3d05cb71f71b7 \ No newline at end of file +6ab1ece633eb6d2b97167653cc1ca2929736a55c \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-25.png.sha1 index 20faf4a..9977e6c 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-25.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-25.png.sha1
@@ -1 +1 @@ -7606df871cd2ec83d07c1c351729975e8fe39bbc \ No newline at end of file +cbffb42766d954725dd2af8193d75d9557ede979 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-26.png.sha1 index 4a41b5e2..de2eb33 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-26.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_right.Pixel_XL-26.png.sha1
@@ -1 +1 @@ -222103fb4cc27e847a9842e4f732a68c81a0e2ef \ No newline at end of file +b293e14a49f0f34aa6659c3f29d678c90a8f4dee \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-25.png.sha1 index c90e177c12..340401c 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-25.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-25.png.sha1
@@ -1 +1 @@ -3644057beb3128ce64691be576a2659fafff7e49 \ No newline at end of file +8690cc2c9d4f13aadc0142fa7883f7b398d88fe1 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-26.png.sha1 index 42a8919f..d1c6461 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-26.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_clicking_top.Pixel_XL-26.png.sha1
@@ -1 +1 @@ -105cbd41503275d7f9bb15bccec32806d5ea19bb \ No newline at end of file +141705b3bc31eac3fb3897ebf29224d89720e087 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-25.png.sha1 index 3c3f18f6..9dc30f43 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-25.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-25.png.sha1
@@ -1 +1 @@ -200a1dc7467ef3cc554b01fa4d4553f517bb994c \ No newline at end of file +1c816c86bdebb5b034e1fa9e76a2813d71cc1fc7 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-26.png.sha1 index b9af91a..7e1344c 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-26.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_middle.Pixel_XL-26.png.sha1
@@ -1 +1 @@ -d0a914ee179e6ee428c0011dcdec6a5aebeeb25a \ No newline at end of file +02880cd1a9f87d62cb20860d8a3eb0fecee54f24 \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-25.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-25.png.sha1 index 836d3a1..83e36a5 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-25.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-25.png.sha1
@@ -1 +1 @@ -ceb77320776fc9253108cf5ca1be64fccdf611d8 \ No newline at end of file +84d05e02d5dcfbf106024f5b0f65b05211b3270d \ No newline at end of file
diff --git a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-26.png.sha1 b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-26.png.sha1 index dbfc097..c3a23f13 100644 --- a/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-26.png.sha1 +++ b/components/test/data/vr_browser_ui/render_tests/VrBrowserNativeUiTest.suggestion_hovering_top.Pixel_XL-26.png.sha1
@@ -1 +1 @@ -e20d2d0ee7705f772cd7fd6cd9d76287c6059610 \ No newline at end of file +6b4327781d36a9811da53c341b77016c00f6c632 \ No newline at end of file
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc index ea93536a..186293b 100644 --- a/components/viz/service/display/renderer_pixeltest.cc +++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -3083,7 +3083,7 @@ template <typename RendererType> class RendererAAPixelTest : public RendererPixelTest<RendererType> { public: - void AntiAliasing() { + void AntiAliasing(const base::FilePath& filepath) { gfx::Rect rect(this->device_viewport_size_); int id = 1; @@ -3115,12 +3115,11 @@ RenderPassList pass_list; pass_list.push_back(std::move(pass)); - EXPECT_TRUE(this->RunPixelTest( - &pass_list, base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), - cc::FuzzyPixelOffByOneComparator(true))); + EXPECT_TRUE(this->RunPixelTest(&pass_list, filepath, + cc::FuzzyPixelOffByOneComparator(true))); } - void AntiAliasingPerspective() { + void AntiAliasingPerspective(const base::FilePath& filepath) { gfx::Rect rect(this->device_viewport_size_); std::unique_ptr<RenderPass> pass = CreateTestRootRenderPass(1, rect); @@ -3149,33 +3148,31 @@ RenderPassList pass_list; pass_list.push_back(std::move(pass)); - EXPECT_TRUE(this->RunPixelTest( - &pass_list, - base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), - cc::FuzzyPixelOffByOneComparator(true))); + EXPECT_TRUE(this->RunPixelTest(&pass_list, filepath, + cc::FuzzyPixelOffByOneComparator(true))); } }; -// TODO(crbug.com/939442): Combine these tests once they are passing on -// SkiaRenderer. using GLRendererAAPixelTest = RendererAAPixelTest<GLRenderer>; using SkiaRendererAAPixelTest = RendererAAPixelTest<SkiaRenderer>; // Software renderer does not support anti-aliased edges. TEST_F(GLRendererAAPixelTest, AntiAliasing) { - AntiAliasing(); + AntiAliasing(base::FilePath(FILE_PATH_LITERAL("anti_aliasing_gl.png"))); } -TEST_F(SkiaRendererAAPixelTest, DISABLED_AntiAliasing) { - AntiAliasing(); +TEST_F(SkiaRendererAAPixelTest, AntiAliasing) { + AntiAliasing(base::FilePath(FILE_PATH_LITERAL("anti_aliasing_skia.png"))); } TEST_F(GLRendererAAPixelTest, AntiAliasingPerspective) { - AntiAliasingPerspective(); + AntiAliasingPerspective( + base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective_gl.png"))); } -TEST_F(SkiaRendererAAPixelTest, DISABLED_AntiAliasingPerspective) { - AntiAliasingPerspective(); +TEST_F(SkiaRendererAAPixelTest, AntiAliasingPerspective) { + AntiAliasingPerspective( + base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective_skia.png"))); } // This test tests that anti-aliasing works for axis aligned quads.
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index fbb850bc..78c544b 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -1437,12 +1437,12 @@ sk_sp<SkData> data = SkData::MakeWithCopy(&input, sizeof(input)); const char* hdr = R"( -in uniform float offset; -in uniform float multiplier; +layout(ctype=float) in uniform half offset; +layout(ctype=float) in uniform half multiplier; void main(inout half4 color) { - color.rgb -= half(offset); - color.rgb *= half(multiplier); + color.rgb -= offset; + color.rgb *= multiplier; // un-premultiply alpha if (color.a > 0)
diff --git a/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.cc b/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.cc index 89cbf1a..cd0e3c1 100644 --- a/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.cc +++ b/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.cc
@@ -141,7 +141,6 @@ } if (format_changed) { - frame_pool_.ClearFrameMarking(); RefreshEntireSourceSoon(); } } @@ -298,7 +297,7 @@ void FrameSinkVideoCapturerImpl::RefreshEntireSourceSoon() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - InvalidateEntireSource(); + dirty_rect_ = kMaxRect; RefreshSoon(); } @@ -328,11 +327,11 @@ } if (source_size != oracle_->source_size()) { oracle_->SetSourceSize(source_size); - InvalidateEntireSource(); + dirty_rect_ = kMaxRect; } - MaybeCaptureFrame(VideoCaptureOracle::kRefreshRequest, gfx::Rect(), - clock_->NowTicks(), + MaybeCaptureFrame(VideoCaptureOracle::kRefreshRequest, + gfx::Rect(oracle_->source_size()), clock_->NowTicks(), *resolved_target_->GetLastActivatedFrameMetadata()); } @@ -351,7 +350,7 @@ InvalidateRect(damage_rect); } else { oracle_->SetSourceSize(frame_size); - InvalidateEntireSource(); + dirty_rect_ = kMaxRect; } MaybeCaptureFrame(VideoCaptureOracle::kCompositorUpdate, damage_rect, @@ -370,14 +369,6 @@ gfx::Rect positive_rect = rect; positive_rect.Intersect(kMaxRect); dirty_rect_.Union(positive_rect); - content_version_++; -} - -void FrameSinkVideoCapturerImpl::InvalidateEntireSource() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - dirty_rect_ = kMaxRect; - content_version_++; } void FrameSinkVideoCapturerImpl::OnOverlayConnectionLost( @@ -440,19 +431,27 @@ return; } - // Reserve a buffer from the pool for the next frame. + // Reserve a buffer from the pool for the next frame. Optimization: If there + // are no changes in the source that need to be captured AND there are no + // captures currently in-flight, attempt to resurrect the last frame from the + // pool (and there is no need to capture anything new into the frame). const OracleFrameNumber oracle_frame_number = oracle_->next_frame_number(); const gfx::Size capture_size = AdjustSizeForPixelFormat(oracle_->capture_size()); - const bool can_resurrect_content = - content_version_in_marked_frame_ == content_version_ && - frame_pool_.HasMarkedFrameWithSize(capture_size); scoped_refptr<VideoFrame> frame; - if (can_resurrect_content) { - TRACE_EVENT_INSTANT0("gpu.capture", "UsingResurrectedFrame", - TRACE_EVENT_SCOPE_THREAD); - frame = frame_pool_.ResurrectOrDuplicateContentFromMarkedFrame(); + bool using_resurrected_frame = + dirty_rect_.IsEmpty() && + next_capture_frame_number_ == next_delivery_frame_number_; + if (using_resurrected_frame) { + frame = frame_pool_.ResurrectLastVideoFrame(pixel_format_, capture_size); + // If the resurrection failed, promote to a full frame capture. + if (!frame) { + TRACE_EVENT_INSTANT0("gpu.capture", "ResurrectionFailed", + TRACE_EVENT_SCOPE_THREAD); + using_resurrected_frame = false; + frame = frame_pool_.ReserveVideoFrame(pixel_format_, capture_size); + } } else { frame = frame_pool_.ReserveVideoFrame(pixel_format_, capture_size); } @@ -565,16 +564,16 @@ frame->set_color_space(gfx::ColorSpace::CreateSRGB()); } dirty_rect_ = gfx::Rect(); - OnFrameReadyForDelivery(capture_frame_number, oracle_frame_number, - gfx::Rect(), std::move(frame)); + DidCaptureFrame(capture_frame_number, oracle_frame_number, gfx::Rect(), + std::move(frame)); return; } // If the frame is a resurrected one, just deliver it since it already // contains the most up-to-date capture of the source content. - if (can_resurrect_content) { - OnFrameReadyForDelivery(capture_frame_number, oracle_frame_number, - content_rect, std::move(frame)); + if (using_resurrected_frame) { + DidCaptureFrame(capture_frame_number, oracle_frame_number, content_rect, + std::move(frame)); return; } @@ -585,7 +584,7 @@ : CopyOutputRequest::ResultFormat::RGBA_BITMAP, base::BindOnce(&FrameSinkVideoCapturerImpl::DidCopyFrame, capture_weak_factory_.GetWeakPtr(), capture_frame_number, - oracle_frame_number, content_version_, content_rect, + oracle_frame_number, content_rect, VideoCaptureOverlay::MakeCombinedRenderer( GetOverlaysInOrder(), content_rect, frame->format()), std::move(frame)))); @@ -600,7 +599,16 @@ request->set_result_selection(gfx::Rect(content_rect.size())); // Clear the |dirty_rect_|, to indicate all changes at the source are now - // being captured. + // being captured. This will also enable the "frame resurrection" optimization + // in future calls to this method. In other words, while the source content + // remains unchanged, there is no need to make any more CopyOutputRequests. + // + // Note that some optimistic assumptions are being made here: 1) that this + // |request| will succeed and it's image data successfully transferred to the + // VideoFrame; and 2) that delivery of the VideoFrame to the consumer will + // succeed. If, later in the pipeline, either of these assumptions is + // violated, the |dirty_rect_| will be changed to indicate that there might + // still be source changes requiring capture. See MaybeDeliverFrame(). dirty_rect_ = gfx::Rect(); resolved_target_->RequestCopyOfOutput(LocalSurfaceId(), std::move(request)); @@ -609,7 +617,6 @@ void FrameSinkVideoCapturerImpl::DidCopyFrame( int64_t capture_frame_number, OracleFrameNumber oracle_frame_number, - int64_t content_version, const gfx::Rect& content_rect, VideoCaptureOverlay::OnceRenderer overlay_renderer, scoped_refptr<VideoFrame> frame, @@ -673,18 +680,13 @@ media::LetterboxVideoFrame( frame.get(), gfx::Rect(content_rect.origin(), AdjustSizeForPixelFormat(result->size()))); - - if (content_version > content_version_in_marked_frame_) { - frame_pool_.MarkFrame(*frame); - content_version_in_marked_frame_ = content_version; - } } - OnFrameReadyForDelivery(capture_frame_number, oracle_frame_number, - content_rect, std::move(frame)); + DidCaptureFrame(capture_frame_number, oracle_frame_number, content_rect, + std::move(frame)); } -void FrameSinkVideoCapturerImpl::OnFrameReadyForDelivery( +void FrameSinkVideoCapturerImpl::DidCaptureFrame( int64_t capture_frame_number, OracleFrameNumber oracle_frame_number, const gfx::Rect& content_rect, @@ -731,6 +733,12 @@ TRACE_EVENT_ASYNC_END1("gpu.capture", "Capture", oracle_frame_number, "success", false); + // Mark the whole source as dirty, since this frame may have contained + // updated content that will not be delivered. See the comment at the end of + // MaybeCaptureFrame() regarding "optimistic assumptions" for further + // discussion. + dirty_rect_ = kMaxRect; + ScheduleRefreshFrame(); return; }
diff --git a/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.h b/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.h index b35bf1e..3c5ddc07 100644 --- a/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.h +++ b/components/viz/service/frame_sinks/video_capture/frame_sink_video_capturer_impl.h
@@ -174,8 +174,6 @@ void InvalidateRect(const gfx::Rect& rect) final; void OnOverlayConnectionLost(VideoCaptureOverlay* overlay) final; - void InvalidateEntireSource(); - // Returns a list of the overlays in rendering order. std::vector<VideoCaptureOverlay*> GetOverlaysInOrder() const; @@ -191,7 +189,6 @@ // |content_rect| region of a [possibly letterboxed] video |frame|. void DidCopyFrame(int64_t capture_frame_number, OracleFrameNumber oracle_frame_number, - int64_t content_version, const gfx::Rect& content_rect, VideoCaptureOverlay::OnceRenderer overlay_renderer, scoped_refptr<media::VideoFrame> frame, @@ -200,10 +197,10 @@ // Places the frame in the |delivery_queue_| and calls MaybeDeliverFrame(), // one frame at a time, in-order. |frame| may be null to indicate a // completed, but unsuccessful capture. - void OnFrameReadyForDelivery(int64_t capture_frame_number, - OracleFrameNumber oracle_frame_number, - const gfx::Rect& content_rect, - scoped_refptr<media::VideoFrame> frame); + void DidCaptureFrame(int64_t capture_frame_number, + OracleFrameNumber oracle_frame_number, + const gfx::Rect& content_rect, + scoped_refptr<media::VideoFrame> frame); // Delivers a |frame| to the consumer, if the VideoCaptureOracle allows // it. |frame| can be null to indicate a completed, but unsuccessful capture. @@ -284,12 +281,6 @@ // frames in-flight at any one time. InterprocessFramePool frame_pool_; - // Increased every time the source content changes or a forced refresh is - // requested. - int64_t content_version_ = 0; - - int64_t content_version_in_marked_frame_ = -1; - // A queue of captured frames pending delivery. This queue is used to re-order // frames, if they should happen to be captured out-of-order. struct CapturedFrame {
diff --git a/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.cc b/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.cc index 2ca164c..d13824dd 100644 --- a/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.cc +++ b/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.cc
@@ -30,6 +30,10 @@ const gfx::Size& size) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // Calling this method is a signal that there is no intention of resurrecting + // the last frame. + resurrectable_buffer_memory_ = nullptr; + const size_t bytes_required = VideoFrame::AllocationSize(format, size); // Look for an available buffer that's large enough. If one is found, wrap it @@ -52,8 +56,6 @@ [](const PooledBuffer& a, const PooledBuffer& b) { return a.mapping.size() < b.mapping.size(); }); - if (it->mapping.memory() == marked_frame_buffer_) - marked_frame_buffer_ = nullptr; available_buffers_.erase(it.base() - 1); // Release before allocating more. PooledBuffer reallocated = mojo::CreateReadOnlySharedMemoryRegion(bytes_required); @@ -80,78 +82,33 @@ return WrapBuffer(std::move(additional), format, size); } -void InterprocessFramePool::MarkFrame(const media::VideoFrame& frame) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - marked_frame_buffer_ = frame.data(0); - marked_frame_size_ = frame.coded_size(); - marked_frame_color_space_ = frame.ColorSpace(); - marked_frame_pixel_format_ = frame.format(); -} - -void InterprocessFramePool::ClearFrameMarking() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - marked_frame_buffer_ = nullptr; -} - -bool InterprocessFramePool::HasMarkedFrameWithSize( - const gfx::Size& size) const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return marked_frame_buffer_ != nullptr && marked_frame_size_ == size; -} - -scoped_refptr<VideoFrame> -InterprocessFramePool::ResurrectOrDuplicateContentFromMarkedFrame() { +scoped_refptr<VideoFrame> InterprocessFramePool::ResurrectLastVideoFrame( + VideoPixelFormat expected_format, + const gfx::Size& expected_size) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!marked_frame_buffer_) + // Find the tracking entry for the resurrectable buffer. If it is still being + // used, or is not of the expected format and size, punt. + if (resurrectable_buffer_memory_ == nullptr || + last_delivered_format_ != expected_format || + last_delivered_size_ != expected_size) { return nullptr; - - const auto it = - std::find_if(available_buffers_.rbegin(), available_buffers_.rend(), - [this](const PooledBuffer& candidate) { - return candidate.mapping.memory() == marked_frame_buffer_; - }); - - // If the buffer is available, use it directly. - if (it != available_buffers_.rend()) { - // Wrap the buffer in a VideoFrame and return it. - PooledBuffer resurrected = std::move(*it); - available_buffers_.erase(it.base() - 1); - auto frame = WrapBuffer(std::move(resurrected), marked_frame_pixel_format_, - marked_frame_size_); - frame->set_color_space(marked_frame_color_space_); - return frame; + } + const auto it = std::find_if( + available_buffers_.rbegin(), available_buffers_.rend(), + [this](const PooledBuffer& candidate) { + return candidate.mapping.memory() == resurrectable_buffer_memory_; + }); + if (it == available_buffers_.rend()) { + return nullptr; } - // Buffer is currently in use. Reserve a new buffer and copy the contents - // over. + // Wrap the buffer in a VideoFrame and return it. + PooledBuffer resurrected = std::move(*it); + available_buffers_.erase(it.base() - 1); auto frame = - ReserveVideoFrame(marked_frame_pixel_format_, marked_frame_size_); - // The call to ReserverVideoFrame should not have cleared - // |marked_frame_buffer_|, because that buffer is currently in use. - DCHECK(marked_frame_buffer_); - if (!frame) - return nullptr; -#if DCHECK_IS_ON() - // Sanity check that |marked_frame_buffer_| indeed corresponds to a buffer in - // |utilized_buffers_|. If MarkFrame() was erroneously called with a frame - // that did not belong to this pool or was otherwise tampered with, this might - // not be the case. - const auto source_it = std::find_if( - utilized_buffers_.rbegin(), utilized_buffers_.rend(), - [this](const std::pair<const media::VideoFrame*, - base::ReadOnlySharedMemoryRegion>& candidate) { - return candidate.first->data(0) == marked_frame_buffer_; - }); - DCHECK(source_it != utilized_buffers_.rend()); -#endif // DCHECK_IS_ON() - - // Copy the contents over. - const size_t num_bytes_to_copy = VideoFrame::AllocationSize( - marked_frame_pixel_format_, marked_frame_size_); - memcpy(frame->data(0), marked_frame_buffer_, num_bytes_to_copy); - - frame->set_color_space(marked_frame_color_space_); + WrapBuffer(std::move(resurrected), expected_format, expected_size); + frame->set_color_space(last_delivered_color_space_); return frame; } @@ -159,8 +116,16 @@ const VideoFrame* frame) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // Record that this frame is the last-delivered one, for possible future calls + // to ResurrectLastVideoFrame(). const auto it = utilized_buffers_.find(frame); DCHECK(it != utilized_buffers_.end()); + // Assumption: The first image plane's memory pointer should be the start of + // the writable mapped memory. WrapBuffer() sanity-checks this. + resurrectable_buffer_memory_ = frame->data(0); + last_delivered_format_ = frame->format(); + last_delivered_size_ = frame->coded_size(); + last_delivered_color_space_ = frame->ColorSpace(); return it->second.Duplicate(); } @@ -196,7 +161,7 @@ static_cast<uint8_t*>(pooled_buffer.mapping.memory()), pooled_buffer.mapping.size(), base::TimeDelta()); DCHECK(frame); - // Sanity-check the assumption being made for SetMarkedBuffer(): + // Sanity-check the assumption being made in CloneHandleForDelivery(): DCHECK_EQ(frame->data(0), pooled_buffer.mapping.memory()); utilized_buffers_.emplace(frame.get(), std::move(pooled_buffer.region)); frame->AddDestructionObserver(
diff --git a/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.h b/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.h index f4ffc14e..9337f72 100644 --- a/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.h +++ b/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool.h
@@ -42,20 +42,14 @@ media::VideoPixelFormat format, const gfx::Size& size); - // Clients may call this using a frame previously returned by - // ReserveVideoFrame() to mark it (or its contents) for later resurrection via - // ResurrectOrDuplicateContentFromMarkedFrame(). Note that only one frame can - // be marked at a time. MarkFrame() will overwrite any existing mark. - void MarkFrame(const media::VideoFrame& frame); - void ClearFrameMarking(); - bool HasMarkedFrameWithSize(const gfx::Size& size) const; - - // If no frame is marked, returns nullptr. Otherwise, if the marked frame is - // not currently in use, returns the marked frame. If the marked frame is in - // use, reserves a new frame and copies the contents of the marked frame to - // the newly reserved one. That last case may still return nullptr if the pool - // is fully utilized. - scoped_refptr<media::VideoFrame> ResurrectOrDuplicateContentFromMarkedFrame(); + // Finds the last VideoFrame delivered, and if it has been returned back to + // this pool already, re-materializes it. Otherwise, null is returned. This is + // used when the client knows the content of the video frame has not changed + // and is trying to avoid having to re-populate a new VideoFrame with the same + // content. + scoped_refptr<media::VideoFrame> ResurrectLastVideoFrame( + media::VideoPixelFormat expected_format, + const gfx::Size& expected_size); // Returns a cloned handle to the shared memory backing |frame| and its size // in bytes. Note that the client should not allow the ref-count of the @@ -105,12 +99,13 @@ base::flat_map<const media::VideoFrame*, base::ReadOnlySharedMemoryRegion> utilized_buffers_; - // The pointer to the mapped memory of the buffer that was set as "marked" - // via a call to SetMarkedBuffer(). - const void* marked_frame_buffer_ = nullptr; - gfx::Size marked_frame_size_; - gfx::ColorSpace marked_frame_color_space_; - media::VideoPixelFormat marked_frame_pixel_format_; + // The pointer to the mapped memory of the buffer that was last delivered, + // along with its format and size. ResurrectLastVideoFrame() uses this + // information to locate and confirm that a prior frame can be resurrected. + const void* resurrectable_buffer_memory_ = nullptr; + media::VideoPixelFormat last_delivered_format_ = media::PIXEL_FORMAT_UNKNOWN; + gfx::Size last_delivered_size_; + gfx::ColorSpace last_delivered_color_space_; // The time at which the last shared memory allocation or mapping failed. base::TimeTicks last_fail_log_time_;
diff --git a/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool_unittest.cc b/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool_unittest.cc index 86233d74..29e2fee 100644 --- a/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool_unittest.cc +++ b/components/viz/service/frame_sinks/video_capture/interprocess_frame_pool_unittest.cc
@@ -143,154 +143,70 @@ return true; } -TEST(InterprocessFramePoolTest, ResurrectFrameThatIsNotInUse) { +TEST(InterprocessFramePoolTest, ResurrectsDeliveredFramesOnly) { InterprocessFramePool pool(2); - const gfx::ColorSpace kArbitraryColorSpace = gfx::ColorSpace::CreateREC709(); - // Reserve a frame, populate it, mark it, and release it. + // Reserve a frame, populate it, but release it before delivery. scoped_refptr<media::VideoFrame> frame = pool.ReserveVideoFrame(kFormat, kSize); ASSERT_TRUE(frame); - const uint8_t kValues[3] = {0x11, 0x22, 0x33}; - media::FillYUV(frame.get(), kValues[0], kValues[1], kValues[2]); - frame->set_color_space(kArbitraryColorSpace); - pool.MarkFrame(*frame); + media::FillYUV(frame.get(), 0x11, 0x22, 0x33); frame = nullptr; // Returns frame to pool. - ASSERT_TRUE(pool.HasMarkedFrameWithSize(kSize)); - const gfx::Size kDifferentSize(kSize.width() - 2, kSize.height() + 2); - ASSERT_FALSE(pool.HasMarkedFrameWithSize(kDifferentSize)); - - // Resurrect the frame and expect it to still have the same content, size, - // format, and color space. Release and repeat that a few times. - for (int i = 0; i < 3; ++i) { - frame = pool.ResurrectOrDuplicateContentFromMarkedFrame(); - ASSERT_TRUE(frame); - ASSERT_EQ(kFormat, frame->format()); - ASSERT_EQ(kSize, frame->coded_size()); - ASSERT_EQ(kSize, frame->visible_rect().size()); - ASSERT_EQ(kSize, frame->natural_size()); - ASSERT_EQ(kArbitraryColorSpace, frame->ColorSpace()); - ASSERT_TRUE(PlanesAreFilledWithValues(*frame, kValues)); - frame = nullptr; - } -} - -TEST(InterprocessFramePoolTest, ResurrectContentFromFrameThatIsStillInUse) { - InterprocessFramePool pool(2); - const gfx::ColorSpace kArbitraryColorSpace = gfx::ColorSpace::CreateREC709(); - - // Reserve a frame, populate it, mark it, and hold on to it. - scoped_refptr<media::VideoFrame> frame = - pool.ReserveVideoFrame(kFormat, kSize); - ASSERT_TRUE(frame); - const uint8_t kValues[3] = {0x11, 0x22, 0x33}; - media::FillYUV(frame.get(), kValues[0], kValues[1], kValues[2]); - frame->set_color_space(kArbitraryColorSpace); - pool.MarkFrame(*frame); - - ASSERT_TRUE(pool.HasMarkedFrameWithSize(kSize)); - const gfx::Size kDifferentSize(kSize.width() - 2, kSize.height() + 2); - ASSERT_FALSE(pool.HasMarkedFrameWithSize(kDifferentSize)); - - scoped_refptr<media::VideoFrame> frame2 = - pool.ResurrectOrDuplicateContentFromMarkedFrame(); - ASSERT_TRUE(frame2); - ASSERT_NE(frame, frame2); - ASSERT_NE(frame->data(0), frame2->data(0)); - ASSERT_EQ(kFormat, frame2->format()); - ASSERT_EQ(kSize, frame2->coded_size()); - ASSERT_EQ(kSize, frame2->visible_rect().size()); - ASSERT_EQ(kSize, frame2->natural_size()); - ASSERT_EQ(kArbitraryColorSpace, frame2->ColorSpace()); - ASSERT_TRUE(PlanesAreFilledWithValues(*frame2, kValues)); -} - -TEST(InterprocessFramePoolTest, ResurrectWhenAtCapacity) { - InterprocessFramePool pool(2); - const gfx::ColorSpace kArbitraryColorSpace = gfx::ColorSpace::CreateREC709(); - - // Reserve two frames and hold on to them - scoped_refptr<media::VideoFrame> frame1 = - pool.ReserveVideoFrame(kFormat, kSize); - scoped_refptr<media::VideoFrame> frame2 = - pool.ReserveVideoFrame(kFormat, kSize); - ASSERT_TRUE(frame1); - ASSERT_TRUE(frame2); - // Fill and mark one of them - const uint8_t kValues[3] = {0x11, 0x22, 0x33}; - media::FillYUV(frame1.get(), kValues[0], kValues[1], kValues[2]); - frame1->set_color_space(kArbitraryColorSpace); - pool.MarkFrame(*frame1); - - // Attempt to resurrect. This should fail, because the pool is already at - // capacity. - scoped_refptr<media::VideoFrame> frame3 = - pool.ResurrectOrDuplicateContentFromMarkedFrame(); - ASSERT_FALSE(frame3); - - // Release the first frame - frame1 = nullptr; - - // Now, resurrecting should work again. - frame3 = pool.ResurrectOrDuplicateContentFromMarkedFrame(); - ASSERT_TRUE(frame3); - ASSERT_EQ(kFormat, frame3->format()); - ASSERT_EQ(kSize, frame3->coded_size()); - ASSERT_EQ(kArbitraryColorSpace, frame3->ColorSpace()); - ASSERT_TRUE(PlanesAreFilledWithValues(*frame3, kValues)); -} - -TEST(InterprocessFramePoolTest, ResurrectWhenNoFrameMarked) { - InterprocessFramePool pool(2); - - // Attempt to resurrect before any frame was ever reserved. - scoped_refptr<media::VideoFrame> frame = - pool.ResurrectOrDuplicateContentFromMarkedFrame(); + // The pool should fail to resurrect the last frame because it was never + // delivered. + frame = pool.ResurrectLastVideoFrame(kFormat, kSize); ASSERT_FALSE(frame); - // Reserve a frame and release it without marking it. - scoped_refptr<media::VideoFrame> frame2 = - pool.ReserveVideoFrame(kFormat, kSize); - ASSERT_TRUE(frame2); - frame2 = nullptr; // Returns frame to pool. + // Reserve a frame and populate it with different color values; only this + // time, signal that it will be delivered before releasing it. + frame = pool.ReserveVideoFrame(kFormat, kSize); + ASSERT_TRUE(frame); + const uint8_t kValues[3] = {0x44, 0x55, 0x66}; + media::FillYUV(frame.get(), kValues[0], kValues[1], kValues[2]); + { + auto handle = pool.CloneHandleForDelivery(frame.get()); + ExpectValidHandleForDelivery(handle); + } + frame = nullptr; // Returns frame to pool. - // Attempt to resurrect. This should fail, because no frame was marked. - scoped_refptr<media::VideoFrame> frame3 = - pool.ResurrectOrDuplicateContentFromMarkedFrame(); - ASSERT_FALSE(frame3); -} + // Confirm that the last frame can be resurrected repeatedly. + for (int i = 0; i < 3; ++i) { + frame = pool.ResurrectLastVideoFrame(kFormat, kSize); + ASSERT_TRUE(frame); + ASSERT_TRUE(PlanesAreFilledWithValues(*frame, kValues)); + frame = nullptr; // Returns frame to pool. + } -TEST(InterprocessFramePoolTest, FrameMarkingIsLostWhenBufferIsReallocated) { - InterprocessFramePool pool(2); + // A frame that is being delivered cannot be resurrected. + for (int i = 0; i < 2; ++i) { + if (i == 0) { // Test this for a resurrected frame. + frame = pool.ResurrectLastVideoFrame(kFormat, kSize); + ASSERT_TRUE(frame); + ASSERT_TRUE(PlanesAreFilledWithValues(*frame, kValues)); + } else { // Test this for a normal frame. + frame = pool.ReserveVideoFrame(kFormat, kSize); + ASSERT_TRUE(frame); + media::FillYUV(frame.get(), 0x77, 0x88, 0x99); + } + { + auto handle = pool.CloneHandleForDelivery(frame.get()); + ExpectValidHandleForDelivery(handle); + } + scoped_refptr<media::VideoFrame> should_be_null = + pool.ResurrectLastVideoFrame(kFormat, kSize); + ASSERT_FALSE(should_be_null); + frame = nullptr; // Returns frame to pool. + } - // Reserve enough frames to hit capacity. - scoped_refptr<media::VideoFrame> frame1 = - pool.ReserveVideoFrame(kFormat, kSize); - scoped_refptr<media::VideoFrame> frame2 = - pool.ReserveVideoFrame(kFormat, kSize); - ASSERT_TRUE(frame1); - ASSERT_TRUE(frame2); - - // Mark one of them - pool.MarkFrame(*frame1); - ASSERT_TRUE(pool.HasMarkedFrameWithSize(kSize)); - - // Release all frames - frame1 = nullptr; - frame2 = nullptr; - - // Reserve all frames again but this time request a bigger size. - // This should lead to all buffers being reallocated and the marking being - // lost. - gfx::Size kBiggerSize(kSize.width() + 2, kSize.height() + 2); - frame1 = pool.ReserveVideoFrame(kFormat, kBiggerSize); - frame2 = pool.ReserveVideoFrame(kFormat, kBiggerSize); - ASSERT_TRUE(frame1); - ASSERT_TRUE(frame2); - - ASSERT_FALSE(pool.HasMarkedFrameWithSize(kSize)); - ASSERT_FALSE(pool.HasMarkedFrameWithSize(kBiggerSize)); + // Finally, reserve a frame, populate it, and don't deliver it. Expect that, + // still, undelivered frames cannot be resurrected. + frame = pool.ReserveVideoFrame(kFormat, kSize); + ASSERT_TRUE(frame); + media::FillYUV(frame.get(), 0xaa, 0xbb, 0xcc); + frame = nullptr; // Returns frame to pool. + frame = pool.ResurrectLastVideoFrame(kFormat, kSize); + ASSERT_FALSE(frame); } TEST(InterprocessFramePoolTest, ReportsCorrectUtilization) { @@ -303,7 +219,7 @@ // Reserve the frame and expect 1/2 the pool to be utilized. scoped_refptr<media::VideoFrame> frame = (i == 0) ? pool.ReserveVideoFrame(kFormat, kSize) - : pool.ResurrectOrDuplicateContentFromMarkedFrame(); + : pool.ResurrectLastVideoFrame(kFormat, kSize); ASSERT_TRUE(frame); ASSERT_EQ(0.5f, pool.GetUtilization()); @@ -315,9 +231,6 @@ } ASSERT_EQ(0.5f, pool.GetUtilization()); - // Mark the frame for later resurrection. - pool.MarkFrame(*frame); - // Finally, release the frame to indicate it has been delivered and is no // longer in-use by downstream consumers. This should cause the utilization // to go back down to zero.
diff --git a/components/viz/test/data/anti_aliasing.png b/components/viz/test/data/anti_aliasing_gl.png similarity index 100% rename from components/viz/test/data/anti_aliasing.png rename to components/viz/test/data/anti_aliasing_gl.png Binary files differ
diff --git a/components/viz/test/data/anti_aliasing_perspective.png b/components/viz/test/data/anti_aliasing_perspective_gl.png similarity index 100% rename from components/viz/test/data/anti_aliasing_perspective.png rename to components/viz/test/data/anti_aliasing_perspective_gl.png Binary files differ
diff --git a/components/viz/test/data/anti_aliasing_perspective_skia.png b/components/viz/test/data/anti_aliasing_perspective_skia.png new file mode 100644 index 0000000..0d00347a --- /dev/null +++ b/components/viz/test/data/anti_aliasing_perspective_skia.png Binary files differ
diff --git a/components/viz/test/data/anti_aliasing_skia.png b/components/viz/test/data/anti_aliasing_skia.png new file mode 100644 index 0000000..8f15003 --- /dev/null +++ b/components/viz/test/data/anti_aliasing_skia.png Binary files differ
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index 649b0e63..bc9134a 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -2499,7 +2499,8 @@ "//chromeos/audio", "//chromeos/constants", "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//chromeos/network", "//components/session_manager/core", ]
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.cc b/content/browser/accessibility/browser_accessibility_state_impl.cc index 01b8057d..cbb9640 100644 --- a/content/browser/accessibility/browser_accessibility_state_impl.cc +++ b/content/browser/accessibility/browser_accessibility_state_impl.cc
@@ -71,22 +71,25 @@ // Let each platform do its own initialization. PlatformInitialize(); -#if defined(OS_WIN) || defined(OS_ANDROID) + // Schedule calls to update histograms after a delay. + // // The delay is necessary because assistive technology sometimes isn't // detected until after the user interacts in some way, so a reasonable delay // gives us better numbers. + + // Some things can be done on another thread safely. base::PostDelayedTaskWithTraits( FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::BindOnce(&BrowserAccessibilityStateImpl::UpdateHistograms, this), + base::BindOnce( + &BrowserAccessibilityStateImpl::UpdateHistogramsOnOtherThread, this), base::TimeDelta::FromSeconds(ACCESSIBILITY_HISTOGRAM_DELAY_SECS)); -#else - // On MacOS, UpdateHistograms should be called on the UI thread because it - // needs to be able to access PrefService. + + // Other things must be done on the UI thread (e.g. to access PrefService). base::PostDelayedTaskWithTraits( FROM_HERE, {BrowserThread::UI}, - base::BindOnce(&BrowserAccessibilityStateImpl::UpdateHistograms, this), + base::BindOnce(&BrowserAccessibilityStateImpl::UpdateHistogramsOnUIThread, + this), base::TimeDelta::FromSeconds(ACCESSIBILITY_HISTOGRAM_DELAY_SECS)); -#endif } BrowserAccessibilityStateImpl::~BrowserAccessibilityStateImpl() { @@ -136,20 +139,27 @@ return accessibility_mode_ == ui::kAXModeComplete; } -void BrowserAccessibilityStateImpl::AddHistogramCallback( - base::Closure callback) { - histogram_callbacks_.push_back(std::move(callback)); +void BrowserAccessibilityStateImpl::AddUIThreadHistogramCallback( + base::OnceClosure callback) { + ui_thread_histogram_callbacks_.push_back(std::move(callback)); +} + +void BrowserAccessibilityStateImpl::AddOtherThreadHistogramCallback( + base::OnceClosure callback) { + other_thread_histogram_callbacks_.push_back(std::move(callback)); } void BrowserAccessibilityStateImpl::UpdateHistogramsForTesting() { - UpdateHistograms(); + UpdateHistogramsOnUIThread(); + UpdateHistogramsOnOtherThread(); } -void BrowserAccessibilityStateImpl::UpdateHistograms() { - UpdatePlatformSpecificHistograms(); +void BrowserAccessibilityStateImpl::UpdateHistogramsOnUIThread() { + UpdatePlatformSpecificHistogramsOnUIThread(); - for (size_t i = 0; i < histogram_callbacks_.size(); ++i) - histogram_callbacks_[i].Run(); + for (auto& callback : ui_thread_histogram_callbacks_) + std::move(callback).Run(); + ui_thread_histogram_callbacks_.clear(); // TODO(dmazzoni): remove this in M59 since Accessibility.ModeFlag // supercedes it. http://crbug.com/672205 @@ -162,6 +172,14 @@ switches::kForceRendererAccessibility)); } +void BrowserAccessibilityStateImpl::UpdateHistogramsOnOtherThread() { + UpdatePlatformSpecificHistogramsOnOtherThread(); + + for (auto& callback : other_thread_histogram_callbacks_) + std::move(callback).Run(); + other_thread_histogram_callbacks_.clear(); +} + void BrowserAccessibilityStateImpl::OnAXModeAdded(ui::AXMode mode) { AddAccessibilityModeFlags(mode); } @@ -173,7 +191,10 @@ #if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_MACOSX) void BrowserAccessibilityStateImpl::PlatformInitialize() {} -void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {} +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnUIThread() {} +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnOtherThread() {} #endif void BrowserAccessibilityStateImpl::AddAccessibilityModeFlags(ui::AXMode mode) {
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.h b/content/browser/accessibility/browser_accessibility_state_impl.h index 30dd3485..2af968c 100644 --- a/content/browser/accessibility/browser_accessibility_state_impl.h +++ b/content/browser/accessibility/browser_accessibility_state_impl.h
@@ -57,7 +57,8 @@ void ResetAccessibilityMode() override; void OnScreenReaderDetected() override; bool IsAccessibleBrowser() override; - void AddHistogramCallback(base::Closure callback) override; + void AddUIThreadHistogramCallback(base::OnceClosure callback) override; + void AddOtherThreadHistogramCallback(base::OnceClosure callback) override; void UpdateHistogramsForTesting() override; @@ -85,17 +86,22 @@ // Called a short while after startup to allow time for the accessibility // state to be determined. Updates histograms with the current state. - void UpdateHistograms(); + // Two variants - one for things that must be run on the UI thread, and + // another that can be run on another thread. + void UpdateHistogramsOnUIThread(); + void UpdateHistogramsOnOtherThread(); // Leaky singleton, destructor generally won't be called. ~BrowserAccessibilityStateImpl() override; void PlatformInitialize(); - void UpdatePlatformSpecificHistograms(); + void UpdatePlatformSpecificHistogramsOnUIThread(); + void UpdatePlatformSpecificHistogramsOnOtherThread(); ui::AXMode accessibility_mode_; - std::vector<base::Closure> histogram_callbacks_; + std::vector<base::OnceClosure> ui_thread_histogram_callbacks_; + std::vector<base::OnceClosure> other_thread_histogram_callbacks_; bool disable_hot_tracking_;
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_android.cc b/content/browser/accessibility/browser_accessibility_state_impl_android.cc index 7622a81..1cc7b7a 100644 --- a/content/browser/accessibility/browser_accessibility_state_impl_android.cc +++ b/content/browser/accessibility/browser_accessibility_state_impl_android.cc
@@ -21,8 +21,12 @@ Java_BrowserAccessibilityState_registerAnimatorDurationScaleObserver(env); } -void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() { - // NOTE: this method is run from the file thread to reduce jank, since +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnUIThread() {} + +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnOtherThread() { + // NOTE: this method is run from another thread to reduce jank, since // there's no guarantee these system calls will return quickly. Be careful // not to add any code that isn't safe to run from a non-main thread! DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_mac.mm b/content/browser/accessibility/browser_accessibility_state_impl_mac.mm index fde90e81..e91b463 100644 --- a/content/browser/accessibility/browser_accessibility_state_impl_mac.mm +++ b/content/browser/accessibility/browser_accessibility_state_impl_mac.mm
@@ -59,8 +59,8 @@ base::BindOnce(&SetupAccessibilityDisplayOptionsNotifier)); } -void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() { - // NOTE: This function is running on the file thread. +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnUIThread() { NSWorkspace* workspace = [NSWorkspace sharedWorkspace]; SEL sel = @selector(accessibilityDisplayShouldIncreaseContrast); @@ -86,4 +86,7 @@ } } +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnOtherThread() {} + } // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_win.cc b/content/browser/accessibility/browser_accessibility_state_impl_win.cc index 641f4068..2c66497 100644 --- a/content/browser/accessibility/browser_accessibility_state_impl_win.cc +++ b/content/browser/accessibility/browser_accessibility_state_impl_win.cc
@@ -89,10 +89,15 @@ new gfx::SingletonHwndObserver(base::BindRepeating(&OnWndProc))); } -void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() { - // NOTE: this method is run from the file thread to reduce jank, since - // there's no guarantee these system calls will return quickly. Be careful - // not to add any code that isn't safe to run from a non-main thread! +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnUIThread() {} + +void BrowserAccessibilityStateImpl:: + UpdatePlatformSpecificHistogramsOnOtherThread() { + // NOTE: this method is run from another thread to reduce jank, since + // there's no guarantee these system calls will return quickly. Code that + // needs to run in the UI thread can be run in + // UpdatePlatformSpecificHistogramsOnUIThread instead. AUDIODESCRIPTION audio_description = {0}; audio_description.cbSize = sizeof(AUDIODESCRIPTION);
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc index 50b34fd..3b642d1 100644 --- a/content/browser/download/download_manager_impl.cc +++ b/content/browser/download/download_manager_impl.cc
@@ -338,9 +338,7 @@ if (!in_progress_manager_) { in_progress_manager_ = std::make_unique<download::InProgressDownloadManager>( - this, - IsOffTheRecord() ? base::FilePath() : browser_context_->GetPath(), - base::BindRepeating(&IsOriginSecure), + this, base::FilePath(), base::BindRepeating(&IsOriginSecure), base::BindRepeating(&DownloadRequestUtils::IsURLSafe)); } else { in_progress_manager_->set_delegate(this);
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc index cfe1c2f..4648ff8 100644 --- a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
@@ -42,6 +42,7 @@ #if defined(OS_CHROMEOS) #include "chromeos/audio/cras_audio_handler.h" +#include "chromeos/dbus/cras_audio_client.h" #endif using ::testing::_; @@ -260,6 +261,7 @@ host_->CreateInterfacePtrAndBind()); #if defined(OS_CHROMEOS) + chromeos::CrasAudioClient::InitializeFake(); chromeos::CrasAudioHandler::InitializeForTesting(); #endif } @@ -268,6 +270,7 @@ audio_manager_->Shutdown(); #if defined(OS_CHROMEOS) chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); #endif }
diff --git a/content/browser/webauth/authenticator_common.cc b/content/browser/webauth/authenticator_common.cc index b1e2b27..1dca48e 100644 --- a/content/browser/webauth/authenticator_common.cc +++ b/content/browser/webauth/authenticator_common.cc
@@ -995,7 +995,9 @@ if (transport_used) { request_delegate_->UpdateLastTransportUsed(*transport_used); } - + bool is_transport_used_internal = + transport_used && + *transport_used == device::FidoTransportProtocol::kInternal; if (attestation_requested_) { // Cryptotoken requests may bypass the attestation prompt because the // extension implements its own. Invoking the attestation prompt code @@ -1023,7 +1025,8 @@ relying_party_id_, base::BindOnce( &AuthenticatorCommon::OnRegisterResponseAttestationDecided, - weak_factory_.GetWeakPtr(), std::move(*response_data))); + weak_factory_.GetWeakPtr(), std::move(*response_data), + is_transport_used_internal)); return; } @@ -1031,8 +1034,7 @@ AttestationErasureOption::kEraseAttestationAndAaguid; if (response_data->IsSelfAttestation()) { attestation_erasure = AttestationErasureOption::kIncludeAttestation; - } else if (transport_used && - *transport_used == device::FidoTransportProtocol::kInternal) { + } else if (is_transport_used_internal) { // Contrary to what the WebAuthn spec says, for internal (platform) // authenticators we do not erase the AAGUID from authenticatorData, // even if requested attestationConveyancePreference is "none". @@ -1054,6 +1056,7 @@ void AuthenticatorCommon::OnRegisterResponseAttestationDecided( device::AuthenticatorMakeCredentialResponse response_data, + bool is_transport_used_internal, bool attestation_permitted) { awaiting_attestation_response_ = false; if (!request_) { @@ -1064,21 +1067,26 @@ DCHECK(attestation_requested_); + AttestationErasureOption attestation_erasure; if (!attestation_permitted) { UMA_HISTOGRAM_ENUMERATION("WebAuthentication.AttestationPromptResult", AttestationPromptResult::kBlocked); - InvokeCallbackAndCleanup( - std::move(make_credential_response_callback_), - blink::mojom::AuthenticatorStatus::NOT_ALLOWED_ERROR, nullptr, - Focus::kDoCheck); - return; + if (is_transport_used_internal) { + // For internal (platform) authenticators, we do not erase the + // AAGUID from authenticatorData even if the user declines to + // share attestation. + attestation_erasure = + AttestationErasureOption::kEraseAttestationButIncludeAaguid; + } else { + attestation_erasure = + AttestationErasureOption::kEraseAttestationAndAaguid; + } + } else { + UMA_HISTOGRAM_ENUMERATION("WebAuthentication.AttestationPromptResult", + AttestationPromptResult::kAllowed); + attestation_erasure = AttestationErasureOption::kIncludeAttestation; } - UMA_HISTOGRAM_ENUMERATION("WebAuthentication.AttestationPromptResult", - AttestationPromptResult::kAllowed); - AttestationErasureOption attestation_erasure = - AttestationErasureOption::kIncludeAttestation; - // The check for IsAttestationCertificateInappropriatelyIdentifying is // performed after the permissions prompt, even though we know the answer // before, because this still effectively discloses the make & model of
diff --git a/content/browser/webauth/authenticator_common.h b/content/browser/webauth/authenticator_common.h index 9f23e71..488be50 100644 --- a/content/browser/webauth/authenticator_common.h +++ b/content/browser/webauth/authenticator_common.h
@@ -139,6 +139,7 @@ // whether or not to return attestation data has been made. void OnRegisterResponseAttestationDecided( device::AuthenticatorMakeCredentialResponse response_data, + bool is_transport_used_internal, bool attestation_permitted); // Callback to handle the async response from a U2fDevice.
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc index 86975327..e1559646 100644 --- a/content/browser/webauth/authenticator_impl_unittest.cc +++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -1661,16 +1661,16 @@ AttestationConveyancePreference::INDIRECT, IndividualAttestation::NOT_REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, { AttestationConveyancePreference::INDIRECT, IndividualAttestation::REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, { @@ -1693,16 +1693,16 @@ AttestationConveyancePreference::DIRECT, IndividualAttestation::NOT_REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, { AttestationConveyancePreference::DIRECT, IndividualAttestation::REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, { @@ -1725,16 +1725,16 @@ AttestationConveyancePreference::ENTERPRISE, IndividualAttestation::NOT_REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, { AttestationConveyancePreference::ENTERPRISE, IndividualAttestation::REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, { @@ -1775,8 +1775,8 @@ AttestationConveyancePreference::ENTERPRISE, IndividualAttestation::NOT_REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, { @@ -1846,13 +1846,14 @@ "", }, { - // If attestation is requested, but denied, we'll still fail the - // request. + // If attestation is requested, but denied, we'll return none + // attestation. But because the transport is kInternal, the AAGUID + // will be preserved. AttestationConveyancePreference::DIRECT, IndividualAttestation::NOT_REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE_WITH_NONZERO_AAGUID, "", }, { @@ -1887,13 +1888,13 @@ "", }, { - // If attestation is requested, but denied, we'll still fail the - // request. + // If attestation is requested, but denied, we'll return none + // attestation. AttestationConveyancePreference::DIRECT, IndividualAttestation::NOT_REQUESTED, AttestationConsent::DENIED, - AuthenticatorStatus::NOT_ALLOWED_ERROR, - AttestationType::ANY, + AuthenticatorStatus::SUCCESS, + AttestationType::NONE, "", }, {
diff --git a/content/browser/webrtc/webrtc_content_browsertest_base.cc b/content/browser/webrtc/webrtc_content_browsertest_base.cc index afbf56a..a29cd1f 100644 --- a/content/browser/webrtc/webrtc_content_browsertest_base.cc +++ b/content/browser/webrtc/webrtc_content_browsertest_base.cc
@@ -24,6 +24,7 @@ #if defined(OS_CHROMEOS) #include "chromeos/audio/cras_audio_handler.h" +#include "chromeos/dbus/cras_audio_client.h" #endif namespace content { @@ -47,7 +48,8 @@ // We need pixel output when we dig pixels out of video tags for verification. EnablePixelOutput(); #if defined(OS_CHROMEOS) - chromeos::CrasAudioHandler::InitializeForTesting(); + chromeos::CrasAudioClient::InitializeFake(); + chromeos::CrasAudioHandler::InitializeForTesting(); #endif ContentBrowserTest::SetUp(); } @@ -55,7 +57,8 @@ void WebRtcContentBrowserTestBase::TearDown() { ContentBrowserTest::TearDown(); #if defined(OS_CHROMEOS) - chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); #endif }
diff --git a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroidImpl.java b/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroidImpl.java index 9742a958..1c73840 100644 --- a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroidImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroidImpl.java
@@ -4,7 +4,6 @@ package org.chromium.content.browser; -import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -289,8 +288,6 @@ if (mShowToasts) Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show(); } - // TODO(crbug.com/635567): Fix this properly. - @SuppressLint("ParcelCreator") private static class TracingIntentFilter extends IntentFilter { TracingIntentFilter(Context context) { addAction(context.getPackageName() + "." + ACTION_START);
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java index c160562..5f8fae3 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
@@ -4,7 +4,6 @@ package org.chromium.content.browser.input; -import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Configuration; import android.graphics.Color; @@ -141,8 +140,6 @@ * {@ResultReceiver} passed in InputMethodManager#showSoftInput}. We need this to scroll to the * editable node at the right timing, which is after input method window shows up. */ - // TODO(crbug.com/635567): Fix this properly. - @SuppressLint("ParcelCreator") private static class ShowKeyboardResultReceiver extends ResultReceiver { // Unfortunately, the memory life cycle of ResultReceiver object, once passed in // showSoftInput(), is in the control of Android's input method framework and IME app,
diff --git a/content/public/browser/browser_accessibility_state.h b/content/public/browser/browser_accessibility_state.h index 484214b..389acd3 100644 --- a/content/public/browser/browser_accessibility_state.h +++ b/content/public/browser/browser_accessibility_state.h
@@ -56,7 +56,14 @@ // browser starts up, when accessibility state histograms are updated. // Use this to register a method to update additional accessibility // histograms. - virtual void AddHistogramCallback(base::Closure callback) = 0; + // + // Use this variant for a callback that must be run on the UI thread, + // for example something that needs to access prefs. + virtual void AddUIThreadHistogramCallback(base::OnceClosure callback) = 0; + + // Use this variant for a callback that's better to run on another + // thread, for example something that may block or run slowly. + virtual void AddOtherThreadHistogramCallback(base::OnceClosure callback) = 0; virtual void UpdateHistogramsForTesting() = 0; };
diff --git a/content/shell/browser/shell.cc b/content/shell/browser/shell.cc index 160be8b..d7f3f624 100644 --- a/content/shell/browser/shell.cc +++ b/content/shell/browser/shell.cc
@@ -91,10 +91,12 @@ web_contents_->SetDelegate(this); if (switches::IsRunWebTestsSwitchPresent()) { - headless_ = true; - // In a headless shell, disable occlusion tracking. Otherwise, WebContents - // would always behave as if they were occluded, i.e. would not render - // frames and would not receive input events. + headless_ = !base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableHeadlessMode); + // Disable occlusion tracking. In a headless shell WebContents would always + // behave as if they were occluded, i.e. would not render frames and would + // not receive input events. For non-headless mode we do not want tests + // running in parallel to trigger occlusion tracking. base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kDisableBackgroundingOccludedWindowsForTesting); }
diff --git a/content/shell/common/web_test/web_test_switches.cc b/content/shell/common/web_test/web_test_switches.cc index afd8981..f585d2de 100644 --- a/content/shell/common/web_test/web_test_switches.cc +++ b/content/shell/common/web_test/web_test_switches.cc
@@ -56,4 +56,9 @@ // http://dev.chromium.org/blink/runtime-enabled-features. const char kStableReleaseMode[] = "stable-release-mode"; +// Disables the shell from beginning in headless mode. Tests will then attempt +// to use the hardware GPU for rendering. This is only followed when +// kRunWebTests is set. +const char kDisableHeadlessMode[] = "disable-headless-mode"; + } // namespace switches
diff --git a/content/shell/common/web_test/web_test_switches.h b/content/shell/common/web_test/web_test_switches.h index 26933cc..abb8312d 100644 --- a/content/shell/common/web_test/web_test_switches.h +++ b/content/shell/common/web_test/web_test_switches.h
@@ -30,6 +30,7 @@ extern const char kEncodeBinary[]; extern const char kRunWebTests[]; extern const char kStableReleaseMode[]; +extern const char kDisableHeadlessMode[]; } // namespace switches
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index eb8cce8c..5052d6a 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -1247,7 +1247,13 @@ } if (is_chromeos) { - deps += [ "//chromeos/audio" ] + deps += [ + "//chromeos/audio", + + # TODO(stevenjb): Replace with //chromeos/dbus/cras once extracted. + # https://crbug.com/940810. + "//chromeos/dbus", + ] } if (use_aura && !is_win) { @@ -2147,7 +2153,13 @@ ] } if (is_chromeos) { - deps += [ "//chromeos/audio" ] + deps += [ + "//chromeos/audio", + + # TODO(stevenjb): Replace with //chromeos/dbus/cras once extracted. + # https://crbug.com/940810. + "//chromeos/dbus", + ] } if (is_android) { sources += [
diff --git a/content/test/DEPS b/content/test/DEPS index 9bfd5ba..c4e0990 100644 --- a/content/test/DEPS +++ b/content/test/DEPS
@@ -11,7 +11,9 @@ "+components/viz/test", "+services/viz/public/interfaces", - "+chromeos/audio", # For WebRTC tests. + # For WebRTC tests. + "+chromeos/audio", + "+chromeos/dbus/cras_audio_client.h", # Testing utilities can access anything in content/ "+content", "+device/bluetooth", # For WebBluetooth tests
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py index 14bd749..99dae1d 100644 --- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -1018,6 +1018,10 @@ self.Fail('deqp/functional/gles3/fbocompleteness.html', ['linux', ('nvidia', 0x1cb3), 'opengl'], bug=703779) + # Linux Intel + self.Fail('conformance2/textures/misc/tex-base-level-bug.html', + ['linux', 'intel'], bug=950552) + # Already fixed with Mesa 17.2.3 self.Fail('conformance2/textures/misc/tex-subimage3d-pixel-buffer-bug.html', ['linux', 'intel'], bug=905011) # WebGL 2.0.1
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py index abcf7ef..74ab3d0 100644 --- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -438,7 +438,8 @@ ['win', 'passthrough', 'vulkan'], bug=2913) # ANGLE bug ID self.Fail('conformance/textures/misc/texture-mips.html', ['win', 'passthrough', 'vulkan'], bug=2722) # ANGLE bug ID - self.Fail('conformance/uniforms/out-of-bounds-uniform-array-access.html', + # Note: the following test crashes so it's skipped. http://anglebug.com/3352 + self.Skip('conformance/uniforms/out-of-bounds-uniform-array-access.html', ['win', 'passthrough', 'vulkan'], bug=2921) # ANGLE bug ID self.Fail('WebglExtension_ANGLE_instanced_arrays', ['win', 'passthrough', 'vulkan'], bug=2672) # ANGLE bug ID @@ -731,6 +732,8 @@ self.Fail('conformance/glsl/bugs/' + 'varying-arrays-should-not-be-reversed.html', ['android', ('qualcomm', 'Adreno (TM) 330')], bug=709704) + self.Skip('conformance/rendering/rendering-sampling-feedback-loop.html', + ['android', ('qualcomm', 'Adreno (TM) 330'), 'no_passthrough']) # Nexus 5X # The following test recently became so flaky that it had to be @@ -866,6 +869,9 @@ ('qualcomm', 'Adreno (TM) 420'), ('qualcomm', 'Adreno (TM) 430')]) self.Fail('conformance/glsl/misc/uninitialized-local-global-variables.html', ['android', ('qualcomm', 'Adreno (TM) 420')], bug=2046) # angle bug ID + self.Skip('conformance/rendering/rendering-sampling-feedback-loop.html', + ['android', ('qualcomm', 'Adreno (TM) 420'), + ('qualcomm', 'Adreno (TM) 430'), 'no_passthrough']) # Nexus 9 self.Fail('deqp/data/gles2/shaders/functions.html',
diff --git a/content/test/ppapi/ppapi_test.cc b/content/test/ppapi/ppapi_test.cc index 9e063875..d3c9b29 100644 --- a/content/test/ppapi/ppapi_test.cc +++ b/content/test/ppapi/ppapi_test.cc
@@ -22,6 +22,7 @@ #if defined(OS_CHROMEOS) #include "chromeos/audio/cras_audio_handler.h" +#include "chromeos/dbus/cras_audio_client.h" #endif namespace content { @@ -134,7 +135,8 @@ void OutOfProcessPPAPITest::SetUp() { #if defined(OS_CHROMEOS) - chromeos::CrasAudioHandler::InitializeForTesting(); + chromeos::CrasAudioClient::InitializeFake(); + chromeos::CrasAudioHandler::InitializeForTesting(); #endif ContentBrowserTest::SetUp(); } @@ -142,7 +144,8 @@ void OutOfProcessPPAPITest::TearDown() { ContentBrowserTest::TearDown(); #if defined(OS_CHROMEOS) - chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); #endif }
diff --git a/device/fido/BUILD.gn b/device/fido/BUILD.gn index 9b9f84c..e5dd860c 100644 --- a/device/fido/BUILD.gn +++ b/device/fido/BUILD.gn
@@ -217,8 +217,6 @@ "win/type_conversions.h", "win/webauthn_api.cc", "win/webauthn_api.h", - "win/webauthn_api_adapter.cc", - "win/webauthn_api_adapter.h", ] } }
diff --git a/device/fido/ble/fido_ble_discovery.cc b/device/fido/ble/fido_ble_discovery.cc index 36e8e95..0386fbd 100644 --- a/device/fido/ble/fido_ble_discovery.cc +++ b/device/fido/ble/fido_ble_discovery.cc
@@ -125,6 +125,12 @@ if (it == authenticators_.end()) return; + it = authenticators_.find(new_device_id); + // Don't proceed if new_device_id is already in the map, which indicates + // a collision in addresses. + if (it != authenticators_.end()) + return; + VLOG(2) << "Discovered FIDO BLE device address change from old address : " << old_address << " to new address : " << device->GetAddress();
diff --git a/device/fido/ble/fido_ble_discovery_unittest.cc b/device/fido/ble/fido_ble_discovery_unittest.cc index 77f8234..b637414 100644 --- a/device/fido/ble/fido_ble_discovery_unittest.cc +++ b/device/fido/ble/fido_ble_discovery_unittest.cc
@@ -43,6 +43,7 @@ using NiceMockBluetoothAdapter = ::testing::NiceMock<MockBluetoothAdapter>; constexpr char kDeviceName[] = "device_name"; +constexpr char kDeviceChangedName[] = "device_changed_name"; constexpr char kDeviceAddress[] = "device_address"; constexpr char kDeviceChangedAddress[] = "device_changed_address"; constexpr char kAuthenticatorId[] = "ble:device_address"; @@ -79,6 +80,23 @@ return mock_device; } + std::unique_ptr<TestMockDevice> CreateChangedMockFidoDevice() { + DCHECK(adapter_); + auto mock_device = std::make_unique<TestMockDevice>( + adapter_.get(), 0 /* bluetooth_class */, kDeviceChangedName, + kDeviceChangedAddress, false /* paired */, false /* connected */); + EXPECT_CALL(*mock_device, GetUUIDs) + .WillRepeatedly(Return( + std::vector<BluetoothUUID>{BluetoothUUID(kFidoServiceUUID)})); + EXPECT_CALL(*mock_device, GetAddress) + .WillRepeatedly(Return(kDeviceChangedAddress)); + + EXPECT_CALL(*adapter(), GetDevice(kDeviceChangedAddress)) + .WillRepeatedly(Return(mock_device.get())); + + return mock_device; + } + void SetDeviceInPairingMode(TestMockDevice* device) { // Update device advertisement data so that it represents BLE device in // pairing mode. @@ -395,4 +413,52 @@ scoped_task_environment_.FastForwardUntilNoTasksRemain(); } +// Verify that if a device changes its address and the new address collides +// with the address of an existing device, the operation is aborted with no +// changes. +TEST_F(FidoBleDiscoveryTest, DiscoveryDoesNotDeleteDeviceOnAddressCollision) { + SetMockBluetoothAdapter(); + EXPECT_CALL(*adapter(), IsPresent()).WillOnce(Return(true)); + auto mock_device = CreateMockFidoDevice(); + auto changed_mock_device = CreateChangedMockFidoDevice(); + + EXPECT_CALL(*observer(), + AuthenticatorAdded(discovery(), IdMatches(kDeviceAddress))); + + EXPECT_CALL(*observer(), AuthenticatorAdded( + discovery(), IdMatches(kDeviceChangedAddress))); + + discovery()->Start(); + scoped_task_environment_.FastForwardUntilNoTasksRemain(); + + adapter()->NotifyDeviceChanged(mock_device.get()); + ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(mock_device.get())); + + adapter()->NotifyDeviceChanged(changed_mock_device.get()); + ASSERT_TRUE( + ::testing::Mock::VerifyAndClearExpectations(changed_mock_device.get())); + + EXPECT_EQ(2u, discovery()->GetAuthenticatorsForTesting().size()); + + FidoAuthenticator* authenticator = + discovery()->GetAuthenticatorForTesting(kAuthenticatorId); + + // Assign address |kDeviceChangedAddress| to mock_device, which originally + // had address |kDeviceAddress|. This will collide with + // |changed_mock_device| which is already present. + EXPECT_CALL(*mock_device.get(), GetAddress) + .WillRepeatedly(Return(kDeviceChangedAddress)); + for (auto& observer : adapter()->GetObservers()) { + observer.DeviceAddressChanged(adapter(), mock_device.get(), kDeviceAddress); + } + + adapter()->NotifyDeviceChanged(mock_device.get()); + + EXPECT_EQ(authenticator->GetId(), + FidoBleDevice::GetId(kDeviceChangedAddress)); + EXPECT_EQ(2u, discovery()->GetAuthenticatorsForTesting().size()); + EXPECT_TRUE(discovery()->GetAuthenticatorForTesting( + FidoBleDevice::GetId(kDeviceChangedAddress))); +} + } // namespace device
diff --git a/device/fido/fido_discovery_factory.cc b/device/fido/fido_discovery_factory.cc index 04b20a765..3b75dca0 100644 --- a/device/fido/fido_discovery_factory.cc +++ b/device/fido/fido_discovery_factory.cc
@@ -19,7 +19,7 @@ #if defined(OS_WIN) #include <Winuser.h> #include "device/fido/win/discovery.h" -#include "device/fido/win/webauthn_api_adapter.h" +#include "device/fido/win/webauthn_api.h" #endif // defined(OS_WIN) namespace device { @@ -94,7 +94,7 @@ std::unique_ptr<FidoDiscoveryBase> FidoDiscoveryFactory::MaybeCreateWinWebAuthnApiDiscovery() { if (!base::FeatureList::IsEnabled(device::kWebAuthUseNativeWinApi) || - !WinWebAuthnApiAdapter::IsAvailable()) { + !WinWebAuthnApi::GetDefault()->IsAvailable()) { return nullptr; } return std::make_unique<WinWebAuthnApiAuthenticatorDiscovery>(
diff --git a/device/fido/win/authenticator.cc b/device/fido/win/authenticator.cc index c31fea9..49a7d142e 100644 --- a/device/fido/win/authenticator.cc +++ b/device/fido/win/authenticator.cc
@@ -12,10 +12,12 @@ #include "base/bind.h" #include "base/containers/flat_map.h" #include "base/logging.h" +#include "base/memory/ref_counted.h" #include "base/optional.h" #include "base/stl_util.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" +#include "base/task/post_task.h" #include "device/fido/authenticator_supported_options.h" #include "device/fido/ctap_get_assertion_request.h" #include "device/fido/ctap_make_credential_request.h" @@ -26,11 +28,6 @@ namespace device { -// Time out all Windows API requests after 5 minutes. We maintain our own -// timeout and cancel the operation when it expires, so this value simply needs -// to be larger than the largest internal request timeout. -constexpr uint32_t kWinWebAuthnTimeoutMilliseconds = 1000 * 60 * 5; - // static const char WinWebAuthnApiAuthenticator::kAuthenticatorId[] = "WinWebAuthnApiAuthenticator"; @@ -39,21 +36,23 @@ bool WinWebAuthnApiAuthenticator:: IsUserVerifyingPlatformAuthenticatorAvailable() { BOOL result; - return WinWebAuthnApiAdapter::IsAvailable() && - WinWebAuthnApiAdapter().IsUserVerifyingPlatformAuthenticatorAvailable( - &result) == S_OK && + WinWebAuthnApi* api = WinWebAuthnApi::GetDefault(); + return api->IsAvailable() && + api->IsUserVerifyingPlatformAuthenticatorAvailable(&result) == S_OK && result == TRUE; } WinWebAuthnApiAuthenticator::WinWebAuthnApiAuthenticator(HWND current_window) : FidoAuthenticator(), current_window_(current_window), + win_api_(WinWebAuthnApi::GetDefault()), weak_factory_(this) { - CHECK(WinWebAuthnApiAdapter::IsAvailable()); + CHECK(win_api_->IsAvailable()); CoCreateGuid(&cancellation_id_); } WinWebAuthnApiAuthenticator::~WinWebAuthnApiAuthenticator() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); Cancel(); } @@ -65,182 +64,84 @@ void WinWebAuthnApiAuthenticator::MakeCredential( CtapMakeCredentialRequest request, MakeCredentialCallback callback) { - DCHECK(!is_pending_); - if (is_pending_) + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (is_pending_) { + NOTREACHED(); return; - + } is_pending_ = true; - auto rp = request.rp(); - auto user = request.user(); - std::string client_data_json = request.client_data_json(); - std::vector<WEBAUTHN_COSE_CREDENTIAL_PARAMETER> - cose_credential_parameter_values; - for (const PublicKeyCredentialParams::CredentialInfo& credential_info : - request.public_key_credential_params().public_key_credential_params()) { - if (credential_info.type != CredentialType::kPublicKey) { - continue; - } - cose_credential_parameter_values.push_back( - {WEBAUTHN_COSE_CREDENTIAL_PARAMETER_CURRENT_VERSION, - WEBAUTHN_CREDENTIAL_TYPE_PUBLIC_KEY, credential_info.algorithm}); - } - std::vector<WEBAUTHN_EXTENSION> extensions; - if (request.hmac_secret()) { - static BOOL kHMACSecretTrue = TRUE; - extensions.emplace_back( - WEBAUTHN_EXTENSION{WEBAUTHN_EXTENSIONS_IDENTIFIER_HMAC_SECRET, - sizeof(BOOL), static_cast<void*>(&kHMACSecretTrue)}); - } - auto exclude_list = request.exclude_list(); - - uint32_t authenticator_attachment; - if (request.is_u2f_only()) { - authenticator_attachment = - WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM_U2F_V2; - } else if (request.is_incognito_mode()) { - // Disable all platform authenticators in incognito mode. We are going to - // revisit this in crbug/908622. - authenticator_attachment = WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM; - } else { - authenticator_attachment = - ToWinAuthenticatorAttachment(request.authenticator_attachment()); - } - win_api_.AuthenticatorMakeCredential( - current_window_, cancellation_id_, std::move(rp), std::move(user), - std::move(cose_credential_parameter_values), std::move(client_data_json), - std::move(extensions), std::move(exclude_list), - WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS{ - WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_VERSION_3, - kWinWebAuthnTimeoutMilliseconds, - WEBAUTHN_CREDENTIALS{ - 0, nullptr}, // Ignored because pExcludeCredentialList is set. - WEBAUTHN_EXTENSIONS{0, nullptr}, // will be set later - authenticator_attachment, request.resident_key_required(), - ToWinUserVerificationRequirement(request.user_verification()), - ToWinAttestationConveyancePreference( - request.attestation_preference()), - 0 /* flags */, - nullptr, // pCancellationId -- will be set later - nullptr, // pExcludeCredentialList -- will be set later - }, + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()}, + base::BindOnce(&AuthenticatorMakeCredentialBlocking, win_api_, + current_window_, cancellation_id_, std::move(request)), base::BindOnce(&WinWebAuthnApiAuthenticator::MakeCredentialDone, - weak_factory_.GetWeakPtr(), std::move(request), - std::move(callback))); + weak_factory_.GetWeakPtr(), std::move(callback))); } void WinWebAuthnApiAuthenticator::MakeCredentialDone( - CtapMakeCredentialRequest request, MakeCredentialCallback callback, - HRESULT hresult, - WinWebAuthnApiAdapter::ScopedCredentialAttestation credential_attestation) { + std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorMakeCredentialResponse>> result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(is_pending_); is_pending_ = false; - const CtapDeviceResponseCode status = - hresult == S_OK ? CtapDeviceResponseCode::kSuccess - : WinErrorNameToCtapDeviceResponseCode( - base::string16(win_api_.GetErrorName(hresult))); if (waiting_for_cancellation_) { // Don't bother invoking the reply callback if the caller has already // cancelled the operation. waiting_for_cancellation_ = false; return; } - - if (status != CtapDeviceResponseCode::kSuccess) { - std::move(callback).Run(status, base::nullopt); + if (result.first != CtapDeviceResponseCode::kSuccess) { + std::move(callback).Run(result.first, base::nullopt); return; } - - base::Optional<AuthenticatorMakeCredentialResponse> response = - credential_attestation - ? ToAuthenticatorMakeCredentialResponse(*credential_attestation) - : base::nullopt; - if (!response) { + if (!result.second) { std::move(callback).Run(CtapDeviceResponseCode::kCtap2ErrInvalidCBOR, base::nullopt); return; } - - std::move(callback).Run(status, std::move(response)); + std::move(callback).Run(result.first, std::move(result.second)); } void WinWebAuthnApiAuthenticator::GetAssertion(CtapGetAssertionRequest request, GetAssertionCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!is_pending_); if (is_pending_) return; is_pending_ = true; - base::string16 rp_id16 = base::UTF8ToUTF16(request.rp_id()); - base::Optional<base::string16> opt_app_id16 = base::nullopt; - if (request.app_id()) { - opt_app_id16 = base::UTF8ToUTF16(base::StringPiece( - reinterpret_cast<const char*>(request.app_id()->data()), - request.app_id()->size())); - } - std::string client_data_json = request.client_data_json(); - auto allow_list = request.allow_list(); - - uint32_t authenticator_attachment; - if (opt_app_id16) { - authenticator_attachment = - WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM_U2F_V2; - } else if (request.is_incognito_mode()) { - // Disable all platform authenticators in incognito mode. We are going to - // revisit this in crbug/908622. - authenticator_attachment = WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM; - } else { - authenticator_attachment = WEBAUTHN_AUTHENTICATOR_ATTACHMENT_ANY; - } - - win_api_.AuthenticatorGetAssertion( - current_window_, cancellation_id_, std::move(rp_id16), - std::move(opt_app_id16), std::move(client_data_json), - std::move(allow_list), - WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS{ - WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_4, - kWinWebAuthnTimeoutMilliseconds, - WEBAUTHN_CREDENTIALS{ - 0, nullptr}, // Ignored because pAllowCredentialList is set. - WEBAUTHN_EXTENSIONS{0, nullptr}, // None supported. - authenticator_attachment, - ToWinUserVerificationRequirement(request.user_verification()), - 0, // flags - nullptr, // pwszU2fAppId -- will be set later - nullptr, // pbU2fAppId -- will be set later - nullptr, // pCancellationId -- will be set later - nullptr, // pAllowCredentialList -- will be set later - }, + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()}, + base::BindOnce(&AuthenticatorGetAssertionBlocking, win_api_, + current_window_, cancellation_id_, std::move(request)), base::BindOnce(&WinWebAuthnApiAuthenticator::GetAssertionDone, - weak_factory_.GetWeakPtr(), std::move(request), - std::move(callback))); + weak_factory_.GetWeakPtr(), std::move(callback))); } void WinWebAuthnApiAuthenticator::GetAssertionDone( - CtapGetAssertionRequest request, GetAssertionCallback callback, - HRESULT hresult, - WinWebAuthnApiAdapter::ScopedAssertion assertion) { + std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorGetAssertionResponse>> result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(is_pending_); is_pending_ = false; - const CtapDeviceResponseCode status = - hresult == S_OK ? CtapDeviceResponseCode::kSuccess - : WinErrorNameToCtapDeviceResponseCode( - base::string16(win_api_.GetErrorName(hresult))); if (waiting_for_cancellation_) { - // Don't bother invoking the reply callback if the caller has already - // cancelled the operation. waiting_for_cancellation_ = false; return; } - - base::Optional<AuthenticatorGetAssertionResponse> response = - (hresult == S_OK && assertion) - ? ToAuthenticatorGetAssertionResponse(*assertion) - : base::nullopt; - std::move(callback).Run(status, std::move(response)); + if (result.first != CtapDeviceResponseCode::kSuccess) { + std::move(callback).Run(result.first, base::nullopt); + return; + } + if (!result.second) { + std::move(callback).Run(CtapDeviceResponseCode::kCtap2ErrInvalidCBOR, + base::nullopt); + return; + } + std::move(callback).Run(result.first, std::move(result.second)); } void WinWebAuthnApiAuthenticator::Cancel() { @@ -249,7 +150,7 @@ waiting_for_cancellation_ = true; // This returns immediately. - win_api_.CancelCurrentOperation(&cancellation_id_); + win_api_->CancelCurrentOperation(&cancellation_id_); } std::string WinWebAuthnApiAuthenticator::GetId() const {
diff --git a/device/fido/win/authenticator.h b/device/fido/win/authenticator.h index e9f9cd3..c47d0f6 100644 --- a/device/fido/win/authenticator.h +++ b/device/fido/win/authenticator.h
@@ -12,8 +12,9 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" +#include "base/sequence_checker.h" #include "device/fido/fido_authenticator.h" -#include "device/fido/win/webauthn_api_adapter.h" +#include "device/fido/win/webauthn_api.h" namespace device { @@ -21,7 +22,7 @@ // authenticators via the native Windows WebAuthentication API // (webauthn.dll). // -// Callers must ensure that WinWebAuthnApiAdapter::IsAvailable() returns true +// Callers must ensure that WinWebAuthnApi::IsAvailable() returns true // before creating instances of this class. class COMPONENT_EXPORT(DEVICE_FIDO) WinWebAuthnApiAuthenticator : public FidoAuthenticator { @@ -30,13 +31,12 @@ static const char kAuthenticatorId[]; // This method is safe to call without checking - // WinWebAuthnApiAdapter::IsAvailable(). + // WinWebAuthnApi::IsAvailable(). static bool IsUserVerifyingPlatformAuthenticatorAvailable(); - // Instantiates an authenticator that uses the default - // |WinWebAuthnApiAdapter|. + // Instantiates an authenticator that uses the default WinWebAuthnApi. // - // Callers must ensure that WinWebAuthnApiAdapter::IsAvailable() returns true + // Callers must ensure that WinWebAuthnApi::IsAvailable() returns true // before creating instances of this class. WinWebAuthnApiAuthenticator(HWND current_window); ~WinWebAuthnApiAuthenticator() override; @@ -58,22 +58,27 @@ base::WeakPtr<FidoAuthenticator> GetWeakPtr() override; private: - void MakeCredentialDone(CtapMakeCredentialRequest request, - MakeCredentialCallback callback, - HRESULT result, - WinWebAuthnApiAdapter::ScopedCredentialAttestation - credential_attestation); - void GetAssertionDone(CtapGetAssertionRequest request, - GetAssertionCallback callback, - HRESULT hresult, - WinWebAuthnApiAdapter::ScopedAssertion assertion); + void MakeCredentialDone( + MakeCredentialCallback callback, + std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorMakeCredentialResponse>> result); + void GetAssertionDone( + GetAssertionCallback callback, + std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorGetAssertionResponse>> result); - WinWebAuthnApiAdapter win_api_; HWND current_window_; bool is_pending_ = false; bool waiting_for_cancellation_ = false; GUID cancellation_id_ = {}; + // The pointee of |win_api_| is assumed to be a singleton that outlives + // this instance. + WinWebAuthnApi* win_api_; + + // Verifies callbacks from |win_api_| are posted back onto the originating + // sequence. + SEQUENCE_CHECKER(sequence_checker_); base::WeakPtrFactory<WinWebAuthnApiAuthenticator> weak_factory_; DISALLOW_COPY_AND_ASSIGN(WinWebAuthnApiAuthenticator); };
diff --git a/device/fido/win/discovery.cc b/device/fido/win/discovery.cc index 28b1cca0..4e72da5 100644 --- a/device/fido/win/discovery.cc +++ b/device/fido/win/discovery.cc
@@ -7,7 +7,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/threading/sequenced_task_runner_handle.h" -#include "device/fido/win/webauthn_api_adapter.h" +#include "device/fido/win/webauthn_api.h" namespace device { @@ -26,7 +26,7 @@ return; } - if (!WinWebAuthnApiAdapter::IsAvailable()) { + if (!WinWebAuthnApi::GetDefault()->IsAvailable()) { observer()->DiscoveryStarted(this, false /* discovery failed */); return; } @@ -44,7 +44,7 @@ } void WinWebAuthnApiAuthenticatorDiscovery::AddAuthenticator() { - if (!WinWebAuthnApiAdapter::IsAvailable()) { + if (!WinWebAuthnApi::GetDefault()->IsAvailable()) { NOTREACHED(); return; }
diff --git a/device/fido/win/webauthn_api.cc b/device/fido/win/webauthn_api.cc index b51d5e67..e653ffb 100644 --- a/device/fido/win/webauthn_api.cc +++ b/device/fido/win/webauthn_api.cc
@@ -4,13 +4,30 @@ #include "device/fido/win/webauthn_api.h" +#include <string> +#include <vector> + #include "base/bind.h" #include "base/logging.h" -#include "base/memory/ptr_util.h" #include "base/no_destructor.h" +#include "base/optional.h" +#include "base/strings/string16.h" +#include "base/strings/utf_string_conversions.h" +#include "device/fido/win/type_conversions.h" namespace device { +namespace { +base::string16 OptionalGURLToUTF16(const base::Optional<GURL>& in) { + return in ? base::UTF8ToUTF16(in->spec()) : base::string16(); +} +} // namespace + +// Time out all Windows API requests after 5 minutes. We maintain our own +// timeout and cancel the operation when it expires, so this value simply needs +// to be larger than the largest internal request timeout. +constexpr uint32_t kWinWebAuthnTimeoutMilliseconds = 1000 * 60 * 5; + // We do not integrate with older API versions of webauthn.dll because they // don't support BLE and direct device access to USB and BLE FIDO devices is // not yet blocked on those platforms. @@ -167,6 +184,217 @@ } WinWebAuthnApi::WinWebAuthnApi() = default; + WinWebAuthnApi::~WinWebAuthnApi() = default; +std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorMakeCredentialResponse>> +AuthenticatorMakeCredentialBlocking(WinWebAuthnApi* webauthn_api, + HWND h_wnd, + GUID cancellation_id, + CtapMakeCredentialRequest request) { + DCHECK(webauthn_api->IsAvailable()); + + base::string16 rp_id = base::UTF8ToUTF16(request.rp().rp_id()); + base::string16 rp_name = + base::UTF8ToUTF16(request.rp().rp_name().value_or("")); + base::string16 rp_icon_url = OptionalGURLToUTF16(request.rp().rp_icon_url()); + WEBAUTHN_RP_ENTITY_INFORMATION rp_info{ + WEBAUTHN_RP_ENTITY_INFORMATION_CURRENT_VERSION, rp_id.c_str(), + rp_name.c_str(), rp_icon_url.c_str()}; + + base::string16 user_name = + base::UTF8ToUTF16(request.user().user_name().value_or("")); + base::string16 user_icon_url = + OptionalGURLToUTF16(request.user().user_icon_url()); + base::string16 user_display_name = + base::UTF8ToUTF16(request.user().user_display_name().value_or("")); + std::vector<uint8_t> user_id = request.user().user_id(); + WEBAUTHN_USER_ENTITY_INFORMATION user_info{ + WEBAUTHN_USER_ENTITY_INFORMATION_CURRENT_VERSION, + user_id.size(), + const_cast<unsigned char*>(user_id.data()), + user_name.c_str(), + user_icon_url.c_str(), + user_display_name.c_str(), // This appears to be ignored. + }; + + std::vector<WEBAUTHN_COSE_CREDENTIAL_PARAMETER> + cose_credential_parameter_values; + for (const PublicKeyCredentialParams::CredentialInfo& credential_info : + request.public_key_credential_params().public_key_credential_params()) { + if (credential_info.type != CredentialType::kPublicKey) { + continue; + } + cose_credential_parameter_values.push_back( + {WEBAUTHN_COSE_CREDENTIAL_PARAMETER_CURRENT_VERSION, + WEBAUTHN_CREDENTIAL_TYPE_PUBLIC_KEY, credential_info.algorithm}); + } + WEBAUTHN_COSE_CREDENTIAL_PARAMETERS cose_credential_parameters{ + cose_credential_parameter_values.size(), + cose_credential_parameter_values.data()}; + + std::string client_data_json = request.client_data_json(); + WEBAUTHN_CLIENT_DATA client_data{ + WEBAUTHN_CLIENT_DATA_CURRENT_VERSION, client_data_json.size(), + const_cast<unsigned char*>( + reinterpret_cast<const unsigned char*>(client_data_json.data())), + WEBAUTHN_HASH_ALGORITHM_SHA_256}; + + std::vector<WEBAUTHN_EXTENSION> extensions; + if (request.hmac_secret()) { + static BOOL kHMACSecretTrue = TRUE; + extensions.emplace_back( + WEBAUTHN_EXTENSION{WEBAUTHN_EXTENSIONS_IDENTIFIER_HMAC_SECRET, + sizeof(BOOL), static_cast<void*>(&kHMACSecretTrue)}); + } + + uint32_t authenticator_attachment; + if (request.is_u2f_only()) { + authenticator_attachment = + WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM_U2F_V2; + } else if (request.is_incognito_mode()) { + // Disable all platform authenticators in incognito mode. We are going to + // revisit this in crbug/908622. + authenticator_attachment = WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM; + } else { + authenticator_attachment = + ToWinAuthenticatorAttachment(request.authenticator_attachment()); + } + + std::vector<WEBAUTHN_CREDENTIAL_EX> exclude_list_credentials = + ToWinCredentialExVector(request.exclude_list()); + std::vector<WEBAUTHN_CREDENTIAL_EX*> exclude_list_ptrs; + std::transform( + exclude_list_credentials.begin(), exclude_list_credentials.end(), + std::back_inserter(exclude_list_ptrs), [](auto& cred) { return &cred; }); + WEBAUTHN_CREDENTIAL_LIST exclude_credential_list{exclude_list_ptrs.size(), + exclude_list_ptrs.data()}; + + WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS options{ + WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_VERSION_3, + kWinWebAuthnTimeoutMilliseconds, + WEBAUTHN_CREDENTIALS{ + 0, nullptr}, // Ignored because pExcludeCredentialList is set. + WEBAUTHN_EXTENSIONS{extensions.size(), extensions.data()}, + authenticator_attachment, + request.resident_key_required(), + ToWinUserVerificationRequirement(request.user_verification()), + ToWinAttestationConveyancePreference(request.attestation_preference()), + /*dwFlags=*/0, + &cancellation_id, + &exclude_credential_list, + }; + + WEBAUTHN_CREDENTIAL_ATTESTATION* credential_attestation = nullptr; + std::unique_ptr<WEBAUTHN_CREDENTIAL_ATTESTATION, + std::function<void(PWEBAUTHN_CREDENTIAL_ATTESTATION)>> + credential_attestation_deleter( + credential_attestation, + [webauthn_api](PWEBAUTHN_CREDENTIAL_ATTESTATION ptr) { + webauthn_api->FreeCredentialAttestation(ptr); + }); + + HRESULT hresult = webauthn_api->AuthenticatorMakeCredential( + h_wnd, &rp_info, &user_info, &cose_credential_parameters, &client_data, + &options, &credential_attestation); + if (hresult != S_OK) { + return {WinErrorNameToCtapDeviceResponseCode( + base::string16(webauthn_api->GetErrorName(hresult))), + base::nullopt}; + } + return {CtapDeviceResponseCode::kSuccess, + ToAuthenticatorMakeCredentialResponse(*credential_attestation)}; +} + +std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorGetAssertionResponse>> +AuthenticatorGetAssertionBlocking(WinWebAuthnApi* webauthn_api, + HWND h_wnd, + GUID cancellation_id, + CtapGetAssertionRequest request) { + DCHECK(webauthn_api->IsAvailable()); + + base::string16 rp_id16 = base::UTF8ToUTF16(request.rp_id()); + std::string client_data_json = request.client_data_json(); + WEBAUTHN_CLIENT_DATA client_data{ + WEBAUTHN_CLIENT_DATA_CURRENT_VERSION, client_data_json.size(), + const_cast<unsigned char*>( + reinterpret_cast<const unsigned char*>(client_data_json.data())), + WEBAUTHN_HASH_ALGORITHM_SHA_256}; + + base::Optional<base::string16> opt_app_id16 = base::nullopt; + if (request.app_id()) { + opt_app_id16 = base::UTF8ToUTF16(base::StringPiece( + reinterpret_cast<const char*>(request.app_id()->data()), + request.app_id()->size())); + } + + std::vector<WEBAUTHN_CREDENTIAL_EX> allow_list_credentials = + ToWinCredentialExVector(request.allow_list()); + std::vector<WEBAUTHN_CREDENTIAL_EX*> allow_list_ptrs; + std::transform(allow_list_credentials.begin(), allow_list_credentials.end(), + std::back_inserter(allow_list_ptrs), + [](auto& cred) { return &cred; }); + WEBAUTHN_CREDENTIAL_LIST allow_credential_list{allow_list_ptrs.size(), + allow_list_ptrs.data()}; + + auto legacy_credentials = ToWinCredentialVector(request.allow_list()); + + uint32_t authenticator_attachment; + if (opt_app_id16) { + authenticator_attachment = + WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM_U2F_V2; + } else if (request.is_incognito_mode()) { + // Disable all platform authenticators in incognito mode. We are going to + // revisit this in crbug/908622. + authenticator_attachment = WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM; + } else { + authenticator_attachment = WEBAUTHN_AUTHENTICATOR_ATTACHMENT_ANY; + } + + static BOOL kUseAppIdTrue = TRUE; // const + static BOOL kUseAppIdFalse = FALSE; // const + WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS options{ + WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_4, + kWinWebAuthnTimeoutMilliseconds, + // As of Nov 2018, the WebAuthNAuthenticatorGetAssertion method will + // fail to challenge credentials via CTAP1 if the allowList is passed + // in the extended form in WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS + // (i.e. pAllowCredentialList instead of CredentialList). The legacy + // CredentialList field works fine, but does not support setting + // transport restrictions on the credential descriptor. + // + // As a workaround, MS tells us to also set the CredentialList + // parameter with an accurate cCredentials count and some arbitrary + // pCredentials data. + WEBAUTHN_CREDENTIALS{legacy_credentials.size(), + legacy_credentials.data()}, + WEBAUTHN_EXTENSIONS{0, nullptr}, // None supported. + authenticator_attachment, + ToWinUserVerificationRequirement(request.user_verification()), + /*dwFlags=*/0, + opt_app_id16 ? opt_app_id16->data() : nullptr, + opt_app_id16 ? &kUseAppIdTrue : &kUseAppIdFalse, + &cancellation_id, + &allow_credential_list, + }; + + WEBAUTHN_ASSERTION* assertion = nullptr; + std::unique_ptr<WEBAUTHN_ASSERTION, std::function<void(PWEBAUTHN_ASSERTION)>> + assertion_deleter(assertion, [webauthn_api](PWEBAUTHN_ASSERTION ptr) { + webauthn_api->FreeAssertion(ptr); + }); + + HRESULT hresult = webauthn_api->AuthenticatorGetAssertion( + h_wnd, rp_id16.data(), &client_data, &options, &assertion); + if (hresult != S_OK) { + return {WinErrorNameToCtapDeviceResponseCode( + base::string16(webauthn_api->GetErrorName(hresult))), + base::nullopt}; + } + return {CtapDeviceResponseCode::kSuccess, + ToAuthenticatorGetAssertionResponse(*assertion)}; +} + } // namespace device
diff --git a/device/fido/win/webauthn_api.h b/device/fido/win/webauthn_api.h index c04010d..f7f755c9 100644 --- a/device/fido/win/webauthn_api.h +++ b/device/fido/win/webauthn_api.h
@@ -11,6 +11,12 @@ #include "base/callback.h" #include "base/component_export.h" +#include "base/memory/ref_counted.h" +#include "device/fido/authenticator_get_assertion_response.h" +#include "device/fido/authenticator_make_credential_response.h" +#include "device/fido/ctap_get_assertion_request.h" +#include "device/fido/ctap_make_credential_request.h" +#include "device/fido/fido_constants.h" #include "third_party/microsoft_webauthn/webauthn.h" namespace device { @@ -67,6 +73,20 @@ static void ClearDefaultForTesting(); }; +std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorMakeCredentialResponse>> +AuthenticatorMakeCredentialBlocking(WinWebAuthnApi* webauthn_api, + HWND h_wnd, + GUID cancellation_id, + CtapMakeCredentialRequest request); + +std::pair<CtapDeviceResponseCode, + base::Optional<AuthenticatorGetAssertionResponse>> +AuthenticatorGetAssertionBlocking(WinWebAuthnApi* webauthn_api, + HWND h_wnd, + GUID cancellation_id, + CtapGetAssertionRequest request); + } // namespace device #endif // DEVICE_FIDO_WIN_WEBAUTHN_API_H_
diff --git a/device/fido/win/webauthn_api_adapter.cc b/device/fido/win/webauthn_api_adapter.cc deleted file mode 100644 index 0c45d8d1..0000000 --- a/device/fido/win/webauthn_api_adapter.cc +++ /dev/null
@@ -1,283 +0,0 @@ -// Copyright 2019 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 <algorithm> - -#include "device/fido/win/webauthn_api_adapter.h" - -#include "base/bind.h" -#include "base/feature_list.h" -#include "base/files/file_path.h" -#include "base/logging.h" -#include "base/macros.h" -#include "base/memory/ptr_util.h" -#include "base/memory/ref_counted.h" -#include "base/native_library.h" -#include "base/no_destructor.h" -#include "base/sequenced_task_runner.h" -#include "base/strings/utf_string_conversions.h" -#include "base/task/post_task.h" -#include "base/task_runner_util.h" -#include "base/threading/sequenced_task_runner_handle.h" -#include "device/fido/win/type_conversions.h" - -namespace device { - -namespace { -base::string16 OptionalGURLToUTF16(const base::Optional<GURL>& in) { - return in ? base::UTF8ToUTF16(in->spec()) : base::string16(); -} -} // namespace - -WinWebAuthnApiAdapter::WinWebAuthnApiAdapter() - : webauthn_api_(WinWebAuthnApi::GetDefault()), weak_factory_(this) { - DCHECK(webauthn_api_->IsAvailable()); -} - -WinWebAuthnApiAdapter::~WinWebAuthnApiAdapter() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -} - -// static -bool WinWebAuthnApiAdapter::IsAvailable() { - return WinWebAuthnApi::GetDefault()->IsAvailable(); -} - -HRESULT WinWebAuthnApiAdapter::IsUserVerifyingPlatformAuthenticatorAvailable( - BOOL* result) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return webauthn_api_->IsUserVerifyingPlatformAuthenticatorAvailable(result); -} - -void WinWebAuthnApiAdapter::AuthenticatorMakeCredential( - HWND h_wnd, - GUID cancellation_id, - PublicKeyCredentialRpEntity rp, - PublicKeyCredentialUserEntity user, - std::vector<WEBAUTHN_COSE_CREDENTIAL_PARAMETER> - cose_credential_parameter_values, - std::string client_data_json, - std::vector<WEBAUTHN_EXTENSION> extensions, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> exclude_list, - WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS options, - AuthenticatorMakeCredentialCallback callback) { - DCHECK(webauthn_api_->IsAvailable()); - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - // Because |AuthenticatorMakeCredentialBlocking| is posted to some unspecified - // task runner, |webauthn_api_| must still be alive by the time the task is - // run. This is okay because |webauthn_api_| is a long-lived singleton. - base::PostTaskWithTraits( - FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()}, - base::BindOnce( - &WinWebAuthnApiAdapter::AuthenticatorMakeCredentialBlocking, - webauthn_api_, h_wnd, cancellation_id, std::move(rp), std::move(user), - std::move(cose_credential_parameter_values), - std::move(client_data_json), std::move(extensions), - std::move(exclude_list), std::move(options), - base::SequencedTaskRunnerHandle::Get(), - base::BindOnce( - &WinWebAuthnApiAdapter::AuthenticatorMakeCredentialDone, - weak_factory_.GetWeakPtr(), std::move(callback)))); -} - -void WinWebAuthnApiAdapter::AuthenticatorGetAssertion( - HWND h_wnd, - GUID cancellation_id, - base::string16 rp_id, - base::Optional<base::string16> opt_app_id, - std::string client_data_json, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> allow_list, - WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS options, - AuthenticatorGetAssertionCallback callback) { - DCHECK(webauthn_api_->IsAvailable()); - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - - // Because |AuthenticatorGetAssertionBlocking| is posted to some unspecified - // task runner, |webauthn_api_| must still be alive by the time the task is - // run. This is okay because |webauthn_api_| is a long-lived singleton. - base::PostTaskWithTraits( - FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()}, - base::BindOnce( - &WinWebAuthnApiAdapter::AuthenticatorGetAssertionBlocking, - webauthn_api_, h_wnd, cancellation_id, std::move(rp_id), - std::move(opt_app_id), std::move(client_data_json), - std::move(allow_list), std::move(options), - base::SequencedTaskRunnerHandle::Get(), - base::BindOnce(&WinWebAuthnApiAdapter::AuthenticatorGetAssertionDone, - weak_factory_.GetWeakPtr(), std::move(callback)))); -} - -HRESULT WinWebAuthnApiAdapter::CancelCurrentOperation(GUID* cancellation_id) { - DCHECK(webauthn_api_->IsAvailable()); - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return webauthn_api_->CancelCurrentOperation(cancellation_id); -} - -const wchar_t* WinWebAuthnApiAdapter::GetErrorName(HRESULT hr) { - DCHECK(webauthn_api_->IsAvailable()); - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return webauthn_api_->GetErrorName(hr); -} - -// static -void WinWebAuthnApiAdapter::AuthenticatorMakeCredentialBlocking( - WinWebAuthnApi* webauthn_api, - HWND h_wnd, - GUID cancellation_id, - PublicKeyCredentialRpEntity rp, - PublicKeyCredentialUserEntity user, - std::vector<WEBAUTHN_COSE_CREDENTIAL_PARAMETER> - cose_credential_parameter_values, - std::string client_data_json, - std::vector<WEBAUTHN_EXTENSION> extensions, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> exclude_list, - WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS options, - scoped_refptr<base::SequencedTaskRunner> callback_runner, - base::OnceCallback<void(std::pair<HRESULT, ScopedCredentialAttestation>)> - callback) { - DCHECK(webauthn_api->IsAvailable()); - base::string16 rp_id = base::UTF8ToUTF16(rp.rp_id()); - base::string16 rp_name = base::UTF8ToUTF16(rp.rp_name().value_or("")); - base::string16 rp_icon_url = OptionalGURLToUTF16(rp.rp_icon_url()); - base::string16 user_name = base::UTF8ToUTF16(user.user_name().value_or("")); - base::string16 user_icon_url = OptionalGURLToUTF16(user.user_icon_url()); - WEBAUTHN_RP_ENTITY_INFORMATION rp_info{ - WEBAUTHN_RP_ENTITY_INFORMATION_CURRENT_VERSION, rp_id.c_str(), - rp_name.c_str(), rp_icon_url.c_str()}; - - base::string16 user_display_name = - base::UTF8ToUTF16(user.user_display_name().value_or("")); - WEBAUTHN_USER_ENTITY_INFORMATION user_info{ - WEBAUTHN_USER_ENTITY_INFORMATION_CURRENT_VERSION, - user.user_id().size(), - const_cast<unsigned char*>(user.user_id().data()), - user_name.c_str(), - user_icon_url.c_str(), - user_display_name.c_str(), // This appears to be ignored. - }; - - WEBAUTHN_COSE_CREDENTIAL_PARAMETERS cose_credential_parameters{ - cose_credential_parameter_values.size(), - cose_credential_parameter_values.data()}; - - WEBAUTHN_CLIENT_DATA client_data{ - WEBAUTHN_CLIENT_DATA_CURRENT_VERSION, client_data_json.size(), - const_cast<unsigned char*>( - reinterpret_cast<const unsigned char*>(client_data_json.data())), - WEBAUTHN_HASH_ALGORITHM_SHA_256}; - - options.Extensions = - WEBAUTHN_EXTENSIONS{extensions.size(), extensions.data()}; - options.pCancellationId = &cancellation_id; - - std::vector<WEBAUTHN_CREDENTIAL_EX> exclude_list_credentials = - ToWinCredentialExVector(exclude_list); - std::vector<WEBAUTHN_CREDENTIAL_EX*> exclude_list_ptrs; - std::transform( - exclude_list_credentials.begin(), exclude_list_credentials.end(), - std::back_inserter(exclude_list_ptrs), [](auto& cred) { return &cred; }); - WEBAUTHN_CREDENTIAL_LIST exclude_credential_list{exclude_list_ptrs.size(), - exclude_list_ptrs.data()}; - options.pExcludeCredentialList = &exclude_credential_list; - - WEBAUTHN_CREDENTIAL_ATTESTATION* credential_attestation_ptr = nullptr; - HRESULT hresult = webauthn_api->AuthenticatorMakeCredential( - h_wnd, &rp_info, &user_info, &cose_credential_parameters, &client_data, - &options, &credential_attestation_ptr); - callback_runner->PostTask( - FROM_HERE, - base::BindOnce( - std::move(callback), - std::make_pair( - hresult, - ScopedCredentialAttestation( - credential_attestation_ptr, - [webauthn_api](PWEBAUTHN_CREDENTIAL_ATTESTATION ptr) { - webauthn_api->FreeCredentialAttestation(ptr); - })))); -} - -// static -void WinWebAuthnApiAdapter::AuthenticatorGetAssertionBlocking( - WinWebAuthnApi* webauthn_api, - HWND h_wnd, - GUID cancellation_id, - base::string16 rp_id, - base::Optional<base::string16> opt_app_id, - std::string client_data_json, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> allow_list, - WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS options, - scoped_refptr<base::SequencedTaskRunner> callback_runner, - base::OnceCallback<void(std::pair<HRESULT, ScopedAssertion>)> callback) { - DCHECK(webauthn_api->IsAvailable()); - if (opt_app_id) { - options.pwszU2fAppId = opt_app_id->data(); - static BOOL kUseAppIdTrue = TRUE; // const - options.pbU2fAppId = &kUseAppIdTrue; - } else { - static BOOL kUseAppIdFalse = FALSE; // const - options.pbU2fAppId = &kUseAppIdFalse; - } - options.pCancellationId = &cancellation_id; - - std::vector<WEBAUTHN_CREDENTIAL_EX> allow_list_credentials = - ToWinCredentialExVector(allow_list); - std::vector<WEBAUTHN_CREDENTIAL_EX*> allow_list_ptrs; - std::transform(allow_list_credentials.begin(), allow_list_credentials.end(), - std::back_inserter(allow_list_ptrs), - [](auto& cred) { return &cred; }); - WEBAUTHN_CREDENTIAL_LIST allow_credential_list{allow_list_ptrs.size(), - allow_list_ptrs.data()}; - options.pAllowCredentialList = &allow_credential_list; - - // As of Nov 2018, the WebAuthNAuthenticatorGetAssertion method will fail - // to challenge credentials via CTAP1 if the allowList is passed in the - // extended form in WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS (i.e. - // pAllowCredentialList instead of CredentialList). The legacy - // CredentialList field works fine, but does not support setting - // transport restrictions on the credential descriptor. - // - // As a workaround, MS tells us to also set the CredentialList parameter - // with an accurate cCredentials count and some arbitrary pCredentials - // data. - auto legacy_credentials = ToWinCredentialVector(allow_list); - options.CredentialList = WEBAUTHN_CREDENTIALS{legacy_credentials.size(), - legacy_credentials.data()}; - - WEBAUTHN_CLIENT_DATA client_data{ - WEBAUTHN_CLIENT_DATA_CURRENT_VERSION, client_data_json.size(), - const_cast<unsigned char*>( - reinterpret_cast<const unsigned char*>(client_data_json.data())), - WEBAUTHN_HASH_ALGORITHM_SHA_256}; - - WEBAUTHN_ASSERTION* assertion_ptr = nullptr; - HRESULT hresult = webauthn_api->AuthenticatorGetAssertion( - h_wnd, rp_id.data(), &client_data, &options, &assertion_ptr); - callback_runner->PostTask( - FROM_HERE, - base::BindOnce( - std::move(callback), - std::make_pair( - hresult, ScopedAssertion(assertion_ptr, - [webauthn_api](PWEBAUTHN_ASSERTION ptr) { - webauthn_api->FreeAssertion(ptr); - })))); -} - -void WinWebAuthnApiAdapter::AuthenticatorMakeCredentialDone( - AuthenticatorMakeCredentialCallback callback, - std::pair<HRESULT, ScopedCredentialAttestation> result) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - std::move(callback).Run(result.first, std::move(result.second)); -} - -void WinWebAuthnApiAdapter::AuthenticatorGetAssertionDone( - AuthenticatorGetAssertionCallback callback, - std::pair<HRESULT, ScopedAssertion> result) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - std::move(callback).Run(result.first, std::move(result.second)); -} - -} // namespace device
diff --git a/device/fido/win/webauthn_api_adapter.h b/device/fido/win/webauthn_api_adapter.h deleted file mode 100644 index 7efad7a..0000000 --- a/device/fido/win/webauthn_api_adapter.h +++ /dev/null
@@ -1,163 +0,0 @@ -// Copyright 2019 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. - -#ifndef DEVICE_FIDO_WIN_WEBAUTHN_API_ADAPTER_H_ -#define DEVICE_FIDO_WIN_WEBAUTHN_API_ADAPTER_H_ - -#include <windows.h> -#include <functional> -#include <memory> -#include <utility> -#include <vector> - -#include "base/callback.h" -#include "base/component_export.h" -#include "base/memory/weak_ptr.h" -#include "base/optional.h" -#include "base/sequence_checker.h" -#include "base/threading/thread.h" -#include "device/fido/public_key_credential_descriptor.h" -#include "device/fido/public_key_credential_rp_entity.h" -#include "device/fido/public_key_credential_user_entity.h" -#include "device/fido/win/webauthn_api.h" - -namespace device { - -// WinWebAuthnApiAdapter is the adapter class that creates the data structures -// used in the Windows WebAuthn API. It owns the thread for the WebAuthn -// operation. -// -// Users must check the result of |IsAvailable| on the instance to verify that -// the native library was loaded successfully before invoking any of the other -// methods. All WinWebAuthnApiAdapters use the same WebAuthnApi reference. -// -// TODO(martinkr): Perhaps this should be folded back into -// |WinWebAuthnApiAuthenticator|. -class COMPONENT_EXPORT(DEVICE_FIDO) WinWebAuthnApiAdapter { - public: - // ScopedCredentialAttestation is a scoped deleter for a - // WEB_AUTHN_CREDENTIAL_ATTESTATION pointer. - // - // Instances must not outlive their WinWebAuthnApi. - using ScopedCredentialAttestation = - std::unique_ptr<WEBAUTHN_CREDENTIAL_ATTESTATION, - std::function<void(PWEBAUTHN_CREDENTIAL_ATTESTATION)>>; - - // ScopedAssertion is a scoped deleter for a WEB_AUTHN_ASSERTION pointer. - // - // Instances must not outlive their WinWebAuthnApi. - using ScopedAssertion = - std::unique_ptr<WEBAUTHN_ASSERTION, - std::function<void(PWEBAUTHN_ASSERTION)>>; - - using AuthenticatorMakeCredentialCallback = - base::OnceCallback<void(HRESULT, ScopedCredentialAttestation)>; - using AuthenticatorGetAssertionCallback = - base::OnceCallback<void(HRESULT, ScopedAssertion)>; - - // Returns whether the API is available on this system. If this returns - // false, this class should not be instantiated and none of its instance - // methods must be called. - static bool IsAvailable(); - - WinWebAuthnApiAdapter(); - ~WinWebAuthnApiAdapter(); - - // See WebAuthNIsUserVerifyingPlatformAuthenticatorAvailable in <webauthn.h>. - HRESULT IsUserVerifyingPlatformAuthenticatorAvailable(BOOL* available); - - // See WebAuthNAuthenticatorMakeCredential in <webauthn.h>. - // - // The following fields in |options| are ignored because they get filled in - // from the other parameters: - // - Extensions - // - pCancellationId - // - CredentialList / pExcludeCredentialList - void AuthenticatorMakeCredential( - HWND h_wnd, - GUID cancellation_id, - PublicKeyCredentialRpEntity rp, - PublicKeyCredentialUserEntity user, - std::vector<WEBAUTHN_COSE_CREDENTIAL_PARAMETER> - cose_credential_parameter_values, - std::string client_data_json, - std::vector<WEBAUTHN_EXTENSION> extensions, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> exclude_list, - WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS options, - AuthenticatorMakeCredentialCallback callback); - - // See WebAuthNAuthenticatorGetAssertion in <webauthn.h>. - // - // The following fields in |options| are ignored because they get filled in - // from the other parameters: - // - pwszU2fAppId / pbU2fAppId - // - pCancellationId - // - CredentialList / pAllowCredentialList - void AuthenticatorGetAssertion( - HWND h_wnd, - GUID cancellation_id, - base::string16 rp_id, - base::Optional<base::string16> opt_app_id, - std::string client_data_json, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> allow_list, - WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS options, - AuthenticatorGetAssertionCallback callback); - - // See WebAuthNCancelCurrentOperation in <webauthn.h>. - HRESULT CancelCurrentOperation(GUID* cancellation_id); - - // See WebAuthNGetErrorName in <webauthn.h>. - const wchar_t* GetErrorName(HRESULT hr); - - private: - WinWebAuthnApiAdapter(const WinWebAuthnApiAdapter&) = delete; - WinWebAuthnApiAdapter& operator=(const WinWebAuthnApiAdapter&) = delete; - - static void AuthenticatorMakeCredentialBlocking( - WinWebAuthnApi* webauthn_api, - HWND h_wnd, - GUID cancellation_id, - PublicKeyCredentialRpEntity rp, - PublicKeyCredentialUserEntity user, - std::vector<WEBAUTHN_COSE_CREDENTIAL_PARAMETER> - cose_credential_parameter_values, - std::string client_data_json, - std::vector<WEBAUTHN_EXTENSION> extensions, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> exclude_list, - WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS options, - scoped_refptr<base::SequencedTaskRunner> callback_runner, - base::OnceCallback<void(std::pair<HRESULT, ScopedCredentialAttestation>)> - callback); - - static void AuthenticatorGetAssertionBlocking( - WinWebAuthnApi* webauthn_api, - HWND h_wnd, - GUID cancellation_id, - base::string16 rp_id, - base::Optional<base::string16> opt_app_id, - std::string client_data_json, - base::Optional<std::vector<PublicKeyCredentialDescriptor>> allow_list, - WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS options, - scoped_refptr<base::SequencedTaskRunner> callback_runner, - base::OnceCallback<void(std::pair<HRESULT, ScopedAssertion>)> callback); - - void AuthenticatorMakeCredentialDone( - AuthenticatorMakeCredentialCallback callback, - std::pair<HRESULT, ScopedCredentialAttestation> result); - - void AuthenticatorGetAssertionDone( - AuthenticatorGetAssertionCallback callback, - std::pair<HRESULT, ScopedAssertion> result); - - // The pointee of |webauthn_api_| is assumed to be a singleton that outlives - // this instance. - WinWebAuthnApi* webauthn_api_; - - SEQUENCE_CHECKER(sequence_checker_); - base::WeakPtrFactory<WinWebAuthnApiAdapter> weak_factory_; -}; - -} // namespace device - -#endif // DEVICE_FIDO_WIN_WEBAUTHN_API_ADAPTER_H_
diff --git a/docs/testing/web_tests.md b/docs/testing/web_tests.md index 850a26c2..eea7c20 100644 --- a/docs/testing/web_tests.md +++ b/docs/testing/web_tests.md
@@ -328,12 +328,12 @@ spacing or box sizes are often unimportant, especially around fonts and form controls. Differences in wording of JS error messages are also usually acceptable. - * `python run_web_tests.py path/to/your/test.html --full-results-html` - produces a page including links to the expected result, actual result, - and diff. - * Add the `--sources` option to `run_web_tests.py` to see exactly which - expected result it's comparing to (a file next to the test, something in - platform/mac/, something in platform/chromium-win/, etc.) + * `python run_web_tests.py path/to/your/test.html` produces a page listing + all test results. Those which fail their expectations will include links + to the expected result, actual result, and diff. These results are saved + to `$root_build_dir/layout-test-results`. + * Alternatively the `--results-directory=path/for/output/` option allows + you to specify an alternative directory for the output to be saved to. * If you're still sure it's correct, rebaseline the test (see below). Otherwise... * If you're lucky, your test is one that runs properly when you navigate to it
diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn index 8738041..61239e12 100644 --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn
@@ -442,8 +442,6 @@ source_set("browser_tests") { testonly = true sources = [ - "api/audio/audio_apitest.cc", - # TODO(michaelpg): bluetooth_appshell_test.cc is a crutch until we have a # better system for testing APIs in both app_shell and chrome. See # crbug.com/650835. @@ -505,6 +503,7 @@ if (is_chromeos) { sources += [ + "api/audio/audio_apitest_chromeos.cc", "api/cec_private/cec_private_apitest.cc", "api/media_perception_private/media_perception_private_apitest.cc", "api/system_power_source/system_power_source_apitest.cc", @@ -514,11 +513,12 @@ deps += [ "//chromeos", "//chromeos/audio", - "//chromeos/dbus:power_manager_proto", "//chromeos/dbus:test_support", "//chromeos/dbus/media_analytics", "//chromeos/dbus/media_analytics:media_perception_proto", "//chromeos/dbus/permission_broker", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//chromeos/dbus/upstart", "//chromeos/login/login_state", "//chromeos/network", @@ -726,6 +726,7 @@ "//chromeos/dbus:test_support", "//chromeos/dbus/media_analytics", "//chromeos/dbus/media_analytics:media_perception_proto", + "//chromeos/dbus/power", "//chromeos/dbus/upstart", "//chromeos/login/login_state", "//chromeos/network:test_support",
diff --git a/extensions/browser/api/audio/audio_apitest.cc b/extensions/browser/api/audio/audio_apitest_chromeos.cc similarity index 77% rename from extensions/browser/api/audio/audio_apitest.cc rename to extensions/browser/api/audio/audio_apitest_chromeos.cc index 74ac9fa58..eb5e76f 100644 --- a/extensions/browser/api/audio/audio_apitest.cc +++ b/extensions/browser/api/audio/audio_apitest_chromeos.cc
@@ -11,22 +11,17 @@ #include "base/command_line.h" #include "base/run_loop.h" #include "build/build_config.h" +#include "chromeos/audio/audio_devices_pref_handler_stub.h" +#include "chromeos/audio/cras_audio_handler.h" +#include "chromeos/dbus/fake_cras_audio_client.h" #include "extensions/common/features/feature_session_type.h" #include "extensions/common/switches.h" #include "extensions/shell/test/shell_apitest.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" -#if defined(OS_CHROMEOS) -#include "chromeos/audio/audio_devices_pref_handler_stub.h" -#include "chromeos/audio/cras_audio_handler.h" -#include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/fake_cras_audio_client.h" -#endif - namespace extensions { -#if defined(OS_CHROMEOS) using chromeos::AudioDevice; using chromeos::AudioDeviceList; using chromeos::AudioNode; @@ -89,8 +84,8 @@ class AudioApiTest : public ShellApiTest { public: - AudioApiTest() : cras_audio_handler_(NULL), fake_cras_audio_client_(NULL) {} - ~AudioApiTest() override {} + AudioApiTest() = default; + ~AudioApiTest() override = default; void SetUp() override { session_feature_type_ = extensions::ScopedCurrentFeatureSessionType( @@ -99,31 +94,22 @@ ShellApiTest::SetUp(); } - void SetUpCrasAudioHandlerWithTestingNodes(const AudioNodeList& audio_nodes) { - chromeos::DBusThreadManager* dbus_manager = - chromeos::DBusThreadManager::Get(); - DCHECK(dbus_manager); - fake_cras_audio_client_ = static_cast<chromeos::FakeCrasAudioClient*>( - dbus_manager->GetCrasAudioClient()); - fake_cras_audio_client_->SetAudioNodesAndNotifyObserversForTesting( - audio_nodes); - cras_audio_handler_ = chromeos::CrasAudioHandler::Get(); - DCHECK(cras_audio_handler_); + void ChangeAudioNodes(const AudioNodeList& audio_nodes) { + chromeos::FakeCrasAudioClient::Get() + ->SetAudioNodesAndNotifyObserversForTesting(audio_nodes); base::RunLoop().RunUntilIdle(); } - void ChangeAudioNodes(const AudioNodeList& audio_nodes) { - DCHECK(fake_cras_audio_client_); - fake_cras_audio_client_->SetAudioNodesAndNotifyObserversForTesting( - audio_nodes); - base::RunLoop().RunUntilIdle(); + chromeos::CrasAudioHandler* audio_handler() { + return chromeos::CrasAudioHandler::Get(); } protected: std::unique_ptr<base::AutoReset<extensions::FeatureSessionType>> session_feature_type_; - chromeos::CrasAudioHandler* cras_audio_handler_; // Not owned. - chromeos::FakeCrasAudioClient* fake_cras_audio_client_; // Not owned. + + private: + DISALLOW_COPY_AND_ASSIGN(AudioApiTest); }; IN_PROC_BROWSER_TEST_F(AudioApiTest, Audio) { @@ -133,7 +119,7 @@ CreateAudioNode(kHDMIOutput, 2), CreateAudioNode(kJabraMic1, 2), CreateAudioNode(kJabraMic2, 2), CreateAudioNode(kUSBCameraMic, 2)}; - SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); + ChangeAudioNodes(audio_nodes); EXPECT_TRUE(RunAppTest("api_test/audio")) << message_; } @@ -141,11 +127,11 @@ IN_PROC_BROWSER_TEST_F(AudioApiTest, OnLevelChangedOutputDevice) { AudioNodeList audio_nodes = {CreateAudioNode(kJabraSpeaker1, 2), CreateAudioNode(kHDMIOutput, 2)}; - SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); + ChangeAudioNodes(audio_nodes); // Verify the jabra speaker is the active output device. AudioDevice device; - EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(&device)); + EXPECT_TRUE(audio_handler()->GetPrimaryActiveOutputDevice(&device)); EXPECT_EQ(device.id, kJabraSpeaker1.id); // Loads background app. @@ -156,12 +142,12 @@ // Change output device volume. const int kVolume = 60; - cras_audio_handler_->SetOutputVolumePercent(kVolume); + audio_handler()->SetOutputVolumePercent(kVolume); // Verify the output volume is changed to the designated value. - EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent()); + EXPECT_EQ(kVolume, audio_handler()->GetOutputVolumePercent()); EXPECT_EQ(kVolume, - cras_audio_handler_->GetOutputVolumePercentForDevice(device.id)); + audio_handler()->GetOutputVolumePercentForDevice(device.id)); // Verify the background app got the OnOutputNodeVolumeChanged event // with the expected node id and volume value. @@ -171,16 +157,16 @@ IN_PROC_BROWSER_TEST_F(AudioApiTest, OnOutputMuteChanged) { AudioNodeList audio_nodes = {CreateAudioNode(kJabraSpeaker1, 2), CreateAudioNode(kHDMIOutput, 2)}; - SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); + ChangeAudioNodes(audio_nodes); // Verify the jabra speaker is the active output device. AudioDevice device; - EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(&device)); + EXPECT_TRUE(audio_handler()->GetPrimaryActiveOutputDevice(&device)); EXPECT_EQ(device.id, kJabraSpeaker1.id); // Mute the output. - cras_audio_handler_->SetOutputMute(true); - EXPECT_TRUE(cras_audio_handler_->IsOutputMuted()); + audio_handler()->SetOutputMute(true); + EXPECT_TRUE(audio_handler()->IsOutputMuted()); // Loads background app. ResultCatcher result_catcher; @@ -189,8 +175,8 @@ ASSERT_TRUE(load_listener.WaitUntilSatisfied()); // Un-mute the output. - cras_audio_handler_->SetOutputMute(false); - EXPECT_FALSE(cras_audio_handler_->IsOutputMuted()); + audio_handler()->SetOutputMute(false); + EXPECT_FALSE(audio_handler()->IsOutputMuted()); // Verify the background app got the OnMuteChanged event // with the expected output un-muted state. @@ -200,17 +186,17 @@ IN_PROC_BROWSER_TEST_F(AudioApiTest, OnInputMuteChanged) { AudioNodeList audio_nodes = {CreateAudioNode(kJabraMic1, 2), CreateAudioNode(kUSBCameraMic, 2)}; - SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); + ChangeAudioNodes(audio_nodes); // Set the jabra mic to be the active input device. AudioDevice jabra_mic(CreateAudioNode(kJabraMic1, 2)); - cras_audio_handler_->SwitchToDevice( - jabra_mic, true, chromeos::CrasAudioHandler::ACTIVATE_BY_USER); - EXPECT_EQ(kJabraMic1.id, cras_audio_handler_->GetPrimaryActiveInputNode()); + audio_handler()->SwitchToDevice(jabra_mic, true, + chromeos::CrasAudioHandler::ACTIVATE_BY_USER); + EXPECT_EQ(kJabraMic1.id, audio_handler()->GetPrimaryActiveInputNode()); // Un-mute the input. - cras_audio_handler_->SetInputMute(false); - EXPECT_FALSE(cras_audio_handler_->IsInputMuted()); + audio_handler()->SetInputMute(false); + EXPECT_FALSE(audio_handler()->IsInputMuted()); // Loads background app. ResultCatcher result_catcher; @@ -219,8 +205,8 @@ ASSERT_TRUE(load_listener.WaitUntilSatisfied()); // Mute the input. - cras_audio_handler_->SetInputMute(true); - EXPECT_TRUE(cras_audio_handler_->IsInputMuted()); + audio_handler()->SetInputMute(true); + EXPECT_TRUE(audio_handler()->IsInputMuted()); // Verify the background app got the OnMuteChanged event // with the expected input muted state. @@ -230,11 +216,11 @@ IN_PROC_BROWSER_TEST_F(AudioApiTest, OnNodesChangedAddNodes) { AudioNodeList audio_nodes = {CreateAudioNode(kJabraSpeaker1, 2), CreateAudioNode(kJabraSpeaker2, 2)}; - SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); + ChangeAudioNodes(audio_nodes); const size_t init_device_size = audio_nodes.size(); AudioDeviceList audio_devices; - cras_audio_handler_->GetAudioDevices(&audio_devices); + audio_handler()->GetAudioDevices(&audio_devices); EXPECT_EQ(init_device_size, audio_devices.size()); // Load background app. @@ -246,7 +232,7 @@ // Plug in HDMI output. audio_nodes.push_back(CreateAudioNode(kHDMIOutput, 2)); ChangeAudioNodes(audio_nodes); - cras_audio_handler_->GetAudioDevices(&audio_devices); + audio_handler()->GetAudioDevices(&audio_devices); EXPECT_EQ(init_device_size + 1, audio_devices.size()); // Verify the background app got the OnNodesChanged event @@ -258,11 +244,11 @@ AudioNodeList audio_nodes = {CreateAudioNode(kJabraMic1, 2), CreateAudioNode(kJabraMic2, 2), CreateAudioNode(kUSBCameraMic, 2)}; - SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); + ChangeAudioNodes(audio_nodes); const size_t init_device_size = audio_nodes.size(); AudioDeviceList audio_devices; - cras_audio_handler_->GetAudioDevices(&audio_devices); + audio_handler()->GetAudioDevices(&audio_devices); EXPECT_EQ(init_device_size, audio_devices.size()); // Load background app. @@ -274,7 +260,7 @@ // Remove camera mic. audio_nodes.erase(audio_nodes.begin() + init_device_size - 1); ChangeAudioNodes(audio_nodes); - cras_audio_handler_->GetAudioDevices(&audio_devices); + audio_handler()->GetAudioDevices(&audio_devices); EXPECT_EQ(init_device_size - 1, audio_devices.size()); // Verify the background app got the onNodesChanged event @@ -284,7 +270,7 @@ class WhitelistedAudioApiTest : public AudioApiTest { public: - WhitelistedAudioApiTest() {} + WhitelistedAudioApiTest() = default; ~WhitelistedAudioApiTest() override = default; void SetUpCommandLine(base::CommandLine* command_line) override { @@ -301,11 +287,9 @@ CreateAudioNode(kHDMIOutput, 2), CreateAudioNode(kJabraMic1, 2), CreateAudioNode(kJabraMic2, 2), CreateAudioNode(kUSBCameraMic, 2)}; - SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); + ChangeAudioNodes(audio_nodes); EXPECT_TRUE(RunAppTest("api_test/audio/deprecated_api")) << message_; } -#endif // OS_CHROMEOS - } // namespace extensions
diff --git a/extensions/browser/api/audio/audio_service_chromeos.cc b/extensions/browser/api/audio/audio_service_chromeos.cc index d1ed53bc..c35e1cb 100644 --- a/extensions/browser/api/audio/audio_service_chromeos.cc +++ b/extensions/browser/api/audio/audio_service_chromeos.cc
@@ -129,21 +129,20 @@ }; AudioServiceImpl::AudioServiceImpl(AudioDeviceIdCalculator* id_calculator) - : cras_audio_handler_(NULL), + : cras_audio_handler_(chromeos::CrasAudioHandler::Get()), id_calculator_(id_calculator), weak_ptr_factory_(this) { CHECK(id_calculator_); - if (chromeos::CrasAudioHandler::IsInitialized()) { - cras_audio_handler_ = chromeos::CrasAudioHandler::Get(); + if (cras_audio_handler_) cras_audio_handler_->AddAudioObserver(this); - } } AudioServiceImpl::~AudioServiceImpl() { - if (cras_audio_handler_ && chromeos::CrasAudioHandler::IsInitialized()) { - cras_audio_handler_->RemoveAudioObserver(this); - } + // The CrasAudioHandler global instance may have already been destroyed, so + // do not used the cached pointer here. + if (chromeos::CrasAudioHandler::Get()) + chromeos::CrasAudioHandler::Get()->RemoveAudioObserver(this); } void AudioServiceImpl::AddObserver(AudioService::Observer* observer) {
diff --git a/extensions/browser/api/declarative_net_request/ruleset_manager.cc b/extensions/browser/api/declarative_net_request/ruleset_manager.cc index 45aa485b..5e8e16ff 100644 --- a/extensions/browser/api/declarative_net_request/ruleset_manager.cc +++ b/extensions/browser/api/declarative_net_request/ruleset_manager.cc
@@ -175,6 +175,15 @@ } // namespace +RulesetManager::Action::Action(Action::Type type) : type(type) {} +RulesetManager::Action::~Action() = default; +RulesetManager::Action::Action(Action&&) = default; +RulesetManager::Action& RulesetManager::Action::operator=(Action&&) = default; + +bool RulesetManager::Action::operator==(const Action& that) const { + return type == that.type && redirect_url == that.redirect_url; +} + RulesetManager::RulesetManager(const InfoMap* info_map) : info_map_(info_map) { DCHECK(info_map_); @@ -278,19 +287,17 @@ RulesetManager::Action RulesetManager::EvaluateRequest( const WebRequestInfo& request, - bool is_incognito_context, - GURL* redirect_url) const { + bool is_incognito_context) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(redirect_url); if (!ShouldEvaluateRequest(request)) - return Action::NONE; + return Action(Action::Type::NONE); if (test_observer_) test_observer_->OnEvaluateRequest(request, is_incognito_context); if (rulesets_.empty()) - return Action::NONE; + return Action(Action::Type::NONE); SCOPED_UMA_HISTOGRAM_TIMER( "Extensions.DeclarativeNetRequest.EvaluateRequestTime.AllExtensions2"); @@ -331,8 +338,8 @@ if (ruleset_data->matcher->ShouldBlockRequest(params)) { return ShouldCollapseResourceType(params.element_type) - ? Action::COLLAPSE - : Action::BLOCK; + ? Action(Action::Type::COLLAPSE) + : Action(Action::Type::BLOCK); } } } @@ -342,7 +349,7 @@ // Redirecting WebSocket handshake request is prohibited. if (params.element_type == flat_rule::ElementType_WEBSOCKET) - return Action::NONE; + return Action(Action::Type::NONE); // This iterates in decreasing order of extension installation time. Hence // more recently installed extensions get higher priority in choosing the @@ -368,13 +375,16 @@ continue; } - if (ruleset_data->matcher->ShouldRedirectRequest(params, redirect_url)) { - return Action::REDIRECT; + GURL redirect_url; + if (ruleset_data->matcher->ShouldRedirectRequest(params, &redirect_url)) { + Action action(Action::Type::REDIRECT); + action.redirect_url = std::move(redirect_url); + return action; } } } - return Action::NONE; + return Action(Action::Type::NONE); } void RulesetManager::SetObserverForTest(TestObserver* observer) {
diff --git a/extensions/browser/api/declarative_net_request/ruleset_manager.h b/extensions/browser/api/declarative_net_request/ruleset_manager.h index 4aff1ca..6351134 100644 --- a/extensions/browser/api/declarative_net_request/ruleset_manager.h +++ b/extensions/browser/api/declarative_net_request/ruleset_manager.h
@@ -10,13 +10,13 @@ #include "base/containers/flat_set.h" #include "base/macros.h" +#include "base/optional.h" #include "base/sequence_checker.h" #include "base/time/time.h" #include "extensions/common/extension_id.h" #include "extensions/common/permissions/permissions_data.h" #include "extensions/common/url_pattern_set.h" - -class GURL; +#include "url/gurl.h" namespace extensions { class InfoMap; @@ -30,14 +30,30 @@ // same sequence. class RulesetManager { public: - enum class Action { - NONE, - // Block the network request. - BLOCK, - // Block the network request and collapse the corresponding DOM element. - COLLAPSE, - // Redirect the network request. - REDIRECT, + struct Action { + enum class Type { + NONE, + // Block the network request. + BLOCK, + // Block the network request and collapse the corresponding DOM element. + COLLAPSE, + // Redirect the network request. + REDIRECT, + }; + + explicit Action(Type type); + ~Action(); + Action(Action&&); + Action& operator=(Action&&); + + bool operator==(const Action&) const; + + Type type = Type::NONE; + + // Valid iff |type| is |REDIRECT|. + base::Optional<GURL> redirect_url; + + DISALLOW_COPY_AND_ASSIGN(Action); }; explicit RulesetManager(const InfoMap* info_map); @@ -73,14 +89,12 @@ void UpdateAllowedPages(const ExtensionId& extension_id, URLPatternSet allowed_pages); - // Returns the action to take for the given request. |redirect_url| will be - // populated if the returned action is |REDIRECT|. Blocking rules have higher - // priority than redirect rules. For determining the |redirect_url|, most - // recently installed extensions are given preference. |redirect_url| must not - // be null. + // Returns the action to take for the given request. + // Precedence order: Allow > Blocking > Redirect rules. + // For redirect rules, most recently installed extensions are given + // preference. Action EvaluateRequest(const WebRequestInfo& request, - bool is_incognito_context, - GURL* redirect_url) const; + bool is_incognito_context) const; // Returns the number of CompositeMatchers currently being managed. size_t GetMatcherCountForTest() const { return rulesets_.size(); }
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc index fbb8c365..6722eb9 100644 --- a/extensions/browser/api/web_request/web_request_api.cc +++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -852,20 +852,6 @@ // The callback to call when we get a response from all event handlers. net::CompletionOnceCallback callback; - // The callback to invoke for onBeforeSendHeaders. If - // |before_send_headers_callback.is_null()| is false, |callback| must be NULL. - // Only valid for OnBeforeSendHeaders. - BeforeSendHeadersCallback before_send_headers_callback; - - // The callback to invoke for auth. If |auth_callback.is_null()| is false, - // |callback| must be NULL. - // Only valid for OnAuthRequired. - net::NetworkDelegate::AuthCallback auth_callback; - - // If non-empty, this contains the auth credentials that may be filled in. - // Only valid for OnAuthRequired. - net::AuthCredentials* auth_credentials = nullptr; - // If non-empty, this contains the new URL that the request will redirect to. // Only valid for OnBeforeRequest and OnHeadersReceived. GURL* new_url = nullptr; @@ -882,6 +868,15 @@ // OnHeadersReceived. scoped_refptr<net::HttpResponseHeaders>* override_response_headers = nullptr; + // If non-empty, this contains the auth credentials that may be filled in. + // Only valid for OnAuthRequired. + net::AuthCredentials* auth_credentials = nullptr; + + // The callback to invoke for auth. If |auth_callback.is_null()| is false, + // |callback| must be NULL. + // Only valid for OnAuthRequired. + net::NetworkDelegate::AuthCallback auth_callback; + // Time the request was paused. Used for logging purposes. base::Time blocking_time; @@ -1037,16 +1032,18 @@ using Action = declarative_net_request::RulesetManager::Action; Action action = extension_info_map->GetRulesetManager()->EvaluateRequest( - *request, is_incognito_context, new_url); - switch (action) { - case Action::NONE: + *request, is_incognito_context); + switch (action.type) { + case Action::Type::NONE: break; - case Action::BLOCK: + case Action::Type::BLOCK: return net::ERR_BLOCKED_BY_CLIENT; - case Action::COLLAPSE: + case Action::Type::COLLAPSE: *should_collapse_initiator = true; return net::ERR_BLOCKED_BY_CLIENT; - case Action::REDIRECT: + case Action::Type::REDIRECT: + DCHECK(action.redirect_url); + *new_url = action.redirect_url.value(); return net::OK; } } @@ -1095,7 +1092,7 @@ void* browser_context, const InfoMap* extension_info_map, const WebRequestInfo* request, - BeforeSendHeadersCallback callback, + net::CompletionOnceCallback callback, net::HttpRequestHeaders* headers) { if (ShouldHideEvent(browser_context, extension_info_map, *request)) return net::OK; @@ -1133,7 +1130,7 @@ blocked_request.event = kOnBeforeSendHeaders; blocked_request.is_incognito |= IsIncognitoBrowserContext(browser_context); blocked_request.request = request; - blocked_request.before_send_headers_callback = std::move(callback); + blocked_request.callback = std::move(callback); blocked_request.request_headers = headers; if (blocked_request.num_handlers_blocking == 0) { @@ -2218,9 +2215,6 @@ bool request_headers_modified = false; bool response_headers_modified = false; bool credentials_set = false; - // The set of request headers which were removed or set to new values. - std::set<std::string> request_headers_removed; - std::set<std::string> request_headers_set; deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); @@ -2235,12 +2229,11 @@ request->url, blocked_request.response_deltas, blocked_request.new_url, &ignored_actions, request->logger.get()); } else if (blocked_request.event == kOnBeforeSendHeaders) { - CHECK(!blocked_request.before_send_headers_callback.is_null()); + CHECK(!blocked_request.callback.is_null()); helpers::MergeOnBeforeSendHeadersResponses( request->url, blocked_request.response_deltas, blocked_request.request_headers, &ignored_actions, - request->logger.get(), &request_headers_removed, &request_headers_set, - &request_headers_modified); + request->logger.get(), &request_headers_modified); } else if (blocked_request.event == kOnHeadersReceived) { CHECK(!blocked_request.callback.is_null()); helpers::MergeOnHeadersReceivedResponses( @@ -2300,13 +2293,6 @@ blocked_requests_.erase(request->id); if (call_callback) std::move(callback).Run(rv); - } else if (!blocked_request.before_send_headers_callback.is_null()) { - auto callback = std::move(blocked_request.before_send_headers_callback); - // Ensure that request is removed before callback because the callback - // might trigger the next event. - blocked_requests_.erase(request->id); - if (call_callback) - std::move(callback).Run(request_headers_removed, request_headers_set, rv); } else if (!blocked_request.auth_callback.is_null()) { net::NetworkDelegate::AuthRequiredResponse response; if (canceled)
diff --git a/extensions/browser/api/web_request/web_request_api.h b/extensions/browser/api/web_request/web_request_api.h index 74dca1b..d13caea5 100644 --- a/extensions/browser/api/web_request/web_request_api.h +++ b/extensions/browser/api/web_request/web_request_api.h
@@ -359,11 +359,6 @@ GURL* new_url, bool* should_collapse_initiator); - using BeforeSendHeadersCallback = - base::OnceCallback<void(const std::set<std::string>& removed_headers, - const std::set<std::string>& set_headers, - int error_code)>; - // Dispatches the onBeforeSendHeaders event. This is fired for HTTP(s) // requests only, and allows modification of the outgoing request headers. // Returns net::ERR_IO_PENDING if an extension is intercepting the request, OK @@ -371,7 +366,7 @@ int OnBeforeSendHeaders(void* browser_context, const extensions::InfoMap* extension_info_map, const WebRequestInfo* request, - BeforeSendHeadersCallback callback, + net::CompletionOnceCallback callback, net::HttpRequestHeaders* headers); // Dispatches the onSendHeaders event. This is fired for HTTP(s) requests
diff --git a/extensions/browser/api/web_request/web_request_api_helpers.cc b/extensions/browser/api/web_request/web_request_api_helpers.cc index 03f2d1c..362b80fe 100644 --- a/extensions/browser/api/web_request/web_request_api_helpers.cc +++ b/extensions/browser/api/web_request/web_request_api_helpers.cc
@@ -709,14 +709,15 @@ net::HttpRequestHeaders* request_headers, IgnoredActions* ignored_actions, extensions::WebRequestInfo::Logger* logger, - std::set<std::string>* removed_headers, - std::set<std::string>* set_headers, bool* request_headers_modified) { DCHECK(request_headers_modified); - DCHECK(removed_headers->empty()); - DCHECK(set_headers->empty()); *request_headers_modified = false; + // Here we collect which headers we have removed or set to new values + // so far due to extensions of higher precedence. + std::set<std::string> removed_headers; + std::set<std::string> set_headers; + // We assume here that the deltas are sorted in decreasing extension // precedence (i.e. decreasing extension installation time). for (const auto& delta : deltas) { @@ -738,14 +739,14 @@ const std::string& value = modification.value(); // We must not delete anything that has been modified before. - if (removed_headers->find(key) != removed_headers->end() && + if (removed_headers.find(key) != removed_headers.end() && !extension_conflicts) { extension_conflicts = true; } // We must not modify anything that has been set to a *different* // value before. - if (set_headers->find(key) != set_headers->end() && + if (set_headers.find(key) != set_headers.end() && !extension_conflicts) { std::string current_value; if (!request_headers->GetHeader(key, ¤t_value) || @@ -762,7 +763,7 @@ for (auto key = delta.deleted_request_headers.begin(); key != delta.deleted_request_headers.end() && !extension_conflicts; ++key) { - if (set_headers->find(*key) != set_headers->end()) { + if (set_headers.find(*key) != set_headers.end()) { std::string current_value; request_headers->GetHeader(*key, ¤t_value); extension_conflicts = true; @@ -779,14 +780,14 @@ net::HttpRequestHeaders::Iterator modification( delta.modified_request_headers); while (modification.GetNext()) - set_headers->insert(modification.name()); + set_headers.insert(modification.name()); } // Perform all deletions and record which keys were deleted. { for (const auto& header : delta.deleted_request_headers) { request_headers->RemoveHeader(header); - removed_headers->insert(header); + removed_headers.insert(header); } } logger->LogEvent(net::NetLogEventType::CHROME_EXTENSION_MODIFIED_HEADERS, @@ -814,7 +815,7 @@ {"referer", WebRequestSpecialRequestHeaderModification::kReferer}, }; int special_headers_removed = 0; - for (const auto& header : *removed_headers) { + for (const auto& header : removed_headers) { auto it = kHeaderMap.find(base::ToLowerASCII(header)); if (it != kHeaderMap.end()) { special_headers_removed++; @@ -830,7 +831,7 @@ } int special_headers_changed = 0; - for (const auto& header : *set_headers) { + for (const auto& header : set_headers) { auto it = kHeaderMap.find(base::ToLowerASCII(header)); if (it != kHeaderMap.end()) { special_headers_changed++;
diff --git a/extensions/browser/api/web_request/web_request_api_helpers.h b/extensions/browser/api/web_request/web_request_api_helpers.h index 0698fc3a..24e3c911 100644 --- a/extensions/browser/api/web_request/web_request_api_helpers.h +++ b/extensions/browser/api/web_request/web_request_api_helpers.h
@@ -332,8 +332,6 @@ net::HttpRequestHeaders* request_headers, IgnoredActions* ignored_actions, extensions::WebRequestInfo::Logger* logger, - std::set<std::string>* removed_headers, - std::set<std::string>* set_headers, bool* request_headers_modified); // Modifies the "Set-Cookie" headers in |override_response_headers| according to // |deltas.response_cookie_modifications|. If |override_response_headers| is
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc index 58ee0b7..cb617f9a 100644 --- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc +++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
@@ -26,11 +26,6 @@ namespace extensions { -WebRequestProxyingURLLoaderFactory::InProgressRequest::FollowRedirectParams:: - FollowRedirectParams() = default; -WebRequestProxyingURLLoaderFactory::InProgressRequest::FollowRedirectParams:: - ~FollowRedirectParams() = default; - WebRequestProxyingURLLoaderFactory::InProgressRequest::InProgressRequest( WebRequestProxyingURLLoaderFactory* factory, uint64_t request_id, @@ -85,12 +80,7 @@ } void WebRequestProxyingURLLoaderFactory::InProgressRequest::Restart() { - UpdateRequestInfo(); - RestartInternal(); -} - -void WebRequestProxyingURLLoaderFactory::InProgressRequest:: - UpdateRequestInfo() { + request_completed_ = false; // Derive a new WebRequestInfo value any time |Restart()| is called, because // the details in |request_| may have changed e.g. if we've been redirected. // |request_initiator| can be modified on redirects, but we keep the original @@ -111,12 +101,6 @@ ExtensionWebRequestEventRouter::GetInstance() ->HasExtraHeadersListenerForRequest( factory_->browser_context_, factory_->info_map_, &info_.value()); -} - -void WebRequestProxyingURLLoaderFactory::InProgressRequest::RestartInternal() { - DCHECK_EQ(info_->url, request_.url) - << "UpdateRequestInfo must have been called first"; - request_completed_ = false; // If the header client will be used, we start the request immediately, and // OnBeforeSendHeaders and OnSendHeaders will be handled there. Otherwise, @@ -178,29 +162,11 @@ request_.headers.RemoveHeader(header); request_.headers.MergeFrom(modified_headers); - // Call this before checking |current_request_uses_header_client_| as it - // calculates it. - UpdateRequestInfo(); - if (target_loader_.is_bound()) { - // If header_client_ is used, then we have to call FollowRedirect now as - // that's what triggers the network service calling back to - // OnBeforeSendHeaders(). Otherwise, don't call FollowRedirect now. Wait for - // the onBeforeSendHeaders callback(s) to run as these may modify request - // headers and if so we'll pass these modifications to FollowRedirect. - if (current_request_uses_header_client_) { - target_loader_->FollowRedirect(removed_headers, modified_headers, - new_url); - } else { - auto params = std::make_unique<FollowRedirectParams>(); - params->removed_headers = removed_headers; - params->modified_headers = modified_headers; - params->new_url = new_url; - pending_follow_redirect_params_ = std::move(params); - } + target_loader_->FollowRedirect(removed_headers, modified_headers, new_url); } - RestartInternal(); + Restart(); } void WebRequestProxyingURLLoaderFactory::InProgressRequest:: @@ -481,8 +447,7 @@ DCHECK_EQ(net::OK, result); } - ContinueToSendHeaders(std::set<std::string>(), std::set<std::string>(), - net::OK); + ContinueToSendHeaders(net::OK); } void WebRequestProxyingURLLoaderFactory::InProgressRequest:: @@ -525,9 +490,7 @@ } void WebRequestProxyingURLLoaderFactory::InProgressRequest:: - ContinueToSendHeaders(const std::set<std::string>& removed_headers, - const std::set<std::string>& set_headers, - int error_code) { + ContinueToSendHeaders(int error_code) { if (error_code != net::OK) { OnRequestError(network::URLLoaderCompletionStatus(error_code)); return; @@ -537,26 +500,6 @@ DCHECK(on_before_send_headers_callback_); std::move(on_before_send_headers_callback_) .Run(error_code, request_.headers); - } else if (pending_follow_redirect_params_) { - pending_follow_redirect_params_->removed_headers.insert( - pending_follow_redirect_params_->removed_headers.end(), - removed_headers.begin(), removed_headers.end()); - - for (auto& set_header : set_headers) { - std::string header_value; - if (request_.headers.GetHeader(set_header, &header_value)) { - pending_follow_redirect_params_->modified_headers.SetHeader( - set_header, header_value); - } else { - NOTREACHED(); - } - } - - target_loader_->FollowRedirect( - pending_follow_redirect_params_->removed_headers, - pending_follow_redirect_params_->modified_headers, - pending_follow_redirect_params_->new_url); - pending_follow_redirect_params_.reset(); } if (proxied_client_binding_.is_bound())
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h index b86d70c..278921bc 100644 --- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h +++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h
@@ -103,14 +103,8 @@ OnHeadersReceivedCallback callback) override; private: - // These two methods combined form the implementation of Restart(). - void UpdateRequestInfo(); - void RestartInternal(); - void ContinueToBeforeSendHeaders(int error_code); - void ContinueToSendHeaders(const std::set<std::string>& removed_headers, - const std::set<std::string>& set_headers, - int error_code); + void ContinueToSendHeaders(int error_code); void ContinueToStartRequest(int error_code); void ContinueToHandleOverrideHeaders(int error_code); void ContinueToResponseStarted(int error_code); @@ -174,21 +168,6 @@ OnHeadersReceivedCallback on_headers_received_callback_; mojo::Binding<network::mojom::TrustedHeaderClient> header_client_binding_; - // If |has_any_extra_headers_listeners_| is set to false and a redirect is - // in progress, this stores the parameters to FollowRedirect that came from - // the client. That way we can combine it with any other changes that - // extensions made to headers in their callbacks. - struct FollowRedirectParams { - FollowRedirectParams(); - ~FollowRedirectParams(); - std::vector<std::string> removed_headers; - net::HttpRequestHeaders modified_headers; - base::Optional<GURL> new_url; - - DISALLOW_COPY_AND_ASSIGN(FollowRedirectParams); - }; - std::unique_ptr<FollowRedirectParams> pending_follow_redirect_params_; - base::WeakPtrFactory<InProgressRequest> weak_factory_; DISALLOW_COPY_AND_ASSIGN(InProgressRequest);
diff --git a/extensions/browser/api/web_request/web_request_proxying_websocket.cc b/extensions/browser/api/web_request/web_request_proxying_websocket.cc index 8e42fd9..d630a42 100644 --- a/extensions/browser/api/web_request/web_request_proxying_websocket.cc +++ b/extensions/browser/api/web_request/web_request_proxying_websocket.cc
@@ -379,14 +379,10 @@ return; DCHECK_EQ(net::OK, result); - OnBeforeSendHeadersComplete(std::set<std::string>(), std::set<std::string>(), - net::OK); + OnBeforeSendHeadersComplete(net::OK); } -void WebRequestProxyingWebSocket::OnBeforeSendHeadersComplete( - const std::set<std::string>& removed_headers, - const std::set<std::string>& set_headers, - int error_code) { +void WebRequestProxyingWebSocket::OnBeforeSendHeadersComplete(int error_code) { DCHECK(binding_as_header_client_ || !binding_as_client_.is_bound()); if (error_code != net::OK) { OnError(error_code);
diff --git a/extensions/browser/api/web_request/web_request_proxying_websocket.h b/extensions/browser/api/web_request/web_request_proxying_websocket.h index b026731..cac917d 100644 --- a/extensions/browser/api/web_request/web_request_proxying_websocket.h +++ b/extensions/browser/api/web_request/web_request_proxying_websocket.h
@@ -112,9 +112,7 @@ private: void OnBeforeRequestComplete(int error_code); - void OnBeforeSendHeadersComplete(const std::set<std::string>& removed_headers, - const std::set<std::string>& set_headers, - int error_code); + void OnBeforeSendHeadersComplete(int error_code); void ContinueToStartRequest(int error_code); void OnHeadersReceivedComplete(int error_code); void ContinueToHeadersReceived();
diff --git a/extensions/shell/BUILD.gn b/extensions/shell/BUILD.gn index 4f0d95f..bd5667fc 100644 --- a/extensions/shell/BUILD.gn +++ b/extensions/shell/BUILD.gn
@@ -230,6 +230,7 @@ "//chromeos/audio", "//chromeos/constants", "//chromeos/dbus", + "//chromeos/dbus/power", "//chromeos/disks", "//chromeos/login/login_state", "//chromeos/network", @@ -360,6 +361,7 @@ "//chromeos/audio", "//chromeos/constants", "//chromeos/dbus:test_support", + "//chromeos/dbus/power", ] }
diff --git a/extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc b/extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc index ec01191..80a6cb2 100644 --- a/extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc +++ b/extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc
@@ -14,7 +14,6 @@ #include "chromeos/audio/audio_devices_pref_handler.h" #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/dbus/audio_node.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_cras_audio_client.h" #include "testing/gtest/include/gtest/gtest.h" @@ -27,16 +26,9 @@ class ShellAudioControllerTest : public testing::Test { public: ShellAudioControllerTest() : next_node_id_(1) { - // This also initializes DBusThreadManager. - std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter = - chromeos::DBusThreadManager::GetSetterForTesting(); - - audio_client_ = new chromeos::FakeCrasAudioClient(); - audio_client_->SetAudioNodesForTesting(AudioNodeList()); - dbus_setter->SetCrasAudioClient(base::WrapUnique(audio_client_)); - + chromeos::CrasAudioClient::InitializeFake(); + audio_client()->SetAudioNodesForTesting(AudioNodeList()); chromeos::CrasAudioHandler::InitializeForTesting(); - audio_handler_ = chromeos::CrasAudioHandler::Get(); controller_.reset(new ShellAudioController()); } @@ -44,7 +36,7 @@ ~ShellAudioControllerTest() override { controller_.reset(); chromeos::CrasAudioHandler::Shutdown(); - chromeos::DBusThreadManager::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); } protected: @@ -72,8 +64,14 @@ ASSERT_TRUE(false) << "Didn't find ID " << id; } - chromeos::FakeCrasAudioClient* audio_client_; // Not owned. - chromeos::CrasAudioHandler* audio_handler_; // Not owned. + chromeos::FakeCrasAudioClient* audio_client() { + return chromeos::FakeCrasAudioClient::Get(); + } + + chromeos::CrasAudioHandler* audio_handler() { + return chromeos::CrasAudioHandler::Get(); + } + std::unique_ptr<ShellAudioController> controller_; // Next audio node ID to be returned by CreateNode(). @@ -100,26 +98,26 @@ all_nodes.push_back(internal_mic); all_nodes.push_back(headphone); all_nodes.push_back(external_mic); - audio_client_->SetAudioNodesAndNotifyObserversForTesting(all_nodes); - EXPECT_EQ(headphone.id, audio_handler_->GetPrimaryActiveOutputNode()); - EXPECT_EQ(external_mic.id, audio_handler_->GetPrimaryActiveInputNode()); + audio_client()->SetAudioNodesAndNotifyObserversForTesting(all_nodes); + EXPECT_EQ(headphone.id, audio_handler()->GetPrimaryActiveOutputNode()); + EXPECT_EQ(external_mic.id, audio_handler()->GetPrimaryActiveInputNode()); // Unplug the headphones and mic and check that we switch to the internal // devices. AudioNodeList internal_nodes; internal_nodes.push_back(internal_speaker); internal_nodes.push_back(internal_mic); - audio_client_->SetAudioNodesAndNotifyObserversForTesting(internal_nodes); - EXPECT_EQ(internal_speaker.id, audio_handler_->GetPrimaryActiveOutputNode()); - EXPECT_EQ(internal_mic.id, audio_handler_->GetPrimaryActiveInputNode()); + audio_client()->SetAudioNodesAndNotifyObserversForTesting(internal_nodes); + EXPECT_EQ(internal_speaker.id, audio_handler()->GetPrimaryActiveOutputNode()); + EXPECT_EQ(internal_mic.id, audio_handler()->GetPrimaryActiveInputNode()); // Switch back to the external devices. Mark the previously-activated internal // devices as being active so CrasAudioHandler doesn't complain. SetNodeActive(&all_nodes, internal_speaker.id, true); SetNodeActive(&all_nodes, internal_mic.id, true); - audio_client_->SetAudioNodesAndNotifyObserversForTesting(all_nodes); - EXPECT_EQ(headphone.id, audio_handler_->GetPrimaryActiveOutputNode()); - EXPECT_EQ(external_mic.id, audio_handler_->GetPrimaryActiveInputNode()); + audio_client()->SetAudioNodesAndNotifyObserversForTesting(all_nodes); + EXPECT_EQ(headphone.id, audio_handler()->GetPrimaryActiveOutputNode()); + EXPECT_EQ(external_mic.id, audio_handler()->GetPrimaryActiveInputNode()); } // Tests that active audio devices are unmuted and have correct initial volume. @@ -127,16 +125,16 @@ AudioNodeList nodes; nodes.push_back(CreateNode(chromeos::AUDIO_TYPE_INTERNAL_SPEAKER)); nodes.push_back(CreateNode(chromeos::AUDIO_TYPE_INTERNAL_MIC)); - audio_client_->SetAudioNodesAndNotifyObserversForTesting(nodes); + audio_client()->SetAudioNodesAndNotifyObserversForTesting(nodes); - EXPECT_FALSE(audio_handler_->IsOutputMuted()); - EXPECT_FALSE(audio_handler_->IsInputMuted()); + EXPECT_FALSE(audio_handler()->IsOutputMuted()); + EXPECT_FALSE(audio_handler()->IsInputMuted()); EXPECT_EQ(static_cast<double>( chromeos::AudioDevicesPrefHandler::kDefaultOutputVolumePercent), - audio_handler_->GetOutputVolumePercent()); + audio_handler()->GetOutputVolumePercent()); // TODO(rkc): The default value for gain is wrong. http://crbug.com/442489 - EXPECT_EQ(75.0, audio_handler_->GetInputGainPercent()); + EXPECT_EQ(75.0, audio_handler()->GetInputGainPercent()); } } // namespace extensions
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc index 2604e90..c97008d 100644 --- a/extensions/shell/browser/shell_browser_main_parts.cc +++ b/extensions/shell/browser/shell_browser_main_parts.cc
@@ -64,6 +64,7 @@ #endif #if defined(OS_CHROMEOS) +#include "chromeos/dbus/cras_audio_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_manager_client.h" #elif defined(OS_LINUX) @@ -126,8 +127,10 @@ chromeos::DBusThreadManager::Initialize(); dbus::Bus* bus = chromeos::DBusThreadManager::Get()->GetSystemBus(); if (bus) { + chromeos::CrasAudioClient::Initialize(bus); chromeos::PowerManagerClient::Initialize(bus); } else { + chromeos::CrasAudioClient::InitializeFake(); chromeos::PowerManagerClient::InitializeFake(); } @@ -317,6 +320,7 @@ device::BluetoothAdapterFactory::Shutdown(); bluez::BluezDBusManager::Shutdown(); chromeos::PowerManagerClient::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); chromeos::DBusThreadManager::Shutdown(); #elif defined(OS_LINUX) device::BluetoothAdapterFactory::Shutdown();
diff --git a/extensions/shell/browser/shell_network_delegate.cc b/extensions/shell/browser/shell_network_delegate.cc index 9d6ca65f..b3ffe0f 100644 --- a/extensions/shell/browser/shell_network_delegate.cc +++ b/extensions/shell/browser/shell_network_delegate.cc
@@ -70,22 +70,13 @@ return result; } -namespace { -void OnHeadersReceivedAdapter(net::CompletionOnceCallback callback, - const std::set<std::string>& removed_headers, - const std::set<std::string>& set_headers, - int error_code) { - std::move(callback).Run(error_code); -} -} // namespace - int ShellNetworkDelegate::OnBeforeStartTransaction( net::URLRequest* request, net::CompletionOnceCallback callback, net::HttpRequestHeaders* headers) { return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders( browser_context_, extension_info_map_.get(), GetWebRequestInfo(request), - base::BindOnce(OnHeadersReceivedAdapter, std::move(callback)), headers); + std::move(callback), headers); } void ShellNetworkDelegate::OnStartTransaction(
diff --git a/gpu/config/gpu_info_collector_fuchsia.cc b/gpu/config/gpu_info_collector_fuchsia.cc index 6d93e68c..d285e4bb 100644 --- a/gpu/config/gpu_info_collector_fuchsia.cc +++ b/gpu/config/gpu_info_collector_fuchsia.cc
@@ -18,8 +18,7 @@ } bool CollectBasicGraphicsInfo(GPUInfo* gpu_info) { - // TODO(crbug.com/707031): Implement this. - NOTIMPLEMENTED(); + // TODO(https://crbug.com/950587): Implement this. return false; }
diff --git a/gpu/vulkan/PRESUBMIT.py b/gpu/vulkan/PRESUBMIT.py new file mode 100644 index 0000000..c5f3fd89 --- /dev/null +++ b/gpu/vulkan/PRESUBMIT.py
@@ -0,0 +1,53 @@ +# Copyright 2019 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. + +"""Enforces Vulkan function pointer autogen matches script output. + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts +for more details on the presubmit API built into depot_tools. +""" + +import os.path + + +def CommonChecks(input_api, output_api): + generating_files = input_api.AffectedFiles( + file_filter=lambda x: os.path.basename(x.LocalPath()) in [ + 'generate_bindings.py']) + generated_files = input_api.AffectedFiles( + file_filter=lambda x: os.path.basename(x.LocalPath()) in [ + 'vulkan_function_pointers.cc', 'vulkan_function_pointers.h']) + + + messages = [] + + if (len(generated_files) > 0 and len(generating_files) == 0): + long_text = 'Changed files:\n' + for file in generated_files: + long_text += file.LocalPath() + '\n' + long_text += '\n' + messages.append(output_api.PresubmitError( + 'Vulkan function pointer generated files changed but the generator ' + 'did not.', long_text=long_text)) + + with input_api.temporary_directory() as temp_dir: + commands = [] + if len(generating_files) > 0: + commands.append(input_api.Command(name='generate_bindings', + cmd=[input_api.python_executable, + 'generate_bindings.py', + '--check', + '--output-dir=' + temp_dir], + kwargs={}, + message=output_api.PresubmitError)) + if len(commands) > 0: + messages.extend(input_api.RunTests(commands)) + + return messages + +def CheckChangeOnUpload(input_api, output_api): + return CommonChecks(input_api, output_api) + +def CheckChangeOnCommit(input_api, output_api): + return CommonChecks(input_api, output_api)
diff --git a/gpu/vulkan/generate_bindings.py b/gpu/vulkan/generate_bindings.py index 86beac85..620516c1 100755 --- a/gpu/vulkan/generate_bindings.py +++ b/gpu/vulkan/generate_bindings.py
@@ -5,6 +5,7 @@ """code generator for Vulkan function pointers.""" +import filecmp import optparse import os import platform @@ -616,11 +617,22 @@ """This is the main function.""" parser = optparse.OptionParser() - _, args = parser.parse_args(argv) + parser.add_option( + "--output-dir", + help="Output directory for generated files. Defaults to this script's " + "directory.") + parser.add_option( + "-c", "--check", action="store_true", + help="Check if output files match generated files in chromium root " + "directory. Use this in PRESUBMIT scripts with --output-dir.") - directory = SELF_LOCATION - if len(args) >= 1: - directory = args[0] + (options, _) = parser.parse_args(args=argv) + + # Support generating files for PRESUBMIT. + if options.output_dir: + output_dir = options.output_dir + else: + output_dir = SELF_LOCATION def ClangFormat(filename): formatter = "clang-format" @@ -628,8 +640,9 @@ formatter += ".bat" call([formatter, "-i", "-style=chromium", filename]) + header_file_name = 'vulkan_function_pointers.h' header_file = open( - os.path.join(directory, 'vulkan_function_pointers.h'), 'wb') + os.path.join(output_dir, header_file_name), 'wb') GenerateHeaderFile(header_file, VULKAN_UNASSOCIATED_FUNCTIONS, VULKAN_INSTANCE_FUNCTIONS, VULKAN_PHYSICAL_DEVICE_FUNCTIONS, VULKAN_DEVICE_FUNCTIONS, @@ -642,8 +655,9 @@ header_file.close() ClangFormat(header_file.name) + source_file_name = 'vulkan_function_pointers.cc' source_file = open( - os.path.join(directory, 'vulkan_function_pointers.cc'), 'wb') + os.path.join(output_dir, source_file_name), 'wb') GenerateSourceFile(source_file, VULKAN_UNASSOCIATED_FUNCTIONS, VULKAN_INSTANCE_FUNCTIONS, VULKAN_PHYSICAL_DEVICE_FUNCTIONS, VULKAN_DEVICE_FUNCTIONS, @@ -656,6 +670,20 @@ source_file.close() ClangFormat(source_file.name) + check_failed_filenames = [] + if options.check: + for filename in [header_file_name, source_file_name]: + if not filecmp.cmp(os.path.join(output_dir, filename), + os.path.join(SELF_LOCATION, filename)): + check_failed_filenames.append(filename) + + if len(check_failed_filenames) > 0: + print 'Please run gpu/vulkan/generate_bindings.py' + print 'Failed check on generated files:' + for filename in check_failed_filenames: + print filename + return 1 + return 0 if __name__ == '__main__':
diff --git a/headless/lib/headless_browser_browsertest.cc b/headless/lib/headless_browser_browsertest.cc index f075aa89..2d396d3 100644 --- a/headless/lib/headless_browser_browsertest.cc +++ b/headless/lib/headless_browser_browsertest.cc
@@ -355,27 +355,48 @@ // TODO(skyostil): This test currently relies on being able to run a shell // script. #if defined(OS_POSIX) -IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, RendererCommandPrefixTest) { - base::ThreadRestrictions::SetIOAllowed(true); - base::FilePath launcher_stamp; - base::CreateTemporaryFile(&launcher_stamp); +class HeadlessBrowserRendererCommandPrefixTest : public HeadlessBrowserTest { + public: + const base::FilePath& launcher_stamp() const { return launcher_stamp_; } - base::FilePath launcher_script; - FILE* launcher_file = base::CreateAndOpenTemporaryFile(&launcher_script); - fprintf(launcher_file, "#!/bin/sh\n"); - fprintf(launcher_file, "echo $@ > %s\n", launcher_stamp.value().c_str()); - fprintf(launcher_file, "exec $@\n"); - fclose(launcher_file); + void SetUp() override { + base::ThreadRestrictions::SetIOAllowed(true); + base::CreateTemporaryFile(&launcher_stamp_); + + FILE* launcher_file = base::CreateAndOpenTemporaryFile(&launcher_script_); + fprintf(launcher_file, "#!/bin/sh\n"); + fprintf(launcher_file, "echo $@ > %s\n", launcher_stamp_.value().c_str()); + fprintf(launcher_file, "exec $@\n"); + fclose(launcher_file); #if !defined(OS_FUCHSIA) - base::SetPosixFilePermissions(launcher_script, - base::FILE_PERMISSION_READ_BY_USER | - base::FILE_PERMISSION_EXECUTE_BY_USER); + base::SetPosixFilePermissions(launcher_script_, + base::FILE_PERMISSION_READ_BY_USER | + base::FILE_PERMISSION_EXECUTE_BY_USER); #endif // !defined(OS_FUCHSIA) - base::CommandLine::ForCurrentProcess()->AppendSwitch("--no-sandbox"); - base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( - "--renderer-cmd-prefix", launcher_script.value()); + HeadlessBrowserTest::SetUp(); + } + void TearDown() override { + if (!launcher_script_.empty()) + base::DeleteFile(launcher_script_, false); + if (!launcher_stamp_.empty()) + base::DeleteFile(launcher_stamp_, false); + } + + void SetUpCommandLine(base::CommandLine* command_line) override { + command_line->AppendSwitch("--no-sandbox"); + command_line->AppendSwitchASCII("--renderer-cmd-prefix", + launcher_script_.value()); + } + + private: + base::FilePath launcher_stamp_; + base::FilePath launcher_script_; +}; + +IN_PROC_BROWSER_TEST_F(HeadlessBrowserRendererCommandPrefixTest, Prefix) { + base::ThreadRestrictions::SetIOAllowed(true); EXPECT_TRUE(embedded_test_server()->Start()); HeadlessBrowserContext* browser_context = @@ -389,11 +410,8 @@ // Make sure the launcher was invoked when starting the renderer. std::string stamp; - EXPECT_TRUE(base::ReadFileToString(launcher_stamp, &stamp)); + EXPECT_TRUE(base::ReadFileToString(launcher_stamp(), &stamp)); EXPECT_GE(stamp.find("--type=renderer"), 0u); - - base::DeleteFile(launcher_script, false); - base::DeleteFile(launcher_stamp, false); } #endif // defined(OS_POSIX) @@ -598,16 +616,21 @@ EvaluateScript(web_contents, "window.print()")->HasExceptionDetails()); } -IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, AllowInsecureLocalhostFlag) { +class HeadlessBrowserAllowInsecureLocalhostTest : public HeadlessBrowserTest { + public: + void SetUpCommandLine(base::CommandLine* command_line) override { + command_line->AppendSwitch(switches::kAllowInsecureLocalhost); + } +}; + +IN_PROC_BROWSER_TEST_F(HeadlessBrowserAllowInsecureLocalhostTest, + AllowInsecureLocalhostFlag) { net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); https_server.ServeFilesFromSourceDirectory("headless/test/data"); ASSERT_TRUE(https_server.Start()); GURL test_url = https_server.GetURL("/hello.html"); - base::CommandLine::ForCurrentProcess()->AppendSwitch( - switches::kAllowInsecureLocalhost); - HeadlessBrowserContext* browser_context = browser()->CreateBrowserContextBuilder().Build();
diff --git a/ios/build/bots/tests/eg_tests.json b/ios/build/bots/tests/eg_tests.json index 4a4afbff..a3ec77b 100644 --- a/ios/build/bots/tests/eg_tests.json +++ b/ios/build/bots/tests/eg_tests.json
@@ -30,7 +30,8 @@ "test args": [ "--enable-features=CompactTranslateInfobarIOS" ], - "xctest": true + "xctest": true, + "xcode parallelization": true }, { "app": "ios_chrome_reading_list_egtests", @@ -38,7 +39,8 @@ }, { "app": "ios_showcase_egtests", - "xctest": true + "xctest": true, + "xcode parallelization": true } ] }
diff --git a/ios/chrome/app/application_delegate/metrics_mediator.mm b/ios/chrome/app/application_delegate/metrics_mediator.mm index 330c046..898d528c 100644 --- a/ios/chrome/app/application_delegate/metrics_mediator.mm +++ b/ios/chrome/app/application_delegate/metrics_mediator.mm
@@ -160,14 +160,17 @@ - (void)updateMetricsStateBasedOnPrefsUserTriggered:(BOOL)isUserTriggered { BOOL optIn = [self areMetricsEnabled]; BOOL allowUploading = [self isUploadingEnabled]; - BOOL wifiOnly = GetApplicationContext()->GetLocalState()->GetBoolean( - prefs::kMetricsReportingWifiOnly); + if (!base::FeatureList::IsEnabled(kUmaCellular)) { + BOOL wifiOnly = GetApplicationContext()->GetLocalState()->GetBoolean( + prefs::kMetricsReportingWifiOnly); + optIn = optIn && wifiOnly; + } if (isUserTriggered) [self updateMetricsPrefsOnPermissionChange:optIn]; [self setMetricsEnabled:optIn withUploading:allowUploading]; [self setBreakpadEnabled:optIn withUploading:allowUploading]; - [self setWatchWWANEnabled:(optIn && wifiOnly)]; + [self setWatchWWANEnabled:optIn]; [self setAppGroupMetricsEnabled:optIn]; } @@ -380,10 +383,13 @@ } - (BOOL)isMetricsReportingEnabledWifiOnly { - return GetApplicationContext()->GetLocalState()->GetBoolean( - metrics::prefs::kMetricsReportingEnabled) && - GetApplicationContext()->GetLocalState()->GetBoolean( - prefs::kMetricsReportingWifiOnly); + BOOL optIn = GetApplicationContext()->GetLocalState()->GetBoolean( + metrics::prefs::kMetricsReportingEnabled); + if (base::FeatureList::IsEnabled(kUmaCellular)) { + return optIn; + } + return optIn && GetApplicationContext()->GetLocalState()->GetBoolean( + prefs::kMetricsReportingWifiOnly); } @end
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS index 56c7157..f834bffb 100644 --- a/ios/chrome/browser/DEPS +++ b/ios/chrome/browser/DEPS
@@ -69,6 +69,7 @@ "+components/security_interstitials", "+components/security_state", "+components/send_tab_to_self", + "+components/services/patch", "+components/services/unzip", "+components/sessions", "+components/signin/core/browser",
diff --git a/ios/chrome/browser/ios_chrome_main_parts.mm b/ios/chrome/browser/ios_chrome_main_parts.mm index f80ecd1..6bf92d2c 100644 --- a/ios/chrome/browser/ios_chrome_main_parts.mm +++ b/ios/chrome/browser/ios_chrome_main_parts.mm
@@ -249,13 +249,13 @@ } void IOSChromeMainParts::StartMetricsRecording() { - bool wifiOnly = local_state_->GetBoolean(prefs::kMetricsReportingWifiOnly); bool isConnectionCellular = net::NetworkChangeNotifier::IsConnectionCellular( net::NetworkChangeNotifier::GetConnectionType()); bool mayUpload = false; if (base::FeatureList::IsEnabled(kUmaCellular)) { mayUpload = !isConnectionCellular; } else { + bool wifiOnly = local_state_->GetBoolean(prefs::kMetricsReportingWifiOnly); mayUpload = !wifiOnly || !isConnectionCellular; }
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn index 1456faa1..47c7bad 100644 --- a/ios/chrome/browser/web/BUILD.gn +++ b/ios/chrome/browser/web/BUILD.gn
@@ -105,6 +105,7 @@ "//base:base", "//base/test:test_support", "//components/search_engines", + "//components/services/patch/public/interfaces", "//components/services/unzip/public/interfaces", "//components/strings:components_strings_grit", "//ios/chrome/browser", @@ -221,6 +222,9 @@ "//components/payments/core", "//components/prefs", "//components/resources", + "//components/services/patch:lib", + "//components/services/patch/public/cpp:manifest", + "//components/services/patch/public/interfaces", "//components/services/unzip:lib", "//components/services/unzip/public/cpp:manifest", "//components/services/unzip/public/interfaces",
diff --git a/ios/chrome/browser/web/chrome_overlay_manifests.cc b/ios/chrome/browser/web/chrome_overlay_manifests.cc index bdffefe..e830750 100644 --- a/ios/chrome/browser/web/chrome_overlay_manifests.cc +++ b/ios/chrome/browser/web/chrome_overlay_manifests.cc
@@ -5,6 +5,8 @@ #include "ios/chrome/browser/web/chrome_overlay_manifests.h" #include "base/no_destructor.h" +#include "components/services/patch/public/cpp/manifest.h" +#include "components/services/patch/public/interfaces/constants.mojom.h" #include "components/services/unzip/public/cpp/manifest.h" #include "components/services/unzip/public/interfaces/constants.mojom.h" #include "services/identity/public/cpp/manifest.h" @@ -15,6 +17,7 @@ static base::NoDestructor<service_manager::Manifest> manifest{ service_manager::ManifestBuilder() .RequireCapability(identity::mojom::kServiceName, "identity_accessor") + .RequireCapability(patch::mojom::kServiceName, "patch_file") .RequireCapability(unzip::mojom::kServiceName, "unzip_file") .PackageService(identity::GetManifest()) .Build()}; @@ -25,6 +28,7 @@ const service_manager::Manifest& GetChromeWebPackagedServicesOverlayManifest() { static base::NoDestructor<service_manager::Manifest> manifest{ service_manager::ManifestBuilder() + .PackageService(patch::GetManifest()) .PackageService(unzip::GetManifest()) .Build()};
diff --git a/ios/chrome/browser/web/chrome_web_client.mm b/ios/chrome/browser/web/chrome_web_client.mm index 760c92d9..c4d9b83 100644 --- a/ios/chrome/browser/web/chrome_web_client.mm +++ b/ios/chrome/browser/web/chrome_web_client.mm
@@ -10,6 +10,8 @@ #include "base/mac/bundle_locations.h" #include "base/strings/sys_string_conversions.h" #include "components/dom_distiller/core/url_constants.h" +#include "components/services/patch/patch_service.h" +#include "components/services/patch/public/interfaces/constants.mojom.h" #include "components/services/unzip/public/interfaces/constants.mojom.h" #include "components/services/unzip/unzip_service.h" #include "components/strings/grit/components_strings.h" @@ -237,6 +239,10 @@ // The Unzip service is used by the component updater. return std::make_unique<unzip::UnzipService>(std::move(request)); } + if (service_name == patch::mojom::kServiceName) { + // The Patch service is used by the component updater. + return std::make_unique<patch::PatchService>(std::move(request)); + } return nullptr; }
diff --git a/ios/chrome/browser/web/services_unittest.mm b/ios/chrome/browser/web/services_unittest.mm index 9215451..702ab07 100644 --- a/ios/chrome/browser/web/services_unittest.mm +++ b/ios/chrome/browser/web/services_unittest.mm
@@ -4,6 +4,8 @@ #include "base/macros.h" #include "base/test/bind_test_util.h" +#include "components/services/patch/public/interfaces/constants.mojom.h" +#include "components/services/patch/public/interfaces/file_patcher.mojom.h" #include "components/services/unzip/public/interfaces/constants.mojom.h" #include "components/services/unzip/public/interfaces/unzipper.mojom.h" #include "ios/chrome/browser/web/chrome_web_client.h" @@ -19,6 +21,9 @@ #error "This file requires ARC support." #endif +namespace { + +template <typename T> class ServicesTest : public PlatformTest { public: ServicesTest() : web_client_(std::make_unique<ChromeWebClient>()) {} @@ -37,19 +42,36 @@ DISALLOW_COPY_AND_ASSIGN(ServicesTest); }; -// Tests that services provided by Chrome reachable from browser code. -TEST_F(ServicesTest, ConnectToUnzip) { - unzip::mojom::UnzipperPtr unzipper; - connector()->BindInterface(unzip::mojom::kServiceName, - mojo::MakeRequest(&unzipper)); +struct UnzipConfig { + static std::string ServiceName() { return unzip::mojom::kServiceName; } - // If the service is present, the unzipper interface will be connected and + using Interface = unzip::mojom::Unzipper; +}; + +struct FilePatchConfig { + static std::string ServiceName() { return patch::mojom::kServiceName; } + + using Interface = patch::mojom::FilePatcher; +}; + +} // namespace + +using ServicesTestConfig = ::testing::Types<UnzipConfig, FilePatchConfig>; +TYPED_TEST_SUITE(ServicesTest, ServicesTestConfig); + +// Tests that services provided by Chrome reachable from browser code. +TYPED_TEST(ServicesTest, CanConnectToService) { + mojo::InterfacePtr<typename TypeParam::Interface> service; + this->connector()->BindInterface(TypeParam::ServiceName(), + mojo::MakeRequest(&service)); + + // If the service is present, the interface will be connected and // FlushForTesting will complete without an error on the interface. Conversely // if there is a problem connecting to the service, we will always hit the // error handler before FlushForTesting returns. bool encountered_error = false; - unzipper.set_connection_error_handler( + service.set_connection_error_handler( base::BindLambdaForTesting([&] { encountered_error = true; })); - unzipper.FlushForTesting(); + service.FlushForTesting(); EXPECT_FALSE(encountered_error); }
diff --git a/media/DEPS b/media/DEPS index 141a01ec..671a0df 100644 --- a/media/DEPS +++ b/media/DEPS
@@ -34,6 +34,12 @@ "audio_manager_unittest.cc": [ "+chromeos/dbus" ], + "cras_input_unittest.cc": [ + "+chromeos/dbus" + ], + "cras_unified_unittest.cc": [ + "+chromeos/dbus" + ], "gpu_memory_buffer_video_frame_pool_unittest.cc": [ "+components/viz/test/test_context_provider.h", ]
diff --git a/media/audio/audio_manager_unittest.cc b/media/audio/audio_manager_unittest.cc index c4940178..aec1d2a 100644 --- a/media/audio/audio_manager_unittest.cc +++ b/media/audio/audio_manager_unittest.cc
@@ -56,8 +56,6 @@ #if defined(USE_CRAS) #include "chromeos/audio/audio_devices_pref_handler_stub.h" #include "chromeos/audio/cras_audio_handler.h" -#include "chromeos/dbus/constants/dbus_switches.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_cras_audio_client.h" #include "media/audio/cras/audio_manager_cras.h" #endif // defined(USE_CRAS) @@ -263,20 +261,12 @@ void TearDown() override { chromeos::CrasAudioHandler::Shutdown(); audio_pref_handler_ = nullptr; - chromeos::DBusThreadManager::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); } void SetUpCrasAudioHandlerWithTestingNodes(const AudioNodeList& audio_nodes) { - if (base::SysInfo::IsRunningOnChromeOS()) { - // Ensure a FakeCrasAudioClient is created, even on a real device or VM. - base::CommandLine::ForCurrentProcess()->AppendSwitch( - chromeos::switches::kDbusStub); - } - - chromeos::DBusThreadManager::Initialize(); - audio_client_ = static_cast<chromeos::FakeCrasAudioClient*>( - chromeos::DBusThreadManager::Get()->GetCrasAudioClient()); - audio_client_->SetAudioNodesForTesting(audio_nodes); + chromeos::CrasAudioClient::InitializeFake(); + chromeos::FakeCrasAudioClient::Get()->SetAudioNodesForTesting(audio_nodes); audio_pref_handler_ = new chromeos::AudioDevicesPrefHandlerStub(); chromeos::CrasAudioHandler::Initialize(audio_pref_handler_); cras_audio_handler_ = chromeos::CrasAudioHandler::Get(); @@ -404,7 +394,6 @@ #if defined(USE_CRAS) chromeos::CrasAudioHandler* cras_audio_handler_ = nullptr; // Not owned. - chromeos::FakeCrasAudioClient* audio_client_ = nullptr; // Not owned. scoped_refptr<chromeos::AudioDevicesPrefHandlerStub> audio_pref_handler_; #endif // defined(USE_CRAS) };
diff --git a/media/audio/cras/audio_manager_cras.cc b/media/audio/cras/audio_manager_cras.cc index 46284efb..58e91b02 100644 --- a/media/audio/cras/audio_manager_cras.cc +++ b/media/audio/cras/audio_manager_cras.cc
@@ -458,9 +458,8 @@ base::WaitableEvent* event) { DCHECK(main_task_runner_->BelongsToCurrentThread()); // CrasAudioHandler is shut down before AudioManagerCras. - if (chromeos::CrasAudioHandler::IsInitialized()) { + if (chromeos::CrasAudioHandler::Get()) chromeos::CrasAudioHandler::Get()->GetAudioDevices(devices); - } event->Signal(); } @@ -505,7 +504,7 @@ uint64_t* active_input_node_id, base::WaitableEvent* event) { DCHECK(main_task_runner_->BelongsToCurrentThread()); - if (chromeos::CrasAudioHandler::IsInitialized()) { + if (chromeos::CrasAudioHandler::Get()) { *active_input_node_id = chromeos::CrasAudioHandler::Get()->GetPrimaryActiveInputNode(); } @@ -516,7 +515,7 @@ uint64_t* active_output_node_id, base::WaitableEvent* event) { DCHECK(main_task_runner_->BelongsToCurrentThread()); - if (chromeos::CrasAudioHandler::IsInitialized()) { + if (chromeos::CrasAudioHandler::Get()) { *active_output_node_id = chromeos::CrasAudioHandler::Get()->GetPrimaryActiveOutputNode(); } @@ -527,9 +526,8 @@ int32_t* buffer_size, base::WaitableEvent* event) { DCHECK(main_task_runner_->BelongsToCurrentThread()); - if (chromeos::CrasAudioHandler::IsInitialized()) { + if (chromeos::CrasAudioHandler::Get()) chromeos::CrasAudioHandler::Get()->GetDefaultOutputBufferSize(buffer_size); - } event->Signal(); } @@ -537,7 +535,7 @@ bool* system_aec_supported, base::WaitableEvent* event) { DCHECK(main_task_runner_->BelongsToCurrentThread()); - if (chromeos::CrasAudioHandler::IsInitialized()) { + if (chromeos::CrasAudioHandler::Get()) { *system_aec_supported = chromeos::CrasAudioHandler::Get()->system_aec_supported(); } @@ -548,9 +546,8 @@ int32_t* group_id, base::WaitableEvent* event) { DCHECK(main_task_runner_->BelongsToCurrentThread()); - if (chromeos::CrasAudioHandler::IsInitialized()) { + if (chromeos::CrasAudioHandler::Get()) *group_id = chromeos::CrasAudioHandler::Get()->system_aec_group_id(); - } event->Signal(); }
diff --git a/media/audio/cras/cras_input_unittest.cc b/media/audio/cras/cras_input_unittest.cc index acaa675..08bd484 100644 --- a/media/audio/cras/cras_input_unittest.cc +++ b/media/audio/cras/cras_input_unittest.cc
@@ -15,6 +15,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "chromeos/audio/cras_audio_handler.h" +#include "chromeos/dbus/fake_cras_audio_client.h" #include "media/audio/audio_device_description.h" #include "media/audio/cras/audio_manager_cras.h" #include "media/audio/fake_audio_log_factory.h" @@ -64,14 +65,16 @@ class CrasInputStreamTest : public testing::Test { protected: CrasInputStreamTest() { + chromeos::CrasAudioClient::InitializeFake(); chromeos::CrasAudioHandler::InitializeForTesting(); mock_manager_.reset(new StrictMock<MockAudioManagerCrasInput>()); base::RunLoop().RunUntilIdle(); } ~CrasInputStreamTest() override { - chromeos::CrasAudioHandler::Shutdown(); mock_manager_->Shutdown(); + chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); } CrasInputStream* CreateStream(ChannelLayout layout) {
diff --git a/media/audio/cras/cras_unified_unittest.cc b/media/audio/cras/cras_unified_unittest.cc index 486550c8..a811cd4 100644 --- a/media/audio/cras/cras_unified_unittest.cc +++ b/media/audio/cras/cras_unified_unittest.cc
@@ -15,6 +15,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "chromeos/audio/cras_audio_handler.h" +#include "chromeos/dbus/cras_audio_client.h" #include "media/audio/audio_device_description.h" #include "media/audio/cras/audio_manager_cras.h" #include "media/audio/fake_audio_log_factory.h" @@ -60,14 +61,16 @@ class CrasUnifiedStreamTest : public testing::Test { protected: CrasUnifiedStreamTest() { + chromeos::CrasAudioClient::InitializeFake(); chromeos::CrasAudioHandler::InitializeForTesting(); mock_manager_.reset(new StrictMock<MockAudioManagerCras>()); base::RunLoop().RunUntilIdle(); } ~CrasUnifiedStreamTest() override { - chromeos::CrasAudioHandler::Shutdown(); mock_manager_->Shutdown(); + chromeos::CrasAudioHandler::Shutdown(); + chromeos::CrasAudioClient::Shutdown(); } CrasUnifiedStream* CreateStream(ChannelLayout layout) {
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn index 0f62a52..b3c18e5 100644 --- a/media/capture/BUILD.gn +++ b/media/capture/BUILD.gn
@@ -283,7 +283,7 @@ public_deps += [ "//media/capture/video/chromeos/public" ] deps += [ "//build/config/linux/libdrm", - "//chromeos/dbus", + "//chromeos/dbus/power", "//media/capture/video/chromeos/mojo:cros_camera", "//third_party/libsync", ] @@ -408,7 +408,7 @@ ] deps += [ "//build/config/linux/libdrm", - "//chromeos/dbus:test_support", + "//chromeos/dbus/power", "//media/capture/video/chromeos/mojo:cros_camera", "//media/capture/video/chromeos/public", "//mojo/core/embedder",
diff --git a/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc b/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc index 7a28990c..5d14a38 100644 --- a/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc +++ b/media/capture/video/chromeos/video_capture_device_chromeos_halv3.cc
@@ -14,7 +14,6 @@ #include "base/synchronization/waitable_event.h" #include "base/threading/platform_thread.h" #include "base/trace_event/trace_event.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "media/base/bind_to_current_loop.h" #include "media/capture/video/chromeos/camera_device_context.h" #include "media/capture/video/chromeos/camera_device_delegate.h"
diff --git a/media/capture/video/video_capture_device_unittest.cc b/media/capture/video/video_capture_device_unittest.cc index 25914f96..e5aceea 100644 --- a/media/capture/video/video_capture_device_unittest.cc +++ b/media/capture/video/video_capture_device_unittest.cc
@@ -47,8 +47,6 @@ #endif #if defined(OS_CHROMEOS) -#include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/power/fake_power_manager_client.h" #include "media/capture/video/chromeos/camera_buffer_factory.h" #include "media/capture/video/chromeos/camera_hal_dispatcher_impl.h" #include "media/capture/video/chromeos/local_gpu_memory_buffer_manager.h" @@ -259,7 +257,6 @@ #if defined(OS_CHROMEOS) local_gpu_memory_buffer_manager_ = std::make_unique<LocalGpuMemoryBufferManager>(); - dbus_setter_ = chromeos::DBusThreadManager::GetSetterForTesting(); VideoCaptureDeviceFactoryChromeOS::SetGpuBufferManager( local_gpu_memory_buffer_manager_.get()); if (!CameraHalDispatcherImpl::GetInstance()->IsStarted()) { @@ -469,7 +466,6 @@ VideoCaptureFormat last_format_; #if defined(OS_CHROMEOS) std::unique_ptr<LocalGpuMemoryBufferManager> local_gpu_memory_buffer_manager_; - std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter_; #endif std::unique_ptr<VideoCaptureDeviceFactory> video_capture_device_factory_; };
diff --git a/mojo/core/BUILD.gn b/mojo/core/BUILD.gn index 515972a..eb7f5d72 100644 --- a/mojo/core/BUILD.gn +++ b/mojo/core/BUILD.gn
@@ -308,6 +308,7 @@ "shared_buffer_dispatcher_unittest.cc", "shared_buffer_unittest.cc", "signals_unittest.cc", + "spliced_message_pipe_unittest.cc", "trap_unittest.cc", ]
diff --git a/mojo/core/core.cc b/mojo/core/core.cc index 32ecea3..b49733f 100644 --- a/mojo/core/core.cc +++ b/mojo/core/core.cc
@@ -417,14 +417,22 @@ uint32_t* buffer_size) { if (!message_handle || (num_handles && !handles)) return MOJO_RESULT_INVALID_ARGUMENT; - if (options && options->struct_size < sizeof(*options)) - return MOJO_RESULT_INVALID_ARGUMENT; + + const MojoAppendMessageDataHandleOptions* handle_options = nullptr; + if (options) { + if (options->struct_size < sizeof(MojoAppendMessageDataOptionsV0)) + return MOJO_RESULT_INVALID_ARGUMENT; + if (options->struct_size >= sizeof(MojoAppendMessageDataOptions)) { + if (options->handle_options) + handle_options = options->handle_options; + } + } RequestContext request_context; auto* message = reinterpret_cast<ports::UserMessageEvent*>(message_handle) ->GetMessage<UserMessageImpl>(); - MojoResult rv = - message->AppendData(additional_payload_size, handles, num_handles); + MojoResult rv = message->AppendData(additional_payload_size, handles, + num_handles, handle_options); if (rv != MOJO_RESULT_OK) return rv; @@ -535,23 +543,30 @@ uint64_t pipe_id = base::RandUint64(); - *message_pipe_handle0 = AddDispatcher( - new MessagePipeDispatcher(GetNodeController(), port0, pipe_id, 0)); - if (*message_pipe_handle0 == MOJO_HANDLE_INVALID) - return MOJO_RESULT_RESOURCE_EXHAUSTED; - - *message_pipe_handle1 = AddDispatcher( - new MessagePipeDispatcher(GetNodeController(), port1, pipe_id, 1)); - if (*message_pipe_handle1 == MOJO_HANDLE_INVALID) { - scoped_refptr<Dispatcher> dispatcher0; - { - base::AutoLock lock(handles_->GetLock()); - handles_->GetAndRemoveDispatcher(*message_pipe_handle0, &dispatcher0); - } + auto dispatcher0 = base::MakeRefCounted<MessagePipeDispatcher>( + GetNodeController(), port0, pipe_id, 0); + *message_pipe_handle0 = AddDispatcher(dispatcher0); + if (*message_pipe_handle0 == MOJO_HANDLE_INVALID) { dispatcher0->Close(); return MOJO_RESULT_RESOURCE_EXHAUSTED; } + auto dispatcher1 = base::MakeRefCounted<MessagePipeDispatcher>( + GetNodeController(), port1, pipe_id, 1); + *message_pipe_handle1 = AddDispatcher(dispatcher1); + if (*message_pipe_handle1 == MOJO_HANDLE_INVALID) { + dispatcher0->Close(); + dispatcher1->Close(); + { + base::AutoLock lock(handles_->GetLock()); + handles_->GetAndRemoveDispatcher(*message_pipe_handle0, nullptr); + } + return MOJO_RESULT_RESOURCE_EXHAUSTED; + } + + dispatcher0->SetLocalPeer(dispatcher1); + dispatcher1->SetLocalPeer(dispatcher0); + return MOJO_RESULT_OK; }
diff --git a/mojo/core/data_pipe_consumer_dispatcher.cc b/mojo/core/data_pipe_consumer_dispatcher.cc index 0b1a015..278ab88 100644 --- a/mojo/core/data_pipe_consumer_dispatcher.cc +++ b/mojo/core/data_pipe_consumer_dispatcher.cc
@@ -49,24 +49,24 @@ } // namespace -// A PortObserver which forwards to a DataPipeConsumerDispatcher. This owns a +// A SlotObserver which forwards to a DataPipeConsumerDispatcher. This owns a // reference to the dispatcher to ensure it lives as long as the observed port. -class DataPipeConsumerDispatcher::PortObserverThunk - : public NodeController::PortObserver { +class DataPipeConsumerDispatcher::SlotObserverThunk + : public NodeController::SlotObserver { public: - explicit PortObserverThunk( + explicit SlotObserverThunk( scoped_refptr<DataPipeConsumerDispatcher> dispatcher) : dispatcher_(dispatcher) {} private: - ~PortObserverThunk() override {} + ~SlotObserverThunk() override {} - // NodeController::PortObserver: - void OnPortStatusChanged() override { dispatcher_->OnPortStatusChanged(); } + // NodeController::SlotObserver: + void OnSlotStatusChanged() override { dispatcher_->OnPortStatusChanged(); } scoped_refptr<DataPipeConsumerDispatcher> dispatcher_; - DISALLOW_COPY_AND_ASSIGN(PortObserverThunk); + DISALLOW_COPY_AND_ASSIGN(SlotObserverThunk); }; // static @@ -319,6 +319,7 @@ state->buffer_guid_low = guid.GetLowForSerialization(); ports[0].name = control_port_.name(); + ports[0].slot_id = ports::kDefaultSlotId; PlatformHandle handle; PlatformHandle ignored_handle; @@ -340,7 +341,8 @@ } void DataPipeConsumerDispatcher::CompleteTransitAndClose() { - node_controller_->SetPortObserver(control_port_, nullptr); + node_controller_->SetSlotObserver( + ports::SlotRef(control_port_, ports::kDefaultSlotId), nullptr); base::AutoLock lock(lock_); DCHECK(in_transit_); @@ -455,8 +457,9 @@ } base::AutoUnlock unlock(lock_); - node_controller_->SetPortObserver( - control_port_, base::MakeRefCounted<PortObserverThunk>(this)); + node_controller_->SetSlotObserver( + ports::SlotRef(control_port_, ports::kDefaultSlotId), + base::MakeRefCounted<SlotObserverThunk>(this)); return true; }
diff --git a/mojo/core/data_pipe_consumer_dispatcher.h b/mojo/core/data_pipe_consumer_dispatcher.h index 005103c7..533a884 100644 --- a/mojo/core/data_pipe_consumer_dispatcher.h +++ b/mojo/core/data_pipe_consumer_dispatcher.h
@@ -71,8 +71,8 @@ size_t num_handles); private: - class PortObserverThunk; - friend class PortObserverThunk; + class SlotObserverThunk; + friend class SlotObserverThunk; DataPipeConsumerDispatcher(NodeController* node_controller, const ports::PortRef& control_port,
diff --git a/mojo/core/data_pipe_control_message.cc b/mojo/core/data_pipe_control_message.cc index cd782e5..d8abb6b 100644 --- a/mojo/core/data_pipe_control_message.cc +++ b/mojo/core/data_pipe_control_message.cc
@@ -26,7 +26,8 @@ data->command = command; data->num_bytes = num_bytes; - int rv = node_controller->SendUserMessage(port, std::move(event)); + int rv = node_controller->SendUserMessage( + ports::SlotRef(port, ports::kDefaultSlotId), std::move(event)); if (rv != ports::OK && rv != ports::ERROR_PORT_PEER_CLOSED) { DLOG(ERROR) << "Unexpected failure sending data pipe control message: " << rv;
diff --git a/mojo/core/data_pipe_producer_dispatcher.cc b/mojo/core/data_pipe_producer_dispatcher.cc index 879b70e..cc3f0c3 100644 --- a/mojo/core/data_pipe_producer_dispatcher.cc +++ b/mojo/core/data_pipe_producer_dispatcher.cc
@@ -48,24 +48,24 @@ } // namespace -// A PortObserver which forwards to a DataPipeProducerDispatcher. This owns a +// A SlotObserver which forwards to a DataPipeProducerDispatcher. This owns a // reference to the dispatcher to ensure it lives as long as the observed port. -class DataPipeProducerDispatcher::PortObserverThunk - : public NodeController::PortObserver { +class DataPipeProducerDispatcher::SlotObserverThunk + : public NodeController::SlotObserver { public: - explicit PortObserverThunk( + explicit SlotObserverThunk( scoped_refptr<DataPipeProducerDispatcher> dispatcher) : dispatcher_(dispatcher) {} private: - ~PortObserverThunk() override {} + ~SlotObserverThunk() override {} - // NodeController::PortObserver: - void OnPortStatusChanged() override { dispatcher_->OnPortStatusChanged(); } + // NodeController::SlotObserver: + void OnSlotStatusChanged() override { dispatcher_->OnPortStatusChanged(); } scoped_refptr<DataPipeProducerDispatcher> dispatcher_; - DISALLOW_COPY_AND_ASSIGN(PortObserverThunk); + DISALLOW_COPY_AND_ASSIGN(SlotObserverThunk); }; // static @@ -278,6 +278,7 @@ state->buffer_guid_low = guid.GetLowForSerialization(); ports[0].name = control_port_.name(); + ports[0].slot_id = ports::kDefaultSlotId; PlatformHandle handle; PlatformHandle ignored_handle; @@ -299,7 +300,8 @@ } void DataPipeProducerDispatcher::CompleteTransitAndClose() { - node_controller_->SetPortObserver(control_port_, nullptr); + node_controller_->SetSlotObserver( + ports::SlotRef(control_port_, ports::kDefaultSlotId), nullptr); base::AutoLock lock(lock_); DCHECK(in_transit_); @@ -416,8 +418,9 @@ } base::AutoUnlock unlock(lock_); - node_controller_->SetPortObserver( - control_port_, base::MakeRefCounted<PortObserverThunk>(this)); + node_controller_->SetSlotObserver( + ports::SlotRef(control_port_, ports::kDefaultSlotId), + base::MakeRefCounted<SlotObserverThunk>(this)); return true; }
diff --git a/mojo/core/data_pipe_producer_dispatcher.h b/mojo/core/data_pipe_producer_dispatcher.h index 8fceba1..34c01d3 100644 --- a/mojo/core/data_pipe_producer_dispatcher.h +++ b/mojo/core/data_pipe_producer_dispatcher.h
@@ -70,8 +70,8 @@ size_t num_handles); private: - class PortObserverThunk; - friend class PortObserverThunk; + class SlotObserverThunk; + friend class SlotObserverThunk; DataPipeProducerDispatcher(NodeController* node_controller, const ports::PortRef& port,
diff --git a/mojo/core/dispatcher.h b/mojo/core/dispatcher.h index 7f02aa8..c6b88a03 100644 --- a/mojo/core/dispatcher.h +++ b/mojo/core/dispatcher.h
@@ -59,6 +59,7 @@ scoped_refptr<Dispatcher> dispatcher; MojoHandle local_handle; + bool spliced = false; }; enum class Type {
diff --git a/mojo/core/handle_table.cc b/mojo/core/handle_table.cc index 62419a923..e285e8a 100644 --- a/mojo/core/handle_table.cc +++ b/mojo/core/handle_table.cc
@@ -103,7 +103,8 @@ if (it->second.busy) return MOJO_RESULT_BUSY; - *dispatcher = std::move(it->second.dispatcher); + if (dispatcher) + *dispatcher = std::move(it->second.dispatcher); handles_.erase(it); return MOJO_RESULT_OK; }
diff --git a/mojo/core/message_pipe_dispatcher.cc b/mojo/core/message_pipe_dispatcher.cc index 393b54de..9083c24b 100644 --- a/mojo/core/message_pipe_dispatcher.cc +++ b/mojo/core/message_pipe_dispatcher.cc
@@ -37,23 +37,23 @@ } // namespace -// A PortObserver which forwards to a MessagePipeDispatcher. This owns a +// A SlotObserver which forwards to a MessagePipeDispatcher. This owns a // reference to the MPD to ensure it lives as long as the observed port. -class MessagePipeDispatcher::PortObserverThunk - : public NodeController::PortObserver { +class MessagePipeDispatcher::SlotObserverThunk + : public NodeController::SlotObserver { public: - explicit PortObserverThunk(scoped_refptr<MessagePipeDispatcher> dispatcher) + explicit SlotObserverThunk(scoped_refptr<MessagePipeDispatcher> dispatcher) : dispatcher_(dispatcher) {} private: - ~PortObserverThunk() override {} + ~SlotObserverThunk() override {} - // NodeController::PortObserver: - void OnPortStatusChanged() override { dispatcher_->OnPortStatusChanged(); } + // NodeController::SlotObserver: + void OnSlotStatusChanged() override { dispatcher_->OnSlotStatusChanged(); } scoped_refptr<MessagePipeDispatcher> dispatcher_; - DISALLOW_COPY_AND_ASSIGN(PortObserverThunk); + DISALLOW_COPY_AND_ASSIGN(SlotObserverThunk); }; #if DCHECK_IS_ON() @@ -87,40 +87,54 @@ const ports::PortRef& port, uint64_t pipe_id, int endpoint) + : MessagePipeDispatcher(node_controller, + ports::SlotRef(port, ports::kDefaultSlotId), + pipe_id, + endpoint) {} + +MessagePipeDispatcher::MessagePipeDispatcher(NodeController* node_controller, + const ports::SlotRef& slot, + uint64_t pipe_id, + int endpoint) : node_controller_(node_controller), - port_(port), pipe_id_(pipe_id), endpoint_(endpoint), + slot_(slot), watchers_(this) { - DVLOG(2) << "Creating new MessagePipeDispatcher for port " << port.name() + DVLOG(2) << "Creating new MessagePipeDispatcher for slot " + << slot.port().name() << "/" << slot.slot_id() << " [pipe_id=" << pipe_id << "; endpoint=" << endpoint << "]"; - node_controller_->SetPortObserver( - port_, base::MakeRefCounted<PortObserverThunk>(this)); + node_controller_->SetSlotObserver( + slot_, base::MakeRefCounted<SlotObserverThunk>(this)); } bool MessagePipeDispatcher::Fuse(MessagePipeDispatcher* other) { - node_controller_->SetPortObserver(port_, nullptr); - node_controller_->SetPortObserver(other->port_, nullptr); - - ports::PortRef port0; + ports::SlotRef slot0; { base::AutoLock lock(signal_lock_); - port0 = port_; + node_controller_->SetSlotObserver(slot_, nullptr); + slot0 = slot_; port_closed_.Set(true); watchers_.NotifyClosed(); } - ports::PortRef port1; + ports::SlotRef slot1; { base::AutoLock lock(other->signal_lock_); - port1 = other->port_; + node_controller_->SetSlotObserver(other->slot_, nullptr); + slot1 = other->slot_; other->port_closed_.Set(true); other->watchers_.NotifyClosed(); } + if (slot0.slot_id() != ports::kDefaultSlotId || + slot1.slot_id() != ports::kDefaultSlotId) { + return false; + } + // Both ports are always closed by this call. - int rv = node_controller_->MergeLocalPorts(port0, port1); + int rv = node_controller_->MergeLocalPorts(slot0.port(), slot1.port()); return rv == ports::OK; } @@ -131,7 +145,7 @@ MojoResult MessagePipeDispatcher::Close() { base::AutoLock lock(signal_lock_); DVLOG(2) << "Closing message pipe " << pipe_id_ << " endpoint " << endpoint_ - << " [port=" << port_.name() << "]"; + << " [port=" << slot_.port().name() << "]"; return CloseNoLock(); } @@ -140,10 +154,18 @@ if (port_closed_ || in_transit_) return MOJO_RESULT_INVALID_ARGUMENT; - int rv = node_controller_->SendUserMessage(port_, std::move(message)); + ports::SlotRef slot; + { + base::AutoLock lock(signal_lock_); + slot = slot_; + } + auto* user_message_impl = message->GetMessage<UserMessageImpl>(); + user_message_impl->PrepareSplicedHandles(slot.port()); + int rv = node_controller_->SendUserMessage(slot, std::move(message)); DVLOG(4) << "Sent message on pipe " << pipe_id_ << " endpoint " << endpoint_ - << " [port=" << port_.name() << "; rv=" << rv << "]"; + << " [port=" << slot.port().name() << "/" << slot.slot_id() + << "; rv=" << rv << "]"; if (rv != ports::OK) { if (rv == ports::ERROR_PORT_UNKNOWN || @@ -167,7 +189,13 @@ if (port_closed_ || in_transit_) return MOJO_RESULT_INVALID_ARGUMENT; - int rv = node_controller_->node()->GetMessage(port_, message, nullptr); + ports::SlotRef slot; + { + base::AutoLock lock(signal_lock_); + slot = slot_; + } + + int rv = node_controller_->node()->GetMessage(slot, message, nullptr); if (rv != ports::OK && rv != ports::ERROR_PORT_PEER_CLOSED) { if (rv == ports::ERROR_PORT_UNKNOWN || rv == ports::ERROR_PORT_STATE_UNEXPECTED) @@ -219,8 +247,9 @@ MojoResult MessagePipeDispatcher::QueryQuota(MojoQuotaType type, uint64_t* limit, uint64_t* usage) { + base::AutoLock lock(signal_lock_); ports::PortStatus port_status; - if (node_controller_->node()->GetStatus(port_, &port_status) != ports::OK) { + if (node_controller_->node()->GetStatus(slot_, &port_status) != ports::OK) { CHECK(in_transit_ || port_transferred_ || port_closed_); return MOJO_RESULT_INVALID_ARGUMENT; } @@ -277,11 +306,16 @@ void* destination, ports::UserMessageEvent::PortAttachment* ports, PlatformHandle* handles) { + base::AutoLock lock(signal_lock_); + if (slot_.slot_id() != ports::kDefaultSlotId) + return false; + SerializedState* state = static_cast<SerializedState*>(destination); state->pipe_id = pipe_id_; state->endpoint = static_cast<int8_t>(endpoint_); memset(state->padding, 0, sizeof(state->padding)); - ports[0].name = port_.name(); + ports[0].name = slot_.port().name(); + ports[0].slot_id = ports::kDefaultSlotId; return true; } @@ -294,9 +328,8 @@ } void MessagePipeDispatcher::CompleteTransitAndClose() { - node_controller_->SetPortObserver(port_, nullptr); - base::AutoLock lock(signal_lock_); + node_controller_->SetSlotObserver(slot_, nullptr); port_transferred_ = true; in_transit_.Set(false); CloseNoLock(); @@ -325,19 +358,38 @@ ports::Node* node = Core::Get()->GetNodeController()->node(); ports::PortRef port; - if (node->GetPort(ports[0].name, &port) != ports::OK || - ports[0].slot_id != ports::kDefaultSlotId) { - return nullptr; - } - - ports::PortStatus status; - if (node->GetStatus(port, &status) != ports::OK) + if (node->GetPort(ports[0].name, &port)) return nullptr; - return new MessagePipeDispatcher(Core::Get()->GetNodeController(), port, + ports::SlotRef slot(port, ports[0].slot_id.value_or(ports::kDefaultSlotId)); + ports::SlotStatus status; + if (node->GetStatus(slot, &status) != ports::OK) + return nullptr; + + return new MessagePipeDispatcher(Core::Get()->GetNodeController(), slot, state->pipe_id, state->endpoint); } +scoped_refptr<MessagePipeDispatcher> MessagePipeDispatcher::GetLocalPeer() { + base::AutoLock lock(signal_lock_); + return local_peer_; +} + +void MessagePipeDispatcher::SetLocalPeer( + scoped_refptr<MessagePipeDispatcher> peer) { + base::AutoLock lock(signal_lock_); + local_peer_ = std::move(peer); +} + +void MessagePipeDispatcher::BindToSlot(const ports::SlotRef& slot_ref) { + base::AutoLock lock(signal_lock_); + node_controller_->SetSlotObserver(slot_, nullptr); + slot_ = slot_ref; + watchers_.NotifyState(GetHandleSignalsStateNoLock()); + node_controller_->SetSlotObserver( + slot_, base::MakeRefCounted<SlotObserverThunk>(this)); +} + MessagePipeDispatcher::~MessagePipeDispatcher() = default; MojoResult MessagePipeDispatcher::CloseNoLock() { @@ -349,8 +401,9 @@ watchers_.NotifyClosed(); if (!port_transferred_) { + ports::SlotRef slot = slot_; base::AutoUnlock unlock(signal_lock_); - node_controller_->ClosePort(port_); + node_controller_->ClosePortSlot(slot); } return MOJO_RESULT_OK; @@ -360,7 +413,7 @@ HandleSignalsState rv; ports::PortStatus port_status; - if (node_controller_->node()->GetStatus(port_, &port_status) != ports::OK) { + if (node_controller_->node()->GetStatus(slot_, &port_status) != ports::OK) { CHECK(in_transit_ || port_transferred_ || port_closed_); return HandleSignalsState(); } @@ -393,7 +446,7 @@ return rv; } -void MessagePipeDispatcher::OnPortStatusChanged() { +void MessagePipeDispatcher::OnSlotStatusChanged() { DCHECK(RequestContext::current()); base::AutoLock lock(signal_lock_); @@ -406,18 +459,20 @@ #if DCHECK_IS_ON() ports::PortStatus port_status; - if (node_controller_->node()->GetStatus(port_, &port_status) == ports::OK) { + if (node_controller_->node()->GetStatus(slot_, &port_status) == ports::OK) { if (port_status.has_messages) { std::unique_ptr<ports::UserMessageEvent> unused; PeekSizeMessageFilter filter; - node_controller_->node()->GetMessage(port_, &unused, &filter); + node_controller_->node()->GetMessage(slot_, &unused, &filter); DVLOG(4) << "New message detected on message pipe " << pipe_id_ - << " endpoint " << endpoint_ << " [port=" << port_.name() - << "; size=" << filter.message_size() << "]"; + << " endpoint " << endpoint_ << " [slot=" << slot_.port().name() + << "/" << slot_.slot_id() << "; size=" << filter.message_size() + << "]"; } if (port_status.peer_closed) { DVLOG(2) << "Peer closure detected on message pipe " << pipe_id_ - << " endpoint " << endpoint_ << " [port=" << port_.name() << "]"; + << " endpoint " << endpoint_ << " [slot=" << slot_.port().name() + << "/" << slot_.slot_id() << "]"; } } #endif
diff --git a/mojo/core/message_pipe_dispatcher.h b/mojo/core/message_pipe_dispatcher.h index 40f9522a..dd1fd50 100644 --- a/mojo/core/message_pipe_dispatcher.h +++ b/mojo/core/message_pipe_dispatcher.h
@@ -15,6 +15,7 @@ #include "mojo/core/atomic_flag.h" #include "mojo/core/dispatcher.h" #include "mojo/core/ports/port_ref.h" +#include "mojo/core/ports/slot_ref.h" #include "mojo/core/watcher_set.h" namespace mojo { @@ -40,6 +41,12 @@ uint64_t pipe_id, int endpoint); + // Same as above but binds the dispatcher to a non-default port slot. + MessagePipeDispatcher(NodeController* node_controller, + const ports::SlotRef& slot, + uint64_t pipe_id, + int endpoint); + // Fuses this pipe with |other|. Returns |true| on success or |false| on // failure. Regardless of the return value, both dispatchers are closed by // this call. @@ -79,29 +86,45 @@ PlatformHandle* handles, size_t num_handles); + // Acquires the local MessagePipeDispatcher for this object's peer endpoint, + // iff both endpoints have always lived in the same process. Returns null + // otherwise. + scoped_refptr<MessagePipeDispatcher> GetLocalPeer(); + + // Sets the local peer dispatcher. Only set upon message pipe creation, and + // only remains set until either of the endpoints is transferred to another + // process. + void SetLocalPeer(scoped_refptr<MessagePipeDispatcher> peer); + + // Re-binds this MessagePipeDispatcher to a different SlotRef from the one + // over which it was constructed. + void BindToSlot(const ports::SlotRef& slot_ref); + private: - class PortObserverThunk; - friend class PortObserverThunk; + class SlotObserverThunk; + friend class SlotObserverThunk; ~MessagePipeDispatcher() override; MojoResult CloseNoLock(); HandleSignalsState GetHandleSignalsStateNoLock() const; - void OnPortStatusChanged(); + void OnSlotStatusChanged(); // These are safe to access from any thread without locking. NodeController* const node_controller_; - const ports::PortRef port_; const uint64_t pipe_id_; const int endpoint_; // Guards access to all the fields below. mutable base::Lock signal_lock_; + ports::SlotRef slot_; + // This is not the same is |port_transferred_|. It's only held true between // BeginTransit() and Complete/CancelTransit(). AtomicFlag in_transit_; + scoped_refptr<MessagePipeDispatcher> local_peer_; bool port_transferred_ = false; AtomicFlag port_closed_; WatcherSet watchers_;
diff --git a/mojo/core/message_unittest.cc b/mojo/core/message_unittest.cc index 48cf664..2891470 100644 --- a/mojo/core/message_unittest.cc +++ b/mojo/core/message_unittest.cc
@@ -77,7 +77,7 @@ if (num_handles) message->SerializeHandles(handles.data()); - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; void* buffer; @@ -255,7 +255,7 @@ MojoAppendMessageData(message, 0, nullptr, 0, nullptr, &buffer, &buffer_size)); - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; EXPECT_EQ(MOJO_RESULT_OK, MojoAppendMessageData( @@ -397,7 +397,7 @@ MojoMessageHandle message_handle; EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessage(nullptr, &message_handle)); - MojoAppendMessageDataOptions append_data_options; + MojoAppendMessageDataOptions append_data_options = {0}; append_data_options.struct_size = sizeof(append_data_options); append_data_options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; const std::string kTestMessage = "hello"; @@ -623,7 +623,7 @@ MojoGetMessageData(message, nullptr, &payload, &payload_size, nullptr, nullptr)); - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; EXPECT_EQ(MOJO_RESULT_OK, MojoAppendMessageData(message, 0, nullptr, 0, @@ -659,7 +659,7 @@ const std::string kTestMessagePart2 = " in ur computer."; const std::string kTestMessageCombined1 = kTestMessagePart1 + kTestMessagePart2; - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; EXPECT_EQ(MOJO_RESULT_OK, @@ -734,7 +734,7 @@ &test_payload[previous_payload_size], current_chunk_size); } - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; EXPECT_EQ(MOJO_RESULT_OK, @@ -804,7 +804,7 @@ nullptr, nullptr)); UserMessageImpl::FailHandleSerializationForTesting(true); - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; EXPECT_EQ(MOJO_RESULT_OK, MojoAppendMessageData(message, 0, nullptr, 0, @@ -845,7 +845,7 @@ // buffer size. This should typically result in a relocation of the buffer as // well -- at least often enough that breakage will be caught by automated // tests. - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; uint32_t payload_size = buffer_size * 64; @@ -901,7 +901,7 @@ // Add more handles. EXPECT_EQ(MOJO_RESULT_OK, MojoAppendMessageData(message, 0, handles + 1, 1, nullptr, &buffer, nullptr)); - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; EXPECT_EQ(MOJO_RESULT_OK, MojoAppendMessageData(message, 0, handles + 2, 3,
diff --git a/mojo/core/node_controller.cc b/mojo/core/node_controller.cc index c0d2346..885de38 100644 --- a/mojo/core/node_controller.cc +++ b/mojo/core/node_controller.cc
@@ -242,21 +242,28 @@ port, connection_name.as_string())); } -void NodeController::SetPortObserver(const ports::PortRef& port, - scoped_refptr<PortObserver> observer) { - node_->SetUserData(port, std::move(observer)); +void NodeController::SetSlotObserver(const ports::SlotRef& slot, + scoped_refptr<SlotObserver> observer) { + node_->SetUserData(slot, std::move(observer)); } void NodeController::ClosePort(const ports::PortRef& port) { - SetPortObserver(port, nullptr); + SetSlotObserver(ports::SlotRef(port, ports::kDefaultSlotId), nullptr); int rv = node_->ClosePort(port); DCHECK_EQ(rv, ports::OK) << " Failed to close port: " << port.name(); } +void NodeController::ClosePortSlot(const ports::SlotRef& slot) { + SetSlotObserver(slot, nullptr); + int rv = node_->ClosePortSlot(slot); + DCHECK_EQ(rv, ports::OK) << " Failed to close slot: " << slot.port().name() + << "/" << slot.slot_id(); +} + int NodeController::SendUserMessage( - const ports::PortRef& port, + const ports::SlotRef& slot, std::unique_ptr<ports::UserMessageEvent> message) { - return node_->SendUserMessage(port, std::move(message)); + return node_->SendUserMessage(slot, std::move(message)); } void NodeController::MergePortIntoInviter(const std::string& name, @@ -733,14 +740,14 @@ void NodeController::SlotStatusChanged(const ports::SlotRef& slot_ref) { scoped_refptr<ports::UserData> user_data; - node_->GetUserData(slot_ref.port(), &user_data); + node_->GetUserData(slot_ref, &user_data); - PortObserver* observer = static_cast<PortObserver*>(user_data.get()); + auto* observer = static_cast<SlotObserver*>(user_data.get()); if (observer) { - observer->OnPortStatusChanged(); + observer->OnSlotStatusChanged(); } else { - DVLOG(2) << "Ignoring status change for " << slot_ref.port().name() - << " because it doesn't have an observer."; + DVLOG(2) << "Ignoring status change for " << slot_ref.port().name() << "/" + << slot_ref.slot_id() << " because it doesn't have an observer."; } }
diff --git a/mojo/core/node_controller.h b/mojo/core/node_controller.h index fcf66b9..97b38cd0 100644 --- a/mojo/core/node_controller.h +++ b/mojo/core/node_controller.h
@@ -47,12 +47,12 @@ class MOJO_SYSTEM_IMPL_EXPORT NodeController : public ports::NodeDelegate, public NodeChannel::Delegate { public: - class PortObserver : public ports::UserData { + class SlotObserver : public ports::UserData { public: - virtual void OnPortStatusChanged() = 0; + virtual void OnSlotStatusChanged() = 0; protected: - ~PortObserver() override {} + ~SlotObserver() override {} }; // |core| owns and out-lives us. @@ -92,17 +92,21 @@ const ports::PortRef& port, base::StringPiece connection_name); - // Sets a port's observer. If |observer| is null the port's current observer + // Sets a slot's observer. If |observer| is null the slot's current observer // is removed. - void SetPortObserver(const ports::PortRef& port, - scoped_refptr<PortObserver> observer); + void SetSlotObserver(const ports::SlotRef& slot, + scoped_refptr<SlotObserver> observer); // Closes a port. Use this in lieu of calling Node::ClosePort() directly, as // it ensures the port's observer has also been removed. void ClosePort(const ports::PortRef& port); - // Sends a message on a port to its peer. - int SendUserMessage(const ports::PortRef& port_ref, + // Closes a single slot on a port, removing its observer at the same time. If + // this is the last slot on the port, the port is also closed. + void ClosePortSlot(const ports::SlotRef& slot); + + // Sends a message on a slot to its peer. + int SendUserMessage(const ports::SlotRef& slot, std::unique_ptr<ports::UserMessageEvent> message); // Merges a local port |port| into a port reserved by |name| in the node which
diff --git a/mojo/core/ports/event.cc b/mojo/core/ports/event.cc index 85c1b0f..436d94cc 100644 --- a/mojo/core/ports/event.cc +++ b/mojo/core/ports/event.cc
@@ -96,6 +96,8 @@ memset(padding, 0, sizeof(padding)); } +Event::PortDescriptor::PortDescriptor(const PortDescriptor&) = default; + Event::~Event() = default; // static @@ -206,8 +208,10 @@ const auto* in_names = reinterpret_cast<const PortName*>(in_descriptors + data->num_ports); - for (size_t i = 0; i < data->num_ports; ++i) + for (size_t i = 0; i < data->num_ports; ++i) { event->ports()[i].name = in_names[i]; + event->ports()[i].slot_id = event->port_descriptors()[i].new_slot_id; + } return std::move(event); } @@ -243,8 +247,10 @@ auto* port_names_data = reinterpret_cast<PortName*>(ports_data + ports_.size()); - for (size_t i = 0; i < ports_.size(); ++i) + for (size_t i = 0; i < ports_.size(); ++i) { port_names_data[i] = ports_[i].name; + ports_data[i].new_slot_id = ports_[i].slot_id.value_or(kDefaultSlotId); + } } PortAcceptedEvent::PortAcceptedEvent(const PortName& port_name)
diff --git a/mojo/core/ports/event.h b/mojo/core/ports/event.h index 69453e0..8db07d6 100644 --- a/mojo/core/ports/event.h +++ b/mojo/core/ports/event.h
@@ -12,6 +12,7 @@ #include "base/component_export.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/optional.h" #include "mojo/core/ports/name.h" #include "mojo/core/ports/user_message.h" @@ -89,6 +90,7 @@ #pragma pack(push, 1) struct PortDescriptor { PortDescriptor(); + PortDescriptor(const PortDescriptor&); NodeName peer_node_name; PortName peer_port_name; @@ -98,7 +100,8 @@ uint64_t next_sequence_num_to_receive; uint64_t last_sequence_num_to_receive; bool peer_closed; - char padding[7]; + char padding[3]; + uint32_t new_slot_id; }; #pragma pack(pop) virtual ~Event(); @@ -139,7 +142,7 @@ ~PortAttachment(); PortName name; - SlotId slot_id = kDefaultSlotId; + base::Optional<SlotId> slot_id; }; explicit UserMessageEvent(size_t num_ports);
diff --git a/mojo/core/ports/node.cc b/mojo/core/ports/node.cc index 351992b..a9a941f 100644 --- a/mojo/core/ports/node.cc +++ b/mojo/core/ports/node.cc
@@ -92,8 +92,11 @@ } Port::Slot* slot = port->GetSlot(slot_id); - if (!slot) - return false; + if (!slot) { + // Because messages can arrive out of order, we must tentatively accept + // messages targeting slots which haven't been added yet. + return true; + } return !slot->peer_closed || slot->last_sequence_num_to_receive >= next_sequence_num; @@ -234,27 +237,33 @@ return OK; } -int Node::SetUserData(const PortRef& port_ref, +int Node::SetUserData(const SlotRef& slot_ref, scoped_refptr<UserData> user_data) { - SinglePortLocker locker(&port_ref); + SinglePortLocker locker(&slot_ref.port()); auto* port = locker.port(); if (port->state == Port::kClosed) return ERROR_PORT_STATE_UNEXPECTED; - port->user_data = std::move(user_data); + Port::Slot* slot = port->GetSlot(slot_ref.slot_id()); + if (!slot) + return ERROR_PORT_STATE_UNEXPECTED; + slot->user_data = std::move(user_data); return OK; } -int Node::GetUserData(const PortRef& port_ref, +int Node::GetUserData(const SlotRef& slot_ref, scoped_refptr<UserData>* user_data) { - SinglePortLocker locker(&port_ref); + SinglePortLocker locker(&slot_ref.port()); auto* port = locker.port(); if (port->state == Port::kClosed) return ERROR_PORT_STATE_UNEXPECTED; - *user_data = port->user_data; + Port::Slot* slot = port->GetSlot(slot_ref.slot_id()); + if (!slot) + return ERROR_PORT_STATE_UNEXPECTED; + *user_data = slot->user_data; return OK; } @@ -301,7 +310,8 @@ MessageFilter* filter) { *message = nullptr; - DVLOG(4) << "GetMessage for " << slot_ref.port().name() << "@" << name_; + DVLOG(4) << "GetMessage for " << slot_ref.port().name() << "/" + << slot_ref.slot_id() << "@" << name_; bool peer_closed = false; @@ -325,21 +335,36 @@ // Allow referenced ports to trigger SlotStatusChanged calls now that the // message which contains them is actually being read. A consumer who cares // about the status updates can ensure that they are properly watching for - // these events before making any calls to |GetMessage()|. + // these events before making any calls to |GetMessage()|. Additionally, any + // port slots referenced in this message can now be initialized on the + // receiving port. if (*message) { for (size_t i = 0; i < (*message)->num_ports(); ++i) { - PortRef new_port_ref; - int rv = GetPort((*message)->ports()[i].name, &new_port_ref); + UserMessageEvent::PortAttachment& port = (*message)->ports()[i]; + if (port.name == kInvalidPortName) { + // This port entry just references a new slot on the receiving port. We + // fix up the message entry so the user gets pointed to the right slot. + if (!port.slot_id) + return ERROR_PORT_STATE_UNEXPECTED; - DCHECK_EQ(OK, rv) << "Port " << new_port_ref.name() << "@" << name_ - << " does not exist!"; + SinglePortLocker locker(&slot_ref.port()); + locker.port()->AddSlotFromPeer(*port.slot_id); + port.name = slot_ref.port().name(); + port.slot_id = *port.slot_id | kPeerAllocatedSlotIdBit; + } else { + PortRef new_port_ref; + int rv = GetPort(port.name, &new_port_ref); - SinglePortLocker locker(&new_port_ref); - DCHECK(locker.port()->state == Port::kReceiving); + DCHECK_EQ(OK, rv) << "Port " << new_port_ref.name() << "@" << name_ + << " does not exist!"; - Port::Slot* slot = locker.port()->GetSlot(kDefaultSlotId); - DCHECK(slot); - slot->can_signal = true; + SinglePortLocker locker(&new_port_ref); + DCHECK(locker.port()->state == Port::kReceiving); + + Port::Slot* slot = locker.port()->GetSlot(kDefaultSlotId); + DCHECK(slot); + slot->can_signal = true; + } } // The user may retransmit this message from another port. We reset the @@ -352,8 +377,9 @@ // from the slot we just read. base::Optional<SlotId> slot_to_notify = FlushUnreadableMessages(slot_ref.port()); - if (slot_to_notify && slot_to_notify != slot_ref.slot_id()) + if (slot_to_notify && slot_to_notify != slot_ref.slot_id()) { delegate_->SlotStatusChanged(SlotRef(slot_ref.port(), *slot_to_notify)); + } } if (peer_closed) @@ -572,8 +598,8 @@ } DVLOG(4) << "OnUserMessage " << message->sequence_num() - << " [ports=" << ports_buf.str() << "] at " << port_name << "@" - << name_; + << " [ports=" << ports_buf.str() << "] at " << port_name << "/" + << message->slot_id() << "@" << name_; #endif // Even if this port does not exist, cannot receive anymore messages or is @@ -583,7 +609,12 @@ // newly bound ports will simply be closed. for (size_t i = 0; i < message->num_ports(); ++i) { Event::PortDescriptor& descriptor = message->port_descriptors()[i]; - if (descriptor.referring_node_name == kInvalidNodeName) { + if (message->ports()[i].name == kInvalidPortName) { + // An unnamed port means the descriptor references a slot on the sending + // port rather than an actual new port. Nothing to do, just sanity check. + if (descriptor.new_slot_id == kDefaultSlotId) + return ERROR_PORT_UNKNOWN; + } else if (descriptor.referring_node_name == kInvalidNodeName) { // If the referring node name is invalid, this descriptor can be ignored // and the port should already exist locally. PortRef port_ref; @@ -999,9 +1030,8 @@ m->set_slot_id(slot_ref.slot_id() ^ kPeerAllocatedSlotIdBit); NodeName target_node; - int rv = PrepareToForwardUserMessage(slot_ref, Port::kReceiving, - false /* ignore_closed_peer */, m.get(), - &target_node); + int rv = PrepareToForwardUserMessage( + slot_ref, Port::kReceiving, false /* for_proxy */, m.get(), &target_node); if (rv != OK) return rv; @@ -1171,6 +1201,7 @@ port->last_sequence_num_to_receive; port_descriptor->peer_closed = port->peer_closed; memset(port_descriptor->padding, 0, sizeof(port_descriptor->padding)); + port_descriptor->new_slot_id = kDefaultSlotId; // Configure the local port to point to the new port. UpdatePortPeerAddress(local_port_name, port, to_node_name, new_port_name); @@ -1216,9 +1247,10 @@ int Node::PrepareToForwardUserMessage(const SlotRef& forwarding_slot_ref, Port::State expected_port_state, - bool ignore_closed_peer, + bool for_proxy, UserMessageEvent* message, NodeName* forward_to_node) { + base::StackVector<PortRef, 4> ports_to_close; bool target_is_remote = false; for (;;) { NodeName target_node_name; @@ -1244,14 +1276,16 @@ base::StackVector<PortRef, 4> attached_port_refs; base::StackVector<const PortRef*, 5> ports_to_lock; attached_port_refs.container().resize(message->num_ports()); - ports_to_lock.container().resize(message->num_ports() + 1); - ports_to_lock[0] = &forwarding_slot_ref.port(); + ports_to_lock.container().reserve(message->num_ports() + 1); + ports_to_lock.container().push_back(&forwarding_slot_ref.port()); for (size_t i = 0; i < message->num_ports(); ++i) { const PortName& attached_port_name = message->ports()[i].name; + if (attached_port_name == kInvalidPortName) + continue; auto iter = ports_.find(attached_port_name); DCHECK(iter != ports_.end()); attached_port_refs[i] = PortRef(attached_port_name, iter->second); - ports_to_lock[i + 1] = &attached_port_refs[i]; + ports_to_lock.container().push_back(&attached_port_refs[i]); } PortLocker locker(ports_to_lock.container().data(), ports_to_lock.container().size()); @@ -1271,7 +1305,7 @@ if (forwarding_port->state != expected_port_state) return ERROR_PORT_STATE_UNEXPECTED; - if (forwarding_port->peer_closed && !ignore_closed_peer) + if (forwarding_port->peer_closed && !for_proxy) return ERROR_PORT_PEER_CLOSED; // Messages may already have a sequence number if they're being forwarded by @@ -1293,6 +1327,8 @@ // own peer, and must have no slots aside from the default slot. DCHECK_EQ(message->num_ports(), attached_port_refs.container().size()); for (size_t i = 0; i < message->num_ports(); ++i) { + if (message->ports()[i].name == kInvalidPortName) + continue; auto* attached_port = locker.GetPort(attached_port_refs[i]); if (attached_port->state != Port::kReceiving || attached_port->slots.size() != 1 || @@ -1304,17 +1340,30 @@ } } - if (target_is_remote) { - // We only bother to proxy and rewrite ports in the event if it's - // going to be routed to an external node. This substantially reduces - // the amount of port churn in the system, as many port-carrying - // events are routed at least 1 or 2 intra-node hops before (if ever) - // being routed externally. - Event::PortDescriptor* port_descriptors = message->port_descriptors(); - for (size_t i = 0; i < message->num_ports(); ++i) { - ConvertToProxy(locker.GetPort(attached_port_refs[i]), - target_node_name, &message->ports()[i].name, - port_descriptors + i); + Event::PortDescriptor* port_descriptors = message->port_descriptors(); + for (size_t i = 0; i < message->num_ports(); ++i) { + if (message->ports()[i].name == kInvalidPortName) + continue; + Port* attached_port = locker.GetPort(attached_port_refs[i]); + if (message->ports()[i].slot_id.value_or(kDefaultSlotId) == + kDefaultSlotId) { + // Normal port transfer. Configure the port as a proxy that will + // forward to some new location in the destination node. + // + // Note that we only bother to proxy and rewrite ports in the event if + // it's going to be routed to an external node. This substantially + // reduces the amount of port churn in the system, as many + // port-carrying events are routed at least 1 or 2 intra-node hops + // before (if ever) being routed externally. + if (target_is_remote) { + ConvertToProxy(attached_port, target_node_name, + &message->ports()[i].name, port_descriptors + i); + } + } else if (!for_proxy) { + ports_to_close.container().push_back(attached_port_refs[i]); + message->ports()[i].name = kInvalidPortName; + memset(&port_descriptors[i], 0, sizeof(port_descriptors[i])); + port_descriptors[i].new_slot_id = *message->ports()[i].slot_id; } } } @@ -1322,9 +1371,9 @@ #if DCHECK_IS_ON() DVLOG(4) << "Sending message " << message->sequence_num() << " [ports=" << ports_buf.str() << "]" - << " from " << forwarding_slot_ref.port().name() << "@" << name_ - << " to " << forwarding_port->peer_port_name << "@" - << target_node_name; + << " from " << forwarding_slot_ref.port().name() << "/" + << forwarding_slot_ref.slot_id() << "@" << name_ << " to " + << forwarding_port->peer_port_name << "@" << target_node_name; #endif // We're definitely going to send this message, so we can bump the port's @@ -1356,6 +1405,9 @@ } } + for (const auto& port : ports_to_close.container()) + ClosePort(port); + return OK; } @@ -1416,9 +1468,9 @@ } NodeName target_node; - int rv = PrepareToForwardUserMessage( - SlotRef(port_ref, kDefaultSlotId), Port::kProxying, - true /* ignore_closed_peer */, message.get(), &target_node); + int rv = PrepareToForwardUserMessage(SlotRef(port_ref, kDefaultSlotId), + Port::kProxying, true /* for_proxy */, + message.get(), &target_node); if (rv != OK) return rv; @@ -1698,11 +1750,6 @@ } } - // If we discarded some messages and a new message is now available, notify - // its slot that this is the case. - if (unread_messages.empty()) - return base::nullopt; - return slot_to_notify; }
diff --git a/mojo/core/ports/node.h b/mojo/core/ports/node.h index 2e0c24ee..61845fb 100644 --- a/mojo/core/ports/node.h +++ b/mojo/core/ports/node.h
@@ -113,9 +113,9 @@ // are initialized and ready to go. int CreatePortPair(PortRef* port0_ref, PortRef* port1_ref); - // User data associated with the port. - int SetUserData(const PortRef& port_ref, scoped_refptr<UserData> user_data); - int GetUserData(const PortRef& port_ref, scoped_refptr<UserData>* user_data); + // User data associated with the slot. + int SetUserData(const SlotRef& slot_ref, scoped_refptr<UserData> user_data); + int GetUserData(const SlotRef& slot_ref, scoped_refptr<UserData>* user_data); // Closes a single slot on port. No more messages can be sent from or // delivered to the slot. If it's the last slot on its port, the port is also @@ -266,7 +266,7 @@ int PrepareToForwardUserMessage(const SlotRef& forwarding_slot_ref, Port::State expected_port_state, - bool ignore_closed_peer, + bool for_proxy, UserMessageEvent* message, NodeName* forward_to_node); int BeginProxying(const PortRef& port_ref);
diff --git a/mojo/core/ports/port.cc b/mojo/core/ports/port.cc index c6e136d..e0261e6 100644 --- a/mojo/core/ports/port.cc +++ b/mojo/core/ports/port.cc
@@ -37,9 +37,17 @@ bool Port::AddSlotFromPeer(SlotId peer_slot_id) { if (state != kReceiving || (peer_slot_id & kPeerAllocatedSlotIdBit) != 0) return false; - return slots.emplace(peer_slot_id | kPeerAllocatedSlotIdBit, Slot{}).second; + auto result = slots.emplace(peer_slot_id | kPeerAllocatedSlotIdBit, Slot{}); + result.first->second.can_signal = true; + return result.second; } +Port::Slot::Slot() = default; + +Port::Slot::Slot(const Slot&) = default; + +Port::Slot::~Slot() = default; + } // namespace ports } // namespace core } // namespace mojo
diff --git a/mojo/core/ports/port.h b/mojo/core/ports/port.h index cba3382..bfd60dc1 100644 --- a/mojo/core/ports/port.h +++ b/mojo/core/ports/port.h
@@ -135,11 +135,6 @@ // in the interim. std::unique_ptr<std::pair<NodeName, ScopedEvent>> send_on_proxy_removal; - // Arbitrary user data attached to the Port. In practice, Mojo uses this to - // stash an observer interface which can be notified about various Port state - // changes. - scoped_refptr<UserData> user_data; - // Indicates that this (proxying) Port has received acknowledgement that no // new user messages will be routed to it. If |true|, the proxy will be // removed once it has received and forwarded all sequenced messages up to and @@ -155,6 +150,10 @@ // Structure for status related to a single slot of this port. struct Slot { + Slot(); + Slot(const Slot&); + ~Slot(); + // Indicates that the slot can signal the embedder about available messages. bool can_signal = true; @@ -163,11 +162,16 @@ // The last sequence number expected for this slot to receive if the peer is // closed. - uint64_t last_sequence_num_to_receive; + uint64_t last_sequence_num_to_receive = 0; // The last sequence number sent on this slot. Will always be less than // the Port's own |next_sequence_num_to_send|. - uint64_t last_sequence_num_sent; + uint64_t last_sequence_num_sent = 0; + + // Arbitrary user data attached to the Slot. In practice, Mojo uses this to + // stash an observer interface which can be notified about various Slot + // state changes. + scoped_refptr<UserData> user_data; }; // Status information for each slot on this port.
diff --git a/mojo/core/spliced_message_pipe_unittest.cc b/mojo/core/spliced_message_pipe_unittest.cc new file mode 100644 index 0000000..3185d5e0 --- /dev/null +++ b/mojo/core/spliced_message_pipe_unittest.cc
@@ -0,0 +1,343 @@ +// Copyright 2019 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 "base/test/bind_test_util.h" +#include "build/build_config.h" +#include "mojo/core/test/mojo_test_base.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace mojo { +namespace core { +namespace { + +// Helper for tests to write a single |spliced_handle| to be spliced via a +// message sent over |sender|. +void WriteSplicedHandle(MojoHandle sender, MojoHandle spliced_handle) { + MojoMessageHandle m; + CHECK_EQ(MOJO_RESULT_OK, MojoCreateMessage(nullptr, &m)); + + MojoAppendMessageDataHandleOptions handle_options = {0}; + handle_options.struct_size = sizeof(handle_options); + handle_options.flags = MOJO_APPEND_MESSAGE_DATA_HANDLE_FLAG_SPLICE; + + MojoAppendMessageDataOptions append_options = {0}; + append_options.struct_size = sizeof(append_options); + append_options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; + append_options.handle_options = &handle_options; + CHECK_EQ(MOJO_RESULT_OK, + MojoAppendMessageData(m, 0, &spliced_handle, 1, &append_options, + nullptr, nullptr)); + + CHECK_EQ(MOJO_RESULT_OK, MojoWriteMessage(sender, m, nullptr)); +} + +MojoHandle ReadSplicedHandle(MojoHandle receiver) { + test::MojoTestBase::WaitForSignals(receiver, MOJO_HANDLE_SIGNAL_READABLE); + + MojoMessageHandle m; + CHECK_EQ(MOJO_RESULT_OK, MojoReadMessage(receiver, nullptr, &m)); + + uint32_t num_handles = 1; + MojoHandle spliced_handle; + CHECK_EQ(MOJO_RESULT_OK, MojoGetMessageData(m, nullptr, nullptr, nullptr, + &spliced_handle, &num_handles)); + CHECK_EQ(1u, num_handles); + CHECK_EQ(MOJO_RESULT_OK, MojoDestroyMessage(m)); + + return spliced_handle; +} + +using SplicedMessagePipeTest = test::MojoTestBase; + +TEST_F(SplicedMessagePipeTest, Basic) { + MojoHandle a, b; + CreateMessagePipe(&a, &b); + + MojoHandle c, d; + CreateMessagePipe(&c, &d); + + // Splice |c <=> d| with |a <=> b|. + WriteSplicedHandle(a, d); + d = ReadSplicedHandle(b); + + // Write a message to |a| and then to |c|. + const std::string kTestMessage1 = "1"; + const std::string kTestMessage2 = "2"; + WriteMessage(a, kTestMessage1); + WriteMessage(c, kTestMessage2); + + // |d| must not be readable until the first message is read from |b|. + EXPECT_TRUE(GetSignalsState(b).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_FALSE(GetSignalsState(d).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ(kTestMessage1, ReadMessage(b)); + + EXPECT_FALSE(GetSignalsState(b).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_TRUE(GetSignalsState(d).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ(kTestMessage2, ReadMessage(d)); + + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(a)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(c)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(d)); +} + +TEST_F(SplicedMessagePipeTest, DropUndeliverableMessages) { + MojoHandle a, b; + CreateMessagePipe(&a, &b); + + MojoHandle c, d; + CreateMessagePipe(&c, &d); + + MojoHandle e, f; + CreateMessagePipe(&e, &f); + + // Splice |c <=> d| with |a <=> b|. + WriteSplicedHandle(a, d); + d = ReadSplicedHandle(b); + + // Also splice |e <=> f| with the above. + WriteSplicedHandle(a, f); + f = ReadSplicedHandle(b); + + // Write a series of messages to each of the above pipes. + WriteMessage(a, "msg1"); + WriteMessage(c, "msg2"); + WriteMessage(e, "msg3"); + WriteMessage(c, "msg4"); + + // |d| and |f| should not be readable yet, but |b| should be. + EXPECT_TRUE(GetSignalsState(b).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_FALSE(GetSignalsState(d).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_FALSE(GetSignalsState(f).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + + // Close |b| and |f| without reading their messages. This should allow both + // messages on |d| to be read. + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(f)); + + EXPECT_TRUE(GetSignalsState(d).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ("msg2", ReadMessage(d)); + EXPECT_EQ("msg4", ReadMessage(d)); + + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(a)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(c)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(d)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(e)); +} + +TEST_F(SplicedMessagePipeTest, CloseOriginalPipe) { + MojoHandle a, b; + CreateMessagePipe(&a, &b); + + MojoHandle c, d; + CreateMessagePipe(&c, &d); + + // Splice |c <=> d| with |a <=> b|. + WriteSplicedHandle(a, d); + d = ReadSplicedHandle(b); + + // Close |a| and |b| immediately. |c <=> d| should still be operational. + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(a)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); + + WriteMessage(c, "x"); + EXPECT_EQ("x", ReadMessage(d)); + + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(c)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(d)); +} + +TEST_F(SplicedMessagePipeTest, PeerClosure) { + MojoHandle a, b; + CreateMessagePipe(&a, &b); + + MojoHandle c, d; + CreateMessagePipe(&c, &d); + + WriteSplicedHandle(a, d); + d = ReadSplicedHandle(b); + + WriteMessage(c, "x"); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(c)); + + WaitForSignals(d, MOJO_HANDLE_SIGNAL_PEER_CLOSED); + EXPECT_TRUE(GetSignalsState(d).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ("x", ReadMessage(d)); + EXPECT_FALSE(GetSignalsState(d).satisfiable_signals & + MOJO_HANDLE_SIGNAL_READABLE); + + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(a)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(d)); +} + +void EventHandler(const MojoTrapEvent* event) { + auto* callback = + reinterpret_cast<base::RepeatingClosure*>(event->trigger_context); + if (event->result == MOJO_RESULT_OK) + callback->Run(); +} + +uintptr_t MakeContext(base::RepeatingClosure* callback) { + return reinterpret_cast<uintptr_t>(callback); +} + +TEST_F(SplicedMessagePipeTest, SignalHandlerOrdering) { + MojoHandle a, b; + CreateMessagePipe(&a, &b); + + MojoHandle c, d; + CreateMessagePipe(&c, &d); + + MojoHandle e, f; + CreateMessagePipe(&e, &f); + + WriteSplicedHandle(a, d); + d = ReadSplicedHandle(b); + + WriteSplicedHandle(a, f); + f = ReadSplicedHandle(b); + + MojoHandle b_trap; + EXPECT_EQ(MOJO_RESULT_OK, MojoCreateTrap(&EventHandler, nullptr, &b_trap)); + MojoHandle d_trap; + EXPECT_EQ(MOJO_RESULT_OK, MojoCreateTrap(&EventHandler, nullptr, &d_trap)); + MojoHandle f_trap; + EXPECT_EQ(MOJO_RESULT_OK, MojoCreateTrap(&EventHandler, nullptr, &f_trap)); + + int messages_read = 0; + + auto on_b_readable = base::BindLambdaForTesting([&]() { + EXPECT_EQ(0, messages_read); + EXPECT_EQ("x", ReadMessage(b)); + ++messages_read; + }); + + auto on_d_readable = base::BindLambdaForTesting([&]() { + EXPECT_EQ(1, messages_read); + EXPECT_EQ("y", ReadMessage(d)); + ++messages_read; + }); + + auto on_f_readable = base::BindLambdaForTesting([&]() { + EXPECT_EQ(2, messages_read); + EXPECT_EQ("z", ReadMessage(f)); + ++messages_read; + }); + + EXPECT_EQ(MOJO_RESULT_OK, + MojoAddTrigger(b_trap, b, MOJO_HANDLE_SIGNAL_READABLE, + MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED, + MakeContext(&on_b_readable), nullptr)); + EXPECT_EQ(MOJO_RESULT_OK, + MojoAddTrigger(d_trap, d, MOJO_HANDLE_SIGNAL_READABLE, + MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED, + MakeContext(&on_d_readable), nullptr)); + EXPECT_EQ(MOJO_RESULT_OK, + MojoAddTrigger(f_trap, f, MOJO_HANDLE_SIGNAL_READABLE, + MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED, + MakeContext(&on_f_readable), nullptr)); + EXPECT_EQ(MOJO_RESULT_OK, MojoArmTrap(b_trap, nullptr, nullptr, nullptr)); + EXPECT_EQ(MOJO_RESULT_OK, MojoArmTrap(d_trap, nullptr, nullptr, nullptr)); + EXPECT_EQ(MOJO_RESULT_OK, MojoArmTrap(f_trap, nullptr, nullptr, nullptr)); + + WriteMessage(a, "x"); + WriteMessage(c, "y"); + WriteMessage(e, "z"); + EXPECT_EQ(3, messages_read); + + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(a)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(c)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(d)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(e)); + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(f)); +} + +// No multi-process support for iOS. +#if !defined(OS_IOS) + +TEST_F(SplicedMessagePipeTest, Multiprocess) { + MojoHandle a, b; + CreateMessagePipe(&a, &b); + RunTestClient("Client1", [&](MojoHandle h) { + WriteMessageWithHandles(h, "hi", &a, 1); + RunTestClient("Client2", [&](MojoHandle h) { + WriteMessageWithHandles(h, "hi", &b, 1); + + EXPECT_EQ("ok", ReadMessage(h)); + WriteMessage(h, "bye"); + }); + + EXPECT_EQ("ok", ReadMessage(h)); + WriteMessage(h, "bye"); + }); +} + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(Client1, SplicedMessagePipeTest, h) { + MojoHandle a; + EXPECT_EQ("hi", ReadMessageWithHandles(h, &a, 1)); + + MojoHandle c, d; + CreateMessagePipe(&c, &d); + WriteSplicedHandle(a, d); + + WriteMessage(a, "1"); + WriteMessage(c, "2"); + WriteMessage(a, "3"); + WriteMessage(c, "4"); + + // Test the other direction for good measure. + EXPECT_EQ("5", ReadMessage(c)); + + WriteMessage(h, "ok"); + EXPECT_EQ("bye", ReadMessage(h)); +} + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(Client2, SplicedMessagePipeTest, h) { + MojoHandle b; + EXPECT_EQ("hi", ReadMessageWithHandles(h, &b, 1)); + + MojoHandle d = ReadSplicedHandle(b); + + WaitForSignals(b, MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_FALSE(GetSignalsState(d).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ("1", ReadMessage(b)); + + WaitForSignals(d, MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_FALSE(GetSignalsState(b).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ("2", ReadMessage(d)); + + WaitForSignals(b, MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_FALSE(GetSignalsState(d).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ("3", ReadMessage(b)); + + WaitForSignals(d, MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_FALSE(GetSignalsState(b).satisfied_signals & + MOJO_HANDLE_SIGNAL_READABLE); + EXPECT_EQ("4", ReadMessage(d)); + + WriteMessage(d, "5"); + + WriteMessage(h, "ok"); + EXPECT_EQ("bye", ReadMessage(h)); +} + +#endif // !defined(OS_IOS) + +} // namespace +} // namespace core +} // namespace mojo
diff --git a/mojo/core/user_message_impl.cc b/mojo/core/user_message_impl.cc index fb59eba76..3590597 100644 --- a/mojo/core/user_message_impl.cc +++ b/mojo/core/user_message_impl.cc
@@ -87,7 +87,9 @@ Channel::MessagePtr* out_message, void** out_header, size_t* out_header_size, - void** out_user_payload) { + void** out_user_payload, + std::vector<scoped_refptr<MessagePipeDispatcher>>* + pipes_to_splice_with_sender) { // A structure for tracking information about every Dispatcher that will be // serialized into the message. This is NOT part of the message itself. struct DispatcherInfo { @@ -237,6 +239,29 @@ break; } + if (new_dispatchers[i].spliced) { + DCHECK(pipes_to_splice_with_sender); + + scoped_refptr<MessagePipeDispatcher> peer; + if (info.num_ports == 1 && + d->GetType() == Dispatcher::Type::MESSAGE_PIPE) { + peer = static_cast<MessagePipeDispatcher*>(d)->GetLocalPeer(); + } + + if (!peer) { + fail = true; + break; + } + + // Temporarily we store the slot ID as the index into our vector of + // local peers. We cannot actually allocate a real slot ID until we know + // the sending port, and that isn't known until the message is written + // to some pipe. + event->ports()[port_index].slot_id = base::checked_cast<ports::SlotId>( + pipes_to_splice_with_sender->size()); + pipes_to_splice_with_sender->emplace_back(std::move(peer)); + } + new_dispatcher_data += info.num_bytes; port_index += info.num_ports; handle_index += info.num_handles; @@ -363,7 +388,7 @@ size_t header_size = 0; MojoResult rv = CreateOrExtendSerializedEventMessage( event.get(), num_bytes, num_bytes, dispatchers, num_dispatchers, - &channel_message, &header, &header_size, &user_payload); + &channel_message, &header, &header_size, &user_payload, nullptr); if (rv != MOJO_RESULT_OK) return rv; event->AttachMessage(base::WrapUnique( @@ -455,9 +480,11 @@ return MOJO_RESULT_OK; } -MojoResult UserMessageImpl::AppendData(uint32_t additional_payload_size, - const MojoHandle* handles, - uint32_t num_handles) { +MojoResult UserMessageImpl::AppendData( + uint32_t additional_payload_size, + const MojoHandle* handles, + uint32_t num_handles, + const MojoAppendMessageDataHandleOptions* handle_options) { if (HasContext()) return MOJO_RESULT_FAILED_PRECONDITION; @@ -469,14 +496,30 @@ return acquire_result; } + if (handle_options) { + for (size_t i = 0; i < num_handles; ++i) { + if (handle_options[i].flags & + MOJO_APPEND_MESSAGE_DATA_HANDLE_FLAG_SPLICE) { + if (dispatchers[i].dispatcher->GetType() != + Dispatcher::Type::MESSAGE_PIPE) { + Core::Get()->ReleaseDispatchersForTransit(dispatchers, + false /* in_transit */); + return MOJO_RESULT_INVALID_ARGUMENT; + } + + dispatchers[i].spliced = true; + } + } + } + if (!IsSerialized()) { // First data for this message. Channel::MessagePtr channel_message; MojoResult rv = CreateOrExtendSerializedEventMessage( message_event_, additional_payload_size, std::max(additional_payload_size, kMinimumPayloadBufferSize), - dispatchers.data(), num_handles, &channel_message, &header_, - &header_size_, &user_payload_); + dispatchers.data(), dispatchers.size(), &channel_message, &header_, + &header_size_, &user_payload_, &pipes_to_splice_with_sender_); if (num_handles > 0) { Core::Get()->ReleaseDispatchersForTransit(dispatchers, rv == MOJO_RESULT_OK); @@ -528,7 +571,7 @@ CreateOrExtendSerializedEventMessage( message_event_, user_payload_size_, user_payload_size_, pending_handle_attachments_.data(), pending_handle_attachments_.size(), - &channel_message_, &header_, &header_size_, &user_payload_); + &channel_message_, &header_, &header_size_, &user_payload_, nullptr); Core::Get()->ReleaseDispatchersForTransit(pending_handle_attachments_, true); pending_handle_attachments_.clear(); @@ -559,6 +602,28 @@ return MOJO_RESULT_OK; } +void UserMessageImpl::PrepareSplicedHandles( + const ports::PortRef& sending_port) { + if (!IsSerialized() || pipes_to_splice_with_sender_.empty()) + return; + + DCHECK(message_event_); + for (size_t i = 0; i < message_event_->num_ports(); ++i) { + base::Optional<ports::SlotId> spliced_pipe_index = + message_event_->ports()[i].slot_id; + if (!spliced_pipe_index) + continue; + + DCHECK_LT(*spliced_pipe_index, pipes_to_splice_with_sender_.size()); + + ports::SlotId new_slot_id = + Core::Get()->GetNodeController()->node()->AllocateSlot(sending_port); + message_event_->ports()[i].slot_id = new_slot_id; + pipes_to_splice_with_sender_[*spliced_pipe_index]->BindToSlot( + ports::SlotRef(sending_port, new_slot_id)); + } +} + MojoResult UserMessageImpl::ExtractSerializedHandles( ExtractBadHandlePolicy bad_handle_policy, MojoHandle* handles) {
diff --git a/mojo/core/user_message_impl.h b/mojo/core/user_message_impl.h index c6a15f98..3f7e234 100644 --- a/mojo/core/user_message_impl.h +++ b/mojo/core/user_message_impl.h
@@ -13,6 +13,7 @@ #include "base/optional.h" #include "mojo/core/channel.h" #include "mojo/core/dispatcher.h" +#include "mojo/core/message_pipe_dispatcher.h" #include "mojo/core/ports/event.h" #include "mojo/core/ports/name.h" #include "mojo/core/ports/port_ref.h" @@ -120,14 +121,21 @@ MojoResult SetContext(uintptr_t context, MojoMessageContextSerializer serializer, MojoMessageContextDestructor destructor); - MojoResult AppendData(uint32_t additional_payload_size, - const MojoHandle* handles, - uint32_t num_handles); + MojoResult AppendData( + uint32_t additional_payload_size, + const MojoHandle* handles, + uint32_t num_handles, + const MojoAppendMessageDataHandleOptions* handle_options); MojoResult CommitSize(); // If this message is not already serialized, this serializes it. MojoResult SerializeIfNecessary(); + // If this message has any spliced handles serialized into it, this allocates + // respective slots on |sending_port| and fixes up both the serialized port + // descriptors as well as the spliced handle's local peers. + void PrepareSplicedHandles(const ports::PortRef& sending_port); + // Extracts handles from this (serialized) message. // // Returns |MOJO_RESULT_OK| @@ -205,6 +213,12 @@ // not yet been serialized. std::vector<Dispatcher::DispatcherInTransit> pending_handle_attachments_; + // Message pipe dispatchers to splice into the dispatcher which eventually + // sends this message. These are the peers of any spliced handles attached to + // this message. + std::vector<scoped_refptr<MessagePipeDispatcher>> + pipes_to_splice_with_sender_; + // The node name from which this message was received, iff it came from // out-of-process and the source is known. ports::NodeName source_node_ = ports::kInvalidNodeName;
diff --git a/mojo/public/c/system/message_pipe.h b/mojo/public/c/system/message_pipe.h index 4dcee5f..f1e4133 100644 --- a/mojo/public/c/system/message_pipe.h +++ b/mojo/public/c/system/message_pipe.h
@@ -138,15 +138,60 @@ #define MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE \ ((MojoAppendMessageDataFlags)1) -// Options passed to |MojoAppendMessageData()|. -struct MOJO_ALIGNAS(8) MojoAppendMessageDataOptions { +// Options passed to |MojoAppendMessageData()|. Version 0. +struct MOJO_ALIGNAS(8) MojoAppendMessageDataOptionsV0 { // The size of this structure, used for versioning. uint32_t struct_size; // See |MojoAppendMessageDataFlags|. MojoAppendMessageDataFlags flags; }; -MOJO_STATIC_ASSERT(sizeof(struct MojoAppendMessageDataOptions) == 8, +MOJO_STATIC_ASSERT(sizeof(struct MojoAppendMessageDataOptionsV0) == 8, + "MojoAppendMessageDataOptionsV0 has wrong size"); + +// Per-handle flags passed to |MojoAppendMessageData()| via +// |MojoAppendMessageDataHandleOptions|. +typedef uint32_t MojoAppendMessageDataHandleFlags; + +// No flags. Default behavior. +#define MOJO_APPEND_MESSAGE_DATA_HANDLE_FLAG_NONE ((uint32_t)0) + +// If set, this causes the handle and its peer to be spliced into the sending +// pipe upon transmission of the this message. The attached handle must be a +// message pipe handle and its peer must remain local to the message sender. +#define MOJO_APPEND_MESSAGE_DATA_HANDLE_FLAG_SPLICE \ + ((MojoAppendMessageDataHandleFlags)1) + +// Per-handle options optionally passed to |MojoAppendMessageData()| via +// MojoAppendMessageDataOptions. +struct MOJO_ALIGNAS(8) MojoAppendMessageDataHandleOptions { + // The size of this structure, used for versioning. + uint32_t struct_size; + + // Flags indicating how the handle should be attached. + MojoAppendMessageDataHandleFlags flags; +}; +MOJO_STATIC_ASSERT(sizeof(struct MojoAppendMessageDataHandleOptions) == 8, + "MojoAppendMessageDataHandleOptions has wrong size"); + +// Options passed to |MojoAppendMessageData()|. Version 1 (current). The first +// |sizeof(MojoAppendMessageDataOptionsV0)| bytes must have identical memory +// layout to MojoAppendMessageDataOptionsV0. +struct MOJO_ALIGNAS(8) MojoAppendMessageDataOptions { + // The size of this structure, used for versioning. + uint32_t struct_size; + + // See |MojoAppendMessageDataFlags|. + MojoAppendMessageDataFlags flags; + + // An array of per-handle options to specify individual handle attachment + // behavior. If non-null, must point to the same number of elements as the + // array of handles passed to |MojoAppendMessageData()|. May be null, implying + // default behavior for all appended handles. + MOJO_POINTER_FIELD(const struct MojoAppendMessageDataHandleOptions*, + handle_options); +}; +MOJO_STATIC_ASSERT(sizeof(struct MojoAppendMessageDataOptions) == 16, "MojoAppendMessageDataOptions has wrong size"); // Flags passed to |MojoGetMessageData()| via |MojoGetMessageDataOptions|.
diff --git a/mojo/public/cpp/bindings/lib/buffer.cc b/mojo/public/cpp/bindings/lib/buffer.cc index 2444cf4..e8df4f3 100644 --- a/mojo/public/cpp/bindings/lib/buffer.cc +++ b/mojo/public/cpp/bindings/lib/buffer.cc
@@ -110,7 +110,7 @@ size_t additional_bytes = cursor_ - message_payload_size_; DCHECK(base::IsValueInRangeForNumericType<uint32_t>(additional_bytes)); - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; void* data;
diff --git a/mojo/public/cpp/bindings/lib/message.cc b/mojo/public/cpp/bindings/lib/message.cc index fa28aa4..da2238e0 100644 --- a/mojo/public/cpp/bindings/lib/message.cc +++ b/mojo/public/cpp/bindings/lib/message.cc
@@ -93,14 +93,16 @@ } } -void CreateSerializedMessageObject(uint32_t name, - uint32_t flags, - uint32_t trace_id, - size_t payload_size, - size_t payload_interface_id_count, - std::vector<ScopedHandle>* handles, - ScopedMessageHandle* out_handle, - internal::Buffer* out_buffer) { +void CreateSerializedMessageObject( + uint32_t name, + uint32_t flags, + uint32_t trace_id, + size_t payload_size, + size_t payload_interface_id_count, + std::vector<ScopedHandle>* handles, + const std::vector<MojoAppendMessageDataHandleOptions>* handle_options, + ScopedMessageHandle* out_handle, + internal::Buffer* out_buffer) { TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), "mojo::Message Send", MANGLE_MESSAGE_ID(trace_id), TRACE_EVENT_FLAG_FLOW_OUT); @@ -110,6 +112,12 @@ DCHECK_EQ(MOJO_RESULT_OK, rv); DCHECK(handle.is_valid()); + MojoAppendMessageDataOptions append_options = {0}; + append_options.struct_size = sizeof(append_options); + append_options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_NONE; + if (handle_options) + append_options.handle_options = handle_options->data(); + void* buffer; uint32_t buffer_size; size_t total_size = internal::ComputeSerializedMessageSize( @@ -120,8 +128,8 @@ rv = MojoAppendMessageData( handle->value(), static_cast<uint32_t>(total_size), handles ? reinterpret_cast<MojoHandle*>(handles->data()) : nullptr, - handles ? static_cast<uint32_t>(handles->size()) : 0, nullptr, &buffer, - &buffer_size); + handles ? static_cast<uint32_t>(handles->size()) : 0, &append_options, + &buffer, &buffer_size); DCHECK_EQ(MOJO_RESULT_OK, rv); if (handles) { // Handle ownership has been taken by MojoAppendMessageData. @@ -234,10 +242,24 @@ uint32_t flags, size_t payload_size, size_t payload_interface_id_count, - std::vector<ScopedHandle>* handles) { + std::vector<ScopedHandle>* handles) + : Message(name, + flags, + payload_size, + payload_interface_id_count, + handles, + nullptr) {} + +Message::Message( + uint32_t name, + uint32_t flags, + size_t payload_size, + size_t payload_interface_id_count, + std::vector<ScopedHandle>* handles, + const std::vector<MojoAppendMessageDataHandleOptions>* handle_options) { CreateSerializedMessageObject(name, flags, GetTraceId(this), payload_size, - payload_interface_id_count, handles, &handle_, - &payload_buffer_); + payload_interface_id_count, handles, + handle_options, &handle_, &payload_buffer_); transferable_ = true; serialized_ = true; } @@ -365,7 +387,8 @@ return; } - if (context->associated_endpoint_handles()->empty()) { + if (context->associated_endpoint_handles()->empty() && + !context->has_handles_with_shared_message_order()) { // Attaching only non-associated handles is easier since we don't have to // modify the message header. Faster path for that. payload_buffer_.AttachHandles(context->mutable_handles()); @@ -381,7 +404,8 @@ uint32_t payload_size = payload_num_bytes(); mojo::Message new_message(name(), header()->flags, payload_size, context->associated_endpoint_handles()->size(), - context->mutable_handles()); + context->mutable_handles(), + context->handle_options()); std::swap(*context->mutable_associated_endpoint_handles(), new_message.associated_endpoint_handles_); memcpy(new_message.payload_buffer()->AllocateAndGet(payload_size), payload(),
diff --git a/mojo/public/cpp/bindings/lib/serialization_context.cc b/mojo/public/cpp/bindings/lib/serialization_context.cc index 267b541..5085327 100644 --- a/mojo/public/cpp/bindings/lib/serialization_context.cc +++ b/mojo/public/cpp/bindings/lib/serialization_context.cc
@@ -25,6 +25,16 @@ DCHECK_LT(handles_.size(), std::numeric_limits<uint32_t>::max()); out_data->value = static_cast<uint32_t>(handles_.size()); handles_.emplace_back(std::move(handle)); + + MojoAppendMessageDataHandleOptions options = {0}; + options.struct_size = sizeof(options); + options.flags = share_message_order_for_new_handles_ + ? MOJO_APPEND_MESSAGE_DATA_HANDLE_FLAG_SPLICE + : MOJO_APPEND_MESSAGE_DATA_HANDLE_FLAG_NONE; + handle_options_.push_back(options); + + if (share_message_order_for_new_handles_) + has_handles_with_shared_message_order_ = true; } }
diff --git a/mojo/public/cpp/bindings/lib/serialization_context.h b/mojo/public/cpp/bindings/lib/serialization_context.h index 0e3c0788..7491190a 100644 --- a/mojo/public/cpp/bindings/lib/serialization_context.h +++ b/mojo/public/cpp/bindings/lib/serialization_context.h
@@ -29,6 +29,14 @@ SerializationContext(); ~SerializationContext(); + void set_share_message_order_for_new_handles(bool share) { + share_message_order_for_new_handles_ = share; + } + + bool has_handles_with_shared_message_order() const { + return has_handles_with_shared_message_order_; + } + // Adds a handle to the handle list and outputs its serialized form in // |*out_data|. void AddHandle(mojo::ScopedHandle handle, Handle_Data* out_data); @@ -54,6 +62,11 @@ const std::vector<mojo::ScopedHandle>* handles() { return &handles_; } std::vector<mojo::ScopedHandle>* mutable_handles() { return &handles_; } + const std::vector<MojoAppendMessageDataHandleOptions>* handle_options() + const { + return &handle_options_; + } + const std::vector<ScopedInterfaceEndpointHandle>* associated_endpoint_handles() const { return &associated_endpoint_handles_; @@ -81,11 +94,22 @@ const AssociatedEndpointHandle_Data& encoded_handle); private: + // Whenever this is |true|, newly added interface handles are marked for + // splicing into the sendng interface pipe upon message transmission. + bool share_message_order_for_new_handles_ = false; + + // Indicates whether any handles were added to this context while + // |share_message_order_for_new_handles_| was |true|. + bool has_handles_with_shared_message_order_ = false; + // Handles owned by this object. Used during serialization to hold onto // handles accumulated during pre-serialization, and used during // deserialization to hold onto handles extracted from a message. std::vector<mojo::ScopedHandle> handles_; + // Options for each of the attached handles. + std::vector<MojoAppendMessageDataHandleOptions> handle_options_; + // Stashes ScopedInterfaceEndpointHandles encoded in a message by index. std::vector<ScopedInterfaceEndpointHandle> associated_endpoint_handles_;
diff --git a/mojo/public/cpp/bindings/message.h b/mojo/public/cpp/bindings/message.h index 791cb53b..7117e70b 100644 --- a/mojo/public/cpp/bindings/message.h +++ b/mojo/public/cpp/bindings/message.h
@@ -68,6 +68,16 @@ size_t payload_interface_id_count, std::vector<ScopedHandle>* handles); + // Same as above, but with additional per-handle options to control how + // each handle in |handles| is attached. + Message( + uint32_t name, + uint32_t flags, + size_t payload_size, + size_t payload_interface_id_count, + std::vector<ScopedHandle>* handles, + const std::vector<MojoAppendMessageDataHandleOptions>* handle_options); + // Constructs a new serialized Message object from an existing // ScopedMessageHandle; e.g., one read from a message pipe. //
diff --git a/mojo/public/cpp/bindings/tests/BUILD.gn b/mojo/public/cpp/bindings/tests/BUILD.gn index a73a8736..1d82337d 100644 --- a/mojo/public/cpp/bindings/tests/BUILD.gn +++ b/mojo/public/cpp/bindings/tests/BUILD.gn
@@ -37,6 +37,7 @@ "router_test_util.h", "sample_service_unittest.cc", "serialization_warning_unittest.cc", + "share_message_order_unittest.cc", "struct_unittest.cc", "sync_handle_registry_unittest.cc", "sync_method_unittest.cc", @@ -52,9 +53,11 @@ ":mojo_public_bindings_test_utils", "//base/test:test_support", "//mojo/core/embedder", + "//mojo/core/test:test_support", "//mojo/public/cpp/bindings", "//mojo/public/cpp/system", "//mojo/public/cpp/test_support:test_utils", + "//mojo/public/interfaces/bindings/tests:cpp_only_test_interfaces", "//mojo/public/interfaces/bindings/tests:other_test_interfaces", "//mojo/public/interfaces/bindings/tests:test_associated_interfaces", "//mojo/public/interfaces/bindings/tests:test_export_component",
diff --git a/mojo/public/cpp/bindings/tests/share_message_order_unittest.cc b/mojo/public/cpp/bindings/tests/share_message_order_unittest.cc new file mode 100644 index 0000000..753e036 --- /dev/null +++ b/mojo/public/cpp/bindings/tests/share_message_order_unittest.cc
@@ -0,0 +1,254 @@ +// Copyright 2019 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 <algorithm> +#include <memory> +#include <utility> +#include <vector> + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/macros.h" +#include "base/optional.h" +#include "base/run_loop.h" +#include "base/test/scoped_task_environment.h" +#include "mojo/core/test/mojo_test_base.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "mojo/public/interfaces/bindings/tests/share_message_order.test-mojom.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace mojo { +namespace test { +namespace share_message_order { + +using ShareMessageOrderTest = mojo::core::test::MojoTestBase; + +class CounterObserverImpl : public mojom::CounterObserver { + public: + CounterObserverImpl() = default; + ~CounterObserverImpl() override = default; + + uint32_t counter_value() const { return counter_value_; } + + PendingRemote<mojom::CounterObserver> MakeRemote() { + return receiver_.BindNewPipeAndPassRemote(); + } + + void WaitForNextIncrement() { + if (!wait_loop_) + wait_loop_.emplace(); + wait_loop_->Run(); + wait_loop_.reset(); + } + + // mojom::CounterObserver: + void OnIncrement(uint32_t value) override { + counter_value_ = value; + if (wait_loop_) + wait_loop_->Quit(); + } + + private: + uint32_t counter_value_ = 0; + Receiver<mojom::CounterObserver> receiver_{this}; + base::Optional<base::RunLoop> wait_loop_; + + DISALLOW_COPY_AND_ASSIGN(CounterObserverImpl); +}; + +class CounterImpl : public mojom::Counter, public mojom::Doubler { + public: + explicit CounterImpl(PendingReceiver<mojom::Counter> receiver) + : receiver_(this, std::move(receiver)) { + receiver_.set_disconnect_handler(wait_for_disconnect_loop_.QuitClosure()); + } + + ~CounterImpl() override = default; + + void WaitForDisconnect() { wait_for_disconnect_loop_.Run(); } + + private: + // mojom::Counter: + void Increment(IncrementCallback callback) override { + ++value_; + std::move(callback).Run(); + for (const auto& observer : observers_) + observer->OnIncrement(value_); + } + + void AddObserver(PendingRemote<mojom::CounterObserver> observer) override { + observers_.emplace_back(std::move(observer)); + } + + void AddDoubler(PendingReceiver<mojom::Doubler> receiver) override { + doubler_receiver_.Bind(std::move(receiver)); + } + + // mojom::Doubler: + void Double() override { value_ *= 2; } + + base::RunLoop wait_for_disconnect_loop_; + uint32_t value_ = 0; + Receiver<mojom::Counter> receiver_; + Receiver<mojom::Doubler> doubler_receiver_{this}; + std::vector<Remote<mojom::CounterObserver>> observers_; + + DISALLOW_COPY_AND_ASSIGN(CounterImpl); +}; + +TEST_F(ShareMessageOrderTest, Ordering) { + // Setup two child processes, one for a CounterImpl and one for its client. + // They will use additional interfaces with shared message ordering. We use + // a multi-process test environment because it introduces sufficient internal + // timing variations to exercise our ordering constraints. + RunTestClient("CounterImpl", [&](MojoHandle h) { + MojoHandle receiver_handle, remote_handle; + CreateMessagePipe(&receiver_handle, &remote_handle); + + WriteMessageWithHandles(h, "hi", &receiver_handle, 1); + RunTestClient("CounterClient", [&](MojoHandle h) { + WriteMessageWithHandles(h, "hi", &remote_handle, 1); + EXPECT_EQ("ok", ReadMessage(h)); + WriteMessage(h, "bye"); + }); + }); +} + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(CounterImpl, ShareMessageOrderTest, h) { + base::test::ScopedTaskEnvironment task_environment; + + MojoHandle receiver_handle; + EXPECT_EQ("hi", ReadMessageWithHandles(h, &receiver_handle, 1)); + + CounterImpl counter_impl{PendingReceiver<mojom::Counter>( + ScopedMessagePipeHandle(MessagePipeHandle(receiver_handle)))}; + counter_impl.WaitForDisconnect(); +} + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(CounterClient, ShareMessageOrderTest, h) { + base::test::ScopedTaskEnvironment task_environment; + + MojoHandle remote_handle; + EXPECT_EQ("hi", ReadMessageWithHandles(h, &remote_handle, 1)); + + Remote<mojom::Counter> counter{PendingRemote<mojom::Counter>( + ScopedMessagePipeHandle(MessagePipeHandle(remote_handle)), 0)}; + + // By the mojom definition of AddDoubler, the Doubler's own pipe will share + // message ordering with the Counter's pipe once this message is sent. + Remote<mojom::Doubler> doubler; + counter->AddDoubler(doubler.BindNewPipeAndPassReceiver()); + + // And the CounterObserver's pipe will share messaging ordering as well, + // specifically its received messages will be ordered with replies received + // by our Remote<mojom::Counter>. + CounterObserverImpl observer; + counter->AddObserver(observer.MakeRemote()); + + { + base::RunLoop loop; + counter->Increment(loop.QuitClosure()); + loop.Run(); + } + + // The observer should not have dispatched an observed event yet, since it + // must arrive after the reply which just terminated our RunLoop. + // + // If there are ordering violations, this may flakily fail with an unexpected + // value of 1. + EXPECT_EQ(0u, observer.counter_value()); + observer.WaitForNextIncrement(); + + EXPECT_EQ(1u, observer.counter_value()); + + // Also verify ordering of messages on the Doubler. + + { + base::RunLoop loop; + counter->Increment(base::DoNothing()); // Increment to 2 + doubler->Double(); // Double to 4 + counter->Increment(loop.QuitClosure()); // Increment to 5 + loop.Run(); + } + + // Because of strict message ordering constraints, at this point the observer + // should have seen the increment to 2 above, but not the increment to 5. + // + // If there are ordering violations, this may flakily fail with an unexpected + // value of 2, 3, or 4. + EXPECT_EQ(2u, observer.counter_value()); + + observer.WaitForNextIncrement(); + + // If there are ordering violations, this may flakily fail with an unexpected + // value of 3 or 4. + EXPECT_EQ(5u, observer.counter_value()); + + WriteMessage(h, "ok"); + EXPECT_EQ("bye", ReadMessage(h)); +} + +class SyncPingImpl : public mojom::SyncPing { + public: + SyncPingImpl(mojo::PendingReceiver<mojom::SyncPing> receiver) + : receiver_(this, std::move(receiver)) {} + ~SyncPingImpl() override = default; + + // mojom::SyncPing: + void PingAsync(PingCallback callback) override { std::move(callback).Run(); } + void Ping(PingCallback callback) override { std::move(callback).Run(); } + + private: + mojo::Receiver<mojom::SyncPing> receiver_; + + DISALLOW_COPY_AND_ASSIGN(SyncPingImpl); +}; + +class SyncEchoImpl : public mojom::SyncEcho { + public: + SyncEchoImpl(mojo::PendingReceiver<mojom::SyncEcho> receiver) + : receiver_(this, std::move(receiver)) {} + ~SyncEchoImpl() override = default; + + // mojom::SyncEcho: + void PingThenEcho(mojo::PendingRemote<mojom::SyncPing> remote_ping, + const std::string& x, + PingThenEchoCallback callback) override { + mojo::Remote<mojom::SyncPing> ping(std::move(remote_ping)); + + base::RunLoop loop; + ping->PingAsync(loop.QuitClosure()); + loop.Run(); + + CHECK(ping->Ping()); + + std::move(callback).Run(x); + } + + private: + mojo::Receiver<mojom::SyncEcho> receiver_; + + DISALLOW_COPY_AND_ASSIGN(SyncEchoImpl); +}; + +TEST_F(ShareMessageOrderTest, NestedSyncCall) { + base::test::ScopedTaskEnvironment task_environment; + + mojo::PendingRemote<mojom::SyncPing> ping; + SyncPingImpl ping_impl(ping.InitWithNewPipeAndPassReceiver()); + + mojo::Remote<mojom::SyncEcho> echo; + SyncEchoImpl echo_impl(echo.BindNewPipeAndPassReceiver()); + + const std::string kTestString = "ok hello"; + std::string echoed_string; + EXPECT_TRUE(echo->PingThenEcho(std::move(ping), kTestString, &echoed_string)); + EXPECT_EQ(kTestString, echoed_string); +} + +} // namespace share_message_order +} // namespace test +} // namespace mojo
diff --git a/mojo/public/cpp/bindings/tests/validation_unittest.cc b/mojo/public/cpp/bindings/tests/validation_unittest.cc index d1d6c99..6eee7efc 100644 --- a/mojo/public/cpp/bindings/tests/validation_unittest.cc +++ b/mojo/public/cpp/bindings/tests/validation_unittest.cc
@@ -42,7 +42,7 @@ DCHECK(handle.is_valid()); DCHECK(base::IsValueInRangeForNumericType<uint32_t>(size)); - MojoAppendMessageDataOptions options; + MojoAppendMessageDataOptions options = {0}; options.struct_size = sizeof(options); options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; void* buffer;
diff --git a/mojo/public/cpp/system/data_pipe.h b/mojo/public/cpp/system/data_pipe.h index 205af85..eb7d6e27 100644 --- a/mojo/public/cpp/system/data_pipe.h +++ b/mojo/public/cpp/system/data_pipe.h
@@ -131,16 +131,12 @@ return rv; } +// DEPRECATED: use |CreateDataPipe| instead. +// +// This class is not safe to use in production code as there is no way for it to +// report failure while creating the pipe and it will CHECK in case of failures. +// // A wrapper class that automatically creates a data pipe and owns both handles. -// -// Note that this class is not safe to use in production code, as there is no -// way for it to report failure while creating the pipe, while in practice -// creating a new data pipe does fail every now and then. Instead just call -// CreateDataPipe directly and check its return value. -// -// TODO(vtl): Make an even more friendly version? (Maybe templatized for a -// particular type instead of some "element"? Maybe functions that take -// vectors?) class MOJO_CPP_SYSTEM_EXPORT DataPipe { public: DataPipe();
diff --git a/mojo/public/cpp/system/message_pipe.cc b/mojo/public/cpp/system/message_pipe.cc index 4059b6e..053fd88 100644 --- a/mojo/public/cpp/system/message_pipe.cc +++ b/mojo/public/cpp/system/message_pipe.cc
@@ -18,7 +18,7 @@ MojoResult rv = CreateMessage(&message_handle); DCHECK_EQ(MOJO_RESULT_OK, rv); - MojoAppendMessageDataOptions append_options; + MojoAppendMessageDataOptions append_options = {0}; append_options.struct_size = sizeof(append_options); append_options.flags = MOJO_APPEND_MESSAGE_DATA_FLAG_COMMIT_SIZE; void* buffer;
diff --git a/mojo/public/interfaces/bindings/tests/BUILD.gn b/mojo/public/interfaces/bindings/tests/BUILD.gn index a5efd42..aa238a6 100644 --- a/mojo/public/interfaces/bindings/tests/BUILD.gn +++ b/mojo/public/interfaces/bindings/tests/BUILD.gn
@@ -493,6 +493,14 @@ ] } +mojom("cpp_only_test_interfaces") { + testonly = true + cpp_only = true + sources = [ + "share_message_order.test-mojom", + ] +} + # Ensure that some target forces JS and Java bindings generation when all # targets are built. This provides a basic generation smoke test for new # endpoint types in mojom.
diff --git a/mojo/public/interfaces/bindings/tests/share_message_order.test-mojom b/mojo/public/interfaces/bindings/tests/share_message_order.test-mojom new file mode 100644 index 0000000..5807e32 --- /dev/null +++ b/mojo/public/interfaces/bindings/tests/share_message_order.test-mojom
@@ -0,0 +1,40 @@ +// Copyright 2019 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. + +module mojo.test.share_message_order.mojom; + +interface CounterObserver { + // Called every time the associated Counter has its value incremented. + OnIncrement(uint32 value); +}; + +interface Doubler { + // Requests that the Doubler's associated Counter double its current count. + Double(); +}; + +interface Counter { + Increment() => (); + + // Adds an observer which will be notified after every invocation of + // |Increment()|. Observers are always notified *after* the Increment response + // is sent. + AddObserver([ShareMessageOrder] pending_remote<CounterObserver> observer); + + // Gets an interface which can be used to double the current count retained by + // this Counter. + AddDoubler([ShareMessageOrder] pending_receiver<Doubler> receiver); +}; + +interface SyncPing { + PingAsync() => (); + [Sync] Ping() => (); +}; + +interface SyncEcho { + [Sync] PingThenEcho([ShareMessageOrder] pending_remote<SyncPing> ping, + string x) + => (string x); +}; +
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl index 7c6b9cd..e0bd720 100644 --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl +++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
@@ -25,6 +25,10 @@ {%- set kind = pf.field.kind %} {%- set serializer_type = kind|unmapped_type_for_serializer %} +{%- if pf.field|share_message_order %} + ({{context}})->set_share_message_order_for_new_handles(true); +{%- endif %} + {%- if kind|is_object_kind or kind|is_any_handle_or_interface_kind %} {%- set original_input_field = input_field_pattern|format(name) %} {%- set input_field = "in_%s"|format(name) if input_may_be_temp @@ -86,6 +90,11 @@ {%- else %} {{writer}}->{{name}} = {{input_field}}; {%- endif %} + +{%- if pf.field|share_message_order %} + ({{context}})->set_share_message_order_for_new_handles(false); +{%- endif %} + {%- endfor %} {%- endmacro -%}
diff --git a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py index b8070e6..1d1fbe5 100644 --- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py +++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
@@ -368,6 +368,7 @@ "is_typemapped_kind": self._IsTypemappedKind, "is_union_kind": mojom.IsUnionKind, "passes_associated_kinds": mojom.PassesAssociatedKinds, + "share_message_order": mojom.FieldOrParamSharesMessageOrder, "struct_constructors": self._GetStructConstructors, "under_to_camel": generator.ToCamel, "unmapped_type_for_serializer": self._GetUnmappedTypeForSerializer, @@ -750,7 +751,8 @@ # TODO(crbug.com/753433): Support lazy serialization for methods which pass # associated handles. - if mojom.MethodPassesAssociatedKinds(method): + if mojom.MethodPassesAssociatedKinds(method) or \ + mojom.MethodParametersShareMessageOrder(method): return False return not any(self._KindMustBeSerialized(param.kind) for param in
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/module.py b/mojo/public/tools/bindings/pylib/mojom/generate/module.py index 18a4101..b1201f9 100644 --- a/mojo/public/tools/bindings/pylib/mojom/generate/module.py +++ b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
@@ -221,6 +221,7 @@ ATTRIBUTE_MIN_VERSION = 'MinVersion' ATTRIBUTE_EXTENSIBLE = 'Extensible' ATTRIBUTE_SYNC = 'Sync' +ATTRIBUTE_SHARE_MESSAGE_ORDER = 'ShareMessageOrder' class NamedValue(object): @@ -301,6 +302,11 @@ return self.attributes.get(ATTRIBUTE_MIN_VERSION) \ if self.attributes else None + @property + def share_message_order(self): + return self.attributes.get(ATTRIBUTE_SHARE_MESSAGE_ORDER, False) \ + if self.attributes else False + class StructField(Field): pass @@ -565,6 +571,11 @@ return self.attributes.get(ATTRIBUTE_MIN_VERSION) \ if self.attributes else None + @property + def share_message_order(self): + return self.attributes.get(ATTRIBUTE_SHARE_MESSAGE_ORDER, False) \ + if self.attributes else False + class Method(object): def __init__(self, interface, mojom_name, ordinal=None, attributes=None): @@ -863,6 +874,11 @@ def IsAssociatedInterfaceRequestKind(kind): return isinstance(kind, AssociatedInterfaceRequest) + +def FieldOrParamSharesMessageOrder(field_or_param): + return field_or_param.share_message_order + + def IsPendingRemoteKind(kind): return isinstance(kind, PendingRemote) @@ -937,7 +953,7 @@ return False -def _AnyMethodParameterRecursive(method, predicate, visited_kinds=None): +def _AnyParameterKindRecursive(method, predicate, visited_kinds=None): def _HasProperty(kind): if kind in visited_kinds: # No need to examine the kind again. @@ -969,16 +985,53 @@ return False +def _AnyFieldRecursive(fields_or_params, predicate, visited_kinds=None): + if not fields_or_params: + return False + + def _HasProperty(kind): + if kind in visited_kinds: + return False + if IsStructKind(kind) or IsUnionKind(kind): + visited_kinds.add(kind) + return _AnyFieldRecursive(kind.fields, predicate, visited_kinds) + if IsArrayKind(kind): + return _HasProperty(kind.kind) + if IsMapKind(kind): + if _HasProperty(kind.key_kind) or _HasProperty(kind.value_kind): + return True + return False + + if visited_kinds is None: + visited_kinds = set() + + for field_or_param in fields_or_params: + if predicate(field_or_param): + return True + if _HasProperty(field_or_param.kind): + return True + + return False + + # Finds out whether a method passes associated interfaces and associated # interface requests. def MethodPassesAssociatedKinds(method, visited_kinds=None): - return _AnyMethodParameterRecursive(method, IsAssociatedKind, + return _AnyParameterKindRecursive(method, IsAssociatedKind, visited_kinds=visited_kinds) # Determines whether a method passes interfaces. def MethodPassesInterfaces(method): - return _AnyMethodParameterRecursive(method, IsInterfaceKind) + return _AnyParameterKindRecursive(method, IsInterfaceKind) + + +def MethodParametersShareMessageOrder(method, visited_kinds=None): + return _AnyFieldRecursive(method.parameters, FieldOrParamSharesMessageOrder, + visited_kinds=visited_kinds) or \ + _AnyFieldRecursive(method.response_parameters, + FieldOrParamSharesMessageOrder, + visited_kinds=visited_kinds) def HasSyncMethods(interface):
diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java index aaf99b9..f25ae1b53 100644 --- a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java +++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
@@ -1138,8 +1138,6 @@ mNetworkState = networkState; } - // TODO(crbug.com/635567): Fix this properly. - @SuppressLint({"NewApi", "ParcelCreator"}) private static class NetworkConnectivityIntentFilter extends IntentFilter { NetworkConnectivityIntentFilter() { addAction(ConnectivityManager.CONNECTIVITY_ACTION);
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc index 0611436a..d70451ae 100644 --- a/net/disk_cache/entry_unittest.cc +++ b/net/disk_cache/entry_unittest.cc
@@ -75,7 +75,7 @@ void DoomedEntry(int stream_index); void BasicSparseIO(); void HugeSparseIO(); - void GetAvailableRange(); + void GetAvailableRangeTest(); void CouldBeSparse(); void UpdateSparseEntry(); void DoomSparseEntry(); @@ -95,6 +95,7 @@ void LastUsedTimePersists(); void TruncateBackwards(); void ZeroWriteBackwards(); + void SparseOffset64Bit(); }; // This part of the test runs on the background thread. @@ -1720,7 +1721,7 @@ HugeSparseIO(); } -void DiskCacheEntryTest::GetAvailableRange() { +void DiskCacheEntryTest::GetAvailableRangeTest() { std::string key("the first key"); disk_cache::Entry* entry; ASSERT_THAT(CreateEntry(key, &entry), IsOk()); @@ -1791,13 +1792,13 @@ TEST_F(DiskCacheEntryTest, GetAvailableRange) { InitCache(); - GetAvailableRange(); + GetAvailableRangeTest(); } TEST_F(DiskCacheEntryTest, MemoryOnlyGetAvailableRange) { SetMemoryOnlyMode(); InitCache(); - GetAvailableRange(); + GetAvailableRangeTest(); } TEST_F(DiskCacheEntryTest, GetAvailableRangeBlockFileDiscontinuous) { @@ -2424,12 +2425,10 @@ EXPECT_EQ(net::ERR_INVALID_ARGUMENT, ReadSparseData(entry, 0, buf.get(), -1)); int64_t start_out; - EXPECT_EQ( - net::ERR_INVALID_ARGUMENT, - DiskCacheTestWithCache::GetAvailableRange(entry, -1, kSize, &start_out)); - EXPECT_EQ( - net::ERR_INVALID_ARGUMENT, - DiskCacheTestWithCache::GetAvailableRange(entry, 0, -1, &start_out)); + EXPECT_EQ(net::ERR_INVALID_ARGUMENT, + GetAvailableRange(entry, -1, kSize, &start_out)); + EXPECT_EQ(net::ERR_INVALID_ARGUMENT, + GetAvailableRange(entry, 0, -1, &start_out)); entry->Close(); } @@ -4556,7 +4555,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheGetAvailableRange) { SetSimpleCacheMode(); InitCache(); - GetAvailableRange(); + GetAvailableRangeTest(); } TEST_F(DiskCacheEntryTest, SimpleCacheUpdateSparseEntry) { @@ -5206,6 +5205,60 @@ ZeroWriteBackwards(); } +void DiskCacheEntryTest::SparseOffset64Bit() { + // Offsets to sparse ops are 64-bit, make sure we keep track of all of them. + // (Or, as at least in case of blockfile, fail things cleanly, as it has a + // cap of 64GiB for indexes). + bool blockfile = !memory_only_ && !simple_cache_mode_; + InitCache(); + + const char kKey[] = "a key"; + + disk_cache::Entry* entry = nullptr; + ASSERT_THAT(CreateEntry(kKey, &entry), IsOk()); + ASSERT_TRUE(entry != nullptr); + + const int kSize = 1024; + // One bit set very high, so intermediate truncations to 32-bit would drop it + // even if they happen after a bunch of shifting right. + const int64_t kOffset = (1ll << 61); + + scoped_refptr<net::IOBuffer> buffer = + base::MakeRefCounted<net::IOBuffer>(kSize); + CacheTestFillBuffer(buffer->data(), kSize, false); + + EXPECT_EQ(blockfile ? net::ERR_CACHE_OPERATION_NOT_SUPPORTED : kSize, + WriteSparseData(entry, kOffset, buffer.get(), kSize)); + + int64_t start_out = -1; + EXPECT_EQ(0, GetAvailableRange(entry, /* offset = */ 0, kSize, &start_out)); + + start_out = -1; + EXPECT_EQ(blockfile ? net::ERR_CACHE_OPERATION_NOT_SUPPORTED : kSize, + GetAvailableRange(entry, kOffset, kSize, &start_out)); + EXPECT_EQ(kOffset, start_out); + + entry->Close(); +} + +TEST_F(DiskCacheEntryTest, SparseOffset64Bit) { + InitCache(); + SparseOffset64Bit(); +} + +TEST_F(DiskCacheEntryTest, SimpleSparseOffset64Bit) { + SetSimpleCacheMode(); + InitCache(); + SparseOffset64Bit(); +} + +TEST_F(DiskCacheEntryTest, MemoryOnlySparseOffset64Bit) { + // https://crbug.com/946436 + SetMemoryOnlyMode(); + InitCache(); + SparseOffset64Bit(); +} + TEST_F(DiskCacheEntryTest, SimpleCacheCloseResurrection) { const int kSize = 10; scoped_refptr<net::IOBuffer> buffer =
diff --git a/net/disk_cache/memory/mem_entry_impl.cc b/net/disk_cache/memory/mem_entry_impl.cc index 2981e39..2608970a 100644 --- a/net/disk_cache/memory/mem_entry_impl.cc +++ b/net/disk_cache/memory/mem_entry_impl.cc
@@ -8,6 +8,7 @@ #include <utility> #include "base/bind.h" +#include "base/format_macros.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/numerics/safe_math.h" @@ -29,11 +30,11 @@ const int kSparseData = 1; -// Maximum size of a sparse entry is 2 to the power of this number. -const int kMaxSparseEntryBits = 12; +// Maximum size of a child of sparse entry is 2 to the power of this number. +const int kMaxChildEntryBits = 12; -// Sparse entry has maximum size of 4KB. -const int kMaxSparseEntrySize = 1 << kMaxSparseEntryBits; +// Sparse entry children have maximum size of 4KB. +const int kMaxChildEntrySize = 1 << kMaxChildEntryBits; // This enum is used for histograms, so only append to the end. enum MemEntryWriteResult { @@ -50,21 +51,21 @@ } // Convert global offset to child index. -int ToChildIndex(int64_t offset) { - return static_cast<int>(offset >> kMaxSparseEntryBits); +int64_t ToChildIndex(int64_t offset) { + return offset >> kMaxChildEntryBits; } // Convert global offset to offset in child entry. int ToChildOffset(int64_t offset) { - return static_cast<int>(offset & (kMaxSparseEntrySize - 1)); + return static_cast<int>(offset & (kMaxChildEntrySize - 1)); } // Returns a name for a child entry given the base_name of the parent and the // child_id. This name is only used for logging purposes. // If the entry is called entry_name, child entries will be named something // like Range_entry_name:YYY where YYY is the number of the particular child. -std::string GenerateChildName(const std::string& base_name, int child_id) { - return base::StringPrintf("Range_%s:%i", base_name.c_str(), child_id); +std::string GenerateChildName(const std::string& base_name, int64_t child_id) { + return base::StringPrintf("Range_%s:%" PRId64, base_name.c_str(), child_id); } // Returns NetLog parameters for the creation of a MemEntryImpl. A separate @@ -104,7 +105,7 @@ } MemEntryImpl::MemEntryImpl(base::WeakPtr<MemBackendImpl> backend, - int child_id, + int64_t child_id, MemEntryImpl* parent, net::NetLog* net_log) : MemEntryImpl(backend, @@ -307,7 +308,7 @@ MemEntryImpl::MemEntryImpl(base::WeakPtr<MemBackendImpl> backend, const ::std::string& key, - int child_id, + int64_t child_id, MemEntryImpl* parent, net::NetLog* net_log) : key_(key), @@ -511,7 +512,7 @@ base::MakeRefCounted<net::DrainableIOBuffer>(buf, buf_len); // This loop walks through child entries continuously starting from |offset| - // and writes blocks of data (of maximum size kMaxSparseEntrySize) into each + // and writes blocks of data (of maximum size kMaxChildEntrySize) into each // child entry until all |buf_len| bytes are written. The write operation can // start in the middle of an entry. while (io_buf->BytesRemaining()) { @@ -520,8 +521,8 @@ // Find the right amount to write, this evaluates the remaining bytes to // write and remaining capacity of this child entry. - int write_len = std::min(static_cast<int>(io_buf->BytesRemaining()), - kMaxSparseEntrySize - child_offset); + int write_len = + std::min(io_buf->BytesRemaining(), kMaxChildEntrySize - child_offset); // Keep a record of the last byte position (exclusive) in the child. int data_size = child->GetDataSize(kSparseData); @@ -626,7 +627,7 @@ MemEntryImpl* MemEntryImpl::GetChild(int64_t offset, bool create) { DCHECK_EQ(PARENT_ENTRY, type()); - int index = ToChildIndex(offset); + int64_t index = ToChildIndex(offset); auto i = children_->find(index); if (i != children_->end()) return i->second; @@ -642,7 +643,7 @@ // The valid range in child is [child_first_pos_, DataSize), since the child // entry ops just use standard disk_cache::Entry API, so DataSize is // not aware of any hole in the beginning. - int64_t child_responsibility_start = (i->first) * kMaxSparseEntrySize; + int64_t child_responsibility_start = (i->first) * kMaxChildEntrySize; return net::Interval<int64_t>( child_responsibility_start + child->child_first_pos_, child_responsibility_start + child->GetDataSize(kSparseData));
diff --git a/net/disk_cache/memory/mem_entry_impl.h b/net/disk_cache/memory/mem_entry_impl.h index 71eda272..a372dd5 100644 --- a/net/disk_cache/memory/mem_entry_impl.h +++ b/net/disk_cache/memory/mem_entry_impl.h
@@ -80,7 +80,7 @@ // Constructor for child entries. MemEntryImpl(base::WeakPtr<MemBackendImpl> backend, - int child_id, + int64_t child_id, MemEntryImpl* parent, net::NetLog* net_log); @@ -90,7 +90,7 @@ EntryType type() const { return parent_ ? CHILD_ENTRY : PARENT_ENTRY; } const std::string& key() const { return key_; } const MemEntryImpl* parent() const { return parent_; } - int child_id() const { return child_id_; } + int64_t child_id() const { return child_id_; } base::Time last_used() const { return last_used_; } // The in-memory size of this entry to use for the purposes of eviction. @@ -139,11 +139,11 @@ private: MemEntryImpl(base::WeakPtr<MemBackendImpl> backend, const std::string& key, - int child_id, + int64_t child_id, MemEntryImpl* parent, net::NetLog* net_log); - using EntryMap = std::map<int, MemEntryImpl*>; + using EntryMap = std::map<int64_t, MemEntryImpl*>; static const int kNumStreams = 3; @@ -181,9 +181,10 @@ std::vector<char> data_[kNumStreams]; // User data. int ref_count_; - int child_id_; // The ID of a child entry. - int child_first_pos_; // The position of the first byte in a child - // entry. + int64_t child_id_; // The ID of a child entry. + int child_first_pos_; // The position of the first byte in a child + // entry. 0 here is beginning of child, not of + // the entire file. // Pointer to the parent entry, or nullptr if this entry is a parent entry. MemEntryImpl* parent_; std::unique_ptr<EntryMap> children_;
diff --git a/net/http/http_basic_state.cc b/net/http/http_basic_state.cc index a9efbe1..3c1eb58 100644 --- a/net/http/http_basic_state.cc +++ b/net/http/http_basic_state.cc
@@ -24,6 +24,7 @@ : read_buf_(base::MakeRefCounted<GrowableIOBuffer>()), connection_(std::move(connection)), using_proxy_(using_proxy), + can_send_early_(false), http_09_on_non_default_ports_enabled_( http_09_on_non_default_ports_enabled) { CHECK(connection_) << "ClientSocketHandle passed to HttpBasicState must " @@ -33,6 +34,7 @@ HttpBasicState::~HttpBasicState() = default; void HttpBasicState::Initialize(const HttpRequestInfo* request_info, + bool can_send_early, RequestPriority priority, const NetLogWithSource& net_log) { DCHECK(!parser_.get()); @@ -44,6 +46,7 @@ read_buf_.get(), net_log); parser_->set_http_09_on_non_default_ports_enabled( http_09_on_non_default_ports_enabled_); + can_send_early_ = can_send_early; } std::unique_ptr<ClientSocketHandle> HttpBasicState::ReleaseConnection() {
diff --git a/net/http/http_basic_state.h b/net/http/http_basic_state.h index d811f9f..58c122ca 100644 --- a/net/http/http_basic_state.h +++ b/net/http/http_basic_state.h
@@ -35,6 +35,7 @@ // Initialize() must be called before using any of the other methods. void Initialize(const HttpRequestInfo* request_info, + bool can_send_early, RequestPriority priority, const NetLogWithSource& net_log); @@ -42,6 +43,7 @@ bool using_proxy() const { return using_proxy_; } + bool can_send_early() const { return can_send_early_; } bool http_09_on_non_default_ports_enabled() const { return http_09_on_non_default_ports_enabled_; } @@ -80,6 +82,8 @@ const bool using_proxy_; + bool can_send_early_; + const bool http_09_on_non_default_ports_enabled_; GURL url_;
diff --git a/net/http/http_basic_state_unittest.cc b/net/http/http_basic_state_unittest.cc index a811646..dd24b55 100644 --- a/net/http/http_basic_state_unittest.cc +++ b/net/http/http_basic_state_unittest.cc
@@ -46,7 +46,7 @@ TEST(HttpBasicStateTest, InitializeWorks) { HttpBasicState state(std::make_unique<ClientSocketHandle>(), false, false); const HttpRequestInfo request_info; - state.Initialize(&request_info, LOW, NetLogWithSource()); + state.Initialize(&request_info, false, LOW, NetLogWithSource()); EXPECT_TRUE(state.parser()); } @@ -55,7 +55,7 @@ HttpRequestInfo request_info; request_info.traffic_annotation = MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - state.Initialize(&request_info, LOW, NetLogWithSource()); + state.Initialize(&request_info, false, LOW, NetLogWithSource()); EXPECT_EQ(TRAFFIC_ANNOTATION_FOR_TESTS, NetworkTrafficAnnotationTag(state.traffic_annotation())); } @@ -63,7 +63,7 @@ TEST(HttpBasicStateTest, DeleteParser) { HttpBasicState state(std::make_unique<ClientSocketHandle>(), false, false); const HttpRequestInfo request_info; - state.Initialize(&request_info, LOW, NetLogWithSource()); + state.Initialize(&request_info, false, LOW, NetLogWithSource()); EXPECT_TRUE(state.parser()); state.DeleteParser(); EXPECT_EQ(NULL, state.parser()); @@ -76,7 +76,7 @@ HttpRequestInfo request_info; request_info.url = GURL("http://www.example.com/path?foo=bar#hoge"); request_info.method = "PUT"; - state.Initialize(&request_info, LOW, NetLogWithSource()); + state.Initialize(&request_info, false, LOW, NetLogWithSource()); EXPECT_EQ("PUT /path?foo=bar HTTP/1.1\r\n", state.GenerateRequestLine()); } @@ -87,7 +87,7 @@ HttpRequestInfo request_info; request_info.url = GURL("http://www.example.com/path?foo=bar#hoge"); request_info.method = "PUT"; - state.Initialize(&request_info, LOW, NetLogWithSource()); + state.Initialize(&request_info, false, LOW, NetLogWithSource()); EXPECT_EQ("PUT http://www.example.com/path?foo=bar HTTP/1.1\r\n", state.GenerateRequestLine()); }
diff --git a/net/http/http_basic_stream.cc b/net/http/http_basic_stream.cc index e516919..9278d66 100644 --- a/net/http/http_basic_stream.cc +++ b/net/http/http_basic_stream.cc
@@ -31,12 +31,8 @@ const NetLogWithSource& net_log, CompletionOnceCallback callback) { DCHECK(request_info->traffic_annotation.is_valid()); - state_.Initialize(request_info, priority, net_log); - int ret = OK; - if (!can_send_early) { - ret = parser()->ConfirmHandshake(std::move(callback)); - } - return ret; + state_.Initialize(request_info, can_send_early, priority, net_log); + return OK; } int HttpBasicStream::SendRequest(const HttpRequestHeaders& headers,
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 1c32ed9e..23775ab0 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc
@@ -95,7 +95,6 @@ time_func(&base::TimeTicks::Now), enable_http2_alternative_service(false), enable_websocket_over_http2(false), - enable_early_data(false), enable_quic(false), enable_quic_proxies_for_https_urls(false), quic_max_packet_length(quic::kDefaultMaxPacketSize), @@ -439,7 +438,6 @@ GetAlpnProtos(&server_config->alpn_protos); server_config->ignore_certificate_errors = params_.ignore_certificate_errors; *proxy_config = *server_config; - server_config->early_data_enabled = params_.enable_early_data; } void HttpNetworkSession::DumpMemoryStats(
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 5852772..2a1a34d 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h
@@ -127,9 +127,6 @@ // Whether to enable Websocket over HTTP/2. bool enable_websocket_over_http2; - // Enables 0-RTT support. - bool enable_early_data; - // Enables QUIC support. bool enable_quic;
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 50fb3e6e..0ee8d86 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc
@@ -19634,381 +19634,4 @@ #endif // BUILDFLAG(ENABLE_REPORTING) -TEST_F(HttpNetworkTransactionTest, ZeroRTTDoesntConfirm) { - HttpRequestInfo request; - request.method = "GET"; - request.url = GURL("https://www.example.org/"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - MockWrite data_writes[] = { - MockWrite("GET / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n\r\n"), - }; - - // The proxy responds to the connect with a 407, using a persistent - // connection. - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n"), - MockRead("Content-Length: 1\r\n\r\n"), - MockRead(SYNCHRONOUS, "1"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.confirm = MockConfirm(SYNCHRONOUS, OK); - session_deps_.enable_early_data = true; - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - - TestCompletionCallback callback; - auto trans = - std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); - - int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsOk()); - - const HttpResponseInfo* response = trans->GetResponseInfo(); - ASSERT_TRUE(response); - ASSERT_TRUE(response->headers); - EXPECT_EQ(200, response->headers->response_code()); - EXPECT_EQ(1, response->headers->GetContentLength()); - - // Check that ConfirmHandshake wasn't called. - ASSERT_FALSE(ssl.ConfirmDataConsumed()); - ASSERT_TRUE(ssl.WriteBeforeConfirm()); - - trans.reset(); - - session->CloseAllConnections(); -} - -TEST_F(HttpNetworkTransactionTest, ZeroRTTSyncConfirmSyncWrite) { - HttpRequestInfo request; - request.method = "POST"; - request.url = GURL("https://www.example.org/"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - MockWrite data_writes[] = { - MockWrite(SYNCHRONOUS, - "POST / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n" - "Content-Length: 0\r\n\r\n"), - }; - - // The proxy responds to the connect with a 407, using a persistent - // connection. - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n"), - MockRead("Content-Length: 1\r\n\r\n"), - MockRead(SYNCHRONOUS, "1"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.confirm = MockConfirm(SYNCHRONOUS, OK); - session_deps_.enable_early_data = true; - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - - TestCompletionCallback callback; - auto trans = - std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); - - int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsOk()); - - const HttpResponseInfo* response = trans->GetResponseInfo(); - ASSERT_TRUE(response); - ASSERT_TRUE(response->headers); - EXPECT_EQ(200, response->headers->response_code()); - EXPECT_EQ(1, response->headers->GetContentLength()); - - // Check that the Write didn't get called before ConfirmHandshake completed. - ASSERT_FALSE(ssl.WriteBeforeConfirm()); - - trans.reset(); - - session->CloseAllConnections(); -} - -TEST_F(HttpNetworkTransactionTest, ZeroRTTSyncConfirmAsyncWrite) { - HttpRequestInfo request; - request.method = "POST"; - request.url = GURL("https://www.example.org/"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - MockWrite data_writes[] = { - MockWrite(ASYNC, - "POST / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n" - "Content-Length: 0\r\n\r\n"), - }; - - // The proxy responds to the connect with a 407, using a persistent - // connection. - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n"), - MockRead("Content-Length: 1\r\n\r\n"), - MockRead(SYNCHRONOUS, "1"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.confirm = MockConfirm(SYNCHRONOUS, OK); - session_deps_.enable_early_data = true; - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - - TestCompletionCallback callback; - auto trans = - std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); - - int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsOk()); - - const HttpResponseInfo* response = trans->GetResponseInfo(); - ASSERT_TRUE(response); - ASSERT_TRUE(response->headers); - EXPECT_EQ(200, response->headers->response_code()); - EXPECT_EQ(1, response->headers->GetContentLength()); - - // Check that the Write didn't get called before ConfirmHandshake completed. - ASSERT_FALSE(ssl.WriteBeforeConfirm()); - - trans.reset(); - - session->CloseAllConnections(); -} - -TEST_F(HttpNetworkTransactionTest, ZeroRTTAsyncConfirmSyncWrite) { - HttpRequestInfo request; - request.method = "POST"; - request.url = GURL("https://www.example.org/"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - MockWrite data_writes[] = { - MockWrite(SYNCHRONOUS, - "POST / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n" - "Content-Length: 0\r\n\r\n"), - }; - - // The proxy responds to the connect with a 407, using a persistent - // connection. - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n"), - MockRead("Content-Length: 1\r\n\r\n"), - MockRead(SYNCHRONOUS, "1"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.confirm = MockConfirm(ASYNC, OK); - session_deps_.enable_early_data = true; - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - - TestCompletionCallback callback; - auto trans = - std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); - - int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsOk()); - - const HttpResponseInfo* response = trans->GetResponseInfo(); - ASSERT_TRUE(response); - ASSERT_TRUE(response->headers); - EXPECT_EQ(200, response->headers->response_code()); - EXPECT_EQ(1, response->headers->GetContentLength()); - - // Check that the Write didn't get called before ConfirmHandshake completed. - ASSERT_FALSE(ssl.WriteBeforeConfirm()); - - trans.reset(); - - session->CloseAllConnections(); -} - -TEST_F(HttpNetworkTransactionTest, ZeroRTTAsyncConfirmAsyncWrite) { - HttpRequestInfo request; - request.method = "POST"; - request.url = GURL("https://www.example.org/"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - MockWrite data_writes[] = { - MockWrite(ASYNC, - "POST / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n" - "Content-Length: 0\r\n\r\n"), - }; - - // The proxy responds to the connect with a 407, using a persistent - // connection. - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n"), - MockRead("Content-Length: 1\r\n\r\n"), - MockRead(SYNCHRONOUS, "1"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.confirm = MockConfirm(ASYNC, OK); - session_deps_.enable_early_data = true; - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - - TestCompletionCallback callback; - auto trans = - std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); - - int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsOk()); - - const HttpResponseInfo* response = trans->GetResponseInfo(); - ASSERT_TRUE(response); - ASSERT_TRUE(response->headers); - EXPECT_EQ(200, response->headers->response_code()); - EXPECT_EQ(1, response->headers->GetContentLength()); - - // Check that the Write didn't get called before ConfirmHandshake completed. - ASSERT_FALSE(ssl.WriteBeforeConfirm()); - - trans.reset(); - - session->CloseAllConnections(); -} - -TEST_F(HttpNetworkTransactionTest, ZeroRTTConfirmErrorSync) { - HttpRequestInfo request; - request.method = "POST"; - request.url = GURL("https://www.example.org/"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - MockWrite data_writes[] = { - MockWrite("POST / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n" - "Content-Length: 0\r\n\r\n"), - }; - - // The proxy responds to the connect with a 407, using a persistent - // connection. - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n"), - MockRead("Content-Length: 1\r\n\r\n"), - MockRead(SYNCHRONOUS, "1"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.confirm = MockConfirm(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); - session_deps_.enable_early_data = true; - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - - TestCompletionCallback callback; - auto trans = - std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); - - int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsError(ERR_SSL_PROTOCOL_ERROR)); - - // Check that the Write didn't get called before ConfirmHandshake completed. - ASSERT_FALSE(ssl.WriteBeforeConfirm()); - - trans.reset(); - - session->CloseAllConnections(); -} - -TEST_F(HttpNetworkTransactionTest, ZeroRTTConfirmErrorAsync) { - HttpRequestInfo request; - request.method = "POST"; - request.url = GURL("https://www.example.org/"); - request.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - - MockWrite data_writes[] = { - MockWrite("POST / HTTP/1.1\r\n" - "Host: www.example.org\r\n" - "Connection: keep-alive\r\n" - "Content-Length: 0\r\n\r\n"), - }; - - // The proxy responds to the connect with a 407, using a persistent - // connection. - MockRead data_reads[] = { - MockRead("HTTP/1.1 200 OK\r\n"), - MockRead("Content-Length: 1\r\n\r\n"), - MockRead(SYNCHRONOUS, "1"), - }; - - StaticSocketDataProvider data(data_reads, data_writes); - session_deps_.socket_factory->AddSocketDataProvider(&data); - SSLSocketDataProvider ssl(SYNCHRONOUS, OK); - ssl.confirm = MockConfirm(ASYNC, ERR_SSL_PROTOCOL_ERROR); - session_deps_.enable_early_data = true; - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); - - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); - - TestCompletionCallback callback; - auto trans = - std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY, session.get()); - - int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, IsError(ERR_SSL_PROTOCOL_ERROR)); - - // Check that the Write didn't get called before ConfirmHandshake completed. - ASSERT_FALSE(ssl.WriteBeforeConfirm()); - - trans.reset(); - - session->CloseAllConnections(); -} - } // namespace net
diff --git a/net/http/http_proxy_connect_job.cc b/net/http/http_proxy_connect_job.cc index a6dd03637..5792433 100644 --- a/net/http/http_proxy_connect_job.cc +++ b/net/http/http_proxy_connect_job.cc
@@ -623,9 +623,8 @@ spdy_stream_request_ = std::make_unique<SpdyStreamRequest>(); return spdy_stream_request_->StartRequest( SPDY_BIDIRECTIONAL_STREAM, spdy_session, - GURL("https://" + params_->endpoint().ToString()), - false /* no early data */, kH2QuicTunnelPriority, socket_tag(), - spdy_session->net_log(), + GURL("https://" + params_->endpoint().ToString()), kH2QuicTunnelPriority, + socket_tag(), spdy_session->net_log(), base::BindOnce(&HttpProxyConnectJob::OnIOComplete, base::Unretained(this)), params_->traffic_annotation());
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc index dc877737..c4eb083 100644 --- a/net/http/http_proxy_connect_job_unittest.cc +++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -194,8 +194,6 @@ session_deps_.socket_factory->AddSocketDataProvider(data_.get()); if (GetParam() != HTTP) { - // Keep the old ssl_data in case there is a draining socket. - old_ssl_data_.swap(ssl_data_); ssl_data_ = std::make_unique<SSLSocketDataProvider>(connect_and_ssl_io_mode, OK); if (GetParam() == SPDY) { @@ -243,7 +241,6 @@ std::unique_ptr<TestProxyDelegate> proxy_delegate_; std::unique_ptr<SSLSocketDataProvider> ssl_data_; - std::unique_ptr<SSLSocketDataProvider> old_ssl_data_; std::unique_ptr<SequencedSocketData> data_; SpdySessionDependencies session_deps_;
diff --git a/net/http/http_stream_parser.cc b/net/http/http_stream_parser.cc index 35c7a4e..3db1d0e 100644 --- a/net/http/http_stream_parser.cc +++ b/net/http/http_stream_parser.cc
@@ -320,15 +320,6 @@ return result > 0 ? OK : result; } -int HttpStreamParser::ConfirmHandshake(CompletionOnceCallback callback) { - int ret = stream_socket_->ConfirmHandshake( - base::BindOnce(&HttpStreamParser::RunConfirmHandshakeCallback, - weak_ptr_factory_.GetWeakPtr())); - if (ret == ERR_IO_PENDING) - confirm_handshake_callback_ = std::move(callback); - return ret; -} - int HttpStreamParser::ReadResponseHeaders(CompletionOnceCallback callback) { DCHECK(io_state_ == STATE_NONE || io_state_ == STATE_DONE); DCHECK(callback_.is_null()); @@ -941,10 +932,6 @@ return OK; } -void HttpStreamParser::RunConfirmHandshakeCallback(int rv) { - std::move(confirm_handshake_callback_).Run(rv); -} - int HttpStreamParser::FindAndParseResponseHeaders(int new_bytes) { DCHECK_GT(new_bytes, 0); DCHECK_EQ(0, read_buf_unused_offset_);
diff --git a/net/http/http_stream_parser.h b/net/http/http_stream_parser.h index 16d24e2..c09a709 100644 --- a/net/http/http_stream_parser.h +++ b/net/http/http_stream_parser.h
@@ -73,8 +73,6 @@ HttpResponseInfo* response, CompletionOnceCallback callback); - int ConfirmHandshake(CompletionOnceCallback callback); - int ReadResponseHeaders(CompletionOnceCallback callback); int ReadResponseBody(IOBuffer* buf, @@ -185,8 +183,6 @@ // This handles most of the logic for DoReadHeadersComplete. int HandleReadHeaderResult(int result); - void RunConfirmHandshakeCallback(int rv); - // Examines |read_buf_| to find the start and end of the headers. If they are // found, parse them with DoParseResponseHeaders(). Return the offset for // the end of the headers, or -1 if the complete headers were not found, or @@ -270,9 +266,6 @@ scoped_refptr<IOBuffer> user_read_buf_; int user_read_buf_len_; - // The callback to notify a user that the handshake has been confirmed. - CompletionOnceCallback confirm_handshake_callback_; - // The callback to notify a user that their request or response is // complete or there was an error CompletionOnceCallback callback_;
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc index 7c949f5..3692ea4 100644 --- a/net/socket/socket_test_util.cc +++ b/net/socket/socket_test_util.cc
@@ -157,12 +157,6 @@ MockConnect::~MockConnect() = default; -MockConfirm::MockConfirm() : mode(SYNCHRONOUS), result(OK) {} - -MockConfirm::MockConfirm(IoMode io_mode, int r) : mode(io_mode), result(r) {} - -MockConfirm::~MockConfirm() = default; - bool SocketDataProvider::IsIdle() const { return true; } @@ -1467,8 +1461,6 @@ int buf_len, CompletionOnceCallback callback, const NetworkTrafficAnnotationTag& traffic_annotation) { - if (!data_->is_confirm_data_consumed) - data_->write_called_before_confirm = true; return stream_socket_->Write(buf, buf_len, std::move(callback), traffic_annotation); } @@ -1494,28 +1486,6 @@ stream_socket_->Disconnect(); } -void MockSSLClientSocket::RunConfirmHandshakeCallback( - CompletionOnceCallback callback, - int result) { - data_->is_confirm_data_consumed = true; - std::move(callback).Run(result); -} - -int MockSSLClientSocket::ConfirmHandshake(CompletionOnceCallback callback) { - DCHECK(stream_socket_->IsConnected()); - if (data_->is_confirm_data_consumed) - return data_->confirm.result; - if (data_->confirm.mode == ASYNC) { - RunCallbackAsync( - base::BindOnce(&MockSSLClientSocket::RunConfirmHandshakeCallback, - base::Unretained(this), std::move(callback)), - data_->confirm.result); - return ERR_IO_PENDING; - } - data_->is_confirm_data_consumed = true; - return data_->confirm.result; -} - bool MockSSLClientSocket::IsConnected() const { return stream_socket_->IsConnected(); }
diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h index 44b8bf7..1b41630 100644 --- a/net/socket/socket_test_util.h +++ b/net/socket/socket_test_util.h
@@ -94,18 +94,6 @@ IPEndPoint peer_addr; }; -struct MockConfirm { - // Asynchronous confirm success. - // Creates a MockConfirm with |mode| ASYC and |result| OK. - MockConfirm(); - // Creates a MockConfirm with the specified mode and result. - MockConfirm(IoMode io_mode, int r); - ~MockConfirm(); - - IoMode mode; - int result; -}; - // MockRead and MockWrite shares the same interface and members, but we'd like // to have distinct types because we don't want to have them used // interchangably. To do this, a struct template is defined, and MockRead and @@ -453,18 +441,9 @@ // Returns whether MockConnect data has been consumed. bool ConnectDataConsumed() const { return is_connect_data_consumed; } - // Returns whether MockConfirm data has been consumed. - bool ConfirmDataConsumed() const { return is_confirm_data_consumed; } - - // Returns whether a Write occurred before ConfirmHandshake completed. - bool WriteBeforeConfirm() const { return write_called_before_confirm; } - // Result for Connect(). MockConnect connect; - // Result for Confirm(). - MockConfirm confirm; - // Result for GetNegotiatedProtocol(). NextProto next_proto; @@ -480,8 +459,6 @@ uint16_t expected_ssl_version_max; bool is_connect_data_consumed = false; - bool is_confirm_data_consumed = false; - bool write_called_before_confirm = false; }; // Uses the sequence_number field in the mock reads and writes to @@ -921,7 +898,6 @@ // StreamSocket implementation. int Connect(CompletionOnceCallback callback) override; void Disconnect() override; - int ConfirmHandshake(CompletionOnceCallback callback) override; bool IsConnected() const override; bool IsConnectedAndIdle() const override; bool WasEverUsed() const override; @@ -965,8 +941,6 @@ void RunCallbackAsync(CompletionOnceCallback callback, int result); void RunCallback(CompletionOnceCallback callback, int result); - void RunConfirmHandshakeCallback(CompletionOnceCallback callback, int result); - bool connected_ = false; NetLogWithSource net_log_; std::unique_ptr<StreamSocket> stream_socket_;
diff --git a/net/spdy/bidirectional_stream_spdy_impl.cc b/net/spdy/bidirectional_stream_spdy_impl.cc index 32d0999..f1281455 100644 --- a/net/spdy/bidirectional_stream_spdy_impl.cc +++ b/net/spdy/bidirectional_stream_spdy_impl.cc
@@ -78,8 +78,7 @@ int rv = stream_request_.StartRequest( SPDY_BIDIRECTIONAL_STREAM, spdy_session_, request_info_->url, - false /* no early data */, request_info_->priority, - request_info_->socket_tag, net_log, + request_info_->priority, request_info_->socket_tag, net_log, base::Bind(&BidirectionalStreamSpdyImpl::OnStreamInitialized, weak_factory_.GetWeakPtr()), traffic_annotation);
diff --git a/net/spdy/spdy_http_stream.cc b/net/spdy/spdy_http_stream.cc index 63c692a..8d7ea84 100644 --- a/net/spdy/spdy_http_stream.cc +++ b/net/spdy/spdy_http_stream.cc
@@ -156,8 +156,8 @@ } int rv = stream_request_.StartRequest( - SPDY_REQUEST_RESPONSE_STREAM, spdy_session_, request_info_->url, - can_send_early, priority, request_info_->socket_tag, stream_net_log, + SPDY_REQUEST_RESPONSE_STREAM, spdy_session_, request_info_->url, priority, + request_info_->socket_tag, stream_net_log, base::BindOnce(&SpdyHttpStream::OnStreamCreated, weak_factory_.GetWeakPtr(), std::move(callback)), NetworkTrafficAnnotationTag(request_info->traffic_annotation));
diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc index d95840d..a17437d95 100644 --- a/net/spdy/spdy_network_transaction_unittest.cc +++ b/net/spdy/spdy_network_transaction_unittest.cc
@@ -8194,540 +8194,4 @@ #endif // BUILDFLAG(ENABLE_WEBSOCKETS) -TEST_F(SpdyNetworkTransactionTest, ZeroRTTDoesntConfirm) { - spdy::SpdySerializedFrame req( - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST)); - MockWrite writes[] = {CreateMockWrite(req, 0)}; - - spdy::SpdySerializedFrame resp( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); - spdy::SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockRead reads[] = { - CreateMockRead(resp, 1), CreateMockRead(body, 2), - MockRead(ASYNC, 0, 3) // EOF - }; - - SequencedSocketData data(reads, writes); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - // Configure |ssl_provider| to fail if ConfirmHandshake is called. The request - // should still succeed. - ssl_provider->confirm = MockConfirm(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); - helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider)); - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsOk()); - EXPECT_EQ("HTTP/1.1 200", out.status_line); - EXPECT_EQ("hello!", out.response_data); -} - -// Run multiple concurrent streams that don't require handshake confirmation. -TEST_F(SpdyNetworkTransactionTest, ZeroRTTNoConfirmMultipleStreams) { - spdy::SpdySerializedFrame req1( - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST)); - spdy::SpdySerializedFrame req2( - spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST)); - MockWrite writes1[] = {CreateMockWrite(req1, 0), CreateMockWrite(req2, 3)}; - - spdy::SpdySerializedFrame resp1( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); - spdy::SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true)); - spdy::SpdySerializedFrame resp2( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); - spdy::SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true)); - MockRead reads1[] = { - CreateMockRead(resp1, 1), CreateMockRead(body1, 2), - CreateMockRead(resp2, 4), CreateMockRead(body2, 5), - MockRead(ASYNC, 0, 6) // EOF - }; - - SequencedSocketData data1(reads1, writes1); - SequencedSocketData data2({}, {}); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider1 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider1->confirm = MockConfirm(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); - auto ssl_provider2 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider2->confirm = MockConfirm(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); - - helper.RunPreTestSetup(); - helper.AddDataWithSSLSocketDataProvider(&data1, std::move(ssl_provider1)); - helper.AddDataWithSSLSocketDataProvider(&data2, std::move(ssl_provider2)); - EXPECT_TRUE(helper.StartDefaultTest()); - - HttpNetworkTransaction trans2(DEFAULT_PRIORITY, helper.session()); - HttpRequestInfo request2; - request2.method = "GET"; - request2.url = GURL(kDefaultUrl); - request2.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - TestCompletionCallback callback2; - int rv = trans2.Start(&request2, callback2.callback(), log_); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - helper.FinishDefaultTest(); - EXPECT_THAT(callback2.GetResult(ERR_IO_PENDING), IsOk()); - helper.VerifyDataConsumed(); - - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsOk()); - EXPECT_EQ("HTTP/1.1 200", out.status_line); - EXPECT_EQ("hello!", out.response_data); -} - -// Run multiple concurrent streams that require handshake confirmation. -TEST_F(SpdyNetworkTransactionTest, ZeroRTTConfirmMultipleStreams) { - spdy::SpdyHeaderBlock req_block1( - spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, 0)); - spdy::SpdySerializedFrame req1( - spdy_util_.ConstructSpdyHeaders(1, std::move(req_block1), LOWEST, true)); - spdy::SpdyHeaderBlock req_block2( - spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, 0)); - spdy::SpdySerializedFrame req2( - spdy_util_.ConstructSpdyHeaders(3, std::move(req_block2), LOWEST, true)); - MockWrite writes[] = { - CreateMockWrite(req1, 0), - CreateMockWrite(req2, 3), - }; - spdy::SpdySerializedFrame resp1( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); - spdy::SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true)); - spdy::SpdySerializedFrame resp2( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); - spdy::SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true)); - MockRead reads[] = { - CreateMockRead(resp1, 1), CreateMockRead(body1, 2), - CreateMockRead(resp2, 4), CreateMockRead(body2, 5), - MockRead(ASYNC, 0, 6) // EOF - }; - - SequencedSocketData data1(reads, writes); - SequencedSocketData data2({}, {}); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider1 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider1->confirm = MockConfirm(ASYNC, OK); - auto ssl_provider2 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider2->confirm = MockConfirm(ASYNC, OK); - - helper.RunPreTestSetup(); - helper.AddDataWithSSLSocketDataProvider(&data1, std::move(ssl_provider1)); - helper.AddDataWithSSLSocketDataProvider(&data2, std::move(ssl_provider2)); - - HttpNetworkTransaction trans1(DEFAULT_PRIORITY, helper.session()); - HttpRequestInfo request1; - request1.method = "POST"; - request1.url = GURL(kDefaultUrl); - request1.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - TestCompletionCallback callback1; - int rv = trans1.Start(&request1, callback1.callback(), log_); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - HttpNetworkTransaction trans2(DEFAULT_PRIORITY, helper.session()); - HttpRequestInfo request2; - request2.method = "POST"; - request2.url = GURL(kDefaultUrl); - request2.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - TestCompletionCallback callback2; - rv = trans2.Start(&request2, callback2.callback(), log_); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - EXPECT_THAT(callback1.GetResult(ERR_IO_PENDING), IsOk()); - EXPECT_THAT(callback2.GetResult(ERR_IO_PENDING), IsOk()); - - const HttpResponseInfo* response1 = trans1.GetResponseInfo(); - ASSERT_TRUE(response1); - ASSERT_TRUE(response1->headers); - EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP2, - response1->connection_info); - EXPECT_EQ("HTTP/1.1 200", response1->headers->GetStatusLine()); - std::string response_data; - ReadTransaction(&trans1, &response_data); - EXPECT_EQ("hello!", response_data); - - const HttpResponseInfo* response2 = trans2.GetResponseInfo(); - ASSERT_TRUE(response2); - ASSERT_TRUE(response2->headers); - EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP2, - response2->connection_info); - EXPECT_EQ("HTTP/1.1 200", response2->headers->GetStatusLine()); - ReadTransaction(&trans2, &response_data); - EXPECT_EQ("hello!", response_data); - - helper.VerifyDataConsumed(); -} - -// Run multiple concurrent streams, the first require a confirmation and the -// second not requiring confirmation. -TEST_F(SpdyNetworkTransactionTest, ZeroRTTConfirmNoConfirmStreams) { - // This test orders the writes such that the GET (no confirmation) is written - // before the POST (confirmation required). - spdy::SpdyHeaderBlock req_block1( - spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); - spdy::SpdySerializedFrame req1( - spdy_util_.ConstructSpdyHeaders(1, std::move(req_block1), LOWEST, true)); - spdy::SpdyHeaderBlock req_block2( - spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, 0)); - spdy::SpdySerializedFrame req2( - spdy_util_.ConstructSpdyHeaders(3, std::move(req_block2), LOWEST, true)); - MockWrite writes[] = { - CreateMockWrite(req1, 0), - CreateMockWrite(req2, 3), - }; - spdy::SpdySerializedFrame resp1( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); - spdy::SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true)); - spdy::SpdySerializedFrame resp2( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); - spdy::SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true)); - MockRead reads[] = { - CreateMockRead(resp1, 1), CreateMockRead(body1, 2), - CreateMockRead(resp2, 4), CreateMockRead(body2, 5), - MockRead(ASYNC, 0, 6) // EOF - }; - - SequencedSocketData data1(reads, writes); - SequencedSocketData data2({}, {}); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider1 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider1->confirm = MockConfirm(ASYNC, OK); - auto ssl_provider2 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider2->confirm = MockConfirm(ASYNC, OK); - - helper.RunPreTestSetup(); - helper.AddDataWithSSLSocketDataProvider(&data1, std::move(ssl_provider1)); - helper.AddDataWithSSLSocketDataProvider(&data2, std::move(ssl_provider2)); - - // TODO(https://crbug.com/949724): Explicitly verify the ordering of - // ConfirmHandshake and the second stream. - - HttpNetworkTransaction trans1(DEFAULT_PRIORITY, helper.session()); - HttpRequestInfo request1; - request1.method = "POST"; - request1.url = GURL(kDefaultUrl); - request1.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - TestCompletionCallback callback1; - int rv = trans1.Start(&request1, callback1.callback(), log_); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - HttpNetworkTransaction trans2(DEFAULT_PRIORITY, helper.session()); - HttpRequestInfo request2; - request2.method = "GET"; - request2.url = GURL(kDefaultUrl); - request2.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - TestCompletionCallback callback2; - rv = trans2.Start(&request2, callback2.callback(), log_); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - EXPECT_THAT(callback1.GetResult(ERR_IO_PENDING), IsOk()); - EXPECT_THAT(callback2.GetResult(ERR_IO_PENDING), IsOk()); - - const HttpResponseInfo* response1 = trans1.GetResponseInfo(); - ASSERT_TRUE(response1); - ASSERT_TRUE(response1->headers); - EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP2, - response1->connection_info); - EXPECT_EQ("HTTP/1.1 200", response1->headers->GetStatusLine()); - std::string response_data; - ReadTransaction(&trans1, &response_data); - EXPECT_EQ("hello!", response_data); - - const HttpResponseInfo* response2 = trans2.GetResponseInfo(); - ASSERT_TRUE(response2); - ASSERT_TRUE(response2->headers); - EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP2, - response2->connection_info); - EXPECT_EQ("HTTP/1.1 200", response2->headers->GetStatusLine()); - ReadTransaction(&trans2, &response_data); - EXPECT_EQ("hello!", response_data); - - helper.VerifyDataConsumed(); -} - -// Run multiple concurrent streams, the first not requiring confirmation and the -// second requiring confirmation. -TEST_F(SpdyNetworkTransactionTest, ZeroRTTNoConfirmConfirmStreams) { - // This test orders the writes such that the GET (no confirmation) is written - // before the POST (confirmation required). - spdy::SpdyHeaderBlock req_block1( - spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); - spdy::SpdySerializedFrame req1( - spdy_util_.ConstructSpdyHeaders(1, std::move(req_block1), LOWEST, true)); - spdy::SpdyHeaderBlock req_block2( - spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, 0)); - spdy::SpdySerializedFrame req2( - spdy_util_.ConstructSpdyHeaders(3, std::move(req_block2), LOWEST, true)); - MockWrite writes[] = { - CreateMockWrite(req1, 0), - CreateMockWrite(req2, 3), - }; - spdy::SpdySerializedFrame resp1( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); - spdy::SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true)); - spdy::SpdySerializedFrame resp2( - spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); - spdy::SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true)); - MockRead reads[] = { - CreateMockRead(resp1, 1), CreateMockRead(body1, 2), - CreateMockRead(resp2, 4), CreateMockRead(body2, 5), - MockRead(ASYNC, 0, 6) // EOF - }; - - SequencedSocketData data1(reads, writes); - SequencedSocketData data2({}, {}); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider1 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider1->confirm = MockConfirm(ASYNC, OK); - auto ssl_provider2 = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider2->confirm = MockConfirm(ASYNC, OK); - - helper.RunPreTestSetup(); - helper.AddDataWithSSLSocketDataProvider(&data1, std::move(ssl_provider1)); - helper.AddDataWithSSLSocketDataProvider(&data2, std::move(ssl_provider2)); - - // TODO(https://crbug.com/949724): Explicitly verify the ordering of - // ConfirmHandshake and the second stream. - - HttpNetworkTransaction trans1(DEFAULT_PRIORITY, helper.session()); - HttpRequestInfo request1; - request1.method = "GET"; - request1.url = GURL(kDefaultUrl); - request1.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - TestCompletionCallback callback1; - int rv = trans1.Start(&request1, callback1.callback(), log_); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - HttpNetworkTransaction trans2(DEFAULT_PRIORITY, helper.session()); - HttpRequestInfo request2; - request2.method = "POST"; - request2.url = GURL(kDefaultUrl); - request2.traffic_annotation = - net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); - TestCompletionCallback callback2; - rv = trans2.Start(&request2, callback2.callback(), log_); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - - EXPECT_THAT(callback1.GetResult(ERR_IO_PENDING), IsOk()); - EXPECT_THAT(callback2.GetResult(ERR_IO_PENDING), IsOk()); - - const HttpResponseInfo* response1 = trans1.GetResponseInfo(); - ASSERT_TRUE(response1); - ASSERT_TRUE(response1->headers); - EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP2, - response1->connection_info); - EXPECT_EQ("HTTP/1.1 200", response1->headers->GetStatusLine()); - std::string response_data; - ReadTransaction(&trans1, &response_data); - EXPECT_EQ("hello!", response_data); - - const HttpResponseInfo* response2 = trans2.GetResponseInfo(); - ASSERT_TRUE(response2); - ASSERT_TRUE(response2->headers); - EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP2, - response2->connection_info); - EXPECT_EQ("HTTP/1.1 200", response2->headers->GetStatusLine()); - ReadTransaction(&trans2, &response_data); - EXPECT_EQ("hello!", response_data); - - helper.VerifyDataConsumed(); -} - -TEST_F(SpdyNetworkTransactionTest, ZeroRTTSyncConfirmSyncWrite) { - spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( - kDefaultUrl, 1, kUploadDataSize, LOWEST, nullptr, 0)); - spdy::SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockWrite writes[] = { - CreateMockWrite(req, 0, SYNCHRONOUS), - CreateMockWrite(body, 1), // POST upload frame - }; - - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); - MockRead reads[] = { - CreateMockRead(resp, 2), CreateMockRead(body, 3), - MockRead(ASYNC, 0, 4) // EOF - }; - - SequencedSocketData data(reads, writes); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider->confirm = MockConfirm(SYNCHRONOUS, OK); - helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider)); - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsOk()); - EXPECT_EQ("HTTP/1.1 200", out.status_line); - EXPECT_EQ("hello!", out.response_data); -} - -TEST_F(SpdyNetworkTransactionTest, ZeroRTTSyncConfirmAsyncWrite) { - spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( - kDefaultUrl, 1, kUploadDataSize, LOWEST, nullptr, 0)); - spdy::SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockWrite writes[] = { - CreateMockWrite(req, 0, ASYNC), - CreateMockWrite(body, 1), // POST upload frame - }; - - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); - MockRead reads[] = { - CreateMockRead(resp, 2), CreateMockRead(body, 3), - MockRead(ASYNC, 0, 4) // EOF - }; - - SequencedSocketData data(reads, writes); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider->confirm = MockConfirm(SYNCHRONOUS, OK); - helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider)); - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsOk()); - EXPECT_EQ("HTTP/1.1 200", out.status_line); - EXPECT_EQ("hello!", out.response_data); -} - -TEST_F(SpdyNetworkTransactionTest, ZeroRTTAsyncConfirmSyncWrite) { - spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( - kDefaultUrl, 1, kUploadDataSize, LOWEST, nullptr, 0)); - spdy::SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockWrite writes[] = { - CreateMockWrite(req, 0, SYNCHRONOUS), - CreateMockWrite(body, 1), // POST upload frame - }; - - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); - MockRead reads[] = { - CreateMockRead(resp, 2), CreateMockRead(body, 3), - MockRead(ASYNC, 0, 4) // EOF - }; - - SequencedSocketData data(reads, writes); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider->confirm = MockConfirm(ASYNC, OK); - helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider)); - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsOk()); - EXPECT_EQ("HTTP/1.1 200", out.status_line); - EXPECT_EQ("hello!", out.response_data); -} - -TEST_F(SpdyNetworkTransactionTest, ZeroRTTAsyncConfirmAsyncWrite) { - spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( - kDefaultUrl, 1, kUploadDataSize, LOWEST, nullptr, 0)); - spdy::SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockWrite writes[] = { - CreateMockWrite(req, 0, ASYNC), - CreateMockWrite(body, 1), // POST upload frame - }; - - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); - MockRead reads[] = { - CreateMockRead(resp, 2), CreateMockRead(body, 3), - MockRead(ASYNC, 0, 4) // EOF - }; - - SequencedSocketData data(reads, writes); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider->confirm = MockConfirm(ASYNC, OK); - helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider)); - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsOk()); - EXPECT_EQ("HTTP/1.1 200", out.status_line); - EXPECT_EQ("hello!", out.response_data); -} - -TEST_F(SpdyNetworkTransactionTest, ZeroRTTConfirmErrorSync) { - spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( - kDefaultUrl, 1, kUploadDataSize, LOWEST, nullptr, 0)); - spdy::SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockWrite writes[] = { - CreateMockWrite(req, 0), CreateMockWrite(body, 1), // POST upload frame - }; - - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); - MockRead reads[] = { - CreateMockRead(resp, 2), CreateMockRead(body, 3), - MockRead(ASYNC, 0, 4) // EOF - }; - - SequencedSocketData data(reads, writes); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider->confirm = MockConfirm(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); - helper.RunPreTestSetup(); - helper.AddDataWithSSLSocketDataProvider(&data, std::move(ssl_provider)); - helper.RunDefaultTest(); - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsError(ERR_SSL_PROTOCOL_ERROR)); -} - -TEST_F(SpdyNetworkTransactionTest, ZeroRTTConfirmErrorAsync) { - spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( - kDefaultUrl, 1, kUploadDataSize, LOWEST, nullptr, 0)); - spdy::SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockWrite writes[] = { - CreateMockWrite(req, 0), CreateMockWrite(body, 1), // POST upload frame - }; - - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); - MockRead reads[] = { - CreateMockRead(resp, 2), CreateMockRead(body, 3), - MockRead(ASYNC, 0, 4) // EOF - }; - - SequencedSocketData data(reads, writes); - UsePostRequest(); - auto session_deps = std::make_unique<SpdySessionDependencies>(); - session_deps->enable_early_data = true; - NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, - std::move(session_deps)); - auto ssl_provider = std::make_unique<SSLSocketDataProvider>(ASYNC, OK); - ssl_provider->confirm = MockConfirm(ASYNC, ERR_SSL_PROTOCOL_ERROR); - helper.RunPreTestSetup(); - helper.AddDataWithSSLSocketDataProvider(&data, std::move(ssl_provider)); - helper.RunDefaultTest(); - TransactionHelperResult out = helper.output(); - EXPECT_THAT(out.rv, IsError(ERR_SSL_PROTOCOL_ERROR)); -} - } // namespace net
diff --git a/net/spdy/spdy_proxy_client_socket_unittest.cc b/net/spdy/spdy_proxy_client_socket_unittest.cc index 329e2217e..1b09efe 100644 --- a/net/spdy/spdy_proxy_client_socket_unittest.cc +++ b/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -199,7 +199,6 @@ ProxyServer proxy_; SpdySessionKey endpoint_spdy_session_key_; std::unique_ptr<CommonConnectJobParams> common_connect_job_params_; - SSLSocketDataProvider ssl_; DISALLOW_COPY_AND_ASSIGN(SpdyProxyClientSocketTest); }; @@ -216,8 +215,7 @@ proxy_, PRIVACY_MODE_DISABLED, SpdySessionKey::IsProxySession::kFalse, - SocketTag()), - ssl_(SYNCHRONOUS, OK) { + SocketTag()) { session_deps_.net_log = net_log_.bound().net_log(); } @@ -243,10 +241,11 @@ data_->set_connect_data(connect_data_); session_deps_.socket_factory->AddSocketDataProvider(data_.get()); - ssl_.ssl_info.cert = + SSLSocketDataProvider ssl(SYNCHRONOUS, OK); + ssl.ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); - ASSERT_TRUE(ssl_.ssl_info.cert); - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_); + ASSERT_TRUE(ssl.ssl_info.cert); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); common_connect_job_params_ = std::make_unique<CommonConnectJobParams>(
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 9b6ac6832..a88cca7 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc
@@ -666,7 +666,6 @@ SpdyStreamType type, const base::WeakPtr<SpdySession>& session, const GURL& url, - bool can_send_early, RequestPriority priority, const SocketTag& socket_tag, const NetLogWithSource& net_log, @@ -681,25 +680,18 @@ type_ = type; session_ = session; url_ = SimplifyUrlForRequest(url); - can_send_early_ = can_send_early; priority_ = priority; socket_tag_ = socket_tag; net_log_ = net_log; callback_ = std::move(callback); traffic_annotation_ = MutableNetworkTrafficAnnotationTag(traffic_annotation); - next_state_ = STATE_WAIT_FOR_CONFIRMATION; - int rv = DoLoop(OK); - if (rv != OK) - return rv; - base::WeakPtr<SpdyStream> stream; - rv = session->TryCreateStream(weak_ptr_factory_.GetWeakPtr(), &stream); - if (rv != OK) - return rv; - - Reset(); - stream_ = stream; + int rv = session->TryCreateStream(weak_ptr_factory_.GetWeakPtr(), &stream); + if (rv == OK) { + Reset(); + stream_ = stream; + } return rv; } @@ -762,74 +754,11 @@ session_.reset(); stream_.reset(); url_ = GURL(); - can_send_early_ = false; priority_ = MINIMUM_PRIORITY; socket_tag_ = SocketTag(); net_log_ = NetLogWithSource(); callback_.Reset(); traffic_annotation_.reset(); - next_state_ = STATE_NONE; -} - -void SpdyStreamRequest::OnIOComplete(int rv) { - if (rv != OK) { - OnRequestCompleteFailure(rv); - } else { - DoLoop(rv); - } -} - -int SpdyStreamRequest::DoLoop(int rv) { - do { - State state = next_state_; - next_state_ = STATE_NONE; - switch (state) { - case STATE_WAIT_FOR_CONFIRMATION: - CHECK_EQ(OK, rv); - return DoWaitForConfirmation(); - break; - case STATE_REQUEST_STREAM: - CHECK_EQ(OK, rv); - return DoRequestStream(rv); - break; - default: - NOTREACHED() << "next_state_: " << next_state_; - break; - } - } while (next_state_ != STATE_NONE && next_state_ && rv != ERR_IO_PENDING); - return rv; -} - -int SpdyStreamRequest::DoWaitForConfirmation() { - if (can_send_early_) { - next_state_ = STATE_NONE; - return OK; - } - - int rv = session_->ConfirmHandshake(base::BindOnce( - &SpdyStreamRequest::OnIOComplete, weak_ptr_factory_.GetWeakPtr())); - // If ConfirmHandshake returned synchronously, exit the state machine early - // so StartRequest can call TryCreateStream synchronously. Otherwise, - // TryCreateStream will be called asynchronously as part of the confirmation - // state machine. - next_state_ = rv == ERR_IO_PENDING ? STATE_REQUEST_STREAM : STATE_NONE; - return rv; -} - -int SpdyStreamRequest::DoRequestStream(int rv) { - DCHECK_NE(ERR_IO_PENDING, rv); - next_state_ = STATE_NONE; - if (rv < 0) - return rv; - - base::WeakPtr<SpdyStream> stream; - rv = session_->TryCreateStream(weak_ptr_factory_.GetWeakPtr(), &stream); - if (rv == OK) { - OnRequestCompleteSuccess(stream); - } else if (rv != ERR_IO_PENDING) { - OnRequestCompleteFailure(rv); - } - return rv; } // static @@ -925,7 +854,6 @@ error_on_close_(OK), initial_settings_(initial_settings), greased_http2_frame_(greased_http2_frame), - in_confirm_handshake_(false), max_concurrent_streams_(kInitialMaxConcurrentStreams), max_concurrent_pushed_streams_( initial_settings.at(spdy::SETTINGS_MAX_CONCURRENT_STREAMS)), @@ -987,8 +915,6 @@ CHECK(!in_io_loop_); DcheckDraining(); - DCHECK(waiting_for_confirmation_callbacks_.empty()); - // TODO(akalin): Check connection->is_initialized(). DCHECK(socket_); // With SPDY we can't recycle sockets. @@ -1107,20 +1033,6 @@ stream->traffic_annotation()); } -int SpdySession::ConfirmHandshake(CompletionOnceCallback callback) { - int rv = ERR_IO_PENDING; - if (!in_confirm_handshake_) { - rv = socket_->ConfirmHandshake( - base::BindOnce(&SpdySession::NotifyRequestsOfConfirmation, - weak_factory_.GetWeakPtr())); - } - if (rv == ERR_IO_PENDING) { - in_confirm_handshake_ = true; - waiting_for_confirmation_callbacks_.push_back(std::move(callback)); - } - return rv; -} - std::unique_ptr<spdy::SpdySerializedFrame> SpdySession::CreateHeaders( spdy::SpdyStreamId stream_id, RequestPriority priority, @@ -2483,15 +2395,6 @@ return OK; } -void SpdySession::NotifyRequestsOfConfirmation(int rv) { - for (auto& callback : waiting_for_confirmation_callbacks_) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), rv)); - } - waiting_for_confirmation_callbacks_.clear(); - in_confirm_handshake_ = false; -} - void SpdySession::SendInitialData() { DCHECK(enable_sending_initial_data_); DCHECK(buffered_spdy_framer_.get()); @@ -2881,10 +2784,6 @@ } MakeUnavailable(); - // Notify any requests waiting for handshake confirmation that there is an - // error. - NotifyRequestsOfConfirmation(err); - // Mark host_port_pair requiring HTTP/1.1 for subsequent connections. if (err == ERR_HTTP_1_1_REQUIRED) { http_server_properties_->SetHTTP11Required(host_port_pair());
diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index 827f1b8..235c85a 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h
@@ -203,9 +203,6 @@ // is not created, an error is returned, and ReleaseStream() may not // be called. // - // If |can_send_early| is true, this request is allowed to be sent over - // TLS 1.3 0RTT without confirming the handshake. - // // If OK is returned, must not be called again without // ReleaseStream() being called first. If ERR_IO_PENDING is // returned, must not be called again without CancelRequest() or @@ -214,7 +211,6 @@ int StartRequest(SpdyStreamType type, const base::WeakPtr<SpdySession>& session, const GURL& url, - bool can_send_early, RequestPriority priority, const SocketTag& socket_tag, const NetLogWithSource& net_log, @@ -245,17 +241,6 @@ private: friend class SpdySession; - enum State { - STATE_NONE, - STATE_WAIT_FOR_CONFIRMATION, - STATE_REQUEST_STREAM, - }; - - void OnIOComplete(int rv); - int DoLoop(int rv); - int DoWaitForConfirmation(); - int DoRequestStream(int rv); - // Called by |session_| when the stream attempt has finished // successfully. void OnRequestCompleteSuccess(const base::WeakPtr<SpdyStream>& stream); @@ -277,13 +262,11 @@ base::WeakPtr<SpdySession> session_; base::WeakPtr<SpdyStream> stream_; GURL url_; - bool can_send_early_; RequestPriority priority_; SocketTag socket_tag_; NetLogWithSource net_log_; CompletionOnceCallback callback_; MutableNetworkTrafficAnnotationTag traffic_annotation_; - State next_state_; base::WeakPtrFactory<SpdyStreamRequest> weak_ptr_factory_; @@ -399,11 +382,6 @@ spdy::SpdyFrameType frame_type, std::unique_ptr<SpdyBufferProducer> producer); - // Runs the handshake to completion to confirm the handshake with the server. - // If ERR_IO_PENDING is returned, then when the handshake is confirmed, - // |callback| will be called. - int ConfirmHandshake(CompletionOnceCallback callback); - // Creates and returns a HEADERS frame for |stream_id|. std::unique_ptr<spdy::SpdySerializedFrame> CreateHeaders( spdy::SpdyStreamId stream_id, @@ -726,8 +704,6 @@ int DoWrite(); int DoWriteComplete(int result); - void NotifyRequestsOfConfirmation(int rv); - // TODO(akalin): Rename the Send* and Write* functions below to // Enqueue*. @@ -1078,13 +1054,6 @@ // https://tools.ietf.org/html/draft-bishop-httpbis-grease-00. const base::Optional<SpdySessionPool::GreasedHttp2Frame> greased_http2_frame_; - // The callbacks to notify a request that the handshake has been confirmed. - std::vector<CompletionOnceCallback> waiting_for_confirmation_callbacks_; - - // True if there is an ongoing handshake confirmation with outstanding - // requests. - bool in_confirm_handshake_; - // Limits size_t max_concurrent_streams_; size_t max_concurrent_pushed_streams_;
diff --git a/net/spdy/spdy_session_fuzzer.cc b/net/spdy/spdy_session_fuzzer.cc index 417cd9a..4b920299 100644 --- a/net/spdy/spdy_session_fuzzer.cc +++ b/net/spdy/spdy_session_fuzzer.cc
@@ -131,9 +131,9 @@ net::TestCompletionCallback wait_for_start; int rv = stream_request.StartRequest( net::SPDY_REQUEST_RESPONSE_STREAM, spdy_session, - GURL("http://www.example.invalid/"), false /* no early data */, - net::DEFAULT_PRIORITY, net::SocketTag(), bound_test_net_log.bound(), - wait_for_start.callback(), TRAFFIC_ANNOTATION_FOR_TESTS); + GURL("http://www.example.invalid/"), net::DEFAULT_PRIORITY, + net::SocketTag(), bound_test_net_log.bound(), wait_for_start.callback(), + TRAFFIC_ANNOTATION_FOR_TESTS); if (rv == net::ERR_IO_PENDING) { rv = wait_for_start.WaitForResult();
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc index 4ee2aee..05dd8a9 100644 --- a/net/spdy/spdy_session_unittest.cc +++ b/net/spdy/spdy_session_unittest.cc
@@ -444,7 +444,7 @@ StreamRequestDestroyingCallback callback1; ASSERT_EQ(ERR_IO_PENDING, request1.StartRequest(SPDY_BIDIRECTIONAL_STREAM, session_, - test_url_, false, MEDIUM, SocketTag(), + test_url_, MEDIUM, SocketTag(), NetLogWithSource(), callback1.MakeCallback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -452,7 +452,7 @@ TestCompletionCallback callback2; ASSERT_EQ(ERR_IO_PENDING, request2->StartRequest(SPDY_BIDIRECTIONAL_STREAM, session_, - test_url_, false, MEDIUM, SocketTag(), + test_url_, MEDIUM, SocketTag(), NetLogWithSource(), callback2.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -879,8 +879,8 @@ SpdyStreamRequest stream_request; int rv = stream_request.StartRequest( - SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, false, MEDIUM, - SocketTag(), NetLogWithSource(), CompletionOnceCallback(), + SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, SocketTag(), + NetLogWithSource(), CompletionOnceCallback(), TRAFFIC_ANNOTATION_FOR_TESTS); EXPECT_THAT(rv, IsError(ERR_FAILED)); @@ -1305,7 +1305,7 @@ TestCompletionCallback callback4; EXPECT_EQ(ERR_IO_PENDING, request4.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, - test_url_, false, MEDIUM, SocketTag(), + test_url_, MEDIUM, SocketTag(), NetLogWithSource(), callback4.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -1411,10 +1411,9 @@ // Start request. SpdyStreamRequest request; TestCompletionCallback callback; - int rv = - request.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, - false, MEDIUM, SocketTag(), NetLogWithSource(), - callback.callback(), TRAFFIC_ANNOTATION_FOR_TESTS); + int rv = request.StartRequest( + SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, SocketTag(), + NetLogWithSource(), callback.callback(), TRAFFIC_ANNOTATION_FOR_TESTS); EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); // Stream is stalled. @@ -1480,7 +1479,7 @@ TestCompletionCallback callback2; EXPECT_EQ(ERR_IO_PENDING, request2.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, - test_url_, false, MEDIUM, SocketTag(), + test_url_, MEDIUM, SocketTag(), NetLogWithSource(), callback2.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -2001,11 +2000,12 @@ SpdyStreamRequest request; ASSERT_EQ(ERR_IO_PENDING, request.StartRequest(SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, - false, MEDIUM, SocketTag(), NetLogWithSource(), + MEDIUM, SocketTag(), NetLogWithSource(), stream_releaser.MakeCallback(&request), TRAFFIC_ANNOTATION_FOR_TESTS)); base::RunLoop().RunUntilIdle(); + EXPECT_THAT(stream_releaser.WaitForResult(), IsOk()); data.Resume(); @@ -2056,7 +2056,7 @@ SpdyStreamRequest request; ASSERT_THAT( request.StartRequest(SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, - false, MEDIUM, SocketTag(), NetLogWithSource(), + MEDIUM, SocketTag(), NetLogWithSource(), callback->callback(), TRAFFIC_ANNOTATION_FOR_TESTS), IsError(ERR_IO_PENDING)); @@ -2089,14 +2089,14 @@ TestCompletionCallback callback1; SpdyStreamRequest request1; ASSERT_EQ(OK, request1.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, - test_url_, false, LOWEST, SocketTag(), + test_url_, LOWEST, SocketTag(), NetLogWithSource(), callback1.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); TestCompletionCallback callback2; SpdyStreamRequest request2; ASSERT_EQ(ERR_IO_PENDING, request2.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, - test_url_, false, LOWEST, SocketTag(), + test_url_, LOWEST, SocketTag(), NetLogWithSource(), callback2.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -2856,7 +2856,7 @@ SpdyStreamRequest request2; ASSERT_EQ(ERR_IO_PENDING, request2.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, - test_url_, false, LOWEST, SocketTag(), + test_url_, LOWEST, SocketTag(), NetLogWithSource(), callback2.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -2864,7 +2864,7 @@ SpdyStreamRequest request3; ASSERT_EQ(ERR_IO_PENDING, request3.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, - test_url_, false, LOWEST, SocketTag(), + test_url_, LOWEST, SocketTag(), NetLogWithSource(), callback3.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -2969,7 +2969,7 @@ SpdyStreamRequest request2; ASSERT_EQ(ERR_IO_PENDING, request2.StartRequest(SPDY_BIDIRECTIONAL_STREAM, session_, - test_url_, false, LOWEST, SocketTag(), + test_url_, LOWEST, SocketTag(), NetLogWithSource(), callback2.callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); @@ -2977,7 +2977,7 @@ SpdyStreamRequest request3; ASSERT_EQ(ERR_IO_PENDING, request3.StartRequest(SPDY_BIDIRECTIONAL_STREAM, session_, - test_url_, false, LOWEST, SocketTag(), + test_url_, LOWEST, SocketTag(), NetLogWithSource(), callback3.callback(), TRAFFIC_ANNOTATION_FOR_TESTS));
diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc index 988d82b..0a2d5007 100644 --- a/net/spdy/spdy_test_util_common.cc +++ b/net/spdy/spdy_test_util_common.cc
@@ -251,9 +251,8 @@ const NetLogWithSource& net_log) { SpdyStreamRequest stream_request; int rv = stream_request.StartRequest( - type, session, url, false /* no early data */, priority, SocketTag(), - net_log, CompletionOnceCallback(), TRAFFIC_ANNOTATION_FOR_TESTS); - + type, session, url, priority, SocketTag(), net_log, + CompletionOnceCallback(), TRAFFIC_ANNOTATION_FOR_TESTS); return (rv == OK) ? stream_request.ReleaseStream() : base::WeakPtr<SpdyStream>(); } @@ -343,8 +342,7 @@ enable_websocket_over_http2(false), net_log(nullptr), http_09_on_non_default_ports_enabled(false), - disable_idle_sockets_close_on_memory_pressure(false), - enable_early_data(false) { + disable_idle_sockets_close_on_memory_pressure(false) { http2_settings[spdy::SETTINGS_INITIAL_WINDOW_SIZE] = kDefaultInitialWindowSize; } @@ -397,7 +395,6 @@ session_deps->http_09_on_non_default_ports_enabled; params.disable_idle_sockets_close_on_memory_pressure = session_deps->disable_idle_sockets_close_on_memory_pressure; - params.enable_early_data = session_deps->enable_early_data; return params; }
diff --git a/net/spdy/spdy_test_util_common.h b/net/spdy/spdy_test_util_common.h index e0423d25..def43e7 100644 --- a/net/spdy/spdy_test_util_common.h +++ b/net/spdy/spdy_test_util_common.h
@@ -235,7 +235,6 @@ NetLog* net_log; bool http_09_on_non_default_ports_enabled; bool disable_idle_sockets_close_on_memory_pressure; - bool enable_early_data; }; class SpdyURLRequestContext : public URLRequestContext {
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index cd8e8de..a2cde27e 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc
@@ -12584,403 +12584,4 @@ } #endif -// Provides a response to the 0RTT request indicating whether it was received -// as early data. -class ZeroRTTResponse : public test_server::BasicHttpResponse { - public: - explicit ZeroRTTResponse(bool zero_rtt) : zero_rtt_(zero_rtt) {} - ~ZeroRTTResponse() override {} - - void SendResponse(const test_server::SendBytesCallback& send, - const test_server::SendCompleteCallback& done) override { - AddCustomHeader("Vary", "Early-Data"); - set_content_type("text/plain"); - AddCustomHeader("Cache-Control", "no-cache"); - if (zero_rtt_) { - set_content("1"); - } else { - set_content("0"); - } - - // Since the EmbeddedTestServer doesn't keep the socket open by default, - // it is explicitly kept alive to allow the remaining leg of the 0RTT - // handshake to be received after the early data. - send.Run(ToResponseString(), base::DoNothing()); - } - - private: - bool zero_rtt_; - - DISALLOW_COPY_AND_ASSIGN(ZeroRTTResponse); -}; - -std::unique_ptr<test_server::HttpResponse> HandleZeroRTTRequest( - const test_server::HttpRequest& request) { - if (request.GetURL().path() != "/zerortt") - return nullptr; - auto iter = request.headers.find("Early-Data"); - bool zero_rtt = iter != request.headers.end() && iter->second == "1"; - return std::make_unique<ZeroRTTResponse>(zero_rtt); -} - -class HTTPSEarlyDataTest : public TestWithScopedTaskEnvironment { - public: - HTTPSEarlyDataTest() - : context_(true), test_server_(net::EmbeddedTestServer::TYPE_HTTPS) { - auto params = std::make_unique<HttpNetworkSession::Params>(); - params->enable_early_data = true; - context_.set_http_network_session_params(std::move(params)); - - context_.set_network_delegate(&network_delegate_); - cert_verifier_.set_default_result(OK); - context_.set_cert_verifier(&cert_verifier_); - - ssl_config_service_ = std::make_unique<TestSSLConfigService>(); - ssl_config_service_->set_max_version(SSL_PROTOCOL_VERSION_TLS1_3); - context_.set_ssl_config_service(ssl_config_service_.get()); - - context_.Init(); - - ssl_config_.version_max = SSL_PROTOCOL_VERSION_TLS1_3; - ssl_config_.early_data_enabled = true; - test_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config_); - test_server_.AddDefaultHandlers( - base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); - test_server_.RegisterRequestHandler( - base::BindRepeating(&HandleZeroRTTRequest)); - } - - ~HTTPSEarlyDataTest() override = default; - - void ResetSSLConfig(net::EmbeddedTestServer::ServerCertificate cert, - uint16_t version) { - ssl_config_.version_max = version; - test_server_.ResetSSLConfig(cert, ssl_config_); - } - - protected: - MockCertVerifier cert_verifier_; - TestNetworkDelegate network_delegate_; // Must outlive URLRequest. - std::unique_ptr<TestSSLConfigService> ssl_config_service_; - TestURLRequestContext context_; - - SSLServerConfig ssl_config_; - EmbeddedTestServer test_server_; -}; - -// TLSEarlyDataTest tests that we handle early data correctly. -TEST_F(HTTPSEarlyDataTest, TLSEarlyDataTest) { - ASSERT_TRUE(test_server_.Start()); - context_.http_transaction_factory()->GetSession()->ClearSSLSessionCache(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the initial request, and the - // handler should return "0". - EXPECT_EQ("0", d.data_received()); - } - - context_.http_transaction_factory()->GetSession()->CloseAllConnections(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The Early-Data header should be a single '1' in the resumed request, and - // the handler should return "1". - EXPECT_EQ("1", d.data_received()); - } -} - -// TLSEarlyDataTest tests that we handle early data correctly for POST. -TEST_F(HTTPSEarlyDataTest, TLSEarlyDataPOSTTest) { - ASSERT_TRUE(test_server_.Start()); - context_.http_transaction_factory()->GetSession()->ClearSSLSessionCache(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the initial request, and the - // handler should return "0". - EXPECT_EQ("0", d.data_received()); - } - - context_.http_transaction_factory()->GetSession()->CloseAllConnections(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - r->set_method("POST"); - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the request, since we don't - // send POSTs over early data, and the handler should return "0". - EXPECT_EQ("0", d.data_received()); - } -} - -std::unique_ptr<test_server::HttpResponse> HandleTooEarly( - bool* sent_425, - const test_server::HttpRequest& request) { - if (request.GetURL().path() != "/tooearly") - return nullptr; - std::unique_ptr<test_server::BasicHttpResponse> http_response( - new test_server::BasicHttpResponse); - http_response->set_content_type("text/html"); - if (request.headers.find("Early-Data") != request.headers.end()) { - EXPECT_EQ("1", request.headers.at("Early-Data")); - http_response->set_code(HTTP_TOO_EARLY); - http_response->set_content("1"); - *sent_425 = true; - } else { - http_response->set_content("None"); - } - return std::move(http_response); -} - -// Test that we handle 425 (Too Early) correctly. -TEST_F(HTTPSEarlyDataTest, TLSEarlyDataTooEarlyTest) { - bool sent_425 = false; - test_server_.RegisterRequestHandler( - base::BindRepeating(&HandleTooEarly, base::Unretained(&sent_425))); - ASSERT_TRUE(test_server_.Start()); - context_.http_transaction_factory()->GetSession()->ClearSSLSessionCache(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/tooearly"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the initial request, and the - // handler should return "None". - EXPECT_EQ("None", d.data_received()); - EXPECT_FALSE(sent_425); - } - - context_.http_transaction_factory()->GetSession()->CloseAllConnections(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/tooearly"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The resumption request will encounter a 425 error and retry without early - // data, and the handler should return "None". - EXPECT_EQ("None", d.data_received()); - EXPECT_TRUE(sent_425); - } -} - -// TLSEarlyDataRejectTest tests that we gracefully handle an early data reject -// and retry without early data. -TEST_F(HTTPSEarlyDataTest, TLSEarlyDataRejectTest) { - ASSERT_TRUE(test_server_.Start()); - context_.http_transaction_factory()->GetSession()->ClearSSLSessionCache(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the initial request, and the - // handler should return "0". - EXPECT_EQ("0", d.data_received()); - } - - context_.http_transaction_factory()->GetSession()->CloseAllConnections(); - - // The certificate in the resumption is changed to confirm that the - // certificate change is observed. - scoped_refptr<X509Certificate> old_cert = test_server_.GetCertificate(); - ResetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED, - SSL_PROTOCOL_VERSION_TLS1_3); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - EXPECT_FALSE(old_cert->EqualsIncludingChain(r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the rejected request, and the - // handler should return "0". - EXPECT_EQ("0", d.data_received()); - } -} - -// TLSEarlyDataTLS12RejectTest tests that we gracefully handle an early data -// reject from a TLS 1.2 server and retry without early data. -TEST_F(HTTPSEarlyDataTest, TLSEarlyDataTLS12RejectTest) { - ASSERT_TRUE(test_server_.Start()); - context_.http_transaction_factory()->GetSession()->ClearSSLSessionCache(); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_3, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the initial request, and the - // handler should return "0". - EXPECT_EQ("0", d.data_received()); - } - - context_.http_transaction_factory()->GetSession()->CloseAllConnections(); - - // The certificate in the resumption is changed to confirm that the - // certificate change is observed. - scoped_refptr<X509Certificate> old_cert = test_server_.GetCertificate(); - ResetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED, - SSL_PROTOCOL_VERSION_TLS1_2); - - { - TestDelegate d; - std::unique_ptr<URLRequest> r(context_.CreateRequest( - test_server_.GetURL("/zerortt"), DEFAULT_PRIORITY, &d, - TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->Start(); - EXPECT_TRUE(r->is_pending()); - - base::RunLoop().Run(); - - EXPECT_EQ(1, d.response_started_count()); - - EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1_2, - SSLConnectionStatusToVersion(r->ssl_info().connection_status)); - EXPECT_TRUE(r->ssl_info().unverified_cert.get()); - EXPECT_TRUE(test_server_.GetCertificate()->EqualsIncludingChain( - r->ssl_info().cert.get())); - EXPECT_FALSE(old_cert->EqualsIncludingChain(r->ssl_info().cert.get())); - - // The Early-Data header should be omitted in the rejected request, and the - // handler should return "0". - EXPECT_EQ("0", d.data_received()); - } -} - } // namespace net
diff --git a/net/websockets/websocket_basic_handshake_stream.cc b/net/websockets/websocket_basic_handshake_stream.cc index 65f63e0..9ec81a6 100644 --- a/net/websockets/websocket_basic_handshake_stream.cc +++ b/net/websockets/websocket_basic_handshake_stream.cc
@@ -203,17 +203,7 @@ CompletionOnceCallback callback) { DCHECK(request_info->traffic_annotation.is_valid()); url_ = request_info->url; - // The WebSocket may receive a socket in the early data state from - // HttpNetworkTransaction, which means it must call ConfirmHandshake() for - // requests that need replay protection. However, the first request on any - // WebSocket stream is a GET with an idempotent request - // (https://tools.ietf.org/html/rfc6455#section-1.3), so there is no need to - // call ConfirmHandshake(). - // - // Data after the WebSockets handshake may not be replayable, but the - // handshake is guaranteed to be confirmed once the HTTP response is received. - DCHECK(can_send_early); - state_.Initialize(request_info, priority, net_log); + state_.Initialize(request_info, can_send_early, priority, net_log); return OK; }
diff --git a/net/websockets/websocket_http2_handshake_stream.cc b/net/websockets/websocket_http2_handshake_stream.cc index 7e38991..343b4cd 100644 --- a/net/websockets/websocket_http2_handshake_stream.cc +++ b/net/websockets/websocket_http2_handshake_stream.cc
@@ -121,10 +121,8 @@ callback_ = std::move(callback); spdy_stream_request_ = std::make_unique<SpdyStreamRequest>(); - // The initial request for the WebSocket is a CONNECT, so there is no need to - // call ConfirmHandshake(). int rv = spdy_stream_request_->StartRequest( - SPDY_BIDIRECTIONAL_STREAM, session_, request_info_->url, true, priority_, + SPDY_BIDIRECTIONAL_STREAM, session_, request_info_->url, priority_, request_info_->socket_tag, net_log_, base::BindOnce(&WebSocketHttp2HandshakeStream::StartRequestCallback, base::Unretained(this)),
diff --git a/ppapi/c/documentation/doxy_cleanup.py b/ppapi/c/documentation/doxy_cleanup.py index 01b1ca07d..be94342d 100755 --- a/ppapi/c/documentation/doxy_cleanup.py +++ b/ppapi/c/documentation/doxy_cleanup.py
@@ -8,6 +8,8 @@ that they are suitable for publication on a Google documentation site. ''' +from __future__ import print_function + import optparse import os import re @@ -17,10 +19,10 @@ try: from BeautifulSoup import BeautifulSoup, Tag except (ImportError, NotImplementedError): - print ("This tool requires the BeautifulSoup package " - "(see http://www.crummy.com/software/BeautifulSoup/).\n" - "Make sure that the file BeautifulSoup.py is either in this directory " - "or is available in your PYTHON_PATH") + print("This tool requires the BeautifulSoup package " + "(see http://www.crummy.com/software/BeautifulSoup/).\n" + "Make sure that the file BeautifulSoup.py is either in this directory " + "or is available in your PYTHON_PATH") raise @@ -66,10 +68,10 @@ table_headers.reverse() # Split up tables that have multiple table header (th) rows for tag in table_headers: - print "Header tag: %s is %s" % (tag.name, tag.string.strip()) + print("Header tag: %s is %s" % (tag.name, tag.string.strip())) # Is this a heading in the middle of a table? if tag.findPreviousSibling('tr') and tag.parent.name == 'table': - print "Splitting Table named %s" % tag.string.strip() + print("Splitting Table named %s" % tag.string.strip()) table = tag.parent table_parent = table.parent table_index = table_parent.contents.index(table) @@ -121,7 +123,7 @@ with open(filename, 'r') as file: html = file.read() - print "Processing %s" % filename + print("Processing %s" % filename) fixer = HTMLFixer(html) fixer.FixAll() with open(filename, 'w') as file: @@ -133,7 +135,7 @@ os.mkdir(new_directory) shutil.move(filename, new_directory) except: - print "Error while processing %s" % filename + print("Error while processing %s" % filename) raise return 0
diff --git a/ppapi/cpp/documentation/doxy_cleanup.py b/ppapi/cpp/documentation/doxy_cleanup.py index 24ddb3c..fbbc2f6 100755 --- a/ppapi/cpp/documentation/doxy_cleanup.py +++ b/ppapi/cpp/documentation/doxy_cleanup.py
@@ -7,6 +7,8 @@ that they are suitable for publication on a Google documentation site. ''' +from __future__ import print_function + import optparse import os import re @@ -16,10 +18,10 @@ try: from BeautifulSoup import BeautifulSoup, Tag except (ImportError, NotImplementedError): - print ("This tool requires the BeautifulSoup package " - "(see http://www.crummy.com/software/BeautifulSoup/).\n" - "Make sure that the file BeautifulSoup.py is either in this directory " - "or is available in your PYTHON_PATH") + print("This tool requires the BeautifulSoup package " + "(see http://www.crummy.com/software/BeautifulSoup/).\n" + "Make sure that the file BeautifulSoup.py is either in this directory " + "or is available in your PYTHON_PATH") raise @@ -65,10 +67,10 @@ table_headers.reverse() # Split up tables that have multiple table header (th) rows for tag in table_headers: - print "Header tag: %s is %s" % (tag.name, tag.string.strip()) + print("Header tag: %s is %s" % (tag.name, tag.string.strip())) # Is this a heading in the middle of a table? if tag.findPreviousSibling('tr') and tag.parent.name == 'table': - print "Splitting Table named %s" % tag.string.strip() + print("Splitting Table named %s" % tag.string.strip()) table = tag.parent table_parent = table.parent table_index = table_parent.contents.index(table) @@ -120,7 +122,7 @@ with open(filename, 'r') as file: html = file.read() - print "Processing %s" % filename + print("Processing %s" % filename) fixer = HTMLFixer(html) fixer.FixAll() with open(filename, 'w') as file: @@ -132,7 +134,7 @@ os.mkdir(new_directory) shutil.move(filename, new_directory) except: - print "Error while processing %s" % filename + print("Error while processing %s" % filename) raise return 0
diff --git a/ppapi/generate_ppapi_include_tests.py b/ppapi/generate_ppapi_include_tests.py index 97daf24..f690f3e 100755 --- a/ppapi/generate_ppapi_include_tests.py +++ b/ppapi/generate_ppapi_include_tests.py
@@ -17,6 +17,8 @@ # tests to some 'generated' area, and remove them from version # control. +from __future__ import print_function + import re import os import sys @@ -75,11 +77,11 @@ in_gyp_not_file = gyp_sources - file_sources in_file_not_gyp = file_sources - gyp_sources if len(in_gyp_not_file): - print 'Found source file(s) in ppapi.gyp but not in the directory:', \ - in_gyp_not_file + print('Found source file(s) in ppapi.gyp but not in the directory:', \ + in_gyp_not_file) if len(in_file_not_gyp): - print 'Found source file(s) in the directory but not in ppapi.gyp:', \ - in_file_not_gyp + print('Found source file(s) in the directory but not in ppapi.gyp:', \ + in_file_not_gyp) error_count = len(in_gyp_not_file) + len(in_file_not_gyp) if error_count: sys.exit(error_count) @@ -122,7 +124,7 @@ sources = target[GYP_SOURCES_KEY] sources.sort() return sources - print 'Warning: no target named ', target, ' found.' + print('Warning: no target named ', target, ' found.') return [] @@ -168,4 +170,4 @@ if __name__ == '__main__': - sys.exit(main()) + sys.exit(main())
diff --git a/ppapi/generate_ppapi_size_checks.py b/ppapi/generate_ppapi_size_checks.py index 11b4d98..a2b8e7d 100755 --- a/ppapi/generate_ppapi_size_checks.py +++ b/ppapi/generate_ppapi_size_checks.py
@@ -7,6 +7,8 @@ have appropriate size checking. """ +from __future__ import print_function + import optparse import os import subprocess @@ -166,12 +168,12 @@ return elif typeinfo.name in typeinfo_map: if typeinfo.size != typeinfo_map[typeinfo.name].size: - print "Error: '" + typeinfo.name + "' is", \ + print("Error: '" + typeinfo.name + "' is", \ typeinfo_map[typeinfo.name].size, \ "bytes on target '" + typeinfo_map[typeinfo.name].target + \ - "', but", typeinfo.size, "on target '" + typeinfo.target + "'" - print typeinfo_map[typeinfo.name].parsed_line - print typeinfo.parsed_line + "', but", typeinfo.size, "on target '" + typeinfo.target + "'") + print(typeinfo_map[typeinfo.name].parsed_line) + print(typeinfo.parsed_line) sys.exit(1) else: # It's already in the map and the sizes match. @@ -286,7 +288,7 @@ options, args = parser.parse_args(argv) if args: parser.print_help() - print 'ERROR: invalid argument' + print('ERROR: invalid argument') sys.exit(1) clang_executable = os.path.join(options.clang_path, 'clang') @@ -347,15 +349,15 @@ # The sizes don't match, but there's no reason they couldn't. It's # probably due to an alignment mismatch between Win32/NaCl vs Linux32/ # Mac32. - print "Error: '" + typename + "' is", typeinfo32.size, \ + print("Error: '" + typename + "' is", typeinfo32.size, \ "bytes on target '" + typeinfo32.target + \ - "', but", typeinfo64.size, "on target '" + typeinfo64.target + "'" - print typeinfo32.parsed_line - print typeinfo64.parsed_line + "', but", typeinfo64.size, "on target '" + typeinfo64.target + "'") + print(typeinfo32.parsed_line) + print(typeinfo64.parsed_line) sys.exit(1) else: - print "WARNING: Type '", typename, "' was defined for target '", - print typeinfo32.target, ", but not for any 64-bit targets." + print("WARNING: Type '", typename, "' was defined for target '") + print(typeinfo32.target, ", but not for any 64-bit targets.") # Now we have all the information we need to generate our static assertions. # Types that have consistent size across architectures will have the static @@ -421,4 +423,4 @@ if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) + sys.exit(main(sys.argv[1:]))
diff --git a/ppapi/generators/generator.py b/ppapi/generators/generator.py index a71893c..702bc1b7 100755 --- a/ppapi/generators/generator.py +++ b/ppapi/generators/generator.py
@@ -3,6 +3,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +from __future__ import print_function + import os import sys import traceback @@ -31,27 +33,28 @@ current_dir = os.path.abspath(os.getcwd()) script_dir = os.path.abspath(os.path.dirname(__file__)) if current_dir != script_dir: - print '\nIncorrect CWD, default run skipped.' - print 'When running with no arguments set CWD to the scripts directory:' - print '\t' + script_dir + '\n' - print 'This ensures correct default paths and behavior.\n' + print('\nIncorrect CWD, default run skipped.') + print( + 'When running with no arguments set CWD to the scripts directory:') + print('\t' + script_dir + '\n') + print('This ensures correct default paths and behavior.\n') return 1 filenames = ParseOptions(args) ast = ParseFiles(filenames) if ast.errors: - print 'Found %d errors. Aborting build.\n' % ast.errors + print('Found %d errors. Aborting build.\n' % ast.errors) return 1 return Generator.Run(ast) - except SystemExit, ec: - print 'Exiting with %d' % ec.code + except SystemExit as ec: + print('Exiting with %d' % ec.code) sys.exit(ec.code) except: typeinfo, value, tb = sys.exc_info() traceback.print_exception(typeinfo, value, tb) - print 'Called with: ' + ' '.join(sys.argv) + print('Called with: ' + ' '.join(sys.argv)) if __name__ == '__main__': - sys.exit(Main(sys.argv[1:])) + sys.exit(Main(sys.argv[1:]))
diff --git a/ppapi/generators/idl_ast.py b/ppapi/generators/idl_ast.py index e95e94e..19be3d4 100644 --- a/ppapi/generators/idl_ast.py +++ b/ppapi/generators/idl_ast.py
@@ -4,6 +4,8 @@ """Nodes for PPAPI IDL AST.""" +from __future__ import print_function + from idl_namespace import IDLNamespace from idl_node import IDLNode from idl_option import GetOption @@ -71,7 +73,7 @@ if node.cls not in self.NamespaceSet: node.namespace = parent_namespace else: - # otherwise create one. + # otherwise create one. node.namespace = IDLNamespace(parent_namespace) # If this node is named, place it in its parent's namespace @@ -116,7 +118,7 @@ if not node.IsA('AST'): file_min, _ = filenode.release_map.GetReleaseRange() if not file_min: - print 'Resetting min on %s to %s' % (node, file_min) + print('Resetting min on %s to %s' % (node, file_min)) node.SetMinRange(file_min) # If this node has a TYPEREF, resolve it to a version list
diff --git a/ppapi/generators/idl_c_header.py b/ppapi/generators/idl_c_header.py index 7577682..d597f71 100755 --- a/ppapi/generators/idl_c_header.py +++ b/ppapi/generators/idl_c_header.py
@@ -5,6 +5,8 @@ """ Generator for C style prototypes and definitions """ +from __future__ import print_function + import glob import os import re @@ -96,7 +98,7 @@ for node in filenode.GetListOf(*top_types): # Skip if this node is not in this release if not node.InReleases(releases): - print "Skiping %s" % node + print("Skiping %s" % node) continue # End/Start group marker @@ -199,7 +201,7 @@ my_min, my_max = filenode.GetMinMax(releases) if my_min > releases[-1] or my_max < releases[0]: if os.path.isfile(savename): - print "Removing stale %s for this range." % filenode.GetName() + print("Removing stale %s for this range." % filenode.GetName()) os.remove(os.path.realpath(savename)) return False @@ -350,10 +352,10 @@ filenames = glob.glob(idldir) ast = ParseFiles(filenames) if hgen.GenerateRelease(ast, 'M14', {}): - print "Golden file for M14 failed." + print("Golden file for M14 failed.") failed = 1 else: - print "Golden file for M14 passed." + print("Golden file for M14 passed.") idldir = os.path.split(sys.argv[0])[0] @@ -362,10 +364,10 @@ ast = ParseFiles(filenames) if hgen.GenerateRange(ast, ['M13', 'M14', 'M15', 'M16', 'M17'], {}): - print "Golden file for M13-M17 failed." + print("Golden file for M13-M17 failed.") failed =1 else: - print "Golden file for M13-M17 passed." + print("Golden file for M13-M17 passed.") return failed
diff --git a/ppapi/generators/idl_c_proto.py b/ppapi/generators/idl_c_proto.py index d5c99a7..8404b79 100755 --- a/ppapi/generators/idl_c_proto.py +++ b/ppapi/generators/idl_c_proto.py
@@ -5,6 +5,8 @@ """ Generator for C style prototypes and definitions """ +from __future__ import print_function + import glob import os import sys @@ -199,7 +201,7 @@ def Log(self, txt): if not GetOption('cgen_debug'): return tabs = ' ' * self.dbg_depth - print '%s%s' % (tabs, txt) + print('%s%s' % (tabs, txt)) def LogEnter(self, txt): if txt: self.Log(txt) @@ -766,7 +768,7 @@ outstr = cgen.Define(node, releases=['M14']) if GetOption('verbose'): - print outstr + '\n' + print(outstr + '\n') outstr = CleanString(outstr) if instr != outstr: @@ -809,10 +811,10 @@ cgen = CGen() for f in ast.GetListOf('File'): if f.GetProperty('ERRORS') > 0: - print 'Skipping %s' % f.GetName() + print('Skipping %s' % f.GetName()) continue for node in f.GetChildren()[2:]: - print cgen.Define(node, ast.releases, comment=True, prefix='tst_') + print(cgen.Define(node, ast.releases, comment=True, prefix='tst_')) if __name__ == '__main__':
diff --git a/ppapi/generators/idl_diff.py b/ppapi/generators/idl_diff.py index 0d15fe83..7fd83cb8 100755 --- a/ppapi/generators/idl_diff.py +++ b/ppapi/generators/idl_diff.py
@@ -3,6 +3,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +from __future__ import print_function + import glob import os import subprocess @@ -37,16 +39,16 @@ def Dump(self): if not self.was: - print 'Adding %s' % self.mode + print('Adding %s' % self.mode) elif not self.now: - print 'Missing %s' % self.mode + print('Missing %s' % self.mode) else: - print 'Modifying %s' % self.mode + print('Modifying %s' % self.mode) for line in self.was: - print 'src: >>%s<<' % line + print('src: >>%s<<' % line) for line in self.now: - print 'gen: >>%s<<' % line + print('gen: >>%s<<' % line) print # @@ -234,7 +236,7 @@ filter[nindex] = True filter[windex] = True if GetOption('verbose'): - print "Found %d, %d >>%s<<" % (windex + 1, nindex + 1, wline) + print("Found %d, %d >>%s<<" % (windex + 1, nindex + 1, wline)) out = [] for index in range(len(output)): if not filter[index]: @@ -259,7 +261,7 @@ last = None for line in lines: -# print "LINE=%s" % line + #print("LINE=%s" % line) if not line: continue elif line[0] == '<': @@ -282,7 +284,7 @@ was = [] now = [] if ValidChange(change): - changes.append(change) + changes.append(change) if line == 'END': break @@ -315,7 +317,7 @@ name = os.path.split(name)[1] name = os.path.join(GetOption('gen'), name) if name not in filenames: - print 'Missing: %s' % name + print('Missing: %s' % name) for filename in filenames: gen = filename @@ -336,18 +338,19 @@ changes = [] if changes: - print "\n\nDelta between:\n src=%s\n gen=%s\n" % (src, gen) + print("\n\nDelta between:\n src=%s\n gen=%s\n" % (src, gen)) for change in changes: change.Dump() - print 'Done with %s\n\n' % src + print('Done with %s\n\n' % src) if GetOption('ok'): open(diff, 'wt').write(output) if GetOption('halt'): return 1 else: - print "\nSAME:\n src=%s\n gen=%s" % (src, gen) - if input: print ' ** Matched expected diff. **' - print '\n' + print("\nSAME:\n src=%s\n gen=%s" % (src, gen)) + if input: + print(' ** Matched expected diff. **') + print('\n') if __name__ == '__main__':
diff --git a/ppapi/generators/idl_generator.py b/ppapi/generators/idl_generator.py index 028a233..0477100 100755 --- a/ppapi/generators/idl_generator.py +++ b/ppapi/generators/idl_generator.py
@@ -3,6 +3,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +from __future__ import print_function + import sys from idl_log import ErrOut, InfoOut, WarnOut @@ -66,7 +68,7 @@ rangestr = GetOption('range') releasestr = GetOption('release') - print "Found releases: %s" % ast.releases + print("Found releases: %s" % ast.releases) # Generate list of files to ignore due to errors for filenode in ast.GetListOf('File'): @@ -87,9 +89,9 @@ # Generate 'start' and 'end' represent first and last found. if vmin == 'start': - vmin = ast.releases[0] + vmin = ast.releases[0] if vmax == 'end': - vmax = ast.releases[-1] + vmax = ast.releases[-1] vmin = ast.releases.index(vmin) vmax = ast.releases.index(vmax) + 1 @@ -223,7 +225,7 @@ check_item = check_map[item] option_item = options.get(item, None) if check_item != option_item: - print 'Option %s is %s, expecting %s' % (item, option_item, check_item) + print('Option %s is %s, expecting %s' % (item, option_item, check_item)) check_release = 0 if release != 'M14': @@ -243,24 +245,24 @@ ParseOptions(['--testgen_opt=so_long,MyOpt=XYZ,goodbye']) if Generator.Run('AST') != 0: - print 'Generate release: Failed.\n' + print('Generate release: Failed.\n') return -1 if check_release != 1 or check_range != 0: - print 'Gererate release: Failed to run.\n' + print('Gererate release: Failed to run.\n') return -1 check_release = 0 ParseOptions(['--testgen_opt="HELLO"', '--range=M14,M16']) if Generator.Run('AST') != 0: - print 'Generate range: Failed.\n' + print('Generate range: Failed.\n') return -1 if check_release != 0 or check_range != 1: - print 'Gererate range: Failed to run.\n' + print('Gererate range: Failed to run.\n') return -1 - print 'Generator test: Pass' + print('Generator test: Pass') return 0
diff --git a/ppapi/generators/idl_lexer.py b/ppapi/generators/idl_lexer.py index 47d64a2..1c9492eb 100755 --- a/ppapi/generators/idl_lexer.py +++ b/ppapi/generators/idl_lexer.py
@@ -16,6 +16,8 @@ # PLY can be found at: # http://www.dabeaz.com/ply/ +from __future__ import print_function + import os.path import re import sys @@ -277,23 +279,23 @@ count1 = len(values1) count2 = len(values2) if count1 != count2: - print "Size mismatch original %d vs %d\n" % (count1, count2) + print("Size mismatch original %d vs %d\n" % (count1, count2)) if count1 > count2: count1 = count2 for i in range(count1): if values1[i] != values2[i]: - print "%d >>%s<< >>%s<<" % (i, values1[i], values2[i]) + print("%d >>%s<< >>%s<<" % (i, values1[i], values2[i])) if GetOption('output'): sys.stdout.write('Generating original.txt and tokenized.txt\n') - open('original.txt', 'w').write(src1) - open('tokenized.txt', 'w').write(src2) + open('original.txt', 'w').write(values1) + open('tokenized.txt', 'w').write(values2) if values1 == values2: sys.stdout.write('Same: Pass\n') return 0 - print "****************\n%s\n%s***************\n" % (src1, src2) + print("****************\n%s\n%s***************\n" % (values1, values2)) sys.stdout.write('Same: Failed\n') return -1
diff --git a/ppapi/generators/idl_namespace.py b/ppapi/generators/idl_namespace.py index 21a643c..5630ae2 100755 --- a/ppapi/generators/idl_namespace.py +++ b/ppapi/generators/idl_namespace.py
@@ -10,6 +10,8 @@ a symbol as one or more AST nodes given a release or range of releases. """ +from __future__ import print_function + import sys from idl_option import GetOption, Option, ParseOptions @@ -68,7 +70,7 @@ name = node.GetName() verlist = self._name_to_releases.setdefault(name,IDLReleaseList()) if GetOption('namespace_debug'): - print "Adding to namespace: %s" % node + print("Adding to namespace: %s" % node) return verlist.AddNode(node) @@ -101,11 +103,13 @@ return self.name def Error(self, msg): - if GetOption('release_debug'): print 'Error: %s' % msg + if GetOption('release_debug'): + print('Error: %s' % msg) self.errors.append(msg) def Warn(self, msg): - if GetOption('release_debug'): print 'Warn: %s' % msg + if GetOption('release_debug'): + print('Warn: %s' % msg) self.warns.append(msg) def GetProperty(self, name): @@ -118,15 +122,15 @@ # Dumps all the information relevant to an add failure. def DumpFailure(namespace, node, msg): global errors - print '\n******************************' - print 'Failure: %s %s' % (node, msg) + print('\n******************************') + print('Failure: %s %s' % (node, msg)) for warn in node.warns: - print ' WARN: %s' % warn + print(' WARN: %s' % warn) for err in node.errors: - print ' ERROR: %s' % err - print '\n' + print(' ERROR: %s' % err) + print('\n') namespace.Dump() - print '******************************\n' + print('******************************\n') errors += 1 # Add expecting no errors or warnings @@ -150,15 +154,15 @@ DumpFailure(namespace, node, 'Expected errors') if msg not in node.errors: DumpFailure(namespace, node, 'Expected error: %s' % msg) - print ">>%s<<\n>>%s<<\n" % (node.errors[0], msg) + print(">>%s<<\n>>%s<<\n" % (node.errors[0], msg)) # Verify that a FindRelease call on the namespace returns the expected node. def VerifyFindOne(namespace, name, release, node): global errors if (namespace.FindRelease(name, release) != node): - print "Failed to find %s as release %f of %s" % (node, release, name) + print("Failed to find %s as release %f of %s" % (node, release, name)) namespace.Dump() - print "\n" + print("\n") errors += 1 # Verify that a FindRage call on the namespace returns a set of expected nodes. @@ -166,14 +170,11 @@ global errors out = namespace.FindRange(name, rmin, rmax) if (out != nodes): - print "Found [%s] instead of[%s] for releases %f to %f of %s" % ( - ' '.join([str(x) for x in out]), - ' '.join([str(x) for x in nodes]), - rmin, - rmax, - name) + print("Found [%s] instead of[%s] for releases %f to %f of %s" % (' '.join([ + str(x) for x in out + ]), ' '.join([str(x) for x in nodes]), rmin, rmax, name)) namespace.Dump() - print "\n" + print("\n") errors += 1 def Main(args): @@ -238,9 +239,9 @@ AddOkay(namespace, FooBar) if errors: - print 'Test failed with %d errors.' % errors + print('Test failed with %d errors.' % errors) else: - print 'Passed.' + print('Passed.') return errors
diff --git a/ppapi/generators/idl_option.py b/ppapi/generators/idl_option.py index 54ac4cf2..c1a2509b 100644 --- a/ppapi/generators/idl_option.py +++ b/ppapi/generators/idl_option.py
@@ -100,7 +100,7 @@ if opt[0:2] == '--': opt = opt[2:] OptionMap[opt].Set(val) - except getopt.error, e: + except getopt.error as e: ErrOut.Log('Illegal option: %s\n' % str(e)) DumpHelp() sys.exit(-1)
diff --git a/ppapi/generators/idl_outfile.py b/ppapi/generators/idl_outfile.py index f6a16275..9b830ad 100755 --- a/ppapi/generators/idl_outfile.py +++ b/ppapi/generators/idl_outfile.py
@@ -140,8 +140,8 @@ InfoOut.Log('Output %s written.' % self.filename) return True - except IOError as (errno, strerror): - ErrOut.Log("I/O error(%d): %s" % (errno, strerror)) + except IOError as e: + ErrOut.Log("I/O error(%d): %s" % (e.errno, e.strerror)) except: ErrOut.Log("Unexpected error: %s" % sys.exc_info()[0]) raise
diff --git a/ppapi/generators/idl_release.py b/ppapi/generators/idl_release.py index 44068548..ce95ec8 100755 --- a/ppapi/generators/idl_release.py +++ b/ppapi/generators/idl_release.py
@@ -10,6 +10,8 @@ a symbol as one or more AST nodes given a Release or range of Releases. """ +from __future__ import print_function + import sys from idl_log import ErrOut, InfoOut, WarnOut @@ -272,7 +274,7 @@ assert Foo23.InRange('M14', 'M15A') assert Foo23.InRange('M15B', 'M17') assert not Foo23.InRange('M16', 'M17') - print "TestReleaseNode - Passed" + print("TestReleaseNode - Passed") def TestReleaseListWarning(): @@ -287,7 +289,7 @@ assert releases.AddNode(Foo23) assert releases.AddNode(Foo45) assert warning - print "TestReleaseListWarning - Passed" + print("TestReleaseListWarning - Passed") def TestReleaseListError(): @@ -303,7 +305,7 @@ assert releases.AddNode(Foo23) assert not releases.AddNode(Foo1X) assert error - print "TestReleaseListError - Passed" + print("TestReleaseListError - Passed") def TestReleaseListOK(): @@ -335,11 +337,11 @@ assert releases.FindRange(None, None) == [FooXX, Foo1X, Foo23, Foo45] # Verify we can find the correct versions - print "TestReleaseListOK - Passed" + print("TestReleaseListOK - Passed") def TestReleaseMap(): - print "TestReleaseMap- Passed" + print("TestReleaseMap- Passed") def Main(args): @@ -347,7 +349,7 @@ TestReleaseListWarning() TestReleaseListError() TestReleaseListOK() - print "Passed" + print("Passed") return 0
diff --git a/ppapi/generators/idl_tests.py b/ppapi/generators/idl_tests.py index b41bb0f66..7b732bc 100755 --- a/ppapi/generators/idl_tests.py +++ b/ppapi/generators/idl_tests.py
@@ -5,17 +5,19 @@ """ Test runner for IDL Generator changes """ +from __future__ import print_function + import subprocess import sys def TestIDL(testname, args): - print '\nRunning unit tests for %s.' % testname + print('\nRunning unit tests for %s.' % testname) try: args = [sys.executable, testname] + args subprocess.check_call(args) return 0 except subprocess.CalledProcessError as err: - print 'Failed with %s.' % str(err) + print('Failed with %s.' % str(err)) return 1 def main(args): @@ -36,7 +38,7 @@ assert errors == 0 if errors: - print '\nFailed tests.' + print('\nFailed tests.') return errors
diff --git a/ppapi/generators/idl_thunk.py b/ppapi/generators/idl_thunk.py index 75117d2d9..ff7bdfd 100755 --- a/ppapi/generators/idl_thunk.py +++ b/ppapi/generators/idl_thunk.py
@@ -5,6 +5,8 @@ """ Generator for C++ style thunks """ +from __future__ import print_function + import glob import os import re @@ -423,7 +425,7 @@ my_min, my_max = filenode.GetMinMax(releases) if my_min > releases[-1] or my_max < releases[0]: if os.path.isfile(savename): - print "Removing stale %s for this range." % filenode.GetName() + print("Removing stale %s for this range." % filenode.GetName()) os.remove(os.path.realpath(savename)) return False do_generate = filenode.GetProperty('generate_thunk') @@ -493,7 +495,7 @@ for node in filenode.GetListOf('Interface'): # Skip if this node is not in this release if not node.InReleases(releases): - print "Skipping %s" % node + print("Skipping %s" % node) continue # Generate Member functions @@ -572,10 +574,10 @@ filenames = glob.glob(idldir) ast = ParseFiles(filenames) if tgen.GenerateRange(ast, ['M13', 'M14', 'M15'], {}): - print "Golden file for M13-M15 failed." + print("Golden file for M13-M15 failed.") failed = 1 else: - print "Golden file for M13-M15 passed." + print("Golden file for M13-M15 passed.") return failed
diff --git a/ppapi/native_client/tools/browser_tester/browser_tester.py b/ppapi/native_client/tools/browser_tester/browser_tester.py index 87cafe4..c9b7ce6 100755 --- a/ppapi/native_client/tools/browser_tester/browser_tester.py +++ b/ppapi/native_client/tools/browser_tester/browser_tester.py
@@ -3,6 +3,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +from __future__ import print_function + import glob import optparse import os.path @@ -226,7 +228,7 @@ file_mapping = dict(options.map_files) for filename in options.files: file_mapping[os.path.basename(filename)] = filename - for server_path, real_path in file_mapping.iteritems(): + for _, real_path in file_mapping.items(): if not os.path.exists(real_path): raise AssertionError('\'%s\' does not exist.' % real_path) mime_types = {} @@ -385,7 +387,7 @@ options, args = parser.parse_args() if len(args) != 0: - print args + print(args) parser.error('Invalid arguments') # Validate the URL
diff --git a/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py b/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py index d6b29ce4..497cb94 100755 --- a/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py +++ b/ppapi/native_client/tools/browser_tester/browsertester/browserlauncher.py
@@ -3,6 +3,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +from __future__ import print_function + import os.path import re import shutil @@ -193,8 +195,8 @@ self.options.nacl_exe_stdout, True) self.SetStandardStream(env, 'NACL_EXE_STDERR', self.options.nacl_exe_stderr, True) - print 'ENV:', ' '.join(['='.join(pair) for pair in env.iteritems()]) - print 'LAUNCHING: %s' % ' '.join(cmd) + print('ENV:', ' '.join(['='.join(pair) for pair in env.items()])) + print('LAUNCHING: %s' % ' '.join(cmd)) sys.stdout.flush() self.browser_process = RunCommand(cmd, env=env)
diff --git a/ppapi/native_client/tools/browser_tester/browsertester/browserprocess.py b/ppapi/native_client/tools/browser_tester/browsertester/browserprocess.py index e10e6b5..d012eb21 100755 --- a/ppapi/native_client/tools/browser_tester/browsertester/browserprocess.py +++ b/ppapi/native_client/tools/browser_tester/browsertester/browserprocess.py
@@ -3,6 +3,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +from __future__ import print_function + import os import signal import subprocess @@ -12,7 +14,7 @@ def __init__(self, handle): self.handle = handle - print 'PID', self.handle.pid + print('PID', self.handle.pid) def GetReturnCode(self): return self.handle.returncode @@ -36,7 +38,7 @@ def Kill(self): if self.IsRunning(): - print 'KILLING the browser' + print('KILLING the browser') try: self.kill() # If it doesn't die, we hang. Oh well. @@ -76,7 +78,7 @@ def RunCommandInProcessGroup(cmd, env=None): def SetPGrp(): os.setpgrp() - print 'I\'M THE SESSION LEADER!' + print('I\'M THE SESSION LEADER!') + handle = subprocess.Popen(cmd, env=env, preexec_fn=SetPGrp) return BrowserProcessPosix(handle) -
diff --git a/ppapi/native_client/tools/browser_tester/browsertester/server.py b/ppapi/native_client/tools/browser_tester/browsertester/server.py index 971d0d6f..454f6ee 100644 --- a/ppapi/native_client/tools/browser_tester/browsertester/server.py +++ b/ppapi/native_client/tools/browser_tester/browsertester/server.py
@@ -59,17 +59,17 @@ return path def guess_type(self, path): - # We store the extension -> MIME type mapping in the server instead of the - # request handler so we that can add additional mapping entries via the - # command line. - base, ext = posixpath.splitext(path) - if ext in self.server.extensions_mapping: - return self.server.extensions_mapping[ext] - ext = ext.lower() - if ext in self.server.extensions_mapping: - return self.server.extensions_mapping[ext] - else: - return self.server.extensions_mapping[''] + # We store the extension -> MIME type mapping in the server instead of the + # request handler so we that can add additional mapping entries via the + # command line. + _, ext = posixpath.splitext(path) + if ext in self.server.extensions_mapping: + return self.server.extensions_mapping[ext] + ext = ext.lower() + if ext in self.server.extensions_mapping: + return self.server.extensions_mapping[ext] + else: + return self.server.extensions_mapping[''] def SendRPCResponse(self, response): self.send_response(200) @@ -84,14 +84,14 @@ def HandleRPC(self, name, query): kargs = {} - for k, v in query.iteritems(): + for k, v in query.items(): assert len(v) == 1, k kargs[k] = v[0] l = self.server.listener try: response = getattr(l, name)(**kargs) - except Exception, e: + except Exception as e: self.SendRPCResponse('%r' % (e,)) raise else: @@ -139,7 +139,7 @@ try: data = self.rfile.read(int(self.headers.getheader('content-length'))) outfile.write(data) - except IOError, e: + except IOError as e: outfile.close() try: os.remove(output_path)
diff --git a/services/device/battery/BUILD.gn b/services/device/battery/BUILD.gn index b383dc8..360f190 100644 --- a/services/device/battery/BUILD.gn +++ b/services/device/battery/BUILD.gn
@@ -42,8 +42,8 @@ if (is_chromeos) { configs += [ "//build/config/linux/dbus" ] deps += [ - "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", ] sources -= [ "battery_status_manager_default.cc",
diff --git a/services/device/battery/battery_status_manager_chromeos.cc b/services/device/battery/battery_status_manager_chromeos.cc index 3bd55f37..6fd17171 100644 --- a/services/device/battery/battery_status_manager_chromeos.cc +++ b/services/device/battery/battery_status_manager_chromeos.cc
@@ -8,7 +8,6 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
diff --git a/services/device/wake_lock/power_save_blocker/BUILD.gn b/services/device/wake_lock/power_save_blocker/BUILD.gn index 788bb497..54a2d248 100644 --- a/services/device/wake_lock/power_save_blocker/BUILD.gn +++ b/services/device/wake_lock/power_save_blocker/BUILD.gn
@@ -70,8 +70,8 @@ if (is_chromeos) { deps += [ - "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", ] }
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc index 4b4f971c..fcb025f 100644 --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc
@@ -335,6 +335,7 @@ base::SequencedTaskRunnerHandle::Get()), want_raw_headers_(request.report_raw_headers), report_raw_headers_(false), + devtools_request_id_(request.devtools_request_id), resource_scheduler_client_(std::move(resource_scheduler_client)), keepalive_statistics_recorder_(std::move(keepalive_statistics_recorder)), network_usage_accumulator_(std::move(network_usage_accumulator)),
diff --git a/services/network/url_loader.h b/services/network/url_loader.h index 1c309a3..20d6dc6 100644 --- a/services/network/url_loader.h +++ b/services/network/url_loader.h
@@ -139,6 +139,10 @@ return new_redirect_url_; } + const base::Optional<std::string>& devtools_request_id() const { + return devtools_request_id_; + } + void SetAllowReportingRawHeaders(bool allow); // Gets the URLLoader associated with this request. @@ -281,6 +285,11 @@ // is called from NetworkDelegate::NotifyBeforeURLRequest. base::Optional<GURL> new_redirect_url_; + // The ID that DevTools uses to track network requests. It is generated in the + // renderer process and is only present when DevTools is enabled in the + // renderer. + const base::Optional<std::string> devtools_request_id_; + bool should_pause_reading_body_ = false; // The response body stream is open, but transferring data is paused. bool paused_reading_body_ = false;
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index b692aca..9a3d3be 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -161,6 +161,10 @@ // Max. verb count for paths rendered by the edge-AA tessellating path renderer. #define GR_AA_TESSELLATOR_MAX_VERB_COUNT 100 +#ifndef SK_SUPPORT_LEGACY_BITMAPSHADER_FACTORY +#define SK_SUPPORT_LEGACY_BITMAPSHADER_FACTORY +#endif + #ifndef SK_SUPPORT_LEGACY_AAA_CHOICE #define SK_SUPPORT_LEGACY_AAA_CHOICE #endif
diff --git a/sql/recovery.cc b/sql/recovery.cc index bd659e2..0d5000e 100644 --- a/sql/recovery.cc +++ b/sql/recovery.cc
@@ -401,7 +401,7 @@ while (s.Step()) { const std::string column_name(s.ColumnString(1)); const std::string column_type(s.ColumnString(2)); - const ColumnType default_type = s.ColumnType(4); + const ColumnType default_type = s.GetColumnType(4); const bool default_is_null = (default_type == ColumnType::kNull); const int pk_column = s.ColumnInt(5);
diff --git a/sql/statement.cc b/sql/statement.cc index 8337ae78..372b2894 100644 --- a/sql/statement.cc +++ b/sql/statement.cc
@@ -174,7 +174,7 @@ static_assert(static_cast<int>(ColumnType::kNull) == SQLITE_NULL, "NULL mismatch"); -ColumnType Statement::ColumnType(int col) const { +ColumnType Statement::GetColumnType(int col) const { return static_cast<enum ColumnType>(sqlite3_column_type(ref_->stmt(), col)); }
diff --git a/sql/statement.h b/sql/statement.h index 0f9202d4..54e87e37 100644 --- a/sql/statement.h +++ b/sql/statement.h
@@ -124,7 +124,7 @@ // "type conversion." This means requesting the value of a column of a type // where that type is not the native type. For safety, call ColumnType only // on a column before getting the value out in any way. - ColumnType ColumnType(int col) const; + ColumnType GetColumnType(int col) const; // These all take a 0-based argument index. bool ColumnBool(int col) const;
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 9b0d13c7..332d5a1 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -17719,6 +17719,10 @@ ], "scripts": [ { + "args": [ + "--platform", + "android-cronet" + ], "name": "sizes", "script": "sizes.py" } @@ -17730,6 +17734,10 @@ ], "scripts": [ { + "args": [ + "--platform", + "android-cronet" + ], "name": "sizes", "script": "sizes.py" } @@ -17749,6 +17757,10 @@ ], "scripts": [ { + "args": [ + "--platform", + "android-cronet" + ], "name": "sizes", "script": "sizes.py" } @@ -17768,6 +17780,10 @@ ], "scripts": [ { + "args": [ + "--platform", + "android-cronet" + ], "name": "sizes", "script": "sizes.py" } @@ -18710,6 +18726,10 @@ ], "scripts": [ { + "args": [ + "--platform", + "android-cronet" + ], "name": "sizes", "script": "sizes.py" } @@ -18729,6 +18749,10 @@ ], "scripts": [ { + "args": [ + "--platform", + "android-cronet" + ], "name": "sizes", "script": "sizes.py" }
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index a39ec10..5a01153 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -7250,25 +7250,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "nvidia-quadro-p400-ubuntu-stable", - "os": "Ubuntu", - "pool": "Chrome-GPU" - } - ], - "shards": 4 - }, - "test": "angle_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-xvfb" ], @@ -8064,33 +8045,6 @@ "--browser=release", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough", - "--webgl-conformance-version=2.0.1", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl2_conformance_gl_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912-18.3.3", - "os": "Ubuntu", - "pool": "Chrome-GPU" - } - ], - "idempotent": false, - "shards": 20 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", "--webgl-conformance-version=2.0.1", "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" @@ -8780,25 +8734,6 @@ { "args": [ "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "nvidia-quadro-p400-ubuntu-stable", - "os": "Ubuntu", - "pool": "Chrome-GPU" - } - ], - "shards": 4 - }, - "test": "angle_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", "--test-launcher-retry-limit=0", "--no-xvfb" ], @@ -8914,33 +8849,7 @@ "test": "swiftshader_unittests" } ], - "isolated_scripts": [ - { - "args": [ - "--gtest-benchmark-name=angle_perftests", - "-v", - "--one-frame-only" - ], - "isolate_name": "angle_perftests", - "merge": { - "args": [ - "--smoke-test-mode" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "angle_perftests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "nvidia-quadro-p400-ubuntu-stable", - "os": "Ubuntu", - "pool": "Chrome-GPU" - } - ] - } - } - ] + "isolated_scripts": [] }, "Linux FYI Ozone (Intel)": { "gtest_tests": [
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 7480d27..528592e 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -35,12 +35,16 @@ 'Linux FYI Release (AMD R7 240)', # Disabled due to numerous ES2_VULKAN failures crbug.com/940750 'Linux FYI Experimental Release (Intel HD 630)', + # Temporarily disabled due to bad NVIDIA driver upgrade crbug.com/950542 + 'Linux FYI Debug (NVIDIA)', + 'Linux FYI GPU TSAN Release', ], }, 'angle_perftests': { 'remove_from': [ 'Android FYI Release (Nexus 5)', # crbug.com/915429 'Android FYI Release (Nexus 6)', # anglebug.com/2433 + 'Linux FYI GPU TSAN Release', # crbug.com/950542 ], }, 'angle_unittests': { @@ -1132,6 +1136,36 @@ 'cronet', ], }, + 'android-cronet-arm-dbg': { + 'args': [ + '--platform', 'android-cronet', + ], + }, + 'android-cronet-arm-rel': { + 'args': [ + '--platform', 'android-cronet', + ], + }, + 'android-cronet-arm64-dbg': { + 'args': [ + '--platform', 'android-cronet', + ], + }, + 'android-cronet-arm64-rel': { + 'args': [ + '--platform', 'android-cronet', + ], + }, + 'android-cronet-x86-dbg': { + 'args': [ + '--platform', 'android-cronet', + ], + }, + 'android-cronet-x86-rel': { + 'args': [ + '--platform', 'android-cronet', + ], + }, }, }, 'swiftshader_unittests': { @@ -1443,6 +1477,8 @@ }, 'webgl2_conformance_gl_passthrough_tests': { 'remove_from': [ + # https://crbug.com/927470 + 'Linux FYI Experimental Release (Intel HD 630)', # Not enough capacity. https://crbug.com/946694 'ANGLE GPU Win10 Release (Intel HD 630)', ],
diff --git a/third_party/blink/renderer/bindings/scripts/idl_definitions.py b/third_party/blink/renderer/bindings/scripts/idl_definitions.py index 3805ed74..c83c71f 100644 --- a/third_party/blink/renderer/bindings/scripts/idl_definitions.py +++ b/third_party/blink/renderer/bindings/scripts/idl_definitions.py
@@ -124,7 +124,7 @@ elif child_class == 'Callback': callback_function = IdlCallbackFunction(child) self.callback_functions[callback_function.name] = callback_function - elif child_class == 'Implements': + elif child_class == 'Implements' or child_class == 'Includes': self.implements.append(IdlImplement(child)) elif child_class == 'Dictionary': dictionary = IdlDictionary(child) @@ -752,10 +752,14 @@ ################################################################################ -# Implement statements +# Implement statements / includes statements ################################################################################ class IdlImplement(object): + """ + IdlImplement class represents an implements statement or an includes + statement. + """ def __init__(self, node): self.left_interface = node.GetName() self.right_interface = node.GetProperty('REFERENCE')
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl index ad52e9b7..7ccf5620 100644 --- a/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl +++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface.idl
@@ -148,5 +148,5 @@ void methodWithNullableRecords(record<DOMString, double?> numbers, record<DOMString, DOMString?> strings, record<DOMString, Element?> elements, record<DOMString, (double or DOMString)?> unions); }; -TestInterface implements TestInterfaceMixin; -TestInterface implements TestInterfaceMixin3; +TestInterface includes TestInterfaceMixin; +TestInterface includes TestInterfaceMixin3;
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_mixin_2.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_mixin_2.idl index 810e926..7f940c4 100644 --- a/third_party/blink/renderer/bindings/tests/idls/core/test_interface_mixin_2.idl +++ b/third_party/blink/renderer/bindings/tests/idls/core/test_interface_mixin_2.idl
@@ -36,4 +36,4 @@ void mixin2VoidMethod(); }; -TestInterface implements TestInterfaceMixin2; +TestInterface includes TestInterfaceMixin2;
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index a899165..445ff6dd 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -4259,8 +4259,10 @@ HitTestResult result(request, location); GetLayoutView()->HitTest(location, result); - if (!request.ReadOnly()) - UpdateHoverActiveState(request, result.InnerElement()); + if (!request.ReadOnly()) { + UpdateHoverActiveState(request.Active(), !request.Move(), + result.InnerElement()); + } if (auto* canvas = ToHTMLCanvasElementOrNull(result.InnerNode())) { HitTestCanvasResult* hit_test_canvas_result = @@ -7025,13 +7027,10 @@ context_features_ = &features; } -// TODO(mustaq) |request| parameter maybe a misuse of HitTestRequest in -// updateHoverActiveState() since the function doesn't bother with hit-testing. -void Document::UpdateHoverActiveState(const HitTestRequest& request, +void Document::UpdateHoverActiveState(bool is_active, + bool update_active_chain, Element* inner_element) { - DCHECK(!request.ReadOnly()); - - if (request.Active() && frame_) + if (is_active && frame_) frame_->GetEventHandler().NotifyElementActivated(); Element* inner_element_in_document = inner_element; @@ -7039,21 +7038,22 @@ while (inner_element_in_document && inner_element_in_document->GetDocument() != this) { inner_element_in_document->GetDocument().UpdateHoverActiveState( - request, inner_element_in_document); + is_active, update_active_chain, inner_element_in_document); inner_element_in_document = inner_element_in_document->GetDocument().LocalOwner(); } UpdateDistributionForFlatTreeTraversal(); - UpdateActiveState(request, inner_element_in_document); - UpdateHoverState(request, inner_element_in_document); + UpdateActiveState(is_active, update_active_chain, inner_element_in_document); + UpdateHoverState(inner_element_in_document); } -void Document::UpdateActiveState(const HitTestRequest& request, +void Document::UpdateActiveState(bool is_active, + bool update_active_chain, Element* inner_element_in_document) { Element* old_active_element = GetActiveElement(); - if (old_active_element && !request.Active()) { + if (old_active_element && !is_active) { // The oldActiveElement layoutObject is null, dropped on :active by setting // display: none, for instance. We still need to clear the ActiveChain as // the mouse is released. @@ -7066,8 +7066,7 @@ } else { Element* new_active_element = inner_element_in_document; if (!old_active_element && new_active_element && - !new_active_element->IsDisabledFormControl() && request.Active() && - !request.TouchMove()) { + !new_active_element->IsDisabledFormControl() && is_active) { // We are setting the :active chain and freezing it. If future moves // happen, they will need to reference this chain. for (Element* element = new_active_element; element; @@ -7084,23 +7083,22 @@ if (!allow_active_changes) return; - // If the mouse is down and if this is a mouse move event, we want to restrict - // changes in :active to only apply to elements that are in the :active - // chain that we froze at the time the mouse went down. - bool must_be_in_active_chain = request.Active() && request.Move(); + DCHECK(is_active); Element* new_element = SkipDisplayNoneAncestors(inner_element_in_document); - // Now set the active state for our new object up to the root. + // Now set the active state for our new object up to the root. If the mouse + // is down and if this is a mouse move event, we want to restrict changes in + // :active to only apply to elements that are in the :active chain that we + // froze at the time the mouse went down. for (Element* curr = new_element; curr; curr = FlatTreeTraversal::ParentElement(*curr)) { - if (!must_be_in_active_chain || curr->InActiveChain()) + if (update_active_chain || curr->InActiveChain()) curr->SetActive(true); } } -void Document::UpdateHoverState(const HitTestRequest& request, - Element* inner_element_in_document) { +void Document::UpdateHoverState(Element* inner_element_in_document) { Element* old_hover_element = HoverElement(); // The passed in innerElement may not be a result of a hit test for the
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index 4b3f578..54961c1 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -793,7 +793,16 @@ void HoveredElementDetached(Element&); void ActiveChainNodeDetached(Element&); - void UpdateHoverActiveState(const HitTestRequest&, Element*); + // Updates hover and active state of elements in the Document. The + // |is_active| param specifies whether the active state should be set or + // unset. |update_active_chain| is used to prevent updates to elements + // outside the frozen active chain; passing false will only refresh the + // active state of elements in the existing chain, but not outside of it. The + // given element is the inner-most element whose state is being modified. + // Hover is always applied. + void UpdateHoverActiveState(bool is_active, + bool update_active_chain, + Element*); // Updates for :target (CSS3 selector). void SetCSSTarget(Element*); @@ -1638,8 +1647,8 @@ bool HaveImportsLoaded() const; void ViewportDefiningElementDidChange(); - void UpdateActiveState(const HitTestRequest&, Element*); - void UpdateHoverState(const HitTestRequest&, Element*); + void UpdateActiveState(bool is_active, bool update_active_chain, Element*); + void UpdateHoverState(Element*); const AtomicString& BodyAttributeValue(const QualifiedName&) const; void SetBodyAttribute(const QualifiedName&, const AtomicString&);
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc index 41c1558..8c48cb4 100644 --- a/third_party/blink/renderer/core/dom/node.cc +++ b/third_party/blink/renderer/core/dom/node.cc
@@ -2790,15 +2790,6 @@ HasEventListeners(event_type_names::kDOMActivate); } -bool Node::WillRespondToTouchEvents() { - if (IsDisabledFormControl(this)) - return false; - return HasEventListeners(event_type_names::kTouchstart) || - HasEventListeners(event_type_names::kTouchmove) || - HasEventListeners(event_type_names::kTouchcancel) || - HasEventListeners(event_type_names::kTouchend); -} - unsigned Node::ConnectedSubframeCount() const { return HasRareData() ? RareData()->ConnectedSubframeCount() : 0; }
diff --git a/third_party/blink/renderer/core/dom/node.h b/third_party/blink/renderer/core/dom/node.h index d84c646a..8aad9776 100644 --- a/third_party/blink/renderer/core/dom/node.h +++ b/third_party/blink/renderer/core/dom/node.h
@@ -791,7 +791,6 @@ virtual bool WillRespondToMouseMoveEvents(); virtual bool WillRespondToMouseClickEvents(); - virtual bool WillRespondToTouchEvents(); enum ShadowTreesTreatment { kTreatShadowTreesAsDisconnected,
diff --git a/third_party/blink/renderer/core/editing/editing_utilities.cc b/third_party/blink/renderer/core/editing/editing_utilities.cc index bfbc8fb..5c49f32 100644 --- a/third_party/blink/renderer/core/editing/editing_utilities.cc +++ b/third_party/blink/renderer/core/editing/editing_utilities.cc
@@ -447,14 +447,11 @@ return ToElement(const_cast<Node*>(result)); } -ContainerNode* HighestEditableRoot( - const Position& position, - Element* (*root_editable_element_of)(const Position&), - bool (*has_editable_style)(const Node&)) { +ContainerNode* HighestEditableRoot(const Position& position) { if (position.IsNull()) return nullptr; - ContainerNode* highest_root = root_editable_element_of(position); + ContainerNode* highest_root = RootEditableElementOf(position); if (!highest_root) return nullptr; @@ -463,7 +460,7 @@ ContainerNode* node = highest_root->parentNode(); while (node) { - if (has_editable_style(*node)) + if (HasEditableStyle(*node)) highest_root = node; if (IsHTMLBodyElement(*node)) break;
diff --git a/third_party/blink/renderer/core/editing/editing_utilities.h b/third_party/blink/renderer/core/editing/editing_utilities.h index 7c5dd83..2b99881 100644 --- a/third_party/blink/renderer/core/editing/editing_utilities.h +++ b/third_party/blink/renderer/core/editing/editing_utilities.h
@@ -85,10 +85,7 @@ // <body>. Otherwise, this searches ancestors for the highest editable node in // defiance of editing boundaries. This returns a Document if designMode="on" // and the specified Position is not in the <body>. -CORE_EXPORT ContainerNode* HighestEditableRoot( - const Position&, - Element* (*)(const Position&) = RootEditableElementOf, - bool (*)(const Node&) = HasEditableStyle); +CORE_EXPORT ContainerNode* HighestEditableRoot(const Position&); ContainerNode* HighestEditableRoot(const PositionInFlatTree&); Node* HighestEnclosingNodeOfType(
diff --git a/third_party/blink/renderer/core/editing/selection_modifier_word.cc b/third_party/blink/renderer/core/editing/selection_modifier_word.cc index 5584de2..39275da 100644 --- a/third_party/blink/renderer/core/editing/selection_modifier_word.cc +++ b/third_party/blink/renderer/core/editing/selection_modifier_word.cc
@@ -146,8 +146,8 @@ if (!start_node) break; - Position position = PreviousRootInlineBoxCandidatePosition( - start_node, visible_position, kContentIsEditable); + Position position = + PreviousRootInlineBoxCandidatePosition(start_node, visible_position); if (position.IsNull()) break; @@ -194,8 +194,8 @@ if (!start_node) break; - Position position = NextRootInlineBoxCandidatePosition( - start_node, visible_position, kContentIsEditable); + Position position = + NextRootInlineBoxCandidatePosition(start_node, visible_position); if (position.IsNull()) break;
diff --git a/third_party/blink/renderer/core/editing/visible_units.h b/third_party/blink/renderer/core/editing/visible_units.h index 44f3c19..4b2f0405 100644 --- a/third_party/blink/renderer/core/editing/visible_units.h +++ b/third_party/blink/renderer/core/editing/visible_units.h
@@ -165,14 +165,10 @@ CORE_EXPORT VisiblePosition EndOfLine(const VisiblePosition&); CORE_EXPORT VisiblePositionInFlatTree EndOfLine(const VisiblePositionInFlatTree&); -enum EditableType { kContentIsEditable, kHasEditableAXRole }; CORE_EXPORT VisiblePosition -PreviousLinePosition(const VisiblePosition&, - LayoutUnit line_direction_point, - EditableType = kContentIsEditable); +PreviousLinePosition(const VisiblePosition&, LayoutUnit line_direction_point); CORE_EXPORT VisiblePosition NextLinePosition(const VisiblePosition&, - LayoutUnit line_direction_point, - EditableType = kContentIsEditable); + LayoutUnit line_direction_point); CORE_EXPORT bool InSameLine(const VisiblePosition&, const VisiblePosition&); CORE_EXPORT bool InSameLine(const VisiblePositionInFlatTree&, const VisiblePositionInFlatTree&); @@ -303,14 +299,10 @@ const VisiblePositionInFlatTree&, const PositionInFlatTree&); -Position NextRootInlineBoxCandidatePosition(Node*, - const VisiblePosition&, - EditableType); +Position NextRootInlineBoxCandidatePosition(Node*, const VisiblePosition&); CORE_EXPORT Position -PreviousRootInlineBoxCandidatePosition(Node*, - const VisiblePosition&, - EditableType); +PreviousRootInlineBoxCandidatePosition(Node*, const VisiblePosition&); } // namespace blink
diff --git a/third_party/blink/renderer/core/editing/visible_units_line.cc b/third_party/blink/renderer/core/editing/visible_units_line.cc index cbb84df..7d71c35 100644 --- a/third_party/blink/renderer/core/editing/visible_units_line.cc +++ b/third_party/blink/renderer/core/editing/visible_units_line.cc
@@ -48,54 +48,8 @@ namespace { -bool HasEditableStyle(const Node& node, EditableType editable_type) { - if (editable_type == kHasEditableAXRole) { - if (AXObjectCache* cache = node.GetDocument().ExistingAXObjectCache()) { - if (cache->RootAXEditableElement(&node)) - return true; - } - } - - return HasEditableStyle(node); -} - -Element* RootEditableElement(const Node& node, EditableType editable_type) { - if (editable_type == kHasEditableAXRole) { - if (AXObjectCache* cache = node.GetDocument().ExistingAXObjectCache()) - return const_cast<Element*>(cache->RootAXEditableElement(&node)); - } - - return RootEditableElement(node); -} - -Element* RootAXEditableElementOf(const Position& position) { - Node* node = position.ComputeContainerNode(); - if (!node) - return nullptr; - - if (IsDisplayInsideTable(node)) - node = node->parentNode(); - - return RootEditableElement(*node, kHasEditableAXRole); -} - -bool HasAXEditableStyle(const Node& node) { - return HasEditableStyle(node, kHasEditableAXRole); -} - -ContainerNode* HighestEditableRoot(const Position& position, - EditableType editable_type) { - if (editable_type == kHasEditableAXRole) { - return HighestEditableRoot(position, RootAXEditableElementOf, - HasAXEditableStyle); - } - - return HighestEditableRoot(position); -} - -ContainerNode* HighestEditableRootOfNode(const Node& node, - EditableType editable_type) { - return HighestEditableRoot(FirstPositionInOrBeforeNode(node), editable_type); +ContainerNode* HighestEditableRootOfNode(const Node& node) { + return HighestEditableRoot(FirstPositionInOrBeforeNode(node)); } Node* PreviousNodeConsideringAtomicNodes(const Node& start) { @@ -145,26 +99,24 @@ return nullptr; } -Node* PreviousLeafWithSameEditability(const Node& node, - EditableType editable_type) { - const bool editable = HasEditableStyle(node, editable_type); +Node* PreviousLeafWithSameEditability(const Node& node) { + const bool editable = HasEditableStyle(node); for (Node* runner = PreviousAtomicLeafNode(node); runner; runner = PreviousAtomicLeafNode(*runner)) { - if (editable == HasEditableStyle(*runner, editable_type)) + if (editable == HasEditableStyle(*runner)) return runner; } return nullptr; } Node* NextLeafWithGivenEditability(Node* node, - EditableType editable_type, bool editable) { if (!node) return nullptr; for (Node* runner = NextAtomicLeafNode(*node); runner; runner = NextAtomicLeafNode(*runner)) { - if (editable == HasEditableStyle(*runner, editable_type)) + if (editable == HasEditableStyle(*runner)) return runner; } return nullptr; @@ -328,12 +280,9 @@ } Node* FindNodeInPreviousLine(const Node& start_node, - const VisiblePosition& visible_position, - EditableType editable_type) { - for (Node* runner = - PreviousLeafWithSameEditability(start_node, editable_type); - runner; - runner = PreviousLeafWithSameEditability(*runner, editable_type)) { + const VisiblePosition& visible_position) { + for (Node* runner = PreviousLeafWithSameEditability(start_node); runner; + runner = PreviousLeafWithSameEditability(*runner)) { if (!InSameLine(*runner, visible_position)) return runner; } @@ -345,16 +294,14 @@ // FIXME: consolidate with code in previousLinePosition. Position PreviousRootInlineBoxCandidatePosition( Node* node, - const VisiblePosition& visible_position, - EditableType editable_type) { + const VisiblePosition& visible_position) { DCHECK(visible_position.IsValid()) << visible_position; ContainerNode* highest_root = - HighestEditableRoot(visible_position.DeepEquivalent(), editable_type); - Node* const previous_node = - FindNodeInPreviousLine(*node, visible_position, editable_type); + HighestEditableRoot(visible_position.DeepEquivalent()); + Node* const previous_node = FindNodeInPreviousLine(*node, visible_position); for (Node* runner = previous_node; runner && !runner->IsShadowRoot(); - runner = PreviousLeafWithSameEditability(*runner, editable_type)) { - if (HighestEditableRootOfNode(*runner, editable_type) != highest_root) + runner = PreviousLeafWithSameEditability(*runner)) { + if (HighestEditableRootOfNode(*runner) != highest_root) break; const Position& candidate = @@ -369,26 +316,22 @@ Position NextRootInlineBoxCandidatePosition( Node* node, - const VisiblePosition& visible_position, - EditableType editable_type) { + const VisiblePosition& visible_position) { DCHECK(visible_position.IsValid()) << visible_position; ContainerNode* highest_root = - HighestEditableRoot(visible_position.DeepEquivalent(), editable_type); + HighestEditableRoot(visible_position.DeepEquivalent()); // TODO(xiaochengh): We probably also need to pass in the starting editability // to |PreviousLeafWithSameEditability|. const bool is_editable = HasEditableStyle( - *visible_position.DeepEquivalent().ComputeContainerNode(), editable_type); - Node* next_node = - NextLeafWithGivenEditability(node, editable_type, is_editable); + *visible_position.DeepEquivalent().ComputeContainerNode()); + Node* next_node = NextLeafWithGivenEditability(node, is_editable); while (next_node && InSameLine(*next_node, visible_position)) { - next_node = NextLeafWithGivenEditability(next_node, kContentIsEditable, - is_editable); + next_node = NextLeafWithGivenEditability(next_node, is_editable); } for (Node* runner = next_node; runner && !runner->IsShadowRoot(); - runner = - NextLeafWithGivenEditability(runner, editable_type, is_editable)) { - if (HighestEditableRootOfNode(*runner, editable_type) != highest_root) + runner = NextLeafWithGivenEditability(runner, is_editable)) { + if (HighestEditableRootOfNode(*runner) != highest_root) break; const Position& candidate = @@ -756,8 +699,7 @@ } VisiblePosition PreviousLinePosition(const VisiblePosition& visible_position, - LayoutUnit line_direction_point, - EditableType editable_type) { + LayoutUnit line_direction_point) { DCHECK(visible_position.IsValid()) << visible_position; // TODO(xiaochengh): Make all variables |const|. @@ -783,8 +725,8 @@ } if (!root) { - Position position = PreviousRootInlineBoxCandidatePosition( - node, visible_position, editable_type); + Position position = + PreviousRootInlineBoxCandidatePosition(node, visible_position); if (position.IsNotNull()) { const VisiblePosition candidate = CreateVisiblePosition(position); const InlineBox* inline_box = @@ -816,8 +758,8 @@ // Could not find a previous line. This means we must already be on the first // line. Move to the start of the content in this block, which effectively // moves us to the start of the line we're on. - Element* root_element = HasEditableStyle(*node, editable_type) - ? RootEditableElement(*node, editable_type) + Element* root_element = HasEditableStyle(*node) + ? RootEditableElement(*node) : node->GetDocument().documentElement(); if (!root_element) return VisiblePosition(); @@ -825,8 +767,7 @@ } VisiblePosition NextLinePosition(const VisiblePosition& visible_position, - LayoutUnit line_direction_point, - EditableType editable_type) { + LayoutUnit line_direction_point) { DCHECK(visible_position.IsValid()) << visible_position; // TODO(xiaochengh): Make all variables |const|. @@ -856,8 +797,8 @@ Node* child = NodeTraversal::ChildAt(*node, p.ComputeEditingOffset()); Node* search_start_node = child ? child : &NodeTraversal::LastWithinOrSelf(*node); - Position position = NextRootInlineBoxCandidatePosition( - search_start_node, visible_position, editable_type); + Position position = + NextRootInlineBoxCandidatePosition(search_start_node, visible_position); if (position.IsNotNull()) { const VisiblePosition candidate = CreateVisiblePosition(position); const InlineBox* inline_box = @@ -889,8 +830,8 @@ // Could not find a next line. This means we must already be on the last line. // Move to the end of the content in this block, which effectively moves us // to the end of the line we're on. - Element* root_element = HasEditableStyle(*node, editable_type) - ? RootEditableElement(*node, editable_type) + Element* root_element = HasEditableStyle(*node) + ? RootEditableElement(*node) : node->GetDocument().documentElement(); if (!root_element) return VisiblePosition();
diff --git a/third_party/blink/renderer/core/editing/visible_units_line_test.cc b/third_party/blink/renderer/core/editing/visible_units_line_test.cc index 8fdb727..424cc33 100644 --- a/third_party/blink/renderer/core/editing/visible_units_line_test.cc +++ b/third_party/blink/renderer/core/editing/visible_units_line_test.cc
@@ -659,8 +659,8 @@ const VisiblePosition& visible_position = CreateVisiblePosition(Position::LastPositionInNode(*two)); EXPECT_EQ(Position(one->firstChild(), 7), - PreviousRootInlineBoxCandidatePosition( - two->lastChild(), visible_position, kContentIsEditable)); + PreviousRootInlineBoxCandidatePosition(two->lastChild(), + visible_position)); } TEST_P(ParameterizedVisibleUnitsLineTest, InSameLineSkippingEmptyEditableDiv) {
diff --git a/third_party/blink/renderer/core/fetch/fetch_manager.cc b/third_party/blink/renderer/core/fetch/fetch_manager.cc index fdf72eaf..3b6de7f 100644 --- a/third_party/blink/renderer/core/fetch/fetch_manager.cc +++ b/third_party/blink/renderer/core/fetch/fetch_manager.cc
@@ -586,7 +586,7 @@ PerformNetworkError("Fetch API cannot load " + fetch_request_data_->Url().GetString() + ". Request mode is \"no-cors\" but the redirect mode " - " is not \"follow\"."); + "is not \"follow\"."); return; }
diff --git a/third_party/blink/renderer/core/html/resources/html.css b/third_party/blink/renderer/core/html/resources/html.css index ccf544a..99235bd 100644 --- a/third_party/blink/renderer/core/html/resources/html.css +++ b/third_party/blink/renderer/core/html/resources/html.css
@@ -1008,6 +1008,10 @@ /* states */ +video:-internal-spatial-navigation-interest:not(:fullscreen) { + outline-offset: -2px; +} + :-internal-spatial-navigation-interest { outline: auto 5px -webkit-focus-ring-color !important; box-shadow: none !important
diff --git a/third_party/blink/renderer/core/input/event_handler.cc b/third_party/blink/renderer/core/input/event_handler.cc index 301d170..8faa80c 100644 --- a/third_party/blink/renderer/core/input/event_handler.cc +++ b/third_party/blink/renderer/core/input/event_handler.cc
@@ -271,8 +271,8 @@ } const HitTestRequest& request = result.GetHitTestRequest(); if (!request.ReadOnly()) { - frame_->GetDocument()->UpdateHoverActiveState(request, - result.InnerElement()); + frame_->GetDocument()->UpdateHoverActiveState( + request.Active(), !request.Move(), result.InnerElement()); } } @@ -924,10 +924,12 @@ // might actually be some other frame above this one at the specified // co-ordinate. So we must force the hit-test to fail, while still clearing // hover/active state. - if (force_leave) - frame_->GetDocument()->UpdateHoverActiveState(request, nullptr); - else + if (force_leave) { + frame_->GetDocument()->UpdateHoverActiveState(request.Active(), + !request.Move(), nullptr); + } else { mev = GetMouseEventTarget(request, mouse_event); + } if (hovered_node_result) *hovered_node_result = mev.GetHitTestResult(); @@ -1552,13 +1554,13 @@ HeapVector<Member<Node>>(nodes)); } -// Update the hover and active state across all frames for this gesture. -// This logic is different than the mouse case because mice send MouseLeave -// events to frames as they're exited. With gestures, a single event +// Update the hover and active state across all frames. This logic is +// different than the mouse case because mice send MouseLeave events to frames +// as they're exited. With gestures or manual applications, a single event // conceptually both 'leaves' whatever frame currently had hover and enters a -// new frame -void EventHandler::UpdateGestureHoverActiveState(const HitTestRequest& request, - Element* inner_element) { +// new frame so we need to update state in the old frame chain as well. +void EventHandler::UpdateCrossFrameHoverActiveState(bool is_active, + Element* inner_element) { DCHECK_EQ(frame_, &frame_->LocalFrameRoot()); HeapVector<Member<LocalFrame>> new_hover_frame_chain; @@ -1567,7 +1569,7 @@ // Insert the ancestors of the frame having the new hovered element to the // frame chain. The frame chain doesn't include the main frame to avoid the // redundant work that cleans the hover state because the hover state for the - // main frame is updated by calling Document::updateHoverActiveState. + // main frame is updated by calling Document::UpdateHoverActiveState. while (new_hover_frame_in_document && new_hover_frame_in_document != frame_) { new_hover_frame_chain.push_back(new_hover_frame_in_document); Frame* parent_frame = new_hover_frame_in_document->Tree().Parent(); @@ -1603,14 +1605,18 @@ old_hover_element_in_cur_doc = doc->HoverElement(); // If the old hovered frame is different from the new hovered frame. // we should clear the old hovered element from the old hovered frame. - if (new_hover_frame != old_hover_frame) - doc->UpdateHoverActiveState(request, nullptr); + if (new_hover_frame != old_hover_frame) { + doc->UpdateHoverActiveState(is_active, + /*update_active_chain=*/true, nullptr); + } } } // Recursively set the new active/hover states on every frame in the chain of // innerElement. - frame_->GetDocument()->UpdateHoverActiveState(request, inner_element); + frame_->GetDocument()->UpdateHoverActiveState(is_active, + /*update_active_chain=*/true, + inner_element); } // Update the mouseover/mouseenter/mouseout/mouseleave events across all frames @@ -1738,8 +1744,9 @@ // Now apply hover/active state to the final target. HitTestRequest request(hit_type | HitTestRequest::kAllowChildFrameContent); if (!request.ReadOnly()) { - UpdateGestureHoverActiveState( - request, event_with_hit_test_results.GetHitTestResult().InnerElement()); + UpdateCrossFrameHoverActiveState( + request.Active(), + event_with_hit_test_results.GetHitTestResult().InnerElement()); } if (should_keep_active_for_min_interval) { @@ -1981,7 +1988,8 @@ HitTestLocation location(location_in_root_frame); HitTestResult result(request, location); result.SetInnerNode(target_node); - doc->UpdateHoverActiveState(request, result.InnerElement()); + doc->UpdateHoverActiveState(request.Active(), !request.Move(), + result.InnerElement()); // The contextmenu event is a mouse event even when invoked using the // keyboard. This is required for web compatibility. @@ -2067,8 +2075,8 @@ mouse_event_manager_->LastKnownMousePositionInViewport())); HitTestResult result(request, location); layout_object->HitTest(location, result); - frame_->GetDocument()->UpdateHoverActiveState(request, - result.InnerElement()); + frame_->GetDocument()->UpdateHoverActiveState( + request.Active(), !request.Move(), result.InnerElement()); } } } @@ -2082,7 +2090,7 @@ HitTestRequest request(HitTestRequest::kTouchEvent | HitTestRequest::kRelease); frame_->GetDocument()->UpdateHoverActiveState( - request, last_deferred_tap_element_.Get()); + request.Active(), !request.Move(), last_deferred_tap_element_.Get()); } last_deferred_tap_element_ = nullptr; } @@ -2304,8 +2312,8 @@ result.SetURLElement(capture_target->EnclosingLinkEventParentOrSelf()); if (!request.ReadOnly()) { - frame_->GetDocument()->UpdateHoverActiveState(request, - result.InnerElement()); + frame_->GetDocument()->UpdateHoverActiveState( + request.Active(), !request.Move(), result.InnerElement()); } return MouseEventWithHitTestResults(
diff --git a/third_party/blink/renderer/core/input/event_handler.h b/third_party/blink/renderer/core/input/event_handler.h index 835dbb5..cd2f8074 100644 --- a/third_party/blink/renderer/core/input/event_handler.h +++ b/third_party/blink/renderer/core/input/event_handler.h
@@ -175,8 +175,11 @@ WebInputEventResult HandleGestureEvent(const GestureEventWithHitTestResults&); // Clear the old hover/active state within frames before moving the hover - // state to the another frame - void UpdateGestureHoverActiveState(const HitTestRequest&, Element*); + // state to the another frame. |is_active| specifies whether the active state + // is being applied to or removed from the given element. This method should + // be initially called on the root document, it will recurse into child + // frames as needed. + void UpdateCrossFrameHoverActiveState(bool is_active, Element*); // Hit-test the provided (non-scroll) gesture event, applying touch-adjustment // and updating hover/active state across all frames if necessary. This should
diff --git a/third_party/blink/renderer/core/inspector/inspect_tool_highlight.html b/third_party/blink/renderer/core/inspector/inspect_tool_highlight.html index 46ccf190..bfb0011a 100644 --- a/third_party/blink/renderer/core/inspector/inspect_tool_highlight.html +++ b/third_party/blink/renderer/core/inspector/inspect_tool_highlight.html
@@ -28,6 +28,8 @@ <!DOCTYPE html> <html> <head> +<script src="inspect_tool_common.js"></script> +<link rel="stylesheet" href="inspect_tool_common.css"> <style> body { --arrow-width: 15px; @@ -62,7 +64,8 @@ padding: 5px 8px; border-radius: 3px; box-sizing: border-box; - max-width: calc(100% - 4px); + min-width: 100px; + max-width: 300px; z-index: 1; background-clip: padding-box; will-change: transform; @@ -86,19 +89,16 @@ .element-info { display: flex; flex-direction: column; - line-height: 16px; } .element-info-header { display: flex; - align-content: stretch; - line-height: 16px; + align-items: baseline; } .element-info-body { display: flex; flex-direction: column; - border-top: 1px solid #999; padding-top: 2px; margin-top: 2px; } @@ -108,8 +108,10 @@ line-height: 19px; } -.element-info-row > * { - flex: none; +.element-info-contrast-row { + border-top: 1px solid #ddd; + padding-top: 5px; + margin-top: 5px; } .element-info-name { @@ -120,12 +122,28 @@ flex: auto; } -.element-info-value { +.element-info-value-color { + display: flex; + color: rgb(48, 57, 66); + margin-left: 10px; + align-items: baseline; +} + +.element-info-value-contrast { display: flex; text-align: right; color: rgb(48, 57, 66); margin-left: 10px; +} + +.element-info-value-text { + text-align: right; + color: rgb(48, 57, 66); + margin-left: 10px; align-items: baseline; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .color-swatch { @@ -174,13 +192,28 @@ } .contrast-text { - border-radius: 3px; - width: 20px; + width: 16px; height: 16px; text-align: center; line-height: 16px; - margin-right: 9px; - border: 1px solid #ccc; + margin-right: 8px; + border: 1px solid rgba(0, 0, 0, 0.1); + padding: 0 1px; +} + +.a11y-icon { + width: 16px; + height: 16px; + margin-left: 2px; + background-repeat: no-repeat; +} + +.a11y-icon-warning { + background-image: url("data:image/svg+xml;charset=UTF-8, %3csvg xmlns='http://www.w3.org/2000/svg' width='16px' height='16px' viewBox='0 0 18 18' fill='%23ffc107'%3e%3cpath d='M0 0h18v18H0z' fill='none'/%3e%3cpath d='M.5 16h17L9 1 .5 16zm9.5-2H8v-2h2v2zm0-3H8V7h2v4z'/%3e%3c/svg%3e "); +} + +.a11y-icon-ok { + background-image: url("data:image/svg+xml;charset=UTF-8, %3csvg xmlns='http://www.w3.org/2000/svg' width='16px' height='16px' viewBox='0 0 48 48' fill='%2300a000'%3e%3cpath d='M0 0h48v48H0z' fill='none'/%3e%3cpath d='M18 32.34L9.66 24l-2.83 2.83L18 38l24-24-2.83-2.83z'/%3e%3c/svg%3e"); } </style> @@ -428,11 +461,13 @@ const tagNameElement = descriptionElement.createChild("span", "material-tag-name"); tagNameElement.textContent = elementInfo.tagName; const nodeIdElement = descriptionElement.createChild("span", "material-node-id"); - nodeIdElement.textContent = elementInfo.idValue ? "#" + elementInfo.idValue : ""; + const maxLength = 80; + nodeIdElement.textContent = elementInfo.idValue ? "#" + elementInfo.idValue.trimEnd(maxLength) : ""; nodeIdElement.classList.toggle("hidden", !elementInfo.idValue); const classNameElement = descriptionElement.createChild("span", "material-class-name"); - classNameElement.textContent = (elementInfo.className || "").trimEnd(50); + if (nodeIdElement.textContent.length < maxLength) + classNameElement.textContent = (elementInfo.className || "").trimEnd(maxLength - nodeIdElement.textContent.length); classNameElement.classList.toggle("hidden", !elementInfo.className); const dimensionsElement = elementInfoHeaderElement.createChild("div", "dimensions"); dimensionsElement.createChild("span", "material-node-width").textContent = Math.round(elementInfo.nodeWidth * 100) / 100; @@ -449,7 +484,7 @@ const fontFamily = style["font-family"]; const fontSize = style["font-size"]; if (fontFamily && fontSize !== "0px") - addTextRow("Font", `${fontSize} ${fontFamily}`.trimEnd(20)); + addTextRow("Font", `${fontSize} ${fontFamily}`); const bgcolor = style["background-color"]; if (bgcolor && bgcolor !== "#00000000") @@ -467,22 +502,24 @@ if (color && color !== "#00000000" && cbgColor && cbgColor !== "#00000000") addContrastRow(style["color"], elementInfo.contrast); - function addRow(name) { + function addRow(name, rowClassName, valueClassName) { if (!elementInfoBodyElement) elementInfoBodyElement = elementInfoElement.createChild("div", "element-info-body") const rowElement = elementInfoBodyElement.createChild("div", "element-info-row"); + if (rowClassName) + rowElement.classList.add(rowClassName); const nameElement = rowElement.createChild("div", "element-info-name"); nameElement.textContent = name; rowElement.createChild("div", "element-info-gap"); - return rowElement.createChild("div", "element-info-value"); + return rowElement.createChild("div", valueClassName || ""); } function addTextRow(name, value) { - addRow(name).createTextChild(value); + addRow(name, "", "element-info-value-text").createTextChild(value); } function addColorRow(name, color) { - const valueElement = addRow(name); + const valueElement = addRow(name, "", "element-info-value-color"); const swatch = valueElement.createChild("div", "color-swatch"); const inner = swatch.createChild("div", "color-swatch-inner"); inner.style.backgroundColor = color; @@ -492,18 +529,14 @@ function addContrastRow(fgColor, contrast) { const ratio = contrastRatio(parseHexa(fgColor), parseHexa(contrast.backgroundColor)); const threshold = computeIsLargeFont(contrast) ? 3.0 : 4.5; - const valueElement = addRow("Contrast"); + const valueElement = addRow("Contrast", "element-info-contrast-row", "element-info-value-contrast"); const sampleText = valueElement.createChild("div", "contrast-text"); sampleText.style.color = fgColor; sampleText.style.backgroundColor = contrast.backgroundColor; sampleText.textContent = "Aa"; const valueSpan = valueElement.createChild("span"); valueSpan.textContent = Math.round(ratio * 100) / 100; - if (ratio < threshold) { - valueSpan.style.color = "red"; - valueSpan.style.paddingRight = "5px"; - valueElement.createTextChild(` < ${threshold.toFixed(1)}`); - } + valueElement.createChild("div", ratio < threshold ? "a11y-icon a11y-icon-warning" : "a11y-icon a11y-icon-ok"); } return elementInfoElement; @@ -769,10 +802,11 @@ function test() { document.body.classList.add("platform-mac"); + reset(window); drawHighlight( {"paths":[{"path":["M",122,133.796875,"L",822,133.796875,"L",822,208.796875,"L",122,208.796875,"Z"], "fillColor":"rgba(111, 168, 220, 0.658823529411765)","name":"content"}, {"path":["M",122,113.796875,"L",822,113.796875,"L",822,228.796875,"L",122,228.796875,"Z"],"fillColor":"rgba(246, 178, 107, 0.66)","name":"margin"}],"showRulers":false,"showExtensionLines":false, - "elementInfo":{"tagName":"p","idValue":"","nodeWidth":"700","nodeHeight":"75","style":{"color":"#FFFFFFFF","font-family":"\"Product Sans\", \"Open Sans\", Roboto, Arial","font-size":"20px","line-height":"25px","padding":"0px","margin":"20px 0px","background-color":"#00000000"},"contrast":{"fontSize":"20px","fontWeight":"400","backgroundColor":"#F9B826BF"}}, showExtensionLines: true, showRulers: true}); + "elementInfo":{"tagName":"button","className":"class.name", "idValue":"download-hero","nodeWidth":"700","nodeHeight":"75","style":{"color":"#FFFFFFFF","font-family":"\"Product Sans\", \"Open Sans\", Roboto, Arial, \"Product Sans\", \"Open Sans\", Roboto, Arial","font-size":"20px","line-height":"25px","padding":"0px","margin":"20px 0px","background-color":"#00000000"},"contrast":{"fontSize":"20px","fontWeight":"400","backgroundColor":"#F9B826BF"}}, showExtensionLines: true, showRulers: true}); } </script>
diff --git a/third_party/blink/renderer/core/inspector/inspect_tool_paused.html b/third_party/blink/renderer/core/inspector/inspect_tool_paused.html index f2bc4e1..22f5375 100644 --- a/third_party/blink/renderer/core/inspector/inspect_tool_paused.html +++ b/third_party/blink/renderer/core/inspector/inspect_tool_paused.html
@@ -6,6 +6,8 @@ <!DOCTYPE html> <html> <head> +<script src="inspect_tool_common.js"></script> +<link rel="stylesheet" href="inspect_tool_common.css"> <style> body { background-color: rgba(0, 0, 0, 0.31);
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc index 04782c07..b995095f 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -2030,14 +2030,20 @@ // fragments of contents except for self-painting layers, because we initiate // fragment painting of contents from the layer. if (object.HasLayer() && - ToLayoutBoxModelObject(object) - .Layer() - ->ShouldFragmentCompositedBounds() && // Table section may repeat, and doesn't need the special layer path // because it doesn't have contents visual overflow. !object.IsTableSection()) { - return ToLayoutBoxModelObject(object).Layer()->PhysicalBoundingBox( - &enclosing_pagination_layer); + const auto* layer = ToLayoutBoxModelObject(object).Layer(); + if (layer->ShouldFragmentCompositedBounds()) { + ClipRect clip; + layer->Clipper(PaintLayer::GeometryMapperOption::kDoNotUseGeometryMapper) + .CalculateBackgroundClipRect( + ClipRectsContext(&enclosing_pagination_layer, nullptr, + kUncachedClipRects), + clip); + return Intersection( + clip.Rect(), layer->PhysicalBoundingBox(&enclosing_pagination_layer)); + } } LayoutRect local_bounds;
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc index a092c5d..70aa98f 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
@@ -4454,6 +4454,23 @@ EXPECT_EQ(LayoutUnit(200), FragmentAt(content, 1).LogicalTopInFlowThread()); } +TEST_P(PaintPropertyTreeBuilderTest, LayerUnderOverflowClipUnderMultiColumn) { + SetBodyInnerHTML(R"HTML( + <div id='multicol' style='columns:2'> + <div id='clip' style='height: 200px; overflow: hidden'> + <div id='layer' style='position: relative; height: 800px'></div> + </div> + <div style='height: 200px'></div> + </div> + )HTML"); + + const auto* thread = GetLayoutObjectByElementId("multicol")->SlowFirstChild(); + EXPECT_TRUE(thread->IsLayoutFlowThread()); + EXPECT_EQ(2u, NumFragments(thread)); + EXPECT_EQ(1u, NumFragments(GetLayoutObjectByElementId("clip"))); + EXPECT_EQ(1u, NumFragments(GetLayoutObjectByElementId("layer"))); +} + TEST_P(PaintPropertyTreeBuilderTest, CompositedUnderMultiColumn) { SetBodyInnerHTML(R"HTML( <style>body { margin: 0; }</style>
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_bind_group.cc b/third_party/blink/renderer/modules/webgpu/gpu_bind_group.cc index d0a39ea0..f7f30c3 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_bind_group.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_bind_group.cc
@@ -10,8 +10,9 @@ // static GPUBindGroup* GPUBindGroup::Create(GPUDevice* device, - DawnBindGroup bind_group) { - return MakeGarbageCollected<GPUBindGroup>(device, bind_group); + const GPUBindGroupDescriptor* webgpu_desc) { + NOTIMPLEMENTED(); + return nullptr; } GPUBindGroup::GPUBindGroup(GPUDevice* device, DawnBindGroup bind_group)
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_bind_group.h b/third_party/blink/renderer/modules/webgpu/gpu_bind_group.h index 7b3c23f..2f06669 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_bind_group.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_bind_group.h
@@ -9,11 +9,14 @@ namespace blink { +class GPUBindGroupDescriptor; + class GPUBindGroup : public DawnObject<DawnBindGroup> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUBindGroup* Create(GPUDevice* device, DawnBindGroup bind_group); + static GPUBindGroup* Create(GPUDevice* device, + const GPUBindGroupDescriptor* webgpu_desc); explicit GPUBindGroup(GPUDevice* device, DawnBindGroup bind_group); ~GPUBindGroup() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.cc b/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.cc index 3e7ad0a..a2b868f 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.cc
@@ -4,15 +4,45 @@ #include "third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.h" +#include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout_descriptor.h" #include "third_party/blink/renderer/modules/webgpu/gpu_device.h" namespace blink { +DawnBindGroupLayoutBinding AsDawnType( + const GPUBindGroupLayoutBinding* webgpu_binding) { + DawnBindGroupLayoutBinding dawn_binding; + + dawn_binding.binding = webgpu_binding->binding(); + dawn_binding.type = AsDawnEnum<DawnBindingType>(webgpu_binding->type()); + dawn_binding.visibility = + AsDawnEnum<DawnShaderStageBit>(webgpu_binding->visibility()); + + return dawn_binding; +} + // static GPUBindGroupLayout* GPUBindGroupLayout::Create( GPUDevice* device, - DawnBindGroupLayout bind_group_layout) { - return MakeGarbageCollected<GPUBindGroupLayout>(device, bind_group_layout); + const GPUBindGroupLayoutDescriptor* webgpu_desc) { + DCHECK(device); + DCHECK(webgpu_desc); + + uint32_t binding_count = + static_cast<uint32_t>(webgpu_desc->bindings().size()); + + std::unique_ptr<DawnBindGroupLayoutBinding[]> bindings = + binding_count != 0 ? AsDawnType(webgpu_desc->bindings()) : nullptr; + + DawnBindGroupLayoutDescriptor dawn_desc; + dawn_desc.nextInChain = nullptr; + dawn_desc.bindingCount = binding_count; + dawn_desc.bindings = bindings.get(); + + return MakeGarbageCollected<GPUBindGroupLayout>( + device, device->GetProcs().deviceCreateBindGroupLayout( + device->GetHandle(), &dawn_desc)); } GPUBindGroupLayout::GPUBindGroupLayout(GPUDevice* device,
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.h b/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.h index cbd560e..553e50d 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.h
@@ -9,12 +9,15 @@ namespace blink { +class GPUBindGroupLayoutDescriptor; + class GPUBindGroupLayout : public DawnObject<DawnBindGroupLayout> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUBindGroupLayout* Create(GPUDevice* device, - DawnBindGroupLayout bind_group_layout); + static GPUBindGroupLayout* Create( + GPUDevice* device, + const GPUBindGroupLayoutDescriptor* webgpu_desc); explicit GPUBindGroupLayout(GPUDevice* device, DawnBindGroupLayout bind_group_layout); ~GPUBindGroupLayout() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc b/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc index 99a19f42..948cd7d3 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_buffer.cc
@@ -9,8 +9,10 @@ namespace blink { // static -GPUBuffer* GPUBuffer::Create(GPUDevice* device, DawnBuffer buffer) { - return MakeGarbageCollected<GPUBuffer>(device, buffer); +GPUBuffer* GPUBuffer::Create(GPUDevice* device, + const GPUBufferDescriptor* webgpu_desc) { + NOTIMPLEMENTED(); + return nullptr; } GPUBuffer::GPUBuffer(GPUDevice* device, DawnBuffer buffer)
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_buffer.h b/third_party/blink/renderer/modules/webgpu/gpu_buffer.h index a07d234..7fb653f4 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_buffer.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_buffer.h
@@ -9,11 +9,14 @@ namespace blink { +class GPUBufferDescriptor; + class GPUBuffer : public DawnObject<DawnBuffer> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUBuffer* Create(GPUDevice* device, DawnBuffer buffer); + static GPUBuffer* Create(GPUDevice* device, + const GPUBufferDescriptor* webgpu_desc); explicit GPUBuffer(GPUDevice* device, DawnBuffer buffer); ~GPUBuffer() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc b/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc index c6f7ee9..1449ea8 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.cc
@@ -11,8 +11,9 @@ // static GPUCommandEncoder* GPUCommandEncoder::Create( GPUDevice* device, - DawnCommandEncoder command_encoder) { - return MakeGarbageCollected<GPUCommandEncoder>(device, command_encoder); + const GPUCommandEncoderDescriptor* webgpu_desc) { + NOTIMPLEMENTED(); + return nullptr; } GPUCommandEncoder::GPUCommandEncoder(GPUDevice* device,
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.h b/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.h index 25defe9..20286ca 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_command_encoder.h
@@ -9,12 +9,15 @@ namespace blink { +class GPUCommandEncoderDescriptor; + class GPUCommandEncoder : public DawnObject<DawnCommandEncoder> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUCommandEncoder* Create(GPUDevice* device, - DawnCommandEncoder command_encoder); + static GPUCommandEncoder* Create( + GPUDevice* device, + const GPUCommandEncoderDescriptor* webgpu_desc); explicit GPUCommandEncoder(GPUDevice* device, DawnCommandEncoder command_encoder); ~GPUCommandEncoder() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.cc b/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.cc index 7f3f855b..2f91276 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.cc
@@ -11,8 +11,9 @@ // static GPUComputePipeline* GPUComputePipeline::Create( GPUDevice* device, - DawnComputePipeline compute_pipeline) { - return MakeGarbageCollected<GPUComputePipeline>(device, compute_pipeline); + const GPUComputePipelineDescriptor* webgpu_desc) { + NOTIMPLEMENTED(); + return nullptr; } GPUComputePipeline::GPUComputePipeline(GPUDevice* device,
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.h b/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.h index 16d1bb90..14250419 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.h
@@ -9,12 +9,15 @@ namespace blink { +class GPUComputePipelineDescriptor; + class GPUComputePipeline : public DawnObject<DawnComputePipeline> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUComputePipeline* Create(GPUDevice* device, - DawnComputePipeline compute_pipeline); + static GPUComputePipeline* Create( + GPUDevice* device, + const GPUComputePipelineDescriptor* webgpu_desc); explicit GPUComputePipeline(GPUDevice* device, DawnComputePipeline compute_pipeline); ~GPUComputePipeline() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.cc b/third_party/blink/renderer/modules/webgpu/gpu_device.cc index 6191f10a..76b393dc 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_device.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_device.cc
@@ -7,9 +7,20 @@ #include "gpu/command_buffer/client/webgpu_interface.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/modules/webgpu/dawn_control_client_holder.h" + #include "third_party/blink/renderer/modules/webgpu/gpu_adapter.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_bind_group.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_buffer.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_command_encoder.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline.h" #include "third_party/blink/renderer/modules/webgpu/gpu_device_descriptor.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.h" #include "third_party/blink/renderer/modules/webgpu/gpu_queue.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_sampler.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_shader_module.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_texture.h" namespace blink { @@ -43,6 +54,53 @@ return adapter_; } +GPUBuffer* GPUDevice::createBuffer(const GPUBufferDescriptor* descriptor) { + return GPUBuffer::Create(this, descriptor); +} + +GPUTexture* GPUDevice::createTexture(const GPUTextureDescriptor* descriptor) { + return GPUTexture::Create(this, descriptor); +} + +GPUSampler* GPUDevice::createSampler(const GPUSamplerDescriptor* descriptor) { + return GPUSampler::Create(this, descriptor); +} + +GPUBindGroup* GPUDevice::createBindGroup( + const GPUBindGroupDescriptor* descriptor) { + return GPUBindGroup::Create(this, descriptor); +} + +GPUBindGroupLayout* GPUDevice::createBindGroupLayout( + const GPUBindGroupLayoutDescriptor* descriptor) { + return GPUBindGroupLayout::Create(this, descriptor); +} + +GPUPipelineLayout* GPUDevice::createPipelineLayout( + const GPUPipelineLayoutDescriptor* descriptor) { + return GPUPipelineLayout::Create(this, descriptor); +} + +GPUShaderModule* GPUDevice::createShaderModule( + const GPUShaderModuleDescriptor* descriptor) { + return GPUShaderModule::Create(this, descriptor); +} + +GPURenderPipeline* GPUDevice::createRenderPipeline( + const GPURenderPipelineDescriptor* descriptor) { + return GPURenderPipeline::Create(this, descriptor); +} + +GPUComputePipeline* GPUDevice::createComputePipeline( + const GPUComputePipelineDescriptor* descriptor) { + return GPUComputePipeline::Create(this, descriptor); +} + +GPUCommandEncoder* GPUDevice::createCommandEncoder( + const GPUCommandEncoderDescriptor* descriptor) { + return GPUCommandEncoder::Create(this, descriptor); +} + GPUQueue* GPUDevice::getQueue() { return queue_; }
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.h b/third_party/blink/renderer/modules/webgpu/gpu_device.h index 45c95c0d..fdfc320 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_device.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_device.h
@@ -11,8 +11,29 @@ namespace blink { class GPUAdapter; +class GPUAdapter; +class GPUBuffer; +class GPUBufferDescriptor; +class GPUCommandEncoder; +class GPUCommandEncoderDescriptor; +class GPUBindGroup; +class GPUBindGroupDescriptor; +class GPUBindGroupLayout; +class GPUBindGroupLayoutDescriptor; +class GPUComputePipeline; +class GPUComputePipelineDescriptor; class GPUDeviceDescriptor; +class GPUPipelineLayout; +class GPUPipelineLayoutDescriptor; class GPUQueue; +class GPURenderPipeline; +class GPURenderPipelineDescriptor; +class GPUSampler; +class GPUSamplerDescriptor; +class GPUShaderModule; +class GPUShaderModuleDescriptor; +class GPUTexture; +class GPUTextureDescriptor; class GPUDevice final : public DawnObject<DawnDevice> { DEFINE_WRAPPERTYPEINFO(); @@ -31,6 +52,27 @@ // gpu_device.idl GPUAdapter* adapter() const; + + GPUBuffer* createBuffer(const GPUBufferDescriptor* descriptor); + GPUTexture* createTexture(const GPUTextureDescriptor* descriptor); + GPUSampler* createSampler(const GPUSamplerDescriptor* descriptor); + + GPUBindGroup* createBindGroup(const GPUBindGroupDescriptor* descriptor); + GPUBindGroupLayout* createBindGroupLayout( + const GPUBindGroupLayoutDescriptor* descriptor); + GPUPipelineLayout* createPipelineLayout( + const GPUPipelineLayoutDescriptor* descriptor); + + GPUShaderModule* createShaderModule( + const GPUShaderModuleDescriptor* descriptor); + GPURenderPipeline* createRenderPipeline( + const GPURenderPipelineDescriptor* descriptor); + GPUComputePipeline* createComputePipeline( + const GPUComputePipelineDescriptor* descriptor); + + GPUCommandEncoder* createCommandEncoder( + const GPUCommandEncoderDescriptor* descriptor); + GPUQueue* getQueue(); private:
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.idl b/third_party/blink/renderer/modules/webgpu/gpu_device.idl index 931114ef..16520599 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_device.idl +++ b/third_party/blink/renderer/modules/webgpu/gpu_device.idl
@@ -9,6 +9,20 @@ ] interface GPUDevice { readonly attribute GPUAdapter adapter; + GPUBuffer createBuffer(GPUBufferDescriptor descriptor); + GPUTexture createTexture(GPUTextureDescriptor descriptor); + GPUSampler createSampler(GPUSamplerDescriptor descriptor); + + GPUBindGroup createBindGroup(GPUBindGroupDescriptor descriptor); + GPUBindGroupLayout createBindGroupLayout(GPUBindGroupLayoutDescriptor descriptor); + GPUPipelineLayout createPipelineLayout(GPUPipelineLayoutDescriptor descriptor); + + GPUShaderModule createShaderModule(GPUShaderModuleDescriptor descriptor); + GPURenderPipeline createRenderPipeline(GPURenderPipelineDescriptor descriptor); + GPUComputePipeline createComputePipeline(GPUComputePipelineDescriptor descriptor); + + GPUCommandEncoder createCommandEncoder(GPUCommandEncoderDescriptor descriptor); + GPUQueue getQueue(); };
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.cc b/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.cc index 59dabed..e721dfc 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.cc
@@ -4,15 +4,35 @@ #include "third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.h" +#include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_bind_group_layout.h" #include "third_party/blink/renderer/modules/webgpu/gpu_device.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout_descriptor.h" namespace blink { // static GPUPipelineLayout* GPUPipelineLayout::Create( GPUDevice* device, - DawnPipelineLayout pipeline_layout) { - return MakeGarbageCollected<GPUPipelineLayout>(device, pipeline_layout); + const GPUPipelineLayoutDescriptor* webgpu_desc) { + DCHECK(device); + DCHECK(webgpu_desc); + + uint32_t bind_group_layout_count = + static_cast<uint32_t>(webgpu_desc->bindGroupLayouts().size()); + + std::unique_ptr<DawnBindGroupLayout[]> bind_group_layouts = + bind_group_layout_count != 0 ? AsDawnType(webgpu_desc->bindGroupLayouts()) + : nullptr; + + DawnPipelineLayoutDescriptor dawn_desc; + dawn_desc.nextInChain = nullptr; + dawn_desc.bindGroupLayoutCount = bind_group_layout_count; + dawn_desc.bindGroupLayouts = bind_group_layouts.get(); + + return MakeGarbageCollected<GPUPipelineLayout>( + device, device->GetProcs().deviceCreatePipelineLayout(device->GetHandle(), + &dawn_desc)); } GPUPipelineLayout::GPUPipelineLayout(GPUDevice* device,
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.h b/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.h index 698bac6c..4f3a69c 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.h
@@ -9,12 +9,15 @@ namespace blink { +class GPUPipelineLayoutDescriptor; + class GPUPipelineLayout : public DawnObject<DawnPipelineLayout> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUPipelineLayout* Create(GPUDevice* device, - DawnPipelineLayout pipeline_layout); + static GPUPipelineLayout* Create( + GPUDevice* device, + const GPUPipelineLayoutDescriptor* webgpu_desc); explicit GPUPipelineLayout(GPUDevice* device, DawnPipelineLayout pipeline_layout); ~GPUPipelineLayout() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_queue.cc b/third_party/blink/renderer/modules/webgpu/gpu_queue.cc index 7d613b1..1dcf87a 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_queue.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_queue.cc
@@ -5,6 +5,8 @@ #include "third_party/blink/renderer/modules/webgpu/gpu_queue.h" #include "gpu/command_buffer/client/webgpu_interface.h" +#include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_command_buffer.h" #include "third_party/blink/renderer/modules/webgpu/gpu_device.h" #include "third_party/blink/renderer/modules/webgpu/gpu_fence.h" #include "third_party/blink/renderer/modules/webgpu/gpu_fence_descriptor.h" @@ -26,8 +28,20 @@ GetProcs().queueRelease(GetHandle()); } +void GPUQueue::submit(const HeapVector<Member<GPUCommandBuffer>>& buffers) { + std::unique_ptr<DawnCommandBuffer[]> commandBuffers = AsDawnType(buffers); + + GetProcs().queueSubmit(GetHandle(), buffers.size(), commandBuffers.get()); + // WebGPU guarantees that submitted commands finish in finite time so we + // flush commands to the GPU process now. + device_->GetInterface()->FlushCommands(); +} + void GPUQueue::signal(GPUFence* fence, uint64_t signal_value) { GetProcs().queueSignal(GetHandle(), fence->GetHandle(), signal_value); + // Signaling a fence adds a callback to update the fence value to the + // completed value. WebGPU guarantees that the fence completion is + // observable in finite time so we flush commands to the GPU process now. device_->GetInterface()->FlushCommands(); }
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_queue.h b/third_party/blink/renderer/modules/webgpu/gpu_queue.h index fd241a8..baae1807 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_queue.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_queue.h
@@ -9,6 +9,7 @@ namespace blink { +class GPUCommandBuffer; class GPUFence; class GPUFenceDescriptor; @@ -21,6 +22,7 @@ ~GPUQueue() override; // gpu_queue.idl + void submit(const HeapVector<Member<GPUCommandBuffer>>& buffers); void signal(GPUFence* fence, uint64_t signal_value); GPUFence* createFence(const GPUFenceDescriptor* descriptor);
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_queue.idl b/third_party/blink/renderer/modules/webgpu/gpu_queue.idl index 7bb595c2..d047a2b 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_queue.idl +++ b/third_party/blink/renderer/modules/webgpu/gpu_queue.idl
@@ -7,6 +7,7 @@ [ RuntimeEnabled=WebGPU ] interface GPUQueue { + void submit(sequence<GPUCommandBuffer> buffers); void signal(GPUFence fence, unsigned long long signalValue); GPUFence createFence(GPUFenceDescriptor descriptor); };
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.cc b/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.cc index 03b9da1..d5f33955 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.cc
@@ -11,8 +11,9 @@ // static GPURenderPipeline* GPURenderPipeline::Create( GPUDevice* device, - DawnRenderPipeline render_pipeline) { - return MakeGarbageCollected<GPURenderPipeline>(device, render_pipeline); + const GPURenderPipelineDescriptor* webgpu_desc) { + NOTIMPLEMENTED(); + return nullptr; } GPURenderPipeline::GPURenderPipeline(GPUDevice* device,
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.h b/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.h index 99b4e98..65d6ff25 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_render_pipeline.h
@@ -9,12 +9,15 @@ namespace blink { +class GPURenderPipelineDescriptor; + class GPURenderPipeline : public DawnObject<DawnRenderPipeline> { DEFINE_WRAPPERTYPEINFO(); public: - static GPURenderPipeline* Create(GPUDevice* device, - DawnRenderPipeline render_pipeline); + static GPURenderPipeline* Create( + GPUDevice* device, + const GPURenderPipelineDescriptor* webgpu_desc); explicit GPURenderPipeline(GPUDevice* device, DawnRenderPipeline render_pipeline); ~GPURenderPipeline() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_sampler.cc b/third_party/blink/renderer/modules/webgpu/gpu_sampler.cc index 2372e5e..ebeff2f 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_sampler.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_sampler.cc
@@ -9,8 +9,10 @@ namespace blink { // static -GPUSampler* GPUSampler::Create(GPUDevice* device, DawnSampler sampler) { - return MakeGarbageCollected<GPUSampler>(device, sampler); +GPUSampler* GPUSampler::Create(GPUDevice* device, + const GPUSamplerDescriptor* webgpu_desc) { + NOTIMPLEMENTED(); + return nullptr; } GPUSampler::GPUSampler(GPUDevice* device, DawnSampler sampler)
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_sampler.h b/third_party/blink/renderer/modules/webgpu/gpu_sampler.h index 5ba8fe19..3a99688 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_sampler.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_sampler.h
@@ -9,11 +9,14 @@ namespace blink { +class GPUSamplerDescriptor; + class GPUSampler : public DawnObject<DawnSampler> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUSampler* Create(GPUDevice* device, DawnSampler sampler); + static GPUSampler* Create(GPUDevice* device, + const GPUSamplerDescriptor* webgpu_desc); explicit GPUSampler(GPUDevice* device, DawnSampler sampler); ~GPUSampler() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_shader_module.cc b/third_party/blink/renderer/modules/webgpu/gpu_shader_module.cc index e399cec..55374ae 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_shader_module.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_shader_module.cc
@@ -5,13 +5,35 @@ #include "third_party/blink/renderer/modules/webgpu/gpu_shader_module.h" #include "third_party/blink/renderer/modules/webgpu/gpu_device.h" +#include "third_party/blink/renderer/modules/webgpu/gpu_shader_module_descriptor.h" namespace blink { +namespace { + +DawnShaderModuleDescriptor AsDawnType( + const GPUShaderModuleDescriptor* webgpu_desc) { + DawnShaderModuleDescriptor dawn_desc; + + dawn_desc.nextInChain = nullptr; + dawn_desc.code = webgpu_desc->code().View()->Data(); + dawn_desc.codeSize = webgpu_desc->code().View()->length(); + + return dawn_desc; +} + +} // anonymous namespace + // static -GPUShaderModule* GPUShaderModule::Create(GPUDevice* device, - DawnShaderModule shader_module) { - return MakeGarbageCollected<GPUShaderModule>(device, shader_module); +GPUShaderModule* GPUShaderModule::Create( + GPUDevice* device, + const GPUShaderModuleDescriptor* webgpu_desc) { + DCHECK(device); + DCHECK(webgpu_desc); + DawnShaderModuleDescriptor dawn_desc = AsDawnType(webgpu_desc); + return MakeGarbageCollected<GPUShaderModule>( + device, device->GetProcs().deviceCreateShaderModule(device->GetHandle(), + &dawn_desc)); } GPUShaderModule::GPUShaderModule(GPUDevice* device,
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_shader_module.h b/third_party/blink/renderer/modules/webgpu/gpu_shader_module.h index fcbe3a0..ac8cb74 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_shader_module.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_shader_module.h
@@ -9,12 +9,14 @@ namespace blink { +class GPUShaderModuleDescriptor; + class GPUShaderModule : public DawnObject<DawnShaderModule> { DEFINE_WRAPPERTYPEINFO(); public: static GPUShaderModule* Create(GPUDevice* device, - DawnShaderModule shader_module); + const GPUShaderModuleDescriptor* webgpu_desc); explicit GPUShaderModule(GPUDevice* device, DawnShaderModule shader_module); ~GPUShaderModule() override;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_texture.cc b/third_party/blink/renderer/modules/webgpu/gpu_texture.cc index f892585..bfead3c 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_texture.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_texture.cc
@@ -9,8 +9,10 @@ namespace blink { // static -GPUTexture* GPUTexture::Create(GPUDevice* device, DawnTexture texture) { - return MakeGarbageCollected<GPUTexture>(device, texture); +GPUTexture* GPUTexture::Create(GPUDevice* device, + const GPUTextureDescriptor* webgpu_desc) { + NOTIMPLEMENTED(); + return nullptr; } GPUTexture::GPUTexture(GPUDevice* device, DawnTexture texture)
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_texture.h b/third_party/blink/renderer/modules/webgpu/gpu_texture.h index 45c0e84..0b14661 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_texture.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_texture.h
@@ -9,11 +9,14 @@ namespace blink { +class GPUTextureDescriptor; + class GPUTexture : public DawnObject<DawnTexture> { DEFINE_WRAPPERTYPEINFO(); public: - static GPUTexture* Create(GPUDevice* device, DawnTexture texture); + static GPUTexture* Create(GPUDevice* device, + const GPUTextureDescriptor* webgpu_desc); explicit GPUTexture(GPUDevice* device, DawnTexture texture); ~GPUTexture() override;
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py index fd4774c..76e5ff60 100644 --- a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py +++ b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
@@ -461,6 +461,10 @@ def _compare_image(self, expected_driver_output, driver_output): if not expected_driver_output.image or not expected_driver_output.image_hash: return [] + # The presence of an expected image, but a lack of an outputted image + # does not signify an error. content::BlinkTestController checks the + # image_hash, and upon a match simply skips recording the outputted + # image. This even occurs when results_directory is set. if not driver_output.image or not driver_output.image_hash: return []
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/base.py b/third_party/blink/tools/blinkpy/web_tests/port/base.py index 191540b..8c06fbe 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/base.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/base.py
@@ -451,6 +451,11 @@ executable = self._path_to_image_diff() # Although we are handed 'old', 'new', image_diff wants 'new', 'old'. command = [executable, '--diff', actual_filename, expected_filename, diff_filename] + # Notifies image_diff to allow a tolerance when calculating the pixel + # diff. To account for variances when the tests are ran on an actual + # GPU. + if self.get_option('fuzzy_diff'): + command.append('--fuzzy-diff') result = None err_str = None
diff --git a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py index 00a33b6..65dd5348 100644 --- a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py +++ b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
@@ -279,6 +279,14 @@ default=None, help='Exit after the first N failures instead of running all tests'), optparse.make_option( + '--fuzzy-diff', + action='store_true', + default=False, + help=('When running tests on an actual GPU, variance in pixel ' + 'output can leads image differences causing failed expectations. ' + 'Instead a fuzzy diff is used to account for this variance. ' + 'See tools/imagediff/image_diff.cc')), + optparse.make_option( '--ignore-builder-category', action='store', help=('The category of builders to use with the --ignore-flaky-tests option '
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-overflow-clip-positioned-ref.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-overflow-clip-positioned-ref.html new file mode 100644 index 0000000..58f1d57 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-overflow-clip-positioned-ref.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<div style="columns: 2"> + <div style="height: 200px; background: blue"></div> + <div style="height: 200px"></div> +</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-overflow-clip-positioned.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-overflow-clip-positioned.html new file mode 100644 index 0000000..184bfc7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-overflow-clip-positioned.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<title>CSS Multi-column Layout Test: multicol with overflow-clipped positioned content</title> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/"> +<link rel="match" href="multicol-overflow-clip-positioned-ref.html"> +<meta name="assert" content="Overflow clip for positioned content should work under multicol."> +<div style="columns: 2"> + <div style="height: 200px; overflow: hidden"> + <div style="height: 800px; background: blue; position: relative"></div> + </div> + <div style="height: 200px"></div> +</div> +
diff --git a/third_party/zlib/BUILD.gn b/third_party/zlib/BUILD.gn index 0aec27f..8cc0eac3 100644 --- a/third_party/zlib/BUILD.gn +++ b/third_party/zlib/BUILD.gn
@@ -10,6 +10,10 @@ include_dirs = [ "." ] } +config("zlib_internal_config") { + defines = [ "ZLIB_IMPLEMENTATION" ] +} + use_arm_neon_optimizations = false if (current_cpu == "arm" || current_cpu == "arm64") { if (arm_use_neon) { @@ -56,6 +60,8 @@ } } + configs += [ ":zlib_internal_config" ] + public_configs = [ ":zlib_adler32_simd_config" ] } @@ -105,6 +111,8 @@ } } + configs += [ ":zlib_internal_config" ] + public_configs = [ ":zlib_arm_crc32_config" ] } } @@ -149,7 +157,10 @@ } configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + ":zlib_internal_config", + "//build/config/compiler:no_chromium_code", + ] public_configs = [ ":zlib_inflate_chunk_simd_config" ] } @@ -177,10 +188,12 @@ } } + configs += [ ":zlib_internal_config" ] + public_configs = [ ":zlib_crc32_simd_config" ] } -static_library("zlib_x86_simd") { +source_set("zlib_x86_simd") { visibility = [ ":*" ] if (use_x86_x64_optimizations) { @@ -202,7 +215,10 @@ } configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ + ":zlib_internal_config", + "//build/config/compiler:no_chromium_code", + ] } config("zlib_warnings") { @@ -211,7 +227,7 @@ } } -static_library("zlib") { +component("zlib") { if (!is_win) { # Don't stomp on "libzlib" on other platforms. output_name = "chrome_zlib" @@ -219,6 +235,7 @@ sources = [ "adler32.c", + "chromeconf.h", "compress.c", "crc32.c", "crc32.h", @@ -236,7 +253,6 @@ "inflate.h", "inftrees.c", "inftrees.h", - "names.h", "trees.c", "trees.h", "uncompr.c", @@ -269,6 +285,7 @@ configs -= [ "//build/config/compiler:chromium_code" ] configs += [ + ":zlib_internal_config", "//build/config/compiler:no_chromium_code", # Must be after no_chromium_code for warning flags to be ordered correctly.
diff --git a/third_party/zlib/README.chromium b/third_party/zlib/README.chromium index 9cb10fe..3d90f79 100644 --- a/third_party/zlib/README.chromium +++ b/third_party/zlib/README.chromium
@@ -22,6 +22,7 @@ imported. - The contents of the google directory are original Chromium-specific additions. + - Added chromeconf.h - Plus the changes in 'patches' folder. - Code in contrib/ other than contrib/minizip was added to match zlib's contributor layout.
diff --git a/third_party/zlib/names.h b/third_party/zlib/chromeconf.h similarity index 93% rename from third_party/zlib/names.h rename to third_party/zlib/chromeconf.h index c61f2a7..3414831 100644 --- a/third_party/zlib/names.h +++ b/third_party/zlib/chromeconf.h
@@ -2,8 +2,20 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#ifndef THIRD_PARTY_ZLIB_NAMES_H_ -#define THIRD_PARTY_ZLIB_NAMES_H_ +#ifndef THIRD_PARTY_ZLIB_CHROMECONF_H_ +#define THIRD_PARTY_ZLIB_CHROMECONF_H_ + +#if defined(COMPONENT_BUILD) +#if defined(WIN32) +#if defined(ZLIB_IMPLEMENTATION) +#define ZEXTERN __declspec(dllexport) +#else +#define ZEXTERN __declspec(dllimport) +#endif +#elif defined(ZLIB_IMPLEMENTATION) +#define ZEXPORT __attribute__((visibility("default"))) +#endif +#endif /* Rename all zlib names with a Cr_z_ prefix. This is based on the Z_PREFIX * option from zconf.h, but with a custom prefix. Where zconf.h would rename @@ -180,4 +192,4 @@ #define arm_check_features Cr_z_arm_check_features #define armv8_crc32_little Cr_z_armv8_crc32_little -#endif /* THIRD_PARTY_ZLIB_NAMES_H_ */ +#endif /* THIRD_PARTY_ZLIB_CHROMECONF_H_ */
diff --git a/third_party/zlib/patches/0000-build.patch b/third_party/zlib/patches/0000-build.patch index f16dacce..c27111d 100644 --- a/third_party/zlib/patches/0000-build.patch +++ b/third_party/zlib/patches/0000-build.patch
@@ -141,177 +141,17 @@ int ZEXPORT gzgetc(file) gzFile file; { -diff --git a/names.h b/names.h -new file mode 100644 -index 000000000000..f18df5684dc5 ---- /dev/null -+++ b/names.h -@@ -0,0 +1,155 @@ -+/* Copyright 2017 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. */ -+ -+#ifndef THIRD_PARTY_ZLIB_NAMES_H_ -+#define THIRD_PARTY_ZLIB_NAMES_H_ -+ -+/* Rename all zlib names with a Cr_z_ prefix. This is based on the Z_PREFIX -+ * option from zconf.h, but with a custom prefix. Where zconf.h would rename -+ * both a macro and its underscore-suffixed internal implementation (such as -+ * deflateInit2 and deflateInit2_), only the implementation is renamed here. -+ * The Byte type is also omitted. -+ * -+ * To generate this list, run -+ * sed -rn -e 's/^# *define +([^ ]+) +(z_[^ ]+)$/#define \1 Cr_\2/p' zconf.h -+ * (use -E instead of -r on macOS). -+ * -+ * gzread is also addressed by modifications in gzread.c and zlib.h. */ -+ -+#define Z_CR_PREFIX_SET -+ -+#define _dist_code Cr_z__dist_code -+#define _length_code Cr_z__length_code -+#define _tr_align Cr_z__tr_align -+#define _tr_flush_bits Cr_z__tr_flush_bits -+#define _tr_flush_block Cr_z__tr_flush_block -+#define _tr_init Cr_z__tr_init -+#define _tr_stored_block Cr_z__tr_stored_block -+#define _tr_tally Cr_z__tr_tally -+#define adler32 Cr_z_adler32 -+#define adler32_combine Cr_z_adler32_combine -+#define adler32_combine64 Cr_z_adler32_combine64 -+#define adler32_z Cr_z_adler32_z -+#define compress Cr_z_compress -+#define compress2 Cr_z_compress2 -+#define compressBound Cr_z_compressBound -+#define crc32 Cr_z_crc32 -+#define crc32_combine Cr_z_crc32_combine -+#define crc32_combine64 Cr_z_crc32_combine64 -+#define crc32_z Cr_z_crc32_z -+#define deflate Cr_z_deflate -+#define deflateBound Cr_z_deflateBound -+#define deflateCopy Cr_z_deflateCopy -+#define deflateEnd Cr_z_deflateEnd -+#define deflateGetDictionary Cr_z_deflateGetDictionary -+/* #undef deflateInit */ -+/* #undef deflateInit2 */ -+#define deflateInit2_ Cr_z_deflateInit2_ -+#define deflateInit_ Cr_z_deflateInit_ -+#define deflateParams Cr_z_deflateParams -+#define deflatePending Cr_z_deflatePending -+#define deflatePrime Cr_z_deflatePrime -+#define deflateReset Cr_z_deflateReset -+#define deflateResetKeep Cr_z_deflateResetKeep -+#define deflateSetDictionary Cr_z_deflateSetDictionary -+#define deflateSetHeader Cr_z_deflateSetHeader -+#define deflateTune Cr_z_deflateTune -+#define deflate_copyright Cr_z_deflate_copyright -+#define get_crc_table Cr_z_get_crc_table -+#define gz_error Cr_z_gz_error -+#define gz_intmax Cr_z_gz_intmax -+#define gz_strwinerror Cr_z_gz_strwinerror -+#define gzbuffer Cr_z_gzbuffer -+#define gzclearerr Cr_z_gzclearerr -+#define gzclose Cr_z_gzclose -+#define gzclose_r Cr_z_gzclose_r -+#define gzclose_w Cr_z_gzclose_w -+#define gzdirect Cr_z_gzdirect -+#define gzdopen Cr_z_gzdopen -+#define gzeof Cr_z_gzeof -+#define gzerror Cr_z_gzerror -+#define gzflush Cr_z_gzflush -+#define gzfread Cr_z_gzfread -+#define gzfwrite Cr_z_gzfwrite -+#define gzgetc Cr_z_gzgetc -+#define gzgetc_ Cr_z_gzgetc_ -+#define gzgets Cr_z_gzgets -+#define gzoffset Cr_z_gzoffset -+#define gzoffset64 Cr_z_gzoffset64 -+#define gzopen Cr_z_gzopen -+#define gzopen64 Cr_z_gzopen64 -+#define gzopen_w Cr_z_gzopen_w -+#define gzprintf Cr_z_gzprintf -+#define gzputc Cr_z_gzputc -+#define gzputs Cr_z_gzputs -+#define gzread Cr_z_gzread -+#define gzrewind Cr_z_gzrewind -+#define gzseek Cr_z_gzseek -+#define gzseek64 Cr_z_gzseek64 -+#define gzsetparams Cr_z_gzsetparams -+#define gztell Cr_z_gztell -+#define gztell64 Cr_z_gztell64 -+#define gzungetc Cr_z_gzungetc -+#define gzvprintf Cr_z_gzvprintf -+#define gzwrite Cr_z_gzwrite -+#define inflate Cr_z_inflate -+#define inflateBack Cr_z_inflateBack -+#define inflateBackEnd Cr_z_inflateBackEnd -+/* #undef inflateBackInit */ -+#define inflateBackInit_ Cr_z_inflateBackInit_ -+#define inflateCodesUsed Cr_z_inflateCodesUsed -+#define inflateCopy Cr_z_inflateCopy -+#define inflateEnd Cr_z_inflateEnd -+#define inflateGetDictionary Cr_z_inflateGetDictionary -+#define inflateGetHeader Cr_z_inflateGetHeader -+/* #undef inflateInit */ -+/* #undef inflateInit2 */ -+#define inflateInit2_ Cr_z_inflateInit2_ -+#define inflateInit_ Cr_z_inflateInit_ -+#define inflateMark Cr_z_inflateMark -+#define inflatePrime Cr_z_inflatePrime -+#define inflateReset Cr_z_inflateReset -+#define inflateReset2 Cr_z_inflateReset2 -+#define inflateResetKeep Cr_z_inflateResetKeep -+#define inflateSetDictionary Cr_z_inflateSetDictionary -+#define inflateSync Cr_z_inflateSync -+#define inflateSyncPoint Cr_z_inflateSyncPoint -+#define inflateUndermine Cr_z_inflateUndermine -+#define inflateValidate Cr_z_inflateValidate -+#define inflate_copyright Cr_z_inflate_copyright -+#define inflate_fast Cr_z_inflate_fast -+#define inflate_table Cr_z_inflate_table -+#define uncompress Cr_z_uncompress -+#define uncompress2 Cr_z_uncompress2 -+#define zError Cr_z_zError -+#define zcalloc Cr_z_zcalloc -+#define zcfree Cr_z_zcfree -+#define zlibCompileFlags Cr_z_zlibCompileFlags -+#define zlibVersion Cr_z_zlibVersion -+/* #undef Byte */ -+#define Bytef Cr_z_Bytef -+#define alloc_func Cr_z_alloc_func -+#define charf Cr_z_charf -+#define free_func Cr_z_free_func -+#define gzFile Cr_z_gzFile -+#define gz_header Cr_z_gz_header -+#define gz_headerp Cr_z_gz_headerp -+#define in_func Cr_z_in_func -+#define intf Cr_z_intf -+#define out_func Cr_z_out_func -+#define uInt Cr_z_uInt -+#define uIntf Cr_z_uIntf -+#define uLong Cr_z_uLong -+#define uLongf Cr_z_uLongf -+#define voidp Cr_z_voidp -+#define voidpc Cr_z_voidpc -+#define voidpf Cr_z_voidpf -+#define gz_header_s Cr_z_gz_header_s -+#define internal_state Cr_z_internal_state -+/* #undef z_off64_t */ -+ -+/* An exported symbol that isn't handled by Z_PREFIX in zconf.h */ -+#define z_errmsg Cr_z_z_errmsg -+ -+#endif /* THIRD_PARTY_ZLIB_NAMES_H_ */ diff --git a/zconf.h b/zconf.h index 5e1d68a004e9..a7a815f575a7 100644 --- a/zconf.h +++ b/zconf.h -@@ -8,6 +8,9 @@ +@@ -8,6 +8,10 @@ #ifndef ZCONF_H #define ZCONF_H -+/* This include does prefixing as below, but with an updated set of names */ -+#include "names.h" ++/* This include does prefixing as below, but with an updated set of names. Also ++ * sets up export macros in component builds. */ ++#include "chromeconf.h" + /* * If you *really* need a unique prefix for all types and library functions,
diff --git a/third_party/zlib/patches/0001-simd.patch b/third_party/zlib/patches/0001-simd.patch index 1fbf195..9434ca0 100644 --- a/third_party/zlib/patches/0001-simd.patch +++ b/third_party/zlib/patches/0001-simd.patch
@@ -1037,27 +1037,6 @@ + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} -diff --git a/names.h b/names.h -index f18df5684dc5..3436baa4eb57 100644 ---- a/names.h -+++ b/names.h -@@ -152,4 +152,16 @@ - /* An exported symbol that isn't handled by Z_PREFIX in zconf.h */ - #define z_errmsg Cr_z_z_errmsg - -+/* Symbols added in simd.patch */ -+#define copy_with_crc Cr_z_copy_with_crc -+#define crc_finalize Cr_z_crc_finalize -+#define crc_fold_512to32 Cr_z_crc_fold_512to32 -+#define crc_fold_copy Cr_z_crc_fold_copy -+#define crc_fold_init Cr_z_crc_fold_init -+#define crc_reset Cr_z_crc_reset -+#define fill_window_sse Cr_z_fill_window_sse -+#define deflate_read_buf Cr_z_deflate_read_buf -+#define x86_check_features Cr_z_x86_check_features -+#define x86_cpu_enable_simd Cr_z_x86_cpu_enable_simd -+ - #endif /* THIRD_PARTY_ZLIB_NAMES_H_ */ diff --git a/simd_stub.c b/simd_stub.c new file mode 100644 index 000000000000..c6d46051498f
diff --git a/third_party/zlib/zconf.h b/third_party/zlib/zconf.h index 1843c0a..8e433e6 100644 --- a/third_party/zlib/zconf.h +++ b/third_party/zlib/zconf.h
@@ -8,8 +8,9 @@ #ifndef ZCONF_H #define ZCONF_H -/* This include does prefixing as below, but with an updated set of names */ -#include "names.h" +/* This include does prefixing as below, but with an updated set of names. Also + * sets up export macros in component builds. */ +#include "chromeconf.h" /* * If you *really* need a unique prefix for all types and library functions,
diff --git a/tools/binary_size/libsupersize/canned_queries.py b/tools/binary_size/libsupersize/canned_queries.py index 4aeeeb5b..e534a1e0 100644 --- a/tools/binary_size/libsupersize/canned_queries.py +++ b/tools/binary_size/libsupersize/canned_queries.py
@@ -110,6 +110,9 @@ def _CategorizeGenerated(symbols): g = _Grouper() + # Don't count other symbols or prebuilts. + symbols = symbols.Filter(lambda s: s.section_name != models.SECTION_OTHER and + not s.source_path.endswith('.class')) # JNI is generated into .h files then #included, so the symbols don't actaully # appear as "SourceIsGenerated". # Note: String literals within symbols like "kBaseRegisteredMethods" are not @@ -122,7 +125,9 @@ symbols.WherePathMatches('gl_bindings_autogen')) symbols = symbols.WhereSourceIsGenerated() - symbols = g.Add('Protocol Buffers', symbols.Filter(lambda s: ( + symbols = g.Add('Java Protocol Buffers', symbols.Filter(lambda s: ( + s.source_path.endswith('Proto.java')))) + symbols = g.Add('C++ Protocol Buffers', symbols.Filter(lambda s: ( '/protobuf/' in s.object_path or s.object_path.endswith('.pbzero.o') or s.object_path.endswith('.pb.o')))) @@ -132,13 +137,12 @@ s.name.startswith('mojo::')))) symbols = g.Add('DevTools', symbols.WhereSourcePathMatches( r'\b(?:protocol|devtools)\b')) - symbols = g.Add('Blink (bindings)', symbols.Filter(lambda s: ( - 'blink/bindings' in s.source_path or - ('WebKit/' in s.object_path and '/bindings/' in s.object_path)))) - symbols = g.Add('Blink (IDL)', symbols.Filter(lambda s: ( - 'WebKit/Source/core' in s.object_path))) - symbols = g.Add('Blink (Other)', symbols.Filter(lambda s: ( + symbols = g.Add('Blink (bindings)', symbols.WherePathMatches( + r'(?:blink|WebKit)/.*bindings')) + symbols = g.Add('Blink (other)', symbols.Filter(lambda s: ( 'WebKit' in s.object_path or 'blink/' in s.object_path))) + symbols = g.Add('V8 Builtins', symbols.Filter(lambda s: ( + s.source_path.endswith('embedded.S')))) symbols = g.Add('prepopulated_engines.cc', symbols.Filter(lambda s: ( 'prepopulated_engines' in s.object_path))) symbols = g.Add('Metrics-related code', symbols.Filter(lambda s: (
diff --git a/tools/imagediff/image_diff.cc b/tools/imagediff/image_diff.cc index 9e3efc29..06802ea 100644 --- a/tools/imagediff/image_diff.cc +++ b/tools/imagediff/image_diff.cc
@@ -41,6 +41,9 @@ static const char kOptionCompareHistograms[] = "histogram"; // Causes the app to output an image that visualizes the difference. static const char kOptionGenerateDiff[] = "diff"; +// Causes the app to have a tolerance for difference in output. To account for +// differences which occur when running vs hardware GPU output. +static const char kOptionFuzzyDiff[] = "fuzzy-diff"; // Return codes used by this utility. static const int kStatusSame = 0; @@ -143,7 +146,9 @@ std::vector<unsigned char> data_; }; -float PercentageDifferent(const Image& baseline, const Image& actual) { +float PercentageDifferent(const Image& baseline, + const Image& actual, + bool fuzzy_diff) { int w = std::min(baseline.w(), actual.w()); int h = std::min(baseline.h(), actual.h()); @@ -151,8 +156,35 @@ int pixels_different = 0; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { - if (baseline.pixel_at(x, y) != actual.pixel_at(x, y)) + if (fuzzy_diff) { + uint32_t pixel_base = baseline.pixel_at(x, y); + uint32_t pixel_actual = actual.pixel_at(x, y); + if (pixel_base == pixel_actual) + continue; + // The pixels are in an rgba format. + uint8_t subpixels_base[4]; + uint8_t subpixels_actual[4]; + subpixels_base[0] = pixel_base & 0xFF; + subpixels_actual[0] = pixel_actual & 0xFF; + subpixels_base[1] = (pixel_base >> 8) & 0xFF; + subpixels_actual[1] = (pixel_actual >> 8) & 0xFF; + subpixels_base[2] = (pixel_base >> 16) & 0xFF; + subpixels_actual[2] = (pixel_actual >> 16) & 0xFF; + subpixels_base[3] = (pixel_base >> 24) & 0xFF; + subpixels_actual[3] = (pixel_actual >> 24) & 0xFF; + + for (int i = 0; i < 4; i++) { + uint8_t subpixel_diff = subpixels_base[i] > subpixels_actual[i] + ? subpixels_base[i] - subpixels_actual[i] + : subpixels_actual[i] - subpixels_base[i]; + if (subpixel_diff > 1) { + pixels_different++; + break; + } + } + } else if (baseline.pixel_at(x, y) != actual.pixel_at(x, y)) { pixels_different++; + } } } @@ -251,7 +283,8 @@ int CompareImages(const base::FilePath& file1, const base::FilePath& file2, - bool compare_histograms) { + bool compare_histograms, + bool fuzzy_diff) { Image actual_image; Image baseline_image; @@ -266,17 +299,18 @@ return kStatusError; } + float tolerance = fuzzy_diff ? 1.0f : 0.0f; if (compare_histograms) { float percent = HistogramPercentageDifferent(actual_image, baseline_image); - const char* passed = percent > 0.0 ? "failed" : "passed"; + const char* passed = percent > tolerance ? "failed" : "passed"; printf("histogram diff: %01.2f%% %s\n", percent, passed); } const char* diff_name = compare_histograms ? "exact diff" : "diff"; - float percent = PercentageDifferent(actual_image, baseline_image); - const char* passed = percent > 0.0 ? "failed" : "passed"; + float percent = PercentageDifferent(actual_image, baseline_image, fuzzy_diff); + const char* passed = percent > tolerance ? "failed" : "passed"; printf("%s: %01.2f%% %s\n", diff_name, percent, passed); - if (percent > 0.0) { + if (percent > tolerance) { // failure: The WebKit version also writes the difference image to // stdout, which seems excessive for our needs. return kStatusDifferent; @@ -331,7 +365,10 @@ */ } -bool CreateImageDiff(const Image& image1, const Image& image2, Image* out) { +bool CreateImageDiff(const Image& image1, + const Image& image2, + bool fuzzy_diff, + Image* out) { int w = std::min(image1.w(), image2.w()); int h = std::min(image1.h(), image2.h()); *out = Image(image1); @@ -355,10 +392,17 @@ } } - return same; + if (!fuzzy_diff) { + return same; + } + + float percent = PercentageDifferent(image1, image2, fuzzy_diff); + return percent < 1.0f; } -int DiffImages(const base::FilePath& file1, const base::FilePath& file2, +int DiffImages(const base::FilePath& file1, + const base::FilePath& file2, + bool fuzzy_diff, const base::FilePath& out_file) { Image actual_image; Image baseline_image; @@ -375,7 +419,8 @@ } Image diff_image; - bool same = CreateImageDiff(baseline_image, actual_image, &diff_image); + bool same = + CreateImageDiff(baseline_image, actual_image, fuzzy_diff, &diff_image); if (same) return kStatusSame; @@ -407,6 +452,7 @@ base::CommandLine::Init(argc, argv); const base::CommandLine& parsed_command_line = *base::CommandLine::ForCurrentProcess(); + bool fuzzy_diff = parsed_command_line.HasSwitch(kOptionFuzzyDiff); bool histograms = parsed_command_line.HasSwitch(kOptionCompareHistograms); if (parsed_command_line.HasSwitch(kOptionPollStdin)) { // Watch stdin for filenames. @@ -419,8 +465,10 @@ if (!filename1.empty()) { // CompareImages writes results to stdout unless an error occurred. base::FilePath filename2 = FilePathFromASCII(stdin_buffer); - if (CompareImages(filename1, filename2, histograms) == kStatusError) + if (CompareImages(filename1, filename2, histograms, fuzzy_diff) == + kStatusError) { printf("error\n"); + } fflush(stdout); filename1 = base::FilePath(); } else { @@ -435,13 +483,12 @@ const base::CommandLine::StringVector& args = parsed_command_line.GetArgs(); if (parsed_command_line.HasSwitch(kOptionGenerateDiff)) { if (args.size() == 3) { - return DiffImages(base::FilePath(args[0]), - base::FilePath(args[1]), - base::FilePath(args[2])); + return DiffImages(base::FilePath(args[0]), base::FilePath(args[1]), + fuzzy_diff, base::FilePath(args[2])); } } else if (args.size() == 2) { - return CompareImages( - base::FilePath(args[0]), base::FilePath(args[1]), histograms); + return CompareImages(base::FilePath(args[0]), base::FilePath(args[1]), + fuzzy_diff, histograms); } PrintHelp();
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index dffcfde..86d5826 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -6997,6 +6997,9 @@ <int value="7" label="Failed to start collection"> Collection could not start due to failing prerequisites. </int> + <int value="8" label="Data collection failure"> + Failure while collecting data. + </int> </enum> <enum name="ChromeOSRecoveryReason"> @@ -32735,7 +32738,6 @@ <int value="-1039555838" label="GamepadExtensions:enabled"/> <int value="-1037128156" label="HomeLauncherGestures:disabled"/> <int value="-1034344165" label="V8NoTurbo:disabled"/> - <int value="-1034152207" label="SendTabToSelfReceive:enabled"/> <int value="-1033738911" label="enable-mac-views-dialogs"/> <int value="-1031350684" label="PdfIsolation:disabled"/> <int value="-1029920490" label="IdleTimeSpellChecking:enabled"/> @@ -32764,6 +32766,7 @@ <int value="-992785453" label="ExplicitLanguageAsk:disabled"/> <int value="-991253797" label="OmniboxSpeculativeServiceWorkerStartOnQueryInput:disabled"/> + <int value="-990187062" label="SendTabToSelfShowSendingUI:enabled"/> <int value="-989671895" label="OfflineIndicatorAlwaysHttpProbe:enabled"/> <int value="-984052166" label="DoodlesOnLocalNtp:enabled"/> <int value="-981237342" label="SyncUSSAutofillWalletMetadata:disabled"/> @@ -34158,7 +34161,6 @@ <int value="1277386636" label="QueryInOmnibox:disabled"/> <int value="1279584261" label="enable-carrier-switching"/> <int value="1280614081" label="show-overdraw-feedback"/> - <int value="1281553299" label="SendTabToSelfReceive:disabled"/> <int value="1283908088" label="ImprovedLanguageSettings:disabled"/> <int value="1283956865" label="force-tablet-mode"/> <int value="1283960113" label="disable-fixed-position-compositing"/> @@ -34464,6 +34466,7 @@ <int value="1775475563" label="malware-interstitial-v3"/> <int value="1776475705" label="show-composited-layer-borders"/> <int value="1777059507" label="trust-autofill-server-name-types"/> + <int value="1777695562" label="SendTabToSelfShowSendingUI:disabled"/> <int value="1777806335" label="UsePasswordSeparatedSigninFlow:disabled"/> <int value="1782210532" label="PerNavigationMojoInterface:disabled"/> <int value="1783293530" label="disallow-autofill-sync-credential"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index ad0b4fdc..6d0961e 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -227,7 +227,7 @@ </histogram> <histogram name="Accessibility.CrosSelectToSpeak.SpeechPitch" - enum="CrosSelectToSpeakSpeechPitch"> + enum="CrosSelectToSpeakSpeechPitch" expires_after="2018-08-01"> <obsolete> Deprecated 7/2018 in Issue 866550 in favor of using global Text-to-Speech settings for speech pitch. @@ -241,7 +241,7 @@ </histogram> <histogram name="Accessibility.CrosSelectToSpeak.SpeechRate" - enum="CrosSelectToSpeakSpeechRate"> + enum="CrosSelectToSpeakSpeechRate" expires_after="2018-08-01"> <obsolete> Deprecated 7/2018 in Issue 866550 in favor of using global Text-to-Speech settings for speech rate. @@ -510,7 +510,8 @@ </summary> </histogram> -<histogram name="Accessibility.State" enum="BooleanEnabled"> +<histogram name="Accessibility.State" enum="BooleanEnabled" + expires_after="2016-12-20"> <obsolete> Deprecated 12/2016 in Issue 672205 with the addition of Accessibility.ModeFlag. @@ -706,7 +707,8 @@ </summary> </histogram> -<histogram name="ActivityTracker.Collect.UncleanShutdownCount" units="count"> +<histogram name="ActivityTracker.Collect.UncleanShutdownCount" units="count" + expires_after="2017-06-05"> <obsolete> Deprecated 05/2017 in favor of ActivityTracker.Collect.Status. </obsolete> @@ -717,7 +719,8 @@ </summary> </histogram> -<histogram name="ActivityTracker.Collect.UncleanSystemCount" units="count"> +<histogram name="ActivityTracker.Collect.UncleanSystemCount" units="count" + expires_after="2017-06-05"> <obsolete> Deprecated 05/2017 in favor of ActivityTracker.Collect.Status. </obsolete> @@ -748,7 +751,7 @@ </histogram> <histogram name="ActivityTracker.CollectCrash.OpenForDeleteSuccess" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2017-06-01"> <obsolete> Deprecated 05/2017 in favor of ActivityTracker.CollectCrash.Event. </obsolete> @@ -779,7 +782,7 @@ </histogram> <histogram name="ActivityTracker.Record.InitStatus" - enum="ActivityTrackerRecordInitStatus"> + enum="ActivityTrackerRecordInitStatus" expires_after="2017-06-01"> <obsolete> Deprecated 05/2017 in favor of ActivityTracker.Record.Event. </obsolete> @@ -1006,7 +1009,7 @@ </histogram> <histogram name="AnchorElementMetrics.Clicked.HrefEngagementScore" - units="score"> + units="score" expires_after="2018-07-03"> <obsolete> Deprecated 07/2018. Replaced with AnchorElementMetrics.Clicked.HrefEngagementScore2. @@ -1371,7 +1374,8 @@ </summary> </histogram> -<histogram name="Android.ArmFpu" enum="AndroidArmFpu"> +<histogram name="Android.ArmFpu" enum="AndroidArmFpu" + expires_after="2019-02-01"> <obsolete> Removed 2019-01: New releases of Chrome+Android+ARM rely on NEON support. </obsolete> @@ -1444,7 +1448,7 @@ </histogram> <histogram name="Android.ChildProcessLauncher.OnServiceConnectedTime" - units="ms"> + units="ms" expires_after="2017-08-29"> <obsolete> Deprecated 08/2017. Made decision in issue 736066 with already acquired data. So this is no longer needed. @@ -1458,7 +1462,7 @@ </histogram> <histogram name="Android.ChildProcessLauncher.OnServiceConnectedTimedOut" - enum="BooleanTimedOut"> + enum="BooleanTimedOut" expires_after="2017-08-29"> <obsolete> Deprecated 08/2017. Made decision in issue 736066 with already acquired data. So this is no longer needed. @@ -1504,7 +1508,7 @@ </histogram> <histogram name="Android.ChromeHome.OpenSheetVelocity.Fail" - units="microseconds/dp"> + units="microseconds/dp" expires_after="2018-03-16"> <obsolete> Deprecated 03/2018. Chrome Home is being deprecated. </obsolete> @@ -1519,7 +1523,7 @@ </histogram> <histogram name="Android.ChromeHome.OpenSheetVelocity.Navigation" - units="microseconds/dp"> + units="microseconds/dp" expires_after="2018-03-16"> <obsolete> Deprecated 03/2018. Chrome Home is being deprecated. </obsolete> @@ -1533,7 +1537,7 @@ </histogram> <histogram name="Android.ChromeHome.OpenSheetVelocity.NoNavigation" - units="microseconds/dp"> + units="microseconds/dp" expires_after="2018-03-16"> <obsolete> Deprecated 03/2018. Chrome Home is being deprecated. </obsolete> @@ -1547,7 +1551,7 @@ </histogram> <histogram name="Android.ChromeHome.OpenSheetVelocity.Success" - units="microseconds/dp"> + units="microseconds/dp" expires_after="2018-03-16"> <obsolete> Deprecated 03/2018. Chrome Home is being deprecated. </obsolete> @@ -1562,7 +1566,7 @@ </histogram> <histogram name="Android.ChromeHome.Promo.Result.Menu" - enum="ChromeHomePromoResult"> + enum="ChromeHomePromoResult" expires_after="2018-01-22"> <obsolete> Deprecated 01/2018 with the removal of the first version of Chrome Home. </obsolete> @@ -1575,7 +1579,7 @@ </histogram> <histogram name="Android.ChromeHome.Promo.Result.NTP" - enum="ChromeHomePromoResult"> + enum="ChromeHomePromoResult" expires_after="2018-01-22"> <obsolete> Deprecated 01/2018 with the removal of the first version of Chrome Home. </obsolete> @@ -1588,7 +1592,7 @@ </histogram> <histogram name="Android.ChromeHome.Promo.Result.Startup" - enum="ChromeHomePromoResult"> + enum="ChromeHomePromoResult" expires_after="2018-01-22"> <obsolete> Deprecated 01/2018 with the removal of the first version of Chrome Home. </obsolete> @@ -1601,7 +1605,7 @@ </histogram> <histogram name="Android.ChromeHome.Promo.ShowReason" - enum="ChromeHomePromoShowReason"> + enum="ChromeHomePromoShowReason" expires_after="2018-01-22"> <obsolete> Deprecated 01/2018 with the removal of the first version of Chrome Home. </obsolete> @@ -1611,7 +1615,7 @@ </histogram> <histogram name="Android.ChromeHome.Survey.DownloadResponseCode" - enum="SurveyDownloadResponseCodes"> + enum="SurveyDownloadResponseCodes" expires_after="2018-04-12"> <obsolete> Deprecated 04/2018. Replaced with Android.Survey.DownloadResponseCode. </obsolete> @@ -1620,7 +1624,7 @@ </histogram> <histogram name="Android.ChromeHome.Survey.InfoBarClosingState" - enum="InfoBarClosingStates"> + enum="InfoBarClosingStates" expires_after="2018-04-12"> <obsolete> Deprecated 04/2018. Replaced with Android.Survey.InfoBarClosingState. </obsolete> @@ -1631,7 +1635,8 @@ </summary> </histogram> -<histogram name="Android.ChromeHome.Survey.ShowSurvey" enum="BooleanSuccess"> +<histogram name="Android.ChromeHome.Survey.ShowSurvey" enum="BooleanSuccess" + expires_after="2018-04-12"> <obsolete> Deprecated 04/2018. Replaced with Android.Survey.ShowSurvey. </obsolete> @@ -1642,7 +1647,7 @@ </histogram> <histogram name="Android.ChromeHome.Survey.SurveyFilteringResults" - enum="SurveyFilteringResult"> + enum="SurveyFilteringResult" expires_after="2018-04-12"> <obsolete> Deprecated 04/2018. Replaced with Android.Survey.SurveyFilteringResults. </obsolete> @@ -1715,7 +1720,7 @@ </histogram> <histogram name="Android.CustomFeedback.Category" - enum="AndroidFeedbackCategory"> + enum="AndroidFeedbackCategory" expires_after="2018-12-15"> <obsolete> Deprecated 12/2018. CustomFeedback never shipped to 100% and is no longer planned for launch. @@ -1728,7 +1733,7 @@ </histogram> <histogram name="Android.CustomFeedback.CategoryDetails" - enum="AndroidFeedbackCategoryDetails"> + enum="AndroidFeedbackCategoryDetails" expires_after="2018-12-15"> <obsolete> Deprecated 12/2018. CustomFeedback never shipped to 100% and is no longer planned for launch. @@ -2137,7 +2142,8 @@ </summary> </histogram> -<histogram name="Android.InstantApps.ApiCallDuration2" units="ms"> +<histogram name="Android.InstantApps.ApiCallDuration2" units="ms" + expires_after="2018-06-05"> <obsolete> Not being recorded as of 2017. </obsolete> @@ -2882,7 +2888,8 @@ </summary> </histogram> -<histogram name="Android.StrictMode.DocumentModeSharedPrefs" units="ms"> +<histogram name="Android.StrictMode.DocumentModeSharedPrefs" units="ms" + expires_after="2016-05-25"> <obsolete> Deprecated 05/2016 in Issue 582539 with the removal of document mode. </obsolete> @@ -2894,7 +2901,8 @@ </summary> </histogram> -<histogram name="Android.StrictMode.DocumentTabStateLoad" units="ms"> +<histogram name="Android.StrictMode.DocumentTabStateLoad" units="ms" + expires_after="2016-05-25"> <obsolete> Deprecated 05/2016 in Issue 582539 with the removal of document mode. </obsolete> @@ -3524,7 +3532,8 @@ <summary>AppCache initialization result code.</summary> </histogram> -<histogram name="appcache.JobStartDelay.AppCache" units="ms"> +<histogram name="appcache.JobStartDelay.AppCache" units="ms" + expires_after="2018-07-23"> <obsolete> Deprecated 2018-03-20. No longer tracked. </obsolete> @@ -3534,7 +3543,8 @@ </summary> </histogram> -<histogram name="appcache.JobStartDelay.Error" units="ms"> +<histogram name="appcache.JobStartDelay.Error" units="ms" + expires_after="2018-07-23"> <obsolete> Deprecated 2018-03-20. No longer tracked. </obsolete> @@ -3544,7 +3554,8 @@ </summary> </histogram> -<histogram name="appcache.JobStartDelay.Network" units="ms"> +<histogram name="appcache.JobStartDelay.Network" units="ms" + expires_after="2018-07-23"> <obsolete> Deprecated 2018-03-20. No longer tracked. </obsolete> @@ -3679,7 +3690,8 @@ </summary> </histogram> -<histogram name="Apps.AppLauncherPromo" enum="AppLauncherPromo"> +<histogram name="Apps.AppLauncherPromo" enum="AppLauncherPromo" + expires_after="2017-11-10"> <obsolete> Deprecated 11/2017 in issue 600915 with the removal of app list on platforms other than Chrome OS. @@ -3835,7 +3847,8 @@ </summary> </histogram> -<histogram name="Apps.AppListDoodleAction" enum="AppListDoodleAction"> +<histogram name="Apps.AppListDoodleAction" enum="AppListDoodleAction" + expires_after="2018-01-20"> <obsolete> App list doesn't support doodles anymore. </obsolete> @@ -3888,7 +3901,8 @@ </summary> </histogram> -<histogram name="Apps.AppListHowEnabled" enum="AppListEnableSource"> +<histogram name="Apps.AppListHowEnabled" enum="AppListEnableSource" + expires_after="2018-03-20"> <obsolete> Deprecated 03/2018 with Mash AppList refactoring. </obsolete> @@ -4091,7 +4105,8 @@ <summary>The state of the app list when a search result was opened.</summary> </histogram> -<histogram name="Apps.AppListSearchResultOpenType" enum="AppListSearchResult"> +<histogram name="Apps.AppListSearchResultOpenType" enum="AppListSearchResult" + expires_after="2019-03-22"> <obsolete> Deprecated March 2019. Replaced with Apps.AppListSearchResultOpenTypeV2. </obsolete> @@ -4179,7 +4194,8 @@ </summary> </histogram> -<histogram name="Apps.AppListWarmupDuration" units="ms"> +<histogram name="Apps.AppListWarmupDuration" units="ms" + expires_after="2016-08-01"> <obsolete> Deprecated 07/2016 in Issue 600915 with the removal of the app list on Windows. @@ -4850,7 +4866,8 @@ </summary> </histogram> -<histogram name="Arc.IntentHandlerAction" enum="ArcIntentHandlerAction"> +<histogram name="Arc.IntentHandlerAction" enum="ArcIntentHandlerAction" + expires_after="2018-04-16"> <obsolete> Deprecated April 2018 and replaced by ChromeOS.Apps.IntentPickerAction. </obsolete> @@ -4860,7 +4877,7 @@ </histogram> <histogram name="Arc.IntentHandlerDestinationPlatform" - enum="ArcIntentHandlerDestinationPlatform"> + enum="ArcIntentHandlerDestinationPlatform" expires_after="2018-04-16"> <obsolete> Deprecated April 2018 and replaced by ChromeOS.Apps.IntentPickerDestinationPlatform. @@ -5235,7 +5252,8 @@ <summary>Elapsed time waiting for GMS sign-in to complete.</summary> </histogram> -<histogram name="ArcRuntime.LowMemoryKiller.FreedSize" units="KB"> +<histogram name="ArcRuntime.LowMemoryKiller.FreedSize" units="KB" + expires_after="2016-03-27"> <obsolete> Renamed to Arc.LowMemoryKiller.FreedSize on 2016/03/24. </obsolete> @@ -5243,7 +5261,8 @@ <summary>The memory size freed by each low memory kill event.</summary> </histogram> -<histogram name="ArcRuntime.LowMemoryKiller.TimeDelta" units="ms"> +<histogram name="ArcRuntime.LowMemoryKiller.TimeDelta" units="ms" + expires_after="2016-03-27"> <obsolete> Renamed to Arc.LowMemoryKiller.TimeDelta on 2016/03/24. </obsolete> @@ -5262,7 +5281,7 @@ </histogram> <histogram name="Ash.Accelerators.Deprecated.NextIME" - enum="DeprecatedAcceleratorUsage"> + enum="DeprecatedAcceleratorUsage" expires_after="2017-01-30"> <obsolete> Deprecated 01/2017 for Issue 672905. </obsolete> @@ -5305,7 +5324,7 @@ </summary> </histogram> -<histogram name="Ash.ActiveTouchPoints"> +<histogram name="Ash.ActiveTouchPoints" expires_after="2017-03-03"> <obsolete> Deprecated 02/2017 due to lack of usage. </obsolete> @@ -5324,7 +5343,8 @@ </summary> </histogram> -<histogram name="Ash.AppList.TimeBetweenTaskSwitches" units="seconds"> +<histogram name="Ash.AppList.TimeBetweenTaskSwitches" units="seconds" + expires_after="2016-10-04"> <obsolete> Deprecated 10/2016 for Issue 616581. </obsolete> @@ -5372,7 +5392,8 @@ </summary> </histogram> -<histogram name="Ash.DisplayColorManager.IccFileFound" enum="Boolean"> +<histogram name="Ash.DisplayColorManager.IccFileFound" enum="Boolean" + expires_after="2017-10-25"> <obsolete> Deprecated 10/2017, replaced by Ash.DisplayColorManager.IccFileDownloaded </obsolete> @@ -5477,7 +5498,8 @@ </summary> </histogram> -<histogram name="Ash.GestureCreated" enum="UIEventType"> +<histogram name="Ash.GestureCreated" enum="UIEventType" + expires_after="2014-08-28"> <obsolete> Deprecated 08/2014 in Issue 352654, and replaced by Event.GestureCreated. </obsolete> @@ -5995,7 +6017,8 @@ </summary> </histogram> -<histogram name="Ash.StationaryTouchDuration" units="seconds"> +<histogram name="Ash.StationaryTouchDuration" units="seconds" + expires_after="2017-03-03"> <obsolete> Deprecated 02/2017 due to lack of usage. </obsolete> @@ -6065,7 +6088,7 @@ </histogram> <histogram name="Ash.Tab.TimeBetweenSwitchToExistingTabUserActions" - units="seconds"> + units="seconds" expires_after="2016-10-04"> <obsolete> Deprecated 10/2016 for Issue 616581. </obsolete> @@ -6094,7 +6117,7 @@ </summary> </histogram> -<histogram name="Ash.TouchDuration" units="ms"> +<histogram name="Ash.TouchDuration" units="ms" expires_after="2013-12-12"> <obsolete> Deprecated 12/2013 in r239809, and replaced by Ash.TouchDuration2. </obsolete> @@ -6102,7 +6125,7 @@ <summary>The duration of a touch-sequence.</summary> </histogram> -<histogram name="Ash.TouchDuration2" units="ms"> +<histogram name="Ash.TouchDuration2" units="ms" expires_after="2014-08-28"> <obsolete> Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchDuration. </obsolete> @@ -6111,7 +6134,8 @@ <summary>The duration of a touch-sequence.</summary> </histogram> -<histogram name="Ash.TouchMaxDistance" units="pixels"> +<histogram name="Ash.TouchMaxDistance" units="pixels" + expires_after="2014-08-28"> <obsolete> Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchMaxDistance. </obsolete> @@ -6123,7 +6147,7 @@ </summary> </histogram> -<histogram name="Ash.TouchMoveInterval" units="ms"> +<histogram name="Ash.TouchMoveInterval" units="ms" expires_after="2017-03-03"> <obsolete> Deprecated 02/2017 due to lack of usage. </obsolete> @@ -6138,7 +6162,7 @@ <summary>The distance between touch-move events.</summary> </histogram> -<histogram name="Ash.TouchPositionX" units="pixels"> +<histogram name="Ash.TouchPositionX" units="pixels" expires_after="2018-07-13"> <obsolete> Deprecated 07/2018 due to lack of usage. </obsolete> @@ -6147,7 +6171,7 @@ <summary>The position of the touch-events along the X axis.</summary> </histogram> -<histogram name="Ash.TouchPositionY" units="pixels"> +<histogram name="Ash.TouchPositionY" units="pixels" expires_after="2018-07-13"> <obsolete> Deprecated 07/2018 due to lack of usage. </obsolete> @@ -6156,7 +6180,7 @@ <summary>The position of the touch-events along the Y axis.</summary> </histogram> -<histogram name="Ash.TouchRadius" units="pixels"> +<histogram name="Ash.TouchRadius" units="pixels" expires_after="2018-07-13"> <obsolete> Deprecated 07/2018 due to lack of usage. </obsolete> @@ -6173,7 +6197,7 @@ </summary> </histogram> -<histogram name="Ash.TouchStartBurst"> +<histogram name="Ash.TouchStartBurst" expires_after="2017-03-03"> <obsolete> Deprecated 02/2017 due to lack of usage. </obsolete> @@ -6224,7 +6248,8 @@ </summary> </histogram> -<histogram name="Ash.Wallpaper.Apps" enum="WallpaperApps"> +<histogram name="Ash.Wallpaper.Apps" enum="WallpaperApps" + expires_after="2018-02-13"> <obsolete> Deprecated as of 2/2018. Currently there is only one type of Wallpaper App. </obsolete> @@ -6259,7 +6284,8 @@ </summary> </histogram> -<histogram name="Ash.Wallpaper.ColorExtractionResult" enum="BooleanSuccess"> +<histogram name="Ash.Wallpaper.ColorExtractionResult" enum="BooleanSuccess" + expires_after="2017-06-22"> <obsolete> Deprecated as of 6/2017. </obsolete> @@ -6290,7 +6316,7 @@ </summary> </histogram> -<histogram name="Ash.Wallpaper.DefaultIndex"> +<histogram name="Ash.Wallpaper.DefaultIndex" expires_after="2014-08-08"> <obsolete> Deprecated as of 11/2012. Use of indices has been removed. </obsolete> @@ -6310,7 +6336,8 @@ </summary> </histogram> -<histogram name="Ash.Wallpaper.TimeSpentExtractingColors" units="ms"> +<histogram name="Ash.Wallpaper.TimeSpentExtractingColors" units="ms" + expires_after="2017-04-25"> <obsolete> Deprecated as of 04/2017 in favor of Ash.Wallpaper.ColorExtraction.Durations and Ash.Wallpaper.ColorExtraction.UserDelay. @@ -6468,7 +6495,8 @@ </summary> </histogram> -<histogram name="Ash.WindowSelector.CycleTime" units="ms"> +<histogram name="Ash.WindowSelector.CycleTime" units="ms" + expires_after="2014-06-12"> <obsolete> Deprecated as of 06/2014. No longer relevant since alt-tab switching was separated from WindowSelector. @@ -6697,7 +6725,7 @@ <summary>Amount of time spent in starting Assistant service.</summary> </histogram> -<histogram name="AsyncDNS.AttemptCountFail"> +<histogram name="AsyncDNS.AttemptCountFail" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -6708,7 +6736,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.AttemptCountSuccess"> +<histogram name="AsyncDNS.AttemptCountSuccess" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -6752,7 +6780,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ConfigParseResult" enum="BooleanSuccess"> +<histogram name="AsyncDNS.ConfigParseResult" enum="BooleanSuccess" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -6769,7 +6798,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.DNSChangerDetected" enum="BooleanSuccess"> +<histogram name="AsyncDNS.DNSChangerDetected" enum="BooleanSuccess" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -6779,7 +6809,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.DnsClientDisabledReason" enum="NetErrorCodes"> +<histogram name="AsyncDNS.DnsClientDisabledReason" enum="NetErrorCodes" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -6792,7 +6823,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.DnsClientEnabled" enum="BooleanSuccess"> +<histogram name="AsyncDNS.DnsClientEnabled" enum="BooleanSuccess" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -6805,7 +6837,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.FallbackFail" units="ms"> +<histogram name="AsyncDNS.FallbackFail" units="ms" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -6816,7 +6848,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.FallbackSuccess" units="ms"> +<histogram name="AsyncDNS.FallbackSuccess" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -6827,7 +6860,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.HaveDnsConfig" enum="BooleanSuccess"> +<histogram name="AsyncDNS.HaveDnsConfig" enum="BooleanSuccess" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -6887,7 +6921,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTime" units="ms"> +<histogram name="AsyncDNS.JobQueueTime" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -6898,7 +6932,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTime_HIGHEST" units="ms"> +<histogram name="AsyncDNS.JobQueueTime_HIGHEST" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -6910,7 +6945,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTime_IDLE" units="ms"> +<histogram name="AsyncDNS.JobQueueTime_IDLE" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -6922,7 +6958,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTime_LOW" units="ms"> +<histogram name="AsyncDNS.JobQueueTime_LOW" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -6934,7 +6971,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTime_LOWEST" units="ms"> +<histogram name="AsyncDNS.JobQueueTime_LOWEST" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -6946,7 +6984,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTime_MEDIUM" units="ms"> +<histogram name="AsyncDNS.JobQueueTime_MEDIUM" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -6958,7 +6997,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTimeAfterChange" units="ms"> +<histogram name="AsyncDNS.JobQueueTimeAfterChange" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -6970,7 +7010,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTimeAfterChange_HIGHEST" units="ms"> +<histogram name="AsyncDNS.JobQueueTimeAfterChange_HIGHEST" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -6983,7 +7024,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTimeAfterChange_IDLE" units="ms"> +<histogram name="AsyncDNS.JobQueueTimeAfterChange_IDLE" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -6996,7 +7038,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOW" units="ms"> +<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOW" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -7009,7 +7052,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOWEST" units="ms"> +<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOWEST" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -7022,7 +7066,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.JobQueueTimeAfterChange_MEDIUM" units="ms"> +<histogram name="AsyncDNS.JobQueueTimeAfterChange_MEDIUM" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -7035,7 +7080,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.NameServersType" enum="AsyncDNSNameServersType"> +<histogram name="AsyncDNS.NameServersType" enum="AsyncDNSNameServersType" + expires_after="2016-04-07"> <obsolete> Deprecated as of 4/2016. </obsolete> @@ -7046,7 +7092,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ParseToAddressList" enum="AsyncDNSParseResult"> +<histogram name="AsyncDNS.ParseToAddressList" enum="AsyncDNSParseResult" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7058,7 +7105,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.PrefDefaultSource" enum="AsyncDNSPrefDefaultSource"> +<histogram name="AsyncDNS.PrefDefaultSource" enum="AsyncDNSPrefDefaultSource" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -7069,7 +7117,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.PrefSource" enum="AsyncDNSPrefSource"> +<histogram name="AsyncDNS.PrefSource" enum="AsyncDNSPrefSource" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -7080,7 +7129,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.Rcode" enum="AsyncDNSRcode"> +<histogram name="AsyncDNS.Rcode" enum="AsyncDNSRcode" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7099,7 +7149,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ResolveError" enum="NetErrorCodes"> +<histogram name="AsyncDNS.ResolveError" enum="NetErrorCodes" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskError. </obsolete> @@ -7110,7 +7161,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.ResolveFail" units="ms"> +<histogram name="AsyncDNS.ResolveFail" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskFail. </obsolete> @@ -7121,7 +7172,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ResolveStatus" enum="AsyncDNSResolveStatus"> +<histogram name="AsyncDNS.ResolveStatus" enum="AsyncDNSResolveStatus" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -7133,7 +7185,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.ResolveSuccess" units="ms"> +<histogram name="AsyncDNS.ResolveSuccess" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess. </obsolete> @@ -7143,7 +7195,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV4" units="ms"> +<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV4" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess. </obsolete> @@ -7153,7 +7206,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV6" units="ms"> +<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV6" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess. </obsolete> @@ -7163,7 +7217,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ResolveSuccess_FAMILY_UNSPEC" units="ms"> +<histogram name="AsyncDNS.ResolveSuccess_FAMILY_UNSPEC" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess. </obsolete> @@ -7182,7 +7237,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.ServerFailureIndex"> +<histogram name="AsyncDNS.ServerFailureIndex" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7193,7 +7248,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ServerFailuresAfterNetworkChange"> +<histogram name="AsyncDNS.ServerFailuresAfterNetworkChange" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7205,7 +7261,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ServerFailuresAfterSuccess"> +<histogram name="AsyncDNS.ServerFailuresAfterSuccess" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7218,7 +7275,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ServerFailuresBeforeSuccess"> +<histogram name="AsyncDNS.ServerFailuresBeforeSuccess" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7230,7 +7288,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ServerFailuresWithoutSuccess"> +<histogram name="AsyncDNS.ServerFailuresWithoutSuccess" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7243,7 +7302,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.ServerIsGood" enum="BooleanSuccess"> +<histogram name="AsyncDNS.ServerIsGood" enum="BooleanSuccess" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -7253,7 +7313,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.SortFailure" units="ms"> +<histogram name="AsyncDNS.SortFailure" units="ms" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7265,7 +7325,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.SortSuccess" units="ms"> +<histogram name="AsyncDNS.SortSuccess" units="ms" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7277,7 +7337,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.SuffixSearchDone"> +<histogram name="AsyncDNS.SuffixSearchDone" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7289,7 +7349,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.SuffixSearchRemain"> +<histogram name="AsyncDNS.SuffixSearchRemain" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7301,7 +7361,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.SuffixSearchStart"> +<histogram name="AsyncDNS.SuffixSearchStart" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7313,7 +7373,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.TCPAttemptFail" units="ms"> +<histogram name="AsyncDNS.TCPAttemptFail" units="ms" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7325,7 +7385,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TCPAttemptSuccess" units="ms"> +<histogram name="AsyncDNS.TCPAttemptSuccess" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7336,7 +7397,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TimeoutErrorHistogram" units="ms"> +<histogram name="AsyncDNS.TimeoutErrorHistogram" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7347,7 +7409,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TimeoutErrorHistogramUnder" units="ms"> +<histogram name="AsyncDNS.TimeoutErrorHistogramUnder" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7358,7 +7421,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TimeoutErrorJacobson" units="ms"> +<histogram name="AsyncDNS.TimeoutErrorJacobson" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7369,7 +7433,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TimeoutErrorJacobsonUnder" units="ms"> +<histogram name="AsyncDNS.TimeoutErrorJacobsonUnder" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7380,7 +7445,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TimeoutSpentHistogram" units="ms"> +<histogram name="AsyncDNS.TimeoutSpentHistogram" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7392,7 +7458,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TimeoutSpentJacobson" units="ms"> +<histogram name="AsyncDNS.TimeoutSpentJacobson" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7404,7 +7471,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.TotalTime" units="ms"> +<histogram name="AsyncDNS.TotalTime" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime. </obsolete> @@ -7416,7 +7483,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TotalTime_speculative" units="ms"> +<histogram name="AsyncDNS.TotalTime_speculative" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime_speculative. </obsolete> @@ -7428,7 +7496,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TransactionFailure" units="ms"> +<histogram name="AsyncDNS.TransactionFailure" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7440,7 +7509,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TransactionSuccess" units="ms"> +<histogram name="AsyncDNS.TransactionSuccess" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7453,7 +7523,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TransactionSuccess_A" units="ms"> +<histogram name="AsyncDNS.TransactionSuccess_A" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7464,7 +7535,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.TransactionSuccess_AAAA" units="ms"> +<histogram name="AsyncDNS.TransactionSuccess_AAAA" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7475,7 +7547,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.TTL" units="ms"> +<histogram name="AsyncDNS.TTL" units="ms" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7487,7 +7559,7 @@ </summary> </histogram> -<histogram name="AsyncDNS.UDPAttemptFail" units="ms"> +<histogram name="AsyncDNS.UDPAttemptFail" units="ms" expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7499,7 +7571,8 @@ </summary> </histogram> -<histogram name="AsyncDNS.UDPAttemptSuccess" units="ms"> +<histogram name="AsyncDNS.UDPAttemptSuccess" units="ms" + expires_after="2018-12-04"> <obsolete> Removed as of 12/2018. </obsolete> @@ -7777,7 +7850,8 @@ </summary> </histogram> -<histogram name="Autocheckout.Bubble" enum="AutocheckoutBubble"> +<histogram name="Autocheckout.Bubble" enum="AutocheckoutBubble" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7788,7 +7862,8 @@ </summary> </histogram> -<histogram name="Autocheckout.BuyFlow" enum="AutocheckoutBuyFlow"> +<histogram name="Autocheckout.BuyFlow" enum="AutocheckoutBuyFlow" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7799,7 +7874,7 @@ </histogram> <histogram name="Autocheckout.DismissalState" - enum="AutofillDialogDismissalState"> + enum="AutofillDialogDismissalState" expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7807,7 +7882,8 @@ <summary>The state of the Autocheckout dialog when it was dismissed.</summary> </histogram> -<histogram name="Autocheckout.FlowDuration" units="ms"> +<histogram name="Autocheckout.FlowDuration" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7818,7 +7894,8 @@ </summary> </histogram> -<histogram name="Autocheckout.FlowDuration.Failed" units="ms"> +<histogram name="Autocheckout.FlowDuration.Failed" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7830,7 +7907,8 @@ </summary> </histogram> -<histogram name="Autocheckout.FlowDuration.Succeeded" units="ms"> +<histogram name="Autocheckout.FlowDuration.Succeeded" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7843,7 +7921,7 @@ </histogram> <histogram name="Autocheckout.InitialUserState" - enum="AutofillDialogInitialUserState"> + enum="AutofillDialogInitialUserState" expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7854,7 +7932,8 @@ </summary> </histogram> -<histogram name="Autocheckout.PopupInDialog" enum="AutofillDialogPopupEvent"> +<histogram name="Autocheckout.PopupInDialog" enum="AutofillDialogPopupEvent" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7865,7 +7944,8 @@ </summary> </histogram> -<histogram name="Autocheckout.Security" enum="AutofillDialogSecurity"> +<histogram name="Autocheckout.Security" enum="AutofillDialogSecurity" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7876,7 +7956,7 @@ </summary> </histogram> -<histogram name="Autocheckout.UiDuration" units="ms"> +<histogram name="Autocheckout.UiDuration" units="ms" expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7886,7 +7966,8 @@ </summary> </histogram> -<histogram name="Autocheckout.UiDuration.Cancel" units="ms"> +<histogram name="Autocheckout.UiDuration.Cancel" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7897,7 +7978,8 @@ </summary> </histogram> -<histogram name="Autocheckout.UiDuration.Submit" units="ms"> +<histogram name="Autocheckout.UiDuration.Submit" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7908,7 +7990,8 @@ </summary> </histogram> -<histogram name="Autocheckout.UiEvents" enum="AutofillDialogUiEvents"> +<histogram name="Autocheckout.UiEvents" enum="AutofillDialogUiEvents" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7918,7 +8001,8 @@ </summary> </histogram> -<histogram name="Autocheckout.UiLatencyToShow" units="ms"> +<histogram name="Autocheckout.UiLatencyToShow" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7929,7 +8013,8 @@ </summary> </histogram> -<histogram name="Autocheckout.WalletErrors" enum="WalletErrors"> +<histogram name="Autocheckout.WalletErrors" enum="WalletErrors" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7941,7 +8026,7 @@ </histogram> <histogram name="Autocheckout.WalletRequiredActions" - enum="WalletRequiredActions"> + enum="WalletRequiredActions" expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7952,7 +8037,8 @@ </summary> </histogram> -<histogram name="Autocheckout.WhitelistDownloadDuration" units="ms"> +<histogram name="Autocheckout.WhitelistDownloadDuration" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7962,7 +8048,8 @@ </summary> </histogram> -<histogram name="Autocheckout.WhitelistDownloadDuration.Failed" units="ms"> +<histogram name="Autocheckout.WhitelistDownloadDuration.Failed" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -7973,7 +8060,8 @@ </summary> </histogram> -<histogram name="Autocheckout.WhitelistDownloadDuration.Succeeded" units="ms"> +<histogram name="Autocheckout.WhitelistDownloadDuration.Succeeded" units="ms" + expires_after="2013-08-30"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -8098,7 +8186,8 @@ </summary> </histogram> -<histogram name="AutodetectEncoding.Attempted" enum="BooleanAttempted"> +<histogram name="AutodetectEncoding.Attempted" enum="BooleanAttempted" + expires_after="2016-02-04"> <obsolete> Deprecated as of 2/2016. </obsolete> @@ -8117,7 +8206,7 @@ </histogram> <histogram name="AutodetectEncoding.Detected" enum="EncodingMethod" - units="pages"> + units="pages" expires_after="2016-02-04"> <obsolete> Deprecated as of 2/2016. </obsolete> @@ -8128,7 +8217,8 @@ </summary> </histogram> -<histogram name="Autofill.AddressBook.AccessSkipped" enum="BooleanSkipped"> +<histogram name="Autofill.AddressBook.AccessSkipped" enum="BooleanSkipped" + expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8141,7 +8231,8 @@ </summary> </histogram> -<histogram name="Autofill.AddressBookAvailable" enum="BooleanAvailable"> +<histogram name="Autofill.AddressBookAvailable" enum="BooleanAvailable" + expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8153,7 +8244,7 @@ </histogram> <histogram name="Autofill.AddressBookAvailableOnFirstAttempt" - enum="BooleanAvailable"> + enum="BooleanAvailable" expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8208,7 +8299,8 @@ <summary>Whether there is any suggestions for an autocomplete query.</summary> </histogram> -<histogram name="Autofill.AutomaticProfileCreation" enum="BooleanCreated"> +<histogram name="Autofill.AutomaticProfileCreation" enum="BooleanCreated" + expires_after="2015-10-15"> <obsolete> Deprecated as of 6/2015, replaced by Autofill.ProfileActionOnFormSubmitted. </obsolete> @@ -8239,7 +8331,8 @@ </summary> </histogram> -<histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision"> +<histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision" + expires_after="2016-02-08"> <obsolete> Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionMetric. </obsolete> @@ -8251,7 +8344,7 @@ </histogram> <histogram name="Autofill.CardUploadDecisionExpanded" - enum="AutofillCardUploadDecisionExpanded"> + enum="AutofillCardUploadDecisionExpanded" expires_after="2017-05-02"> <obsolete> Deprecated as of 5/2017, replaced by Autofill.CardUploadDecisionMetric. </obsolete> @@ -8274,7 +8367,7 @@ </summary> </histogram> -<histogram name="AutoFill.CCInfoBarAccepted"> +<histogram name="AutoFill.CCInfoBarAccepted" expires_after="2013-03-30"> <obsolete> Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar. </obsolete> @@ -8282,7 +8375,7 @@ <summary>The Autofill credit card info bar was accepted.</summary> </histogram> -<histogram name="AutoFill.CCInfoBarDenied"> +<histogram name="AutoFill.CCInfoBarDenied" expires_after="2013-03-30"> <obsolete> Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar. </obsolete> @@ -8723,7 +8816,8 @@ </summary> </histogram> -<histogram name="Autofill.MacAddressBook" enum="AutofillMacAddressBook"> +<histogram name="Autofill.MacAddressBook" enum="AutofillMacAddressBook" + expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8742,7 +8836,7 @@ </histogram> <histogram name="Autofill.MacAddressBook.AcceptedSuggestionIsFromAddressBook" - enum="BooleanFromAddressBook"> + enum="BooleanFromAddressBook" expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8753,7 +8847,8 @@ </summary> </histogram> -<histogram name="Autofill.MacAddressBook.AccessTime" units="ms"> +<histogram name="Autofill.MacAddressBook.AccessTime" units="ms" + expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8766,7 +8861,7 @@ </histogram> <histogram name="Autofill.MacAddressBook.ContainedMeCard" - enum="BooleanContainedMeCard"> + enum="BooleanContainedMeCard" expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8778,7 +8873,7 @@ </histogram> <histogram name="Autofill.MacAddressBook.MeCard.HadAddress" - enum="BooleanHadAddress"> + enum="BooleanHadAddress" expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8791,7 +8886,7 @@ </histogram> <histogram name="Autofill.MacAddressBook.MeCard.HadEmail" - enum="BooleanHadEmail"> + enum="BooleanHadEmail" expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8802,7 +8897,8 @@ </summary> </histogram> -<histogram name="Autofill.MacAddressBook.MeCard.HadName" enum="BooleanHadName"> +<histogram name="Autofill.MacAddressBook.MeCard.HadName" enum="BooleanHadName" + expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8814,7 +8910,7 @@ </histogram> <histogram name="Autofill.MacAddressBook.MeCard.HadPhoneNumber" - enum="BooleanHadPhoneNumber"> + enum="BooleanHadPhoneNumber" expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8825,7 +8921,8 @@ </summary> </histogram> -<histogram name="Autofill.MacAddressBook.NumShowsBeforeSelected"> +<histogram name="Autofill.MacAddressBook.NumShowsBeforeSelected" + expires_after="2015-08-26"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -8895,7 +8992,7 @@ </histogram> <histogram name="Autofill.PasswordFormQueryVolume" - enum="PasswordFormQueryVolume"> + enum="PasswordFormQueryVolume" expires_after="2015-11-10"> <obsolete> Deprecated 10/2015. </obsolete> @@ -8907,7 +9004,8 @@ </summary> </histogram> -<histogram name="Autofill.PayloadCompressionRatio" units="%"> +<histogram name="Autofill.PayloadCompressionRatio" units="%" + expires_after="2016-01-28"> <obsolete> Deprecated as of 1/2016, autofill payload compression was removed. </obsolete> @@ -8948,7 +9046,7 @@ </summary> </histogram> -<histogram name="AutoFill.ProfileCount"> +<histogram name="AutoFill.ProfileCount" expires_after="2013-03-30"> <obsolete> Deprecated as of 3/2011, replaced by Autofill.StoredProfileCount. </obsolete> @@ -8956,7 +9054,8 @@ <summary>The number of Autofill address profiles a user has.</summary> </histogram> -<histogram name="AutoFill.Quality" enum="AutofillQuality"> +<histogram name="AutoFill.Quality" enum="AutofillQuality" + expires_after="2013-03-30"> <obsolete> Deprecated as of 3/2011, replaced by Autofill.Quality. </obsolete> @@ -8964,7 +9063,8 @@ <summary>The quality of the AutoFill implementation.</summary> </histogram> -<histogram name="Autofill.Quality" enum="AutofillQuality"> +<histogram name="Autofill.Quality" enum="AutofillQuality" + expires_after="2014-03-04"> <obsolete> Deprecated as of 2/2014 (M35), replaced by Autofill.UserHappiness. </obsolete> @@ -8972,7 +9072,8 @@ <summary>The quality of the Autofill implementation.</summary> </histogram> -<histogram name="Autofill.Quality.HeuristicType" enum="AutofillTypeQuality"> +<histogram name="Autofill.Quality.HeuristicType" enum="AutofillTypeQuality" + expires_after="2017-06-02"> <obsolete> Deprecated as of 6/2017, replaced by Autofill.FieldPredictionQuality.Aggregate.Heuristic. @@ -8982,7 +9083,7 @@ </histogram> <histogram name="Autofill.Quality.HeuristicType.ByFieldType" - enum="AutofillTypeQualityByFieldType"> + enum="AutofillTypeQualityByFieldType" expires_after="2017-06-02"> <obsolete> Deprecated as of 6/2017, replaced by Autofill.FieldPredictionQuality.ByFieldType.Heuristic. @@ -8995,7 +9096,8 @@ </summary> </histogram> -<histogram name="Autofill.Quality.PredictedType" enum="AutofillTypeQuality"> +<histogram name="Autofill.Quality.PredictedType" enum="AutofillTypeQuality" + expires_after="2017-06-02"> <obsolete> Deprecated as of 6/2017, replaced by Autofill.FieldPredictionQuality.Aggregate.Overall. @@ -9005,7 +9107,7 @@ </histogram> <histogram name="Autofill.Quality.PredictedType.ByFieldType" - enum="AutofillTypeQualityByFieldType"> + enum="AutofillTypeQualityByFieldType" expires_after="2017-06-02"> <obsolete> Deprecated as of 6/2017, replaced by Autofill.FieldPredictionQuality.ByFieldType.Overall. @@ -9018,7 +9120,8 @@ </summary> </histogram> -<histogram name="Autofill.Quality.ServerType" enum="AutofillTypeQuality"> +<histogram name="Autofill.Quality.ServerType" enum="AutofillTypeQuality" + expires_after="2017-06-02"> <obsolete> Deprecated as of 6/2017, replaced by Autofill.FieldPredictionQuality.Aggregate.Server. @@ -9028,7 +9131,7 @@ </histogram> <histogram name="Autofill.Quality.ServerType.ByFieldType" - enum="AutofillTypeQualityByFieldType"> + enum="AutofillTypeQualityByFieldType" expires_after="2017-06-02"> <obsolete> Deprecated as of 6/2017, replaced by Autofill.FieldPredictionQuality.ByFieldType.Server. @@ -9067,7 +9170,8 @@ </summary> </histogram> -<histogram name="Autofill.Query.HttpResponseCode" enum="HttpResponseCode"> +<histogram name="Autofill.Query.HttpResponseCode" enum="HttpResponseCode" + expires_after="2018-08-21"> <obsolete> Deprecated as of 8/2018, replaced by Autofill.Query.HttpResponseOrErrorCode. </obsolete> @@ -9116,7 +9220,7 @@ </histogram> <histogram name="Autofill.ResetFullServerCards.NumberOfCardsReset.DryRun" - units="Cards"> + units="Cards" expires_after="2018-10-19"> <obsolete> Deprecated as of 10/2018 (M72). </obsolete> @@ -9245,7 +9349,8 @@ </summary> </histogram> -<histogram name="Autofill.ServerExperimentId" enum="AutofillExperimentId"> +<histogram name="Autofill.ServerExperimentId" enum="AutofillExperimentId" + expires_after="2013-03-30"> <obsolete> Deprecated as of 6/2011, replaced by Autofill.ServerExperimentId.Query. </obsolete> @@ -9255,7 +9360,8 @@ </summary> </histogram> -<histogram name="Autofill.ServerExperimentId.Query" enum="AutofillExperimentId"> +<histogram name="Autofill.ServerExperimentId.Query" enum="AutofillExperimentId" + expires_after="2014-03-04"> <obsolete> Deprecated as of 2/2014 (M35). </obsolete> @@ -9266,7 +9372,7 @@ </histogram> <histogram name="Autofill.ServerExperimentId.Upload" - enum="AutofillExperimentId"> + enum="AutofillExperimentId" expires_after="2014-03-04"> <obsolete> Deprecated as of 2/2014 (M35). </obsolete> @@ -9276,7 +9382,8 @@ </summary> </histogram> -<histogram name="AutoFill.ServerQueryResponse" enum="AutofillQueryResult"> +<histogram name="AutoFill.ServerQueryResponse" enum="AutofillQueryResult" + expires_after="2013-03-30"> <obsolete> Deprecated as of 3/2011, replaced by Autofill.ServerQueryResponse. </obsolete> @@ -9507,7 +9614,8 @@ </summary> </histogram> -<histogram name="Autofill.Unknown.BackoffDelay" units="ms"> +<histogram name="Autofill.Unknown.BackoffDelay" units="ms" + expires_after="2019-01-04"> <obsolete> Deprecated as of 01/2019, as it never occurs. </obsolete> @@ -9519,7 +9627,8 @@ </summary> </histogram> -<histogram name="Autofill.Unknown.FailingPayloadSize" units="bytes"> +<histogram name="Autofill.Unknown.FailingPayloadSize" units="bytes" + expires_after="2019-01-04"> <obsolete> Deprecated as of 01/2019, as it never occurs. </obsolete> @@ -9530,7 +9639,8 @@ </summary> </histogram> -<histogram name="Autofill.Unknown.HttpResponseCode" enum="HttpResponseCode"> +<histogram name="Autofill.Unknown.HttpResponseCode" enum="HttpResponseCode" + expires_after="2018-08-21"> <obsolete> Deprecated as of 8/2018, replaced by Autofill.Unknown.HttpResponseOrErrorCode. @@ -9543,7 +9653,7 @@ </histogram> <histogram name="Autofill.Unknown.HttpResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2019-01-04"> <obsolete> Deprecated as of 01/2019, as it never occurs. </obsolete> @@ -9555,7 +9665,8 @@ </summary> </histogram> -<histogram name="Autofill.Unknown.RequestDuration" units="ms"> +<histogram name="Autofill.Unknown.RequestDuration" units="ms" + expires_after="2019-01-04"> <obsolete> Deprecated as of 01/2019, as it never occurs. </obsolete> @@ -9656,7 +9767,8 @@ </summary> </histogram> -<histogram name="Autofill.Upload.HttpResponseCode" enum="HttpResponseCode"> +<histogram name="Autofill.Upload.HttpResponseCode" enum="HttpResponseCode" + expires_after="2018-08-21"> <obsolete> Deprecated as of 8/2018, replaced by Autofill.Upload.HttpResponseOrErrorCode. @@ -9783,7 +9895,8 @@ </summary> </histogram> -<histogram name="Autofill.WalletAddressesAdded" units="addresses"> +<histogram name="Autofill.WalletAddressesAdded" units="addresses" + expires_after="2018-11-29"> <obsolete> Deprecated as of 11/2018, replaced by Autofill.WalletAddresses.Added. </obsolete> @@ -9798,7 +9911,8 @@ </details> </histogram> -<histogram name="Autofill.WalletAddressesAddedOrRemoved" units="addresses"> +<histogram name="Autofill.WalletAddressesAddedOrRemoved" units="addresses" + expires_after="2018-11-29"> <obsolete> Deprecated as of 11/2018, replaced by Autofill.WalletAddresses.AddedOrRemoved. @@ -9815,7 +9929,8 @@ </details> </histogram> -<histogram name="Autofill.WalletAddressesRemoved" units="addresses"> +<histogram name="Autofill.WalletAddressesRemoved" units="addresses" + expires_after="2018-11-29"> <obsolete> Deprecated as of 11/2018, replaced by Autofill.WalletAddresses.Removed. </obsolete> @@ -9865,7 +9980,8 @@ </summary> </histogram> -<histogram name="Autofill.WalletCardsAdded" units="credit cards"> +<histogram name="Autofill.WalletCardsAdded" units="credit cards" + expires_after="2018-11-29"> <obsolete> Deprecated as of 11/2018, replaced by Autofill.WalletCards.Added. </obsolete> @@ -9880,7 +9996,8 @@ </details> </histogram> -<histogram name="Autofill.WalletCardsAddedOrRemoved" units="credit cards"> +<histogram name="Autofill.WalletCardsAddedOrRemoved" units="credit cards" + expires_after="2018-11-29"> <obsolete> Deprecated as of 11/2018, replaced by Autofill.WalletCards.AddedOrRemoved. </obsolete> @@ -9896,7 +10013,8 @@ </details> </histogram> -<histogram name="Autofill.WalletCardsRemoved" units="credit cards"> +<histogram name="Autofill.WalletCardsRemoved" units="credit cards" + expires_after="2018-11-29"> <obsolete> Deprecated as of 11/2018, replaced by Autofill.WalletCards.Removed. </obsolete> @@ -10167,7 +10285,7 @@ </histogram> <histogram name="AutoScreenBrightness.UserAdjustment" - enum="AutoScreenBrightnessUserAdjustment"> + enum="AutoScreenBrightnessUserAdjustment" expires_after="2018-11-22"> <obsolete> Deprecated as of 11/2018. It has been replaced by DailyUserAdjustment. </obsolete> @@ -10303,7 +10421,7 @@ </histogram> <histogram name="BackgroundFetch.RegistrationCreatedError" - enum="BackgroundFetchError"> + enum="BackgroundFetchError" expires_after="2018-11-05"> <obsolete> Deprecated 10/2018 since DB tasks record this more accurately. </obsolete> @@ -10316,7 +10434,7 @@ </histogram> <histogram name="BackgroundFetch.RegistrationDeletedError" - enum="BackgroundFetchError"> + enum="BackgroundFetchError" expires_after="2018-11-05"> <obsolete> Deprecated 10/2018 since DB tasks record this more accurately. </obsolete> @@ -10329,7 +10447,7 @@ </histogram> <histogram name="BackgroundFetch.SchedulerFinishedError" - enum="BackgroundFetchError"> + enum="BackgroundFetchError" expires_after="2018-11-05"> <obsolete> Deprecated 10/2018 since DB tasks record this more accurately. </obsolete> @@ -10414,7 +10532,8 @@ </summary> </histogram> -<histogram name="BackgroundSync.Event.OneShotResult" enum="BooleanSuccess"> +<histogram name="BackgroundSync.Event.OneShotResult" enum="BooleanSuccess" + expires_after="2015-10-20"> <obsolete> As of 10/2015 this has been replaced by BackgroundSync.Event.OneShotResultPattern. @@ -10445,7 +10564,8 @@ </summary> </histogram> -<histogram name="BackgroundSync.Event.PeriodicResult" enum="BooleanSuccess"> +<histogram name="BackgroundSync.Event.PeriodicResult" enum="BooleanSuccess" + expires_after="2015-10-20"> <obsolete> As of 10/2015 this has been replaced by BackgroundSync.Event.PeriodicResultPattern. @@ -10455,7 +10575,7 @@ </histogram> <histogram name="BackgroundSync.Event.PeriodicResultPattern" - enum="BackgroundSyncResultPattern"> + enum="BackgroundSyncResultPattern" expires_after="2016-01-25"> <obsolete> Stopped recording as of 1/2016. </obsolete> @@ -10471,7 +10591,7 @@ </histogram> <histogram name="BackgroundSync.Event.PeriodicStartedInForeground" - enum="BooleanInForeground"> + enum="BooleanInForeground" expires_after="2016-01-25"> <obsolete> Stopped recording as of 1/2016. </obsolete> @@ -10595,7 +10715,7 @@ </histogram> <histogram name="BackgroundSync.Registration.Periodic" - enum="BackgroundSyncStatus"> + enum="BackgroundSyncStatus" expires_after="2016-01-25"> <obsolete> Stopped recording as of 1/2016. </obsolete> @@ -10606,7 +10726,7 @@ </histogram> <histogram name="BackgroundSync.Registration.Periodic.IsDuplicate" - enum="BooleanRegistrationIsDuplicate"> + enum="BooleanRegistrationIsDuplicate" expires_after="2016-01-25"> <obsolete> Stopped recording as of 1/2016. </obsolete> @@ -10618,7 +10738,7 @@ </histogram> <histogram name="BackgroundSync.Unregistration.OneShot" - enum="BackgroundSyncStatus"> + enum="BackgroundSyncStatus" expires_after="2016-02-26"> <obsolete> Stopped recording as of 2/2016. </obsolete> @@ -10629,7 +10749,7 @@ </histogram> <histogram name="BackgroundSync.Unregistration.Periodic" - enum="BackgroundSyncStatus"> + enum="BackgroundSyncStatus" expires_after="2016-01-25"> <obsolete> Stopped recording as of 1/2016. </obsolete> @@ -10700,7 +10820,8 @@ </summary> </histogram> -<histogram name="Blacklist.PatchedInRenderer" enum="BooleanHit"> +<histogram name="Blacklist.PatchedInRenderer" enum="BooleanHit" + expires_after="2015-07-09"> <obsolete> Removed at 2015 July. </obsolete> @@ -10826,7 +10947,8 @@ </summary> </histogram> -<histogram name="Blink.Binding.InitializeMainWindowProxy" units="microseconds"> +<histogram name="Blink.Binding.InitializeMainWindowProxy" units="microseconds" + expires_after="2017-03-26"> <obsolete> Deprecated as of 03/2017. This metric was split into two metrics depending if it figures time for local window proxies or remote ones. @@ -10867,7 +10989,7 @@ </histogram> <histogram name="Blink.Binding.InitializeNonMainWindowProxy" - units="microseconds"> + units="microseconds" expires_after="2017-03-26"> <obsolete> Deprecated as of 03/2017. This metric was split into two metrics depending if it figures time for local window proxies or remote ones. @@ -10879,7 +11001,8 @@ </summary> </histogram> -<histogram name="Blink.Binding.InitializeWindowProxy" units="microseconds"> +<histogram name="Blink.Binding.InitializeWindowProxy" units="microseconds" + expires_after="2016-11-01"> <obsolete> Deprecated as of 10/2016. This metric was split into two metrics depending if it figures time for main windows. @@ -10888,7 +11011,8 @@ <summary>Time spent initializing WindowProxy during a page loading.</summary> </histogram> -<histogram name="Blink.BudgetAPI.QueryBudget" units="budget"> +<histogram name="Blink.BudgetAPI.QueryBudget" units="budget" + expires_after="2018-08-20"> <obsolete> Deprecated as of 08/2018 (M70) with the removal of the Budget API. </obsolete> @@ -10904,7 +11028,8 @@ </summary> </histogram> -<histogram name="Blink.BudgetAPI.Reserve" enum="BooleanSuccess"> +<histogram name="Blink.BudgetAPI.Reserve" enum="BooleanSuccess" + expires_after="2018-08-20"> <obsolete> Deprecated as of 08/2018 (M70) with the removal of the Budget API. </obsolete> @@ -10943,7 +11068,8 @@ </summary> </histogram> -<histogram name="Blink.Canvas.DrawImage" units="microseconds"> +<histogram name="Blink.Canvas.DrawImage" units="microseconds" + expires_after="2018-10-26"> <obsolete> Replaced with Blink.Canvas.DrawImage.Duration in 10/2018. </obsolete> @@ -10982,7 +11108,8 @@ </summary> </histogram> -<histogram name="Blink.Canvas.GetImageData" units="microseconds"> +<histogram name="Blink.Canvas.GetImageData" units="microseconds" + expires_after="2018-10-26"> <obsolete> Replaced with Blink.Canvas.GetImageDataScaledDuration in 10/2018. </obsolete> @@ -11052,7 +11179,8 @@ </summary> </histogram> -<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds"> +<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds" + expires_after="2018-11-01"> <obsolete> Deprecated in 10/2018. Offscreen Canvas no longer needs commits. </obsolete> @@ -11069,7 +11197,8 @@ </summary> </histogram> -<histogram name="Blink.Canvas.PutImageData" units="microseconds"> +<histogram name="Blink.Canvas.PutImageData" units="microseconds" + expires_after="2018-10-26"> <obsolete> Replaced with Blink.Canvas.PutImageDataScaledDuration in 10/2018. </obsolete> @@ -11165,7 +11294,8 @@ </summary> </histogram> -<histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration" units="microseconds"> +<histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration" units="microseconds" + expires_after="2017-12-04"> <obsolete> Replaced with Blink.Canvas.ToBlob.CompleteEncodingDelay in 2017/12. </obsolete> @@ -11237,7 +11367,8 @@ </summary> </histogram> -<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds"> +<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds" + expires_after="2018-10-30"> <obsolete> Replaced with Blink.Canvas.ToBlob.ScaledDuration in 10/2018. </obsolete> @@ -11259,7 +11390,8 @@ </summary> </histogram> -<histogram name="Blink.Canvas.ToDataURL" units="microseconds"> +<histogram name="Blink.Canvas.ToDataURL" units="microseconds" + expires_after="2018-11-02"> <obsolete> Replaced with Blink.Canvas.ToDataURLScaledDuration in 10/2018. </obsolete> @@ -11289,7 +11421,8 @@ </summary> </histogram> -<histogram name="Blink.CheckerableImageCount" enum="CheckerableImageType"> +<histogram name="Blink.CheckerableImageCount" enum="CheckerableImageType" + expires_after="2018-05-08"> <obsolete> Deprecated on 2018-05-04. </obsolete> @@ -11328,7 +11461,7 @@ </histogram> <histogram name="Blink.ColorSpace.Destination.ExtractedRawData" - enum="ColorSpaceExtractedRawDataResult"> + enum="ColorSpaceExtractedRawDataResult" expires_after="2017-02-28"> <obsolete> Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. </obsolete> @@ -11349,7 +11482,8 @@ </summary> </histogram> -<histogram name="Blink.ColorSpace.Destination.LinearFitError"> +<histogram name="Blink.ColorSpace.Destination.LinearFitError" + expires_after="2017-02-28"> <obsolete> Linear fit found to be always inaccurate on 2017-02-28. </obsolete> @@ -11362,7 +11496,7 @@ </histogram> <histogram name="Blink.ColorSpace.Destination.Matrix" - enum="ColorSpaceMatrixResult"> + enum="ColorSpaceMatrixResult" expires_after="2017-02-28"> <obsolete> Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. </obsolete> @@ -11374,7 +11508,7 @@ </histogram> <histogram name="Blink.ColorSpace.Destination.NonlinearFitConverged" - enum="ColorSpaceNonlinearFitConverged"> + enum="ColorSpaceNonlinearFitConverged" expires_after="2018-05-17"> <obsolete> Nonlinear fit code moved to skcms on 2018-04-25. </obsolete> @@ -11385,7 +11519,8 @@ </summary> </histogram> -<histogram name="Blink.ColorSpace.Destination.NonlinearFitError"> +<histogram name="Blink.ColorSpace.Destination.NonlinearFitError" + expires_after="2018-05-17"> <obsolete> Nonlinear fit code moved to skcms on 2018-04-25. </obsolete> @@ -11409,7 +11544,7 @@ </histogram> <histogram name="Blink.ColorSpace.Destination.Numerical" - enum="ColorSpaceNumericalResult"> + enum="ColorSpaceNumericalResult" expires_after="2017-02-28"> <obsolete> Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28. </obsolete> @@ -11420,7 +11555,8 @@ </summary> </histogram> -<histogram name="Blink.ColorSpace.Destination.OneMinusTMax"> +<histogram name="Blink.ColorSpace.Destination.OneMinusTMax" + expires_after="2017-02-28"> <obsolete> TMax found to almost always be 1 on 2017-02-28. </obsolete> @@ -11432,7 +11568,7 @@ </summary> </histogram> -<histogram name="Blink.ColorSpace.Destination.TMin"> +<histogram name="Blink.ColorSpace.Destination.TMin" expires_after="2017-02-28"> <obsolete> TMin found to almost always be 0 on 2017-02-28. </obsolete> @@ -11520,7 +11656,7 @@ </histogram> <histogram name="Blink.DecodedImage.CanvasExpanded" - enum="BooleanCanvasExpanded"> + enum="BooleanCanvasExpanded" expires_after="2016-11-30"> <obsolete> Deprecated as of 11/29/2016. </obsolete> @@ -11533,7 +11669,8 @@ </summary> </histogram> -<histogram name="Blink.DecodedImage.EffectiveDimensionsLocation" units="bytes"> +<histogram name="Blink.DecodedImage.EffectiveDimensionsLocation" units="bytes" + expires_after="2016-11-30"> <obsolete> Deprecated as of 11/29/2016. </obsolete> @@ -11546,7 +11683,8 @@ </summary> </histogram> -<histogram name="Blink.DecodedImage.JpegDensity" units="0.01 bits per pixel"> +<histogram name="Blink.DecodedImage.JpegDensity" units="0.01 bits per pixel" + expires_after="2018-08-31"> <obsolete> Deprecated as of 08/23/2018. Replaced by Blink.DecodedImage.JpegDensity.* </obsolete> @@ -11609,7 +11747,8 @@ </summary> </histogram> -<histogram name="Blink.DecodedImage.XCanvasExpansion" units="pixels"> +<histogram name="Blink.DecodedImage.XCanvasExpansion" units="pixels" + expires_after="2016-11-30"> <obsolete> Deprecated as of 11/29/2016. </obsolete> @@ -11623,7 +11762,8 @@ </summary> </histogram> -<histogram name="Blink.DecodedImage.YCanvasExpansion" units="pixels"> +<histogram name="Blink.DecodedImage.YCanvasExpansion" units="pixels" + expires_after="2016-11-30"> <obsolete> Deprecated as of 11/29/2016. </obsolete> @@ -11642,7 +11782,8 @@ <summary>Image codec inferred during decode.</summary> </histogram> -<histogram name="Blink.EventListenerDuration.Resize" units="microseconds"> +<histogram name="Blink.EventListenerDuration.Resize" units="microseconds" + expires_after="2018-01-17"> <obsolete> Deprecated 01/2018. </obsolete> @@ -11948,7 +12089,7 @@ </histogram> <histogram name="Blink.MediaDocument.DownloadButton" - enum="MediaDocumentDownloadButtonType"> + enum="MediaDocumentDownloadButtonType" expires_after="2017-08-22"> <obsolete> Deprecated 08/2017 as it is integrated into media controller. </obsolete> @@ -11958,7 +12099,8 @@ </summary> </histogram> -<histogram name="Blink.MediaElement.Autoplay" enum="MediaElementAutoPlay"> +<histogram name="Blink.MediaElement.Autoplay" enum="MediaElementAutoPlay" + expires_after="2016-11-30"> <obsolete> Deprecated 11/2016 in Issue 666370 with the deprecation of Autoplay experiment. @@ -12118,7 +12260,8 @@ </summary> </histogram> -<histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds"> +<histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds" + expires_after="2018-02-22"> <obsolete> SlimmingPaintInvalidation is enabled by default, so this histogram is no longer being logged. @@ -12170,7 +12313,7 @@ </histogram> <histogram base="true" name="Blink.ResourceLoadScheduler.DecodedBytes" - units="bytes"> + units="bytes" expires_after="2018-08-06"> <obsolete> Deprecated as of 8/2018. </obsolete> @@ -12257,7 +12400,7 @@ </histogram> <histogram base="true" name="Blink.ResourceLoadScheduler.TrafficBytes" - units="bytes"> + units="bytes" expires_after="2018-08-06"> <obsolete> Deprecated as of 8/2018. </obsolete> @@ -12284,7 +12427,7 @@ </histogram> <histogram name="Blink.RestoredCachedStyleSheet" - enum="RestoredCachedStyleSheet"> + enum="RestoredCachedStyleSheet" expires_after="2016-01-20"> <obsolete> Deprecated 01/2016 and replaced by Blink.RestoredCachedStyleSheet2 </obsolete> @@ -12295,7 +12438,8 @@ </summary> </histogram> -<histogram name="Blink.RestoredCachedStyleSheet2" enum="StyleSheetCacheStatus"> +<histogram name="Blink.RestoredCachedStyleSheet2" enum="StyleSheetCacheStatus" + expires_after="2017-04-11"> <obsolete> Deprecated 04/2017. </obsolete> @@ -12323,7 +12467,8 @@ </summary> </histogram> -<histogram name="Blink.ScriptValueSerializer.DOMWrapperCount" units="objects"> +<histogram name="Blink.ScriptValueSerializer.DOMWrapperCount" units="objects" + expires_after="2016-11-15"> <obsolete> Used to justify distribution of serialized data in the wild, but unlikely to be useful to track long-term. @@ -12335,7 +12480,8 @@ </summary> </histogram> -<histogram name="Blink.ScriptValueSerializer.JSObjectCount" units="objects"> +<histogram name="Blink.ScriptValueSerializer.JSObjectCount" units="objects" + expires_after="2016-11-15"> <obsolete> Used to justify distribution of serialized data in the wild, but unlikely to be useful to track long-term. @@ -12348,7 +12494,8 @@ </summary> </histogram> -<histogram name="Blink.ScriptValueSerializer.PrimitiveCount" units="values"> +<histogram name="Blink.ScriptValueSerializer.PrimitiveCount" units="values" + expires_after="2016-11-15"> <obsolete> Used to justify distribution of serialized data in the wild, but unlikely to be useful to track long-term. @@ -12490,7 +12637,7 @@ </histogram> <histogram name="Blink.UseCounter.CSSProperties_TestBrowserProcessLogging" - enum="MappedCSSProperties"> + enum="MappedCSSProperties" expires_after="2018-06-12"> <obsolete> Renamed to Blink.UseCounter.CSSProperties in 03/2018, M69. The old blink UseCounter is flawed in OOPIF, so moved to the browser side instead. @@ -12590,7 +12737,7 @@ </histogram> <histogram name="Blink.UseCounter.Features_TestBrowserProcessLogging" - enum="FeatureObserver"> + enum="FeatureObserver" expires_after="2018-03-13"> <obsolete> Renamed to Blink.UseCounter.Features in 03/2018, M67. The old blink UseCounter is flawed in OOPIF, so moved to the browser side (this) instead. @@ -12620,7 +12767,7 @@ </histogram> <histogram name="Blink.UseCounter.SVGImage.AnimatedCSSProperties" - enum="MappedCSSProperties"> + enum="MappedCSSProperties" expires_after="2018-06-19"> <obsolete> Removed in 06/2018, M69 since the histogram is not really useful. See https://crbug.com/804645. @@ -12640,7 +12787,7 @@ </histogram> <histogram name="Blink.UseCounter.SVGImage.CSSProperties" - enum="MappedCSSProperties"> + enum="MappedCSSProperties" expires_after="2018-06-19"> <obsolete> Removed in 06/2018, M69 since the histogram is not really useful. See https://crbug.com/804645. @@ -12764,7 +12911,8 @@ </histogram> <histogram name="Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230" - enum="XMLHttpRequestHeaderValueCategoryInRFC7230"> + enum="XMLHttpRequestHeaderValueCategoryInRFC7230" + expires_after="2017-06-01"> <obsolete> Deprecated 06/2017 in Issues 455099 and 681769 (M61). </obsolete> @@ -12785,7 +12933,7 @@ </summary> </histogram> -<histogram name="BlinkGC.CollectGarbage" units="ms"> +<histogram name="BlinkGC.CollectGarbage" units="ms" expires_after="2018-06-07"> <obsolete> Deprecated 06/2018. The sample taken here was a mix of marking, sweeping and compaction. Replaced by BlinkGC.AtomicPhaseMarking for the marking phase and @@ -12871,7 +13019,8 @@ </summary> </histogram> -<histogram name="BlinkGC.PerformPendingSweep" units="ms"> +<histogram name="BlinkGC.PerformPendingSweep" units="ms" + expires_after="2015-03-30"> <obsolete> Removed at 2014 Jan. </obsolete> @@ -13013,7 +13162,8 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForStoppingThreads" units="ms"> +<histogram name="BlinkGC.TimeForStoppingThreads" units="ms" + expires_after="2017-02-13"> <obsolete> As of 02/2017, the code to stop Blink threads was removed. </obsolete> @@ -13029,7 +13179,8 @@ <summary>Accumulated time taken to sweep all objects.</summary> </histogram> -<histogram name="BlinkGC.TimeForThreadLocalWeakProcessing" units="ms"> +<histogram name="BlinkGC.TimeForThreadLocalWeakProcessing" units="ms" + expires_after="2017-02-26"> <obsolete> As of 02/2017, the code for thread-local weak processing was removed. </obsolete> @@ -13165,7 +13316,8 @@ </summary> </histogram> -<histogram name="Bluetooth.GATTErrors" enum="BluetoothGATTErrors"> +<histogram name="Bluetooth.GATTErrors" enum="BluetoothGATTErrors" + expires_after="2015-08-14"> <obsolete> As of 08/2015 this has been replaced by Bluetooth.Web.Characteristic.ReadValue and @@ -13213,7 +13365,7 @@ </histogram> <histogram name="Bluetooth.RequestDevice.Outcome" - enum="WebBluetoothRequestDeviceOutcome"> + enum="WebBluetoothRequestDeviceOutcome" expires_after="2015-08-12"> <obsolete> Deprecated 08/2015 and replaced by Bluetooth.Web.RequestDevice.Outcome. </obsolete> @@ -13238,7 +13390,7 @@ </histogram> <histogram name="Bluetooth.Web.Blacklist.ParsedNonEmptyString" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-11-23"> <obsolete> Deprecated as of 11/2016, replaced by Bluetooth.Web.Blocklist.ParsedNonEmptyString. @@ -13376,7 +13528,8 @@ </summary> </histogram> -<histogram name="Bluetooth.Web.FunctionCall.Count" enum="WebBluetoothFunction"> +<histogram name="Bluetooth.Web.FunctionCall.Count" enum="WebBluetoothFunction" + expires_after="2017-03-30"> <obsolete> Deprecated as of 3/2017. Replaced by using blink IDL annotation MeasureAs which appear in Blink.UseCounter.Features. @@ -13697,7 +13850,7 @@ </summary> </histogram> -<histogram name="BlueZ.ChipLost" units="seconds"> +<histogram name="BlueZ.ChipLost" units="seconds" expires_after="2018-08-16"> <obsolete> Replaced 08/2018 by BlueZ.ChipLost2 for more suspend/resume filtering even when the Bluetooth adapter is turned off. @@ -13974,7 +14127,8 @@ </summary> </histogram> -<histogram name="Bookmarks.OpenAction" enum="BookmarksOpenAction"> +<histogram name="Bookmarks.OpenAction" enum="BookmarksOpenAction" + expires_after="2016-02-01"> <obsolete> Deprecated as of 1/2016. </obsolete> @@ -13994,7 +14148,7 @@ </summary> </histogram> -<histogram name="BootTime.Total" units="ms"> +<histogram name="BootTime.Total" units="ms" expires_after="2017-08-24"> <obsolete> Replaced 08/2016 by BootTime.Total2 with larger range and more buckets. </obsolete> @@ -14121,7 +14275,7 @@ </histogram> <histogram name="BrowserDialogs.ExternalProtocol.RememberCheckbox" - enum="BooleanChecked"> + enum="BooleanChecked" expires_after="2017-09-06"> <obsolete> Deprecated 09/2017. This histogram has been replaced with ExternalProtocol.HandleState. @@ -14582,7 +14736,8 @@ </summary> </histogram> -<histogram name="Canvas.ContextType" enum="CanvasContextType"> +<histogram name="Canvas.ContextType" enum="CanvasContextType" + expires_after="2018-10-23"> <obsolete> Replaced with Blink.Canvas.ContextType in 10/2018. </obsolete> @@ -14594,7 +14749,7 @@ </histogram> <histogram name="Canvas.CreateImageBitmapSource" - enum="CanvasCreateImageBitmapSource"> + enum="CanvasCreateImageBitmapSource" expires_after="2018-11-01"> <obsolete> Replaced with Blink.Canvas.CreateImageBitmapSource in 10/2018. </obsolete> @@ -14606,7 +14761,7 @@ </histogram> <histogram name="Canvas.DisplayListFallbackReason" - enum="CanvasDisplayListFallbackReason"> + enum="CanvasDisplayListFallbackReason" expires_after="2017-12-04"> <obsolete> Deprecated 11/2017 with removal of Display List Canvas 2D mode. </obsolete> @@ -14618,7 +14773,8 @@ </histogram> <histogram name="Canvas.GPUAccelerated2DCanvasDisableDeferralReason" - enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason"> + enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason" + expires_after="2018-11-01"> <obsolete> Replaced with Blink.Canvas.GPUAccelerated2DCanvasDisableDeferralReason in 10/2018. @@ -14630,7 +14786,8 @@ </summary> </histogram> -<histogram name="Canvas.HibernationEvents" enum="CanvasHibernationEvent"> +<histogram name="Canvas.HibernationEvents" enum="CanvasHibernationEvent" + expires_after="2018-11-01"> <obsolete> Replaced with Blink.Canvas.HibernationEvents in 10/2018. </obsolete> @@ -14641,7 +14798,8 @@ </summary> </histogram> -<histogram name="Canvas.Offscreen.CommitType" enum="OffscreenCanvasCommitType"> +<histogram name="Canvas.Offscreen.CommitType" enum="OffscreenCanvasCommitType" + expires_after="2018-10-23"> <obsolete> Deprecated 10/2018 with Blink.OffscreenCanvas histograms </obsolete> @@ -14652,7 +14810,8 @@ </summary> </histogram> -<histogram name="Canvas.RequestedImageMimeTypes" enum="RequestedImageMimeType"> +<histogram name="Canvas.RequestedImageMimeTypes" enum="RequestedImageMimeType" + expires_after="2018-11-01"> <obsolete> Replaced with Blink.Canvas.RequestedImageMimeTypes in 10/2018. </obsolete> @@ -14663,7 +14822,8 @@ </summary> </histogram> -<histogram name="CAPSUpdater.Step" enum="CAPSUpdaterStep"> +<histogram name="CAPSUpdater.Step" enum="CAPSUpdaterStep" + expires_after="2016-08-18"> <obsolete> Deprecated 08/2016 with removal of Chrome Crash Service component. </obsolete> @@ -14892,7 +15052,8 @@ </summary> </histogram> -<histogram name="Cast.Sender.CastPlaySuccess" enum="BooleanSuccess"> +<histogram name="Cast.Sender.CastPlaySuccess" enum="BooleanSuccess" + expires_after="2014-05-02"> <obsolete> Deprecated 04/2014, and replaced by Cast.Sender.CastPlayerResult. </obsolete> @@ -14953,7 +15114,8 @@ </summary> </histogram> -<histogram name="Cast.Sender.Overlay" enum="CastOverlayEvents"> +<histogram name="Cast.Sender.Overlay" enum="CastOverlayEvents" + expires_after="2017-07-14"> <obsolete> Deprecated July 2017 in favor of Media.Controls.CTR.CastOverlayButton. </obsolete> @@ -15031,7 +15193,7 @@ </summary> </histogram> -<histogram name="Cellular.ActivationFailure"> +<histogram name="Cellular.ActivationFailure" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15046,7 +15208,7 @@ <summary>The count of cellular device activation tries (Chrome OS).</summary> </histogram> -<histogram name="Cellular.ConnectionFailed"> +<histogram name="Cellular.ConnectionFailed" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15056,7 +15218,7 @@ </summary> </histogram> -<histogram name="Cellular.ConnectionRetry"> +<histogram name="Cellular.ConnectionRetry" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15066,7 +15228,7 @@ </summary> </histogram> -<histogram name="Cellular.MobileSetupFailed"> +<histogram name="Cellular.MobileSetupFailed" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15083,7 +15245,7 @@ </summary> </histogram> -<histogram name="Cellular.MobileSetupSucceeded"> +<histogram name="Cellular.MobileSetupSucceeded" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15091,7 +15253,7 @@ <summary>The count of failed cellular plan setup tries (Chrome OS).</summary> </histogram> -<histogram name="Cellular.PaymentFailed"> +<histogram name="Cellular.PaymentFailed" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15099,7 +15261,7 @@ <summary>The count of failed cellular plan purchases (Chrome OS).</summary> </histogram> -<histogram name="Cellular.PaymentReceived"> +<histogram name="Cellular.PaymentReceived" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15109,7 +15271,7 @@ </summary> </histogram> -<histogram name="CertificateType"> +<histogram name="CertificateType" expires_after="2013-08-09"> <obsolete> Deprecated as of 8/2013. This histogram only considered the leaf certificate expiry date as a proxy for whether a certificate was in-scope for the BRs, @@ -15158,7 +15320,8 @@ </summary> </histogram> -<histogram name="ChildProcess.Crashed" enum="ProcessType"> +<histogram name="ChildProcess.Crashed" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 3/2013. Renamed to ChildProcess.Crashed2. </obsolete> @@ -15192,7 +15355,8 @@ <summary>Count of child process crashes grouped by process type.</summary> </histogram> -<histogram name="ChildProcess.CrashedWasAlive" enum="ProcessType"> +<histogram name="ChildProcess.CrashedWasAlive" enum="ProcessType" + expires_after="2015-10-29"> <obsolete> Deprecated as of 10/2015. </obsolete> @@ -15203,7 +15367,8 @@ </summary> </histogram> -<histogram name="ChildProcess.Crashes" enum="ProcessType"> +<histogram name="ChildProcess.Crashes" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 10/2011. Renamed to ChildProcess.Crashed. </obsolete> @@ -15211,7 +15376,8 @@ <summary>Count of child process crashes grouped by process type.</summary> </histogram> -<histogram name="ChildProcess.CrashesWasAlive" enum="ProcessType"> +<histogram name="ChildProcess.CrashesWasAlive" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 10/2011. Renamed to ChildProcess.CrashedWasAlive. </obsolete> @@ -15222,7 +15388,8 @@ </summary> </histogram> -<histogram name="ChildProcess.DefaultCase" enum="ProcessType"> +<histogram name="ChildProcess.DefaultCase" enum="ProcessType" + expires_after="2015-10-29"> <obsolete> Deprecated as of 10/2015. </obsolete> @@ -15233,7 +15400,8 @@ </summary> </histogram> -<histogram name="ChildProcess.Disconnected" enum="ProcessType"> +<histogram name="ChildProcess.Disconnected" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 3/2013. Renamed to ChildProcess.Disconnected2. </obsolete> @@ -15250,7 +15418,8 @@ </summary> </histogram> -<histogram name="ChildProcess.DisconnectedAlive" enum="ProcessType"> +<histogram name="ChildProcess.DisconnectedAlive" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 3/2013. Renamed to ChildProcess.DisconnectedAlive2. </obsolete> @@ -15290,7 +15459,8 @@ </summary> </histogram> -<histogram name="ChildProcess.HangRendererType" enum="RendererUnresponsiveType"> +<histogram name="ChildProcess.HangRendererType" enum="RendererUnresponsiveType" + expires_after="2017-03-09"> <obsolete> Deprecated 3/2017. </obsolete> @@ -15321,7 +15491,8 @@ </summary> </histogram> -<histogram name="ChildProcess.Killed" enum="ProcessType"> +<histogram name="ChildProcess.Killed" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 3/2013. Renamed to ChildProcess.Killed2. </obsolete> @@ -15349,7 +15520,8 @@ </summary> </histogram> -<histogram name="ChildProcess.KilledWasAlive" enum="ProcessType"> +<histogram name="ChildProcess.KilledWasAlive" enum="ProcessType" + expires_after="2015-10-29"> <obsolete> Deprecated as of 10/2015. </obsolete> @@ -15360,7 +15532,8 @@ </summary> </histogram> -<histogram name="ChildProcess.Kills" enum="ProcessType"> +<histogram name="ChildProcess.Kills" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 10/2011. Renamed to ChildProcess.Killed. </obsolete> @@ -15368,7 +15541,8 @@ <summary>Count of child process kills grouped by process type.</summary> </histogram> -<histogram name="ChildProcess.KillsWasAlive" enum="ProcessType"> +<histogram name="ChildProcess.KillsWasAlive" enum="ProcessType" + expires_after="2014-05-15"> <obsolete> Deprecated 10/2011. Renamed to ChildProcess.KilledWasAlive. </obsolete> @@ -15389,7 +15563,8 @@ </summary> </histogram> -<histogram name="Chrome.Android.Activity.CrashCounts" enum="AndroidActivityId"> +<histogram name="Chrome.Android.Activity.CrashCounts" enum="AndroidActivityId" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15401,7 +15576,8 @@ </summary> </histogram> -<histogram name="Chrome.Android.Activity.LaunchCounts" enum="AndroidActivityId"> +<histogram name="Chrome.Android.Activity.LaunchCounts" enum="AndroidActivityId" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15413,7 +15589,8 @@ </summary> </histogram> -<histogram name="Chrome.Browser.CrashedExecutionPhase" enum="ExecutionPhase"> +<histogram name="Chrome.Browser.CrashedExecutionPhase" enum="ExecutionPhase" + expires_after="2018-12-05"> <obsolete> Removed 12/2019. </obsolete> @@ -15423,7 +15600,8 @@ </summary> </histogram> -<histogram name="Chrome.Browser.ExecutionPhase" enum="ExecutionPhase"> +<histogram name="Chrome.Browser.ExecutionPhase" enum="ExecutionPhase" + expires_after="2013-11-14"> <obsolete> Deprecated as of 11/2013. </obsolete> @@ -15434,7 +15612,7 @@ </summary> </histogram> -<histogram name="Chrome.BrowserCrashDumpAttempts"> +<histogram name="Chrome.BrowserCrashDumpAttempts" expires_after="2015-03-31"> <obsolete> Deprecated as of 04/2015. </obsolete> @@ -15446,7 +15624,7 @@ </summary> </histogram> -<histogram name="Chrome.BrowserDumpsWithCrash"> +<histogram name="Chrome.BrowserDumpsWithCrash" expires_after="2015-03-31"> <obsolete> Deprecated as of 04/2015. </obsolete> @@ -15457,7 +15635,7 @@ </summary> </histogram> -<histogram name="Chrome.BrowserDumpsWithNoCrash"> +<histogram name="Chrome.BrowserDumpsWithNoCrash" expires_after="2015-03-31"> <obsolete> Deprecated as of 04/2015. </obsolete> @@ -15486,7 +15664,7 @@ </histogram> <histogram name="Chrome.ProcessSingleton.ProcessTerminateErrorCode.Windows" - enum="WinGetLastError"> + enum="WinGetLastError" expires_after="2017-12-01"> <obsolete> Deprecated as of 12/2017. </obsolete> @@ -15584,7 +15762,8 @@ </summary> </histogram> -<histogram name="Chrome.SearchSelectExempt" enum="SearchEngine"> +<histogram name="Chrome.SearchSelectExempt" enum="SearchEngine" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -15595,7 +15774,8 @@ </summary> </histogram> -<histogram name="Chrome.SearchSelectExperiment" enum="SearchEngine"> +<histogram name="Chrome.SearchSelectExperiment" enum="SearchEngine" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -15606,7 +15786,8 @@ </summary> </histogram> -<histogram name="Chrome.SearchSelectExperimentSlot1" enum="SearchEngine"> +<histogram name="Chrome.SearchSelectExperimentSlot1" enum="SearchEngine" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -15617,7 +15798,8 @@ </summary> </histogram> -<histogram name="Chrome.SearchSelectExperimentSlot2" enum="SearchEngine"> +<histogram name="Chrome.SearchSelectExperimentSlot2" enum="SearchEngine" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -15628,7 +15810,8 @@ </summary> </histogram> -<histogram name="Chrome.SearchSelectExperimentSlot3" enum="SearchEngine"> +<histogram name="Chrome.SearchSelectExperimentSlot3" enum="SearchEngine" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -15639,7 +15822,8 @@ </summary> </histogram> -<histogram name="Chrome.SearchSelectExperimentSlot4" enum="SearchEngine"> +<histogram name="Chrome.SearchSelectExperimentSlot4" enum="SearchEngine" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -15650,7 +15834,8 @@ </summary> </histogram> -<histogram name="Chrome.UmaPageloadCounter" enum="BooleanHit"> +<histogram name="Chrome.UmaPageloadCounter" enum="BooleanHit" + expires_after="2017-06-06"> <obsolete> Deprecated 6/2017. No longer tracked. </obsolete> @@ -15685,7 +15870,7 @@ </histogram> <histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime" - units="ms"> + units="ms" expires_after="2016-10-13"> <obsolete> Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*. </obsolete> @@ -15698,7 +15883,7 @@ </histogram> <histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2" - units="ms"> + units="ms" expires_after="2017-09-04"> <obsolete> Deprecated 2017-08 in favor of ChromeGeneratedCustomTab.IntentToFirstNavigationStartTime. @@ -15733,7 +15918,7 @@ </histogram> <histogram name="ChromeNotifierService.Actions" - enum="ChromeNotifierServiceActionType"> + enum="ChromeNotifierServiceActionType" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -15820,7 +16005,7 @@ </histogram> <histogram name="ChromeOS.DetachableBase.PairResult" - enum="DetachableBasePairResult"> + enum="DetachableBasePairResult" expires_after="2017-10-20"> <obsolete> Deprecated 10/2017 and replaced by Platform.DetachableBase.PairResult. </obsolete> @@ -15829,7 +16014,7 @@ </histogram> <histogram name="ChromeOS.DetachableBase.ROUpdateMetric" - enum="DetachableBaseROUpdateResult"> + enum="DetachableBaseROUpdateResult" expires_after="2017-10-20"> <obsolete> Deprecated 10/2017 and replaced by Platform.DetachableBase.ROUpdateMetric. </obsolete> @@ -15838,7 +16023,7 @@ </histogram> <histogram name="ChromeOS.DetachableBase.RWUpdateMetric" - enum="DetachableBaseRWUpdateResult"> + enum="DetachableBaseRWUpdateResult" expires_after="2017-10-20"> <obsolete> Deprecated 10/2017 and replaced by Platform.DetachableBase.RWUpdateMetric. </obsolete> @@ -15846,7 +16031,8 @@ <summary>Result of a Chrome OS detachable base RW firmware update.</summary> </histogram> -<histogram name="ChromeOS.Display.ColorProfile" enum="ChromeOSColorProfile"> +<histogram name="ChromeOS.Display.ColorProfile" enum="ChromeOSColorProfile" + expires_after="2017-08-19"> <obsolete> Deprecated 8/2017. </obsolete> @@ -16040,7 +16226,8 @@ </summary> </histogram> -<histogram name="ChromiumAndroidLinker.IsLowMemoryDevice" enum="Boolean"> +<histogram name="ChromiumAndroidLinker.IsLowMemoryDevice" enum="Boolean" + expires_after="2014-10-13"> <obsolete> Deprecated 10/2014 in Issue 419010, and replaced by ChromiumAndroidLinker.BrowserStates. @@ -16060,7 +16247,7 @@ </histogram> <histogram name="ChromiumAndroidLinker.LoadedAtFixedAddressFailed" - enum="Boolean"> + enum="Boolean" expires_after="2014-10-13"> <obsolete> Deprecated 10/2014 in Issue 419010, and replaced by ChromiumAndroidLinker.RendererStates. @@ -16295,7 +16482,8 @@ </summary> </histogram> -<histogram name="clickjacking.report_and_discard_download" units="ms"> +<histogram name="clickjacking.report_and_discard_download" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -16348,7 +16536,8 @@ </summary> </histogram> -<histogram name="Clipboard.ConstructedHasher" enum="BooleanSuccess"> +<histogram name="Clipboard.ConstructedHasher" enum="BooleanSuccess" + expires_after="2017-04-13"> <obsolete> Launched briefly in M-59 dev, then refactoring made obsolete. </obsolete> @@ -16360,7 +16549,8 @@ </summary> </histogram> -<histogram name="Clipboard.IncognitoUseCase" enum="ClipboardAction"> +<histogram name="Clipboard.IncognitoUseCase" enum="ClipboardAction" + expires_after="2013-04-08"> <obsolete> Deprecated as of 4/2013, experiment confirmed correctness of our patch. </obsolete> @@ -16397,7 +16587,8 @@ </summary> </histogram> -<histogram name="CloudPrint.CapsUpdateInterval" units="ms"> +<histogram name="CloudPrint.CapsUpdateInterval" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16459,7 +16650,8 @@ <summary>Event counts in ServiceProcessControl.</summary> </histogram> -<histogram name="CloudPrint.ServiceProcessSocketLength"> +<histogram name="CloudPrint.ServiceProcessSocketLength" + expires_after="2015-12-01"> <obsolete> Removed 12/2015. http://crbug.com/466644 </obsolete> @@ -16469,7 +16661,8 @@ </summary> </histogram> -<histogram name="CloudPrint.ServiceUtilityCapsFailTime" units="ms"> +<histogram name="CloudPrint.ServiceUtilityCapsFailTime" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16479,7 +16672,8 @@ </summary> </histogram> -<histogram name="CloudPrint.ServiceUtilityCapsTime" units="ms"> +<histogram name="CloudPrint.ServiceUtilityCapsTime" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16487,7 +16681,8 @@ <summary>The amount of time used to collect printer capabilities.</summary> </histogram> -<histogram name="CloudPrint.ServiceUtilityDisconnectTime" units="ms"> +<histogram name="CloudPrint.ServiceUtilityDisconnectTime" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16497,7 +16692,8 @@ </summary> </histogram> -<histogram name="CloudPrint.ServiceUtilityMetafileFailTime" units="ms"> +<histogram name="CloudPrint.ServiceUtilityMetafileFailTime" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16505,7 +16701,8 @@ <summary>The amount of time used to fail to generate metafile.</summary> </histogram> -<histogram name="CloudPrint.ServiceUtilityMetafileTime" units="ms"> +<histogram name="CloudPrint.ServiceUtilityMetafileTime" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16519,7 +16716,8 @@ <summary>Event counts in ServiceUtilityProcessHost.</summary> </histogram> -<histogram name="CloudPrint.ServiceUtilitySemanticCapsFailTime" units="ms"> +<histogram name="CloudPrint.ServiceUtilitySemanticCapsFailTime" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16529,7 +16727,8 @@ </summary> </histogram> -<histogram name="CloudPrint.ServiceUtilitySemanticCapsTime" units="ms"> +<histogram name="CloudPrint.ServiceUtilitySemanticCapsTime" units="ms" + expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16578,7 +16777,7 @@ <summary>Number of tries before successful ping. 99 means giving up.</summary> </histogram> -<histogram name="CloudPrint.XmppTimeout" units="ms"> +<histogram name="CloudPrint.XmppTimeout" units="ms" expires_after="2017-02-23"> <obsolete> Removed 02/2017. http://crbug.com/643570 </obsolete> @@ -16682,7 +16881,7 @@ </histogram> <histogram name="Compositing.Browser.DisplayListRecordingSource.UpdateUs" - units="microseconds"> + units="microseconds" expires_after="2016-05-10"> <obsolete> Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate metric. @@ -16694,7 +16893,8 @@ </summary> </histogram> -<histogram name="Compositing.Browser.DrawResult" enum="DrawResult"> +<histogram name="Compositing.Browser.DrawResult" enum="DrawResult" + expires_after="2018-10-17"> <obsolete> Deprecated 10/2018. This metric didn't end up being useful. </obsolete> @@ -16827,7 +17027,7 @@ </histogram> <histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs" - units="pixels/ms"> + units="pixels/ms" expires_after="2016-11-29"> <obsolete> Deprecated 11/2016. Increased the max tracking range to accomendate GPU raster, and will require new baskets. @@ -16911,7 +17111,8 @@ </summary> </histogram> -<histogram name="Compositing.CopyFromSurfaceTimeSynchronous" units="ms"> +<histogram name="Compositing.CopyFromSurfaceTimeSynchronous" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -16966,7 +17167,7 @@ </histogram> <histogram name="Compositing.Display.Draw.Occlusion.Drawing.Area.Saved" - units="px"> + units="px" expires_after="2018-02-28"> <obsolete> Deprecated 02/2018, replaced by similar metric Compositing.Display.Draw.Occlusion.Drawing.Area.Saved2. @@ -17009,7 +17210,7 @@ </histogram> <histogram name="Compositing.Display.Draw.Quads.With.Complex.Transform.Area" - units="px"> + units="px" expires_after="2018-03-18"> <obsolete> Deprecated 03/2018. We'd learned enough from this metric and it made no sense to keep it around. @@ -17036,7 +17237,7 @@ </histogram> <histogram name="Compositing.DisplayListRecordingSource.UpdateUs" - units="microseconds"> + units="microseconds" expires_after="2015-09-04"> <obsolete> Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer and Compositing.Browser, depending on which process it occurs in. @@ -17049,7 +17250,7 @@ </histogram> <histogram name="Compositing.LayerTreeImpl.FindClosestMatchingLayerUs" - units="microseconds"> + units="microseconds" expires_after="2017-05-26"> <obsolete> Deprecated 05/2017 in Issue 710306. Histogram was used temporarily for tracking a potential performance regression. @@ -17070,7 +17271,7 @@ </summary> </histogram> -<histogram name="Compositing.NumActiveLayers"> +<histogram name="Compositing.NumActiveLayers" expires_after="2016-04-20"> <obsolete> Deprecated 04/2016, replaced by similar metrics under Compositing.Renderer and Compositing.Browser, depending on which process it occurs in. @@ -17082,7 +17283,8 @@ </summary> </histogram> -<histogram name="Compositing.PictureMemoryUsageKb" units="KB"> +<histogram name="Compositing.PictureMemoryUsageKb" units="KB" + expires_after="2015-09-04"> <obsolete> Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer and Compositing.Browser, depending on which process it occurs in. @@ -17095,7 +17297,7 @@ </histogram> <histogram name="Compositing.PicturePile.UpdateInvalidatedAreaPerMs" - units="pixels/ms"> + units="pixels/ms" expires_after="2015-09-04"> <obsolete> Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer and Compositing.Browser, depending on which process it occurs in. @@ -17107,7 +17309,8 @@ </summary> </histogram> -<histogram name="Compositing.PicturePile.UpdateUs" units="microseconds"> +<histogram name="Compositing.PicturePile.UpdateUs" units="microseconds" + expires_after="2015-09-04"> <obsolete> Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer and Compositing.Browser, depending on which process it occurs in. @@ -17119,7 +17322,8 @@ </summary> </histogram> -<histogram name="Compositing.RasterTask.RasterPixelsPerMs" units="pixels/ms"> +<histogram name="Compositing.RasterTask.RasterPixelsPerMs" units="pixels/ms" + expires_after="2015-09-04"> <obsolete> Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer and Compositing.Browser, depending on which process it occurs in. @@ -17131,7 +17335,8 @@ </summary> </histogram> -<histogram name="Compositing.RasterTask.RasterUs" units="microseconds"> +<histogram name="Compositing.RasterTask.RasterUs" units="microseconds" + expires_after="2015-09-04"> <obsolete> Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer and Compositing.Browser, depending on which process it occurs in. @@ -17198,7 +17403,7 @@ </histogram> <histogram name="Compositing.Renderer.DisplayListRecordingSource.UpdateUs" - units="microseconds"> + units="microseconds" expires_after="2016-05-10"> <obsolete> Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate metric. @@ -17210,7 +17415,8 @@ </summary> </histogram> -<histogram name="Compositing.Renderer.DrawResult" enum="DrawResult"> +<histogram name="Compositing.Renderer.DrawResult" enum="DrawResult" + expires_after="2018-10-17"> <obsolete> Deprecated 10/2018. This metric didn't end up being useful. </obsolete> @@ -17341,7 +17547,7 @@ </histogram> <histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs" - units="pixels/ms"> + units="pixels/ms" expires_after="2016-11-29"> <obsolete> Deprecated 11/2016. Increased the max tracking range to accomendate GPU raster, and will require new baskets. @@ -17531,7 +17737,7 @@ </histogram> <histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.MissingSurface" - units="quads"> + units="quads" expires_after="2018-07-25"> <obsolete> Deprecated 07/2018 in issue 865597 in order to avoid spurious error messages on Viz process crash. @@ -17544,7 +17750,7 @@ </histogram> <histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.NoActiveFrame" - units="quads"> + units="quads" expires_after="2018-07-25"> <obsolete> Deprecated 07/2018 in issue 865597 in order to avoid spurious error messages on Viz process crash. @@ -17571,7 +17777,7 @@ </histogram> <histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.ValidSurface" - units="quads"> + units="quads" expires_after="2018-10-16"> <obsolete> Deprecated 10/2018. This metric didn't end up being useful. </obsolete> @@ -17583,7 +17789,7 @@ </histogram> <histogram name="Compositing.SurfaceDependencyDeadline.DeadlineHit" - units="Boolean"> + units="Boolean" expires_after="2018-10-17"> <obsolete> Deprecated as of 10/2018. This metric didn't end up being useful. </obsolete> @@ -17603,7 +17809,8 @@ </summary> </histogram> -<histogram name="Compositing.SurfaceInvariantsViolations" units="violations"> +<histogram name="Compositing.SurfaceInvariantsViolations" units="violations" + expires_after="2018-09-11"> <obsolete> Deprecated as of 2018/09/10 in favor of Compositing.CompositorFrameSinkSupport.SubmitResult. @@ -17625,7 +17832,8 @@ </summary> </histogram> -<histogram name="Compositing.SurfaceManager.NumOldTemporaryReferences"> +<histogram name="Compositing.SurfaceManager.NumOldTemporaryReferences" + expires_after="2018-01-29"> <obsolete> Deprecated 2018/01/24. </obsolete> @@ -17880,7 +18088,8 @@ <summary>The default cookies setting at profile open.</summary> </histogram> -<histogram name="ContentSettings.DefaultHandlersSetting" enum="ContentSetting"> +<histogram name="ContentSettings.DefaultHandlersSetting" enum="ContentSetting" + expires_after="2014-07-07"> <obsolete> Deprecated 07/2014 since it is not referenced anywhere in the code. </obsolete> @@ -17899,7 +18108,8 @@ <summary>The default JavaScript setting at profile open.</summary> </histogram> -<histogram name="ContentSettings.DefaultKeygenSetting" enum="ContentSetting"> +<histogram name="ContentSettings.DefaultKeygenSetting" enum="ContentSetting" + expires_after="2016-12-21"> <obsolete> Support for keygen was removed. </obsolete> @@ -17927,7 +18137,7 @@ </histogram> <histogram name="ContentSettings.DefaultMediaStreamSetting" - enum="ContentSetting"> + enum="ContentSetting" expires_after="2015-09-24"> <obsolete> This setting was deprecated in r322364 and replaced with separate settings for camera and microphone. See @@ -18095,7 +18305,8 @@ </summary> </histogram> -<histogram name="ContentSettings.LastSettingParsed" enum="LastSettingParsed"> +<histogram name="ContentSettings.LastSettingParsed" enum="LastSettingParsed" + expires_after="2015-10-05"> <obsolete> Deprecated 2015-10-05 in Issue 433475. Histogram was used temorarily for diagnosing crash causes. @@ -18116,7 +18327,8 @@ </summary> </histogram> -<histogram name="ContentSettings.NumberOfAllowCookiesExceptions"> +<histogram name="ContentSettings.NumberOfAllowCookiesExceptions" + expires_after="2018-10-22"> <obsolete> Deprecated Oct 2018 in favor of ContentSettings.Exceptions.cookies.Allow </obsolete> @@ -18127,7 +18339,8 @@ </summary> </histogram> -<histogram name="ContentSettings.NumberOfBlockCookiesExceptions"> +<histogram name="ContentSettings.NumberOfBlockCookiesExceptions" + expires_after="2018-10-22"> <obsolete> Deprecated Oct 2018 in favor of ContentSettings.Exceptions.cookies.Block </obsolete> @@ -18146,7 +18359,8 @@ </summary> </histogram> -<histogram name="ContentSettings.NumberOfSessionOnlyCookiesExceptions"> +<histogram name="ContentSettings.NumberOfSessionOnlyCookiesExceptions" + expires_after="2018-10-22"> <obsolete> Deprecated Oct 2018 in favor of ContentSettings.Exceptions.cookies.SessionOnly @@ -18158,7 +18372,8 @@ </summary> </histogram> -<histogram name="ContentSettings.PermissionActions" enum="PermissionAction"> +<histogram name="ContentSettings.PermissionActions" enum="PermissionAction" + expires_after="2015-11-22"> <obsolete> Removed 11/2015 in favor of Permissions.Action.* </obsolete> @@ -18170,7 +18385,7 @@ </histogram> <histogram name="ContentSettings.PermissionActionsInsecureOrigin" - enum="PermissionAction"> + enum="PermissionAction" expires_after="2015-11-22"> <obsolete> Removed 11/2015 in favor of Permissions.Action.InsecureOrigin.* </obsolete> @@ -18182,7 +18397,7 @@ </histogram> <histogram name="ContentSettings.PermissionActionsSecureOrigin" - enum="PermissionAction"> + enum="PermissionAction" expires_after="2015-11-22"> <obsolete> Removed 11/2015 in favor of Permissions.Action.SecureOrigin.* </obsolete> @@ -18320,7 +18535,8 @@ </summary> </histogram> -<histogram name="ContentSettings.Popups.FirstDocumentEngagementTime" units="ms"> +<histogram name="ContentSettings.Popups.FirstDocumentEngagementTime" units="ms" + expires_after="2017-10-02"> <obsolete> Deprecated in favor of ContentSettings.Popups.FirstDocumentEngagementTime2. </obsolete> @@ -18480,7 +18696,7 @@ </histogram> <histogram name="ContentSuggestions.Feed.Image.FetchResult" - enum="FeedImageFetchResult"> + enum="FeedImageFetchResult" expires_after="2019-02-13"> <obsolete> Deprecated in favor of CachedImageFetcher.Events. </obsolete> @@ -18491,7 +18707,8 @@ </summary> </histogram> -<histogram name="ContentSuggestions.Feed.Image.LoadFromCacheTime" units="ms"> +<histogram name="ContentSuggestions.Feed.Image.LoadFromCacheTime" units="ms" + expires_after="2019-02-13"> <obsolete> Deprecated in favor of CachedImageFetcher.Events. </obsolete> @@ -18501,7 +18718,8 @@ </summary> </histogram> -<histogram name="ContentSuggestions.Feed.Image.LoadFromNetworkTime" units="ms"> +<histogram name="ContentSuggestions.Feed.Image.LoadFromNetworkTime" units="ms" + expires_after="2019-02-13"> <obsolete> Deprecated in favor of CachedImageFetcher.Events. </obsolete> @@ -18636,7 +18854,7 @@ </histogram> <histogram name="ContentSuggestions.Feed.NetworkRequestStatusCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2018-10-17"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.Network.RequestStatusCode. </obsolete> @@ -18704,7 +18922,8 @@ </summary> </histogram> -<histogram name="ContentSuggestions.Feed.RequestSizeKB.Compressed" units="KB"> +<histogram name="ContentSuggestions.Feed.RequestSizeKB.Compressed" units="KB" + expires_after="2018-10-17"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.Network.RequestSizeKB.Compressed. @@ -18716,7 +18935,8 @@ </summary> </histogram> -<histogram name="ContentSuggestions.Feed.ResponseSizeKB" units="KB"> +<histogram name="ContentSuggestions.Feed.ResponseSizeKB" units="KB" + expires_after="2018-10-17"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.Network.ResponseSizeKB. </obsolete> @@ -18862,7 +19082,7 @@ </histogram> <histogram name="ContentSuggestions.Feed.TokenFetchStatus" - enum="GoogleServiceAuthError"> + enum="GoogleServiceAuthError" expires_after="2018-10-17"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.Network.TokenFetchStatus. </obsolete> @@ -18904,7 +19124,7 @@ </histogram> <histogram name="ContentSuggestions.FetchPendingPlaceholder.VisibleDuration" - units="ms"> + units="ms" expires_after="2017-10-12"> <obsolete> Deprecated in favor of ContentSuggestions.FetchPendingSpinner.VisibleDuration. @@ -18920,7 +19140,7 @@ </histogram> <histogram name="ContentSuggestions.FetchPendingSpinner.VisibleDuration" - units="ms"> + units="ms" expires_after="2019-01-16"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.FetchPendingSpinner.VisibleDuration. @@ -19123,7 +19343,8 @@ </summary> </histogram> -<histogram name="ContextualSuggestions.FetchResponseSizeKB" units="KB"> +<histogram name="ContextualSuggestions.FetchResponseSizeKB" units="KB" + expires_after="2018-06-04"> <obsolete> Removed 2018-06-01 in favor of a histogram that measures bytes received over the network directly instead of the uncompressed KB. @@ -19233,7 +19454,8 @@ </summary> </histogram> -<histogram name="Cookie.BetweenAccessIntervalMinutes" units="minutes"> +<histogram name="Cookie.BetweenAccessIntervalMinutes" units="minutes" + expires_after="2015-08-21"> <obsolete> Deprecated 2015-08-17 as part of cookie histogram cleanup (https://crbug.com/521135). @@ -19261,7 +19483,8 @@ </summary> </histogram> -<histogram name="Cookie.CookieLineCookieValueValidity" enum="BooleanValid"> +<histogram name="Cookie.CookieLineCookieValueValidity" enum="BooleanValid" + expires_after="2017-07-14"> <obsolete> Removed 2017-07-14 as it demonstrated that making cookie parsing rules stricter was not feasible. See https://crbug.com/638117. @@ -19345,7 +19568,7 @@ </summary> </histogram> -<histogram name="Cookie.DomainCount"> +<histogram name="Cookie.DomainCount" expires_after="2015-08-21"> <obsolete> Deprecated 2015-08-17 as part of cookie histogram cleanup (https://crbug.com/521135). @@ -19357,7 +19580,7 @@ </summary> </histogram> -<histogram name="Cookie.DomainPerEtldp1Count"> +<histogram name="Cookie.DomainPerEtldp1Count" expires_after="2015-08-21"> <obsolete> Deprecated 2015-08-17 as part of cookie histogram cleanup (https://crbug.com/521135). @@ -19369,7 +19592,7 @@ </summary> </histogram> -<histogram name="Cookie.Etldp1Count"> +<histogram name="Cookie.Etldp1Count" expires_after="2015-08-21"> <obsolete> Deprecated 2015-08-17 as part of cookie histogram cleanup (https://crbug.com/521135). @@ -19394,7 +19617,8 @@ <summary>Number of minutes until cookie expires when set.</summary> </histogram> -<histogram name="Cookie.GetCookieListCompletionTime" units="ms"> +<histogram name="Cookie.GetCookieListCompletionTime" units="ms" + expires_after="2019-02-20"> <obsolete> Deprecated Feb 2019 as further data collection is no longer necessary. </obsolete> @@ -19447,7 +19671,8 @@ </summary> </histogram> -<histogram name="Cookie.ParsedCookieStatus" enum="ParsedCookieStatus"> +<histogram name="Cookie.ParsedCookieStatus" enum="ParsedCookieStatus" + expires_after="2013-09-21"> <obsolete> Deprecated as of 9/2013. Experiment to measure control characters in cookies is finished. @@ -19483,7 +19708,8 @@ </summary> </histogram> -<histogram name="Cookie.ReinstatedCookies" units="seconds"> +<histogram name="Cookie.ReinstatedCookies" units="seconds" + expires_after="2015-08-20"> <obsolete> Deprecated as of 8/2015. </obsolete> @@ -19494,7 +19720,8 @@ </summary> </histogram> -<histogram name="Cookie.SetAttributePairCharsValidity" enum="BooleanValid"> +<histogram name="Cookie.SetAttributePairCharsValidity" enum="BooleanValid" + expires_after="2013-09-21"> <obsolete> Deprecated as of 9/2013. Experiment to measure control characters in cookies is finished. @@ -19511,7 +19738,8 @@ </summary> </histogram> -<histogram name="Cookie.SetNameValidity" enum="BooleanValid"> +<histogram name="Cookie.SetNameValidity" enum="BooleanValid" + expires_after="2013-09-21"> <obsolete> Deprecated as of 9/2013. Experiment to measure control characters in cookies is finished. @@ -19526,7 +19754,8 @@ </summary> </histogram> -<histogram name="Cookie.SetValueCookieValueValidity" enum="BooleanValid"> +<histogram name="Cookie.SetValueCookieValueValidity" enum="BooleanValid" + expires_after="2013-09-21"> <obsolete> Deprecated as of 9/2013. Experiment to measure control characters in cookies is finished. @@ -19539,7 +19768,8 @@ </summary> </histogram> -<histogram name="Cookie.Shutdown.NumberOfCookiesDeleted"> +<histogram name="Cookie.Shutdown.NumberOfCookiesDeleted" + expires_after="2015-09-10"> <obsolete> Deprecated as of 9/2015. The associated experiment was flawed. </obsolete> @@ -19550,7 +19780,8 @@ </summary> </histogram> -<histogram name="Cookie.Shutdown.TimeSpentDeletingCookies" units="ms"> +<histogram name="Cookie.Shutdown.TimeSpentDeletingCookies" units="ms" + expires_after="2015-09-10"> <obsolete> Deprecated as of 9/2015. The associated experiment was flawed. </obsolete> @@ -19595,28 +19826,32 @@ </summary> </histogram> -<histogram name="Cookie.TimeDatabaseMigrationToV5" units="ms"> +<histogram name="Cookie.TimeDatabaseMigrationToV5" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated as of 04/2015. The migration has finished for most users. </obsolete> <summary>The amount of time (ms) to migrate a v4 database to v5.</summary> </histogram> -<histogram name="Cookie.TimeDatabaseMigrationToV6" units="ms"> +<histogram name="Cookie.TimeDatabaseMigrationToV6" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated as of 04/2015. The migration has finished for most users. </obsolete> <summary>The amount of time (ms) to migrate a v5 database to v6.</summary> </histogram> -<histogram name="Cookie.TimeDatabaseMigrationToV7" units="ms"> +<histogram name="Cookie.TimeDatabaseMigrationToV7" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated as of 04/2015. The migration has finished for most users. </obsolete> <summary>The amount of time (ms) to migrate a v6 database to v7.</summary> </histogram> -<histogram name="Cookie.TimeDatabaseMigrationToV8" units="ms"> +<histogram name="Cookie.TimeDatabaseMigrationToV8" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated as of 04/2015. The migration has finished for most users. </obsolete> @@ -19629,7 +19864,7 @@ <summary>The amount of time (ms) to migrate a v8 database to v9.</summary> </histogram> -<histogram name="Cookie.TimeGet" units="ms"> +<histogram name="Cookie.TimeGet" units="ms" expires_after="2014-11-20"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -19962,7 +20197,8 @@ <summary>Handler start/crash/exit events.</summary> </histogram> -<histogram name="CrashReport.BreakpadCrashDumpOutcome" enum="DumpOutcome"> +<histogram name="CrashReport.BreakpadCrashDumpOutcome" enum="DumpOutcome" + expires_after="2016-04-27"> <obsolete> Deprecated as of 04/2016 as CrashPad does not implement this. </obsolete> @@ -19977,7 +20213,7 @@ </histogram> <histogram name="CrashReport.BreakpadDumpWithoutCrashOutcome" - enum="DumpOutcome"> + enum="DumpOutcome" expires_after="2016-04-27"> <obsolete> Deprecated as of 04/2016 as CrashPad does not implement this. </obsolete> @@ -19991,7 +20227,8 @@ </summary> </histogram> -<histogram name="CrashReport.CrashBackgroundUploadDelay" units="ms"> +<histogram name="CrashReport.CrashBackgroundUploadDelay" units="ms" + expires_after="2018-11-05"> <obsolete> Deprecated as of 03/2018 when Chrome for iOS stopped uploading crash dumps in the background. @@ -20004,7 +20241,8 @@ </summary> </histogram> -<histogram name="CrashReport.PendingReportsOnBackgroundWakeUp"> +<histogram name="CrashReport.PendingReportsOnBackgroundWakeUp" + expires_after="2018-11-05"> <obsolete> Deprecated as of 03/2018 when Chrome for iOS stopped uploading crash dumps in the background. @@ -20017,7 +20255,8 @@ </summary> </histogram> -<histogram name="CrashReport.PermanentUploadFailure" enum="BooleanHit"> +<histogram name="CrashReport.PermanentUploadFailure" enum="BooleanHit" + expires_after="2017-02-01"> <obsolete> Deprecated 01/2017 in Issue 680162 with the removal of Kasko. </obsolete> @@ -20031,7 +20270,8 @@ </summary> </histogram> -<histogram name="Cros.ClickOnShelf" enum="CrosShelfClickTarget"> +<histogram name="Cros.ClickOnShelf" enum="CrosShelfClickTarget" + expires_after="2013-12-13"> <obsolete> Deprecated as of 12/2013. Default pinned apps trial is finished. </obsolete> @@ -20578,7 +20818,8 @@ <summary>Cryptohome errors.</summary> </histogram> -<histogram name="Cryptohome.FreedGCacheDiskSpaceInMb" units="MB"> +<histogram name="Cryptohome.FreedGCacheDiskSpaceInMb" units="MB" + expires_after="2018-05-01"> <obsolete> Deprecated 05/2018 in favor of Cryptohome.GCache.FreedDiskSpaceInMb. Reports zero in 99% of hits. @@ -20971,7 +21212,8 @@ </summary> </histogram> -<histogram name="CustomTabs.IntentToFirstCommitNavigationTime" units="ms"> +<histogram name="CustomTabs.IntentToFirstCommitNavigationTime" units="ms" + expires_after="2016-10-13"> <obsolete> Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*. </obsolete> @@ -20983,7 +21225,8 @@ </summary> </histogram> -<histogram name="CustomTabs.IntentToFirstCommitNavigationTime2" units="ms"> +<histogram name="CustomTabs.IntentToFirstCommitNavigationTime2" units="ms" + expires_after="2017-09-04"> <obsolete> Deprecated 2017-08 in favor of CustomTabs.IntentToFirstNavigationStartTime. </obsolete> @@ -21035,7 +21278,7 @@ </histogram> <histogram name="CustomTabs.NonDefaultSessionPrerenderMatched" - enum="BooleanMatched"> + enum="BooleanMatched" expires_after="2018-04-12"> <obsolete> Deprecated 4/2018 when prerender was removed from Custom Tabs. </obsolete> @@ -21073,7 +21316,7 @@ </histogram> <histogram name="CustomTabs.PrerenderSessionUsesDefaultParameters" - enum="BooleanDefault"> + enum="BooleanDefault" expires_after="2018-04-12"> <obsolete> Deprecated 4/2018 when prerender was removed from Custom Tabs. </obsolete> @@ -21177,7 +21420,7 @@ </histogram> <histogram name="DataReductionProxy.AutoLoFiAccuracy" - enum="DataReductionProxyAutoLoFiAccuracy"> + enum="DataReductionProxyAutoLoFiAccuracy" expires_after="2016-04-19"> <obsolete> Replaced by DataReductionProxy.LoFi.Accuracy. </obsolete> @@ -21191,7 +21434,8 @@ </histogram> <histogram name="DataReductionProxy.AutoLoFiRequestHeaderState" - enum="DataReductionProxyAutoLoFiRequestHeaderState"> + enum="DataReductionProxyAutoLoFiRequestHeaderState" + expires_after="2017-08-24"> <obsolete> Deprecated as of 8/2017, per server-directed preview decision. </obsolete> @@ -21245,7 +21489,8 @@ </histogram> <histogram name="DataReductionProxy.BypassInfoFallback" - enum="DataReductionProxyBypassEventType_Deprecated"> + enum="DataReductionProxyBypassEventType_Deprecated" + expires_after="2014-07-01"> <obsolete> Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypeFallback. </obsolete> @@ -21258,7 +21503,8 @@ </histogram> <histogram name="DataReductionProxy.BypassInfoPrimary" - enum="DataReductionProxyBypassEventType_Deprecated"> + enum="DataReductionProxyBypassEventType_Deprecated" + expires_after="2014-07-01"> <obsolete> Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypePrimary. </obsolete> @@ -21313,7 +21559,7 @@ </histogram> <histogram name="DataReductionProxy.CaptivePortalDetected.Platform" - enum="BooleanPresent"> + enum="BooleanPresent" expires_after="2018-04-18"> <obsolete> Deprecated 2018/04. </obsolete> @@ -21326,7 +21572,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.ConfigFetchLostBytesCL"> +<histogram name="DataReductionProxy.ConfigFetchLostBytesCL" + expires_after="2016-02-10"> <obsolete> Removed in Feb. 2016 </obsolete> @@ -21339,7 +21586,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.ConfigFetchLostBytesDiff"> +<histogram name="DataReductionProxy.ConfigFetchLostBytesDiff" + expires_after="2016-02-10"> <obsolete> Removed in Feb. 2016 </obsolete> @@ -21354,7 +21602,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.ConfigFetchLostBytesOCL"> +<histogram name="DataReductionProxy.ConfigFetchLostBytesOCL" + expires_after="2016-02-10"> <obsolete> Removed in Feb. 2016 </obsolete> @@ -21491,7 +21740,7 @@ </histogram> <histogram name="DataReductionProxy.ConfigService.PersistedConfigIsExpired" - enum="BooleanExpired"> + enum="BooleanExpired" expires_after="2018-04-18"> <obsolete> Deprecated 2018/04. </obsolete> @@ -21505,7 +21754,7 @@ </histogram> <histogram name="DataReductionProxy.ConfigService.SentVariationHeaders" - enum="BooleanSent"> + enum="BooleanSent" expires_after="2018-10-09"> <obsolete> Removed in October 2018 </obsolete> @@ -21568,7 +21817,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.HeaderTamperDetectionHTTP"> +<histogram name="DataReductionProxy.HeaderTamperDetectionHTTP" + expires_after="2017-07-06"> <obsolete> Removed in June 2017 </obsolete> @@ -21583,7 +21833,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS"> +<histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS" + expires_after="2017-07-06"> <obsolete> Removed in June 2017 </obsolete> @@ -21598,7 +21849,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP"> +<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP" + expires_after="2017-07-06"> <obsolete> Removed in June 2017 </obsolete> @@ -21613,7 +21865,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS"> +<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS" + expires_after="2017-07-06"> <obsolete> Removed in June 2017 </obsolete> @@ -21628,7 +21881,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.HeaderTamperedHTTP"> +<histogram name="DataReductionProxy.HeaderTamperedHTTP" + expires_after="2017-07-06"> <obsolete> Removed in June 2017 </obsolete> @@ -21643,7 +21897,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.HeaderTamperedHTTPS"> +<histogram name="DataReductionProxy.HeaderTamperedHTTPS" + expires_after="2017-07-06"> <obsolete> Removed in June 2017 </obsolete> @@ -21718,7 +21973,7 @@ </histogram> <histogram name="DataReductionProxy.LoFi.Accuracy" - enum="DataReductionProxyAutoLoFiAccuracy"> + enum="DataReductionProxyAutoLoFiAccuracy" expires_after="2017-08-24"> <obsolete> Deprecated as of 8/2017, per server-directed preview decision. </obsolete> @@ -21734,7 +21989,8 @@ </histogram> <histogram name="DataReductionProxy.LoFi.ImplicitOptOutAction" - enum="DataReductionProxyLoFiImplicitOptOutAction"> + enum="DataReductionProxyLoFiImplicitOptOutAction" + expires_after="2017-10-16"> <obsolete> Obsolete as of October 2017. </obsolete> @@ -21751,7 +22007,7 @@ </histogram> <histogram name="DataReductionProxy.LoFi.SessionState" - enum="DataReductionProxyLoFiSessionState"> + enum="DataReductionProxyLoFiSessionState" expires_after="2017-10-16"> <obsolete> Deprecated as of October 2017 per transition to blacklist. </obsolete> @@ -21778,7 +22034,7 @@ </histogram> <histogram name="DataReductionProxy.LoFi.UIAction" - enum="DataReductionProxyLoFiUIAction"> + enum="DataReductionProxyLoFiUIAction" expires_after="2016-09-14"> <obsolete> Deprecated as of 9/2016, replaced by Previews.ContextMenuAction.LoFi. </obsolete> @@ -21795,7 +22051,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.MissingViaHeader.Bytes" units="bytes"> +<histogram name="DataReductionProxy.MissingViaHeader.Bytes" units="bytes" + expires_after="2018-04-17"> <obsolete> Removed 2018/04. </obsolete> @@ -21884,7 +22141,7 @@ </histogram> <histogram name="DataReductionProxy.PromoAction" - enum="DataReductionProxyPromoAction"> + enum="DataReductionProxyPromoAction" expires_after="2015-04-01"> <obsolete> Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction. </obsolete> @@ -21912,7 +22169,8 @@ </histogram> <histogram name="DataReductionProxy.Protocol.NotAcceptingTransform" - enum="DataReductionProxyProtocolNotAcceptingTransformReason"> + enum="DataReductionProxyProtocolNotAcceptingTransformReason" + expires_after="2018-10-03"> <obsolete> Obsolete as of 10/2018. </obsolete> @@ -21944,7 +22202,8 @@ </histogram> <histogram name="DataReductionProxy.Quic.DefaultAlternativeProxy" - enum="DataReductionProxyQuicDefaultAlternativeProxy"> + enum="DataReductionProxyQuicDefaultAlternativeProxy" + expires_after="2017-05-10"> <obsolete> Deprecated in 5/2017, since the experiment to use default QUIC alternative proxy was deprecated. @@ -21959,7 +22218,7 @@ </histogram> <histogram name="DataReductionProxy.Quic.OnAlternativeProxyBroken" - units="count"> + units="count" expires_after="2018-01-20"> <obsolete> As of M66 this has been superceded by Net.AlternativeProxyFailed. </obsolete> @@ -21980,7 +22239,7 @@ </histogram> <histogram name="DataReductionProxy.RequestCompletionErrorCodes" - enum="NetErrorCodes"> + enum="NetErrorCodes" expires_after="2016-03-11"> <obsolete> Deprecated in 2/2016, since it didn't get recorded for many kinds of error codes when it should have been recorded, and @@ -21996,7 +22255,7 @@ </histogram> <histogram name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame" - enum="NetErrorCodes"> + enum="NetErrorCodes" expires_after="2016-03-11"> <obsolete> Deprecated in 2/2016, since it didn't get recorded for many kinds of error codes when it should have been recorded, and @@ -22013,7 +22272,7 @@ </histogram> <histogram name="DataReductionProxy.ResourceContentType" - enum="DataReductionProxyResourceContentType"> + enum="DataReductionProxyResourceContentType" expires_after="2018-04-18"> <obsolete> Deprecated 2018/04. </obsolete> @@ -22038,7 +22297,7 @@ </histogram> <histogram name="DataReductionProxy.SavingsCleared.NegativeSystemClock" - enum="BooleanCleared"> + enum="BooleanCleared" expires_after="2018-04-25"> <obsolete> Replaced by DataReductionProxy.SavingsCleared.Reason in M68. </obsolete> @@ -22070,7 +22329,7 @@ </histogram> <histogram name="DataReductionProxy.SettingsConversion" - enum="DataReductionProxySettingsConversion"> + enum="DataReductionProxySettingsConversion" expires_after="2015-04-01"> <obsolete> Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction. </obsolete> @@ -22179,7 +22438,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.TimeToFirstDataSaverRequest" units="ms"> +<histogram name="DataReductionProxy.TimeToFirstDataSaverRequest" units="ms" + expires_after="2018-04-18"> <obsolete> Deprecated 2018/04. </obsolete> @@ -22258,7 +22518,8 @@ </summary> </histogram> -<histogram name="DataReductionProxy.UserViewedSavingsPercent" units="%"> +<histogram name="DataReductionProxy.UserViewedSavingsPercent" units="%" + expires_after="2018-08-06"> <obsolete> Deprecated March 2018. Percent no longer displayed. </obsolete> @@ -22362,7 +22623,8 @@ </summary> </histogram> -<histogram name="DataUsage.MatchingRulesCount.Invalid" units="count"> +<histogram name="DataUsage.MatchingRulesCount.Invalid" units="count" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22374,7 +22636,8 @@ </summary> </histogram> -<histogram name="DataUsage.MatchingRulesCount.Valid" units="count"> +<histogram name="DataUsage.MatchingRulesCount.Valid" units="count" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22386,7 +22649,8 @@ </summary> </histogram> -<histogram name="DataUsage.PageLoadSequence" units="Count"> +<histogram name="DataUsage.PageLoadSequence" units="Count" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22398,7 +22662,8 @@ </summary> </histogram> -<histogram name="DataUsage.Perf.MatchingRuleFirstFetchDuration" units="ms"> +<histogram name="DataUsage.Perf.MatchingRuleFirstFetchDuration" units="ms" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22413,7 +22678,8 @@ </summary> </histogram> -<histogram name="DataUsage.Perf.ReportSubmissionDuration" units="ms"> +<histogram name="DataUsage.Perf.ReportSubmissionDuration" units="ms" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22428,7 +22694,8 @@ </summary> </histogram> -<histogram name="DataUsage.Perf.URLRegexMatchDuration" units="ms"> +<histogram name="DataUsage.Perf.URLRegexMatchDuration" units="ms" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22440,7 +22707,8 @@ </summary> </histogram> -<histogram name="DataUsage.ReportSubmission.Bytes" units="bytes"> +<histogram name="DataUsage.ReportSubmission.Bytes" units="bytes" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22453,7 +22721,7 @@ </histogram> <histogram name="DataUsage.ReportSubmissionResult" - enum="DataUsageReportSubmissionResult"> + enum="DataUsageReportSubmissionResult" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22463,7 +22731,7 @@ </histogram> <histogram name="DataUsage.TabModel.ExpiredActiveTabEntryRemovalDuration" - units="ms"> + units="ms" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22484,7 +22752,7 @@ </histogram> <histogram name="DataUsage.TabModel.ExpiredInactiveTabEntryRemovalDuration" - units="ms"> + units="ms" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22504,7 +22772,7 @@ </histogram> <histogram name="DataUsage.TabModel.OldInactiveSessionRemovalDuration" - units="ms"> + units="ms" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22522,7 +22790,8 @@ </summary> </histogram> -<histogram name="DataUsage.TabModel.TrackingSessionLifetime" units="ms"> +<histogram name="DataUsage.TabModel.TrackingSessionLifetime" units="ms" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22537,7 +22806,7 @@ </histogram> <histogram name="DataUsage.TabModel.UnexpiredTabEntryRemovalDuration" - units="ms"> + units="ms" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22558,7 +22827,7 @@ </histogram> <histogram name="DataUsage.TrackingSessionEndReason" - enum="DataUsageTrackingSessionEndReason"> + enum="DataUsageTrackingSessionEndReason" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22571,7 +22840,7 @@ </histogram> <histogram name="DataUsage.TrackingSessionStartReason" - enum="DataUsageTrackingSessionStartReason"> + enum="DataUsageTrackingSessionStartReason" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22583,7 +22852,8 @@ </summary> </histogram> -<histogram name="DataUsage.UIAction" enum="DataUsageUIAction"> +<histogram name="DataUsage.UIAction" enum="DataUsageUIAction" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -22604,7 +22874,8 @@ </summary> </histogram> -<histogram name="DataUse.AllServices.Background" enum="DataUseServices"> +<histogram name="DataUse.AllServices.Background" enum="DataUseServices" + expires_after="2017-10-23"> <obsolete> Replaced by KB version in October, 2017. </obsolete> @@ -22617,7 +22888,8 @@ </summary> </histogram> -<histogram name="DataUse.AllServices.BackgroundKB" enum="DataUseServices"> +<histogram name="DataUse.AllServices.BackgroundKB" enum="DataUseServices" + expires_after="2018-06-30"> <obsolete> Replaced by DataUse.AllServicesKB.* version in June, 2018. </obsolete> @@ -22691,7 +22963,8 @@ </summary> </histogram> -<histogram name="DataUse.ContentType.Services" enum="DataUseContentType"> +<histogram name="DataUse.ContentType.Services" enum="DataUseContentType" + expires_after="2018-05-23"> <obsolete> Deprecated 2018/05. Bytes are logged to DataUse.ContentType.ServicesKB. </obsolete> @@ -22713,7 +22986,8 @@ </summary> </histogram> -<histogram name="DataUse.ContentType.UserTraffic" enum="DataUseContentType"> +<histogram name="DataUse.ContentType.UserTraffic" enum="DataUseContentType" + expires_after="2017-05-04"> <obsolete> Deprecated 2017/04. Bytes are logged to DataUse.ContentType.UserTrafficKB. </obsolete> @@ -22753,7 +23027,7 @@ </summary> </histogram> -<histogram name="DataUse.MessageSize" units="bytes"> +<histogram name="DataUse.MessageSize" units="bytes" expires_after="2018-02-28"> <obsolete> Deprecated 10/2017. </obsolete> @@ -22765,7 +23039,8 @@ </summary> </histogram> -<histogram name="DataUse.MessageSize.AllServices" enum="DataUseServices"> +<histogram name="DataUse.MessageSize.AllServices" enum="DataUseServices" + expires_after="2018-06-30"> <obsolete> Replaced by DataUse.AllServicesKB.* version in June, 2018. </obsolete> @@ -22782,7 +23057,7 @@ </histogram> <histogram name="DataUse.PageTransition.UserTraffic" - enum="DataUsePageTransition"> + enum="DataUsePageTransition" expires_after="2018-05-23"> <obsolete> Deprecated 2018/05. Bytes are logged to DataUse.PageTransition.UserTrafficKB. @@ -22805,7 +23080,8 @@ </summary> </histogram> -<histogram name="DataUse.Sync.Download.Bytes" enum="SyncModelTypes"> +<histogram name="DataUse.Sync.Download.Bytes" enum="SyncModelTypes" + expires_after="2017-10-31"> <obsolete> Deprecated 10/2017. </obsolete> @@ -22817,7 +23093,8 @@ </summary> </histogram> -<histogram name="DataUse.Sync.Download.Count" enum="SyncModelTypes"> +<histogram name="DataUse.Sync.Download.Count" enum="SyncModelTypes" + expires_after="2017-10-31"> <obsolete> Deprecated 10/2017. </obsolete> @@ -22829,7 +23106,8 @@ </summary> </histogram> -<histogram name="DataUse.Sync.ProgressMarker.Bytes" enum="SyncModelTypes"> +<histogram name="DataUse.Sync.ProgressMarker.Bytes" enum="SyncModelTypes" + expires_after="2017-10-31"> <obsolete> Deprecated 10/2017. </obsolete> @@ -22841,7 +23119,8 @@ </summary> </histogram> -<histogram name="DataUse.Sync.Upload.Bytes" enum="SyncModelTypes"> +<histogram name="DataUse.Sync.Upload.Bytes" enum="SyncModelTypes" + expires_after="2017-10-31"> <obsolete> Deprecated 10/2017. </obsolete> @@ -22852,7 +23131,8 @@ </summary> </histogram> -<histogram name="DataUse.Sync.Upload.Count" enum="SyncModelTypes"> +<histogram name="DataUse.Sync.Upload.Count" enum="SyncModelTypes" + expires_after="2017-10-31"> <obsolete> Deprecated 10/2017. </obsolete> @@ -22937,7 +23217,8 @@ </summary> </histogram> -<histogram name="DefaultBrowser.AsyncSetAsDefault.Duration" units="ms"> +<histogram name="DefaultBrowser.AsyncSetAsDefault.Duration" units="ms" + expires_after="2015-11-19"> <obsolete> Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultAsyncDuration. </obsolete> @@ -22950,7 +23231,7 @@ </histogram> <histogram name="DefaultBrowser.AsyncSetAsDefault.Result" - enum="DefaultBrowserAsyncAttemptResult"> + enum="DefaultBrowserAsyncAttemptResult" expires_after="2015-11-19"> <obsolete> Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultResult. </obsolete> @@ -22977,7 +23258,8 @@ </summary> </histogram> -<histogram name="DefaultBrowser.SetDefaultAsyncDuration" units="ms"> +<histogram name="DefaultBrowser.SetDefaultAsyncDuration" units="ms" + expires_after="2016-03-09"> <obsolete> Deprecated 2016/03. The async set-as-default experiments are finished. </obsolete> @@ -22990,7 +23272,7 @@ </histogram> <histogram name="DefaultBrowser.SetDefaultResult" - enum="SetDefaultAttemptResult"> + enum="SetDefaultAttemptResult" expires_after="2016-03-22"> <obsolete> Deprecated 2016/03. </obsolete> @@ -23042,7 +23324,8 @@ </summary> </histogram> -<histogram name="DefaultBrowserWarning.DontSetAsDefault" enum="BooleanHit"> +<histogram name="DefaultBrowserWarning.DontSetAsDefault" enum="BooleanHit" + expires_after="2015-11-19"> <obsolete> Deprecated 2015/11. The same information is available as the value Failure in DefaultBrowser.SetDefaultResult. @@ -23056,7 +23339,8 @@ </summary> </histogram> -<histogram name="DefaultBrowserWarning.Ignored" enum="BooleanHit"> +<histogram name="DefaultBrowserWarning.Ignored" enum="BooleanHit" + expires_after="2015-11-19"> <obsolete> Deprecated 2015/11. Renamed to DefaultBrowser.InfoBar.UserInteraction. </obsolete> @@ -23067,7 +23351,8 @@ </summary> </histogram> -<histogram name="DefaultBrowserWarning.SetAsDefault" enum="BooleanHit"> +<histogram name="DefaultBrowserWarning.SetAsDefault" enum="BooleanHit" + expires_after="2015-11-19"> <obsolete> Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There is no longer a distinction between interactive or not. @@ -23079,7 +23364,8 @@ </summary> </histogram> -<histogram name="DefaultBrowserWarning.SetAsDefaultUI" enum="BooleanHit"> +<histogram name="DefaultBrowserWarning.SetAsDefaultUI" enum="BooleanHit" + expires_after="2015-11-19"> <obsolete> Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There is no longer a distinction between interactive or not. @@ -23093,7 +23379,8 @@ </summary> </histogram> -<histogram name="DefaultBrowserWarning.SetAsDefaultUIFailed" enum="BooleanHit"> +<histogram name="DefaultBrowserWarning.SetAsDefaultUIFailed" enum="BooleanHit" + expires_after="2015-11-19"> <obsolete> Deprecated 2015/11. The same information is available as the value Failure in DefaultBrowser.SetDefaultResult. @@ -23106,7 +23393,7 @@ </histogram> <histogram name="DefaultProtocolClient.SetDefaultResult" - enum="SetDefaultAttemptResult"> + enum="SetDefaultAttemptResult" expires_after="2016-03-22"> <obsolete> Deprecated 2016/03. </obsolete> @@ -23126,7 +23413,8 @@ </summary> </histogram> -<histogram name="DelayNavigationThrottle.Delay.Actual" units="ms"> +<histogram name="DelayNavigationThrottle.Delay.Actual" units="ms" + expires_after="2018-03-08"> <obsolete> Deprecated March 2018 </obsolete> @@ -23136,7 +23424,8 @@ </summary> </histogram> -<histogram name="DelayNavigationThrottle.Delay.Delta" units="ms"> +<histogram name="DelayNavigationThrottle.Delay.Delta" units="ms" + expires_after="2018-03-08"> <obsolete> Deprecated March 2018 </obsolete> @@ -23147,7 +23436,8 @@ </summary> </histogram> -<histogram name="DelayNavigationThrottle.Delay.Specified" units="ms"> +<histogram name="DelayNavigationThrottle.Delay.Specified" units="ms" + expires_after="2018-03-08"> <obsolete> Deprecated March 2018 </obsolete> @@ -23266,7 +23556,7 @@ </histogram> <histogram name="DesktopIOSPromotion.DismissalReason" - enum="DesktopIOSPromotionDismissalReason"> + enum="DesktopIOSPromotionDismissalReason" expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23279,7 +23569,7 @@ </histogram> <histogram name="DesktopIOSPromotion.ImpressionFromEntryPoint" - enum="DesktopIOSPromotionEntryPoint"> + enum="DesktopIOSPromotionEntryPoint" expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23291,7 +23581,7 @@ </histogram> <histogram name="DesktopIOSPromotion.IOSSigninReason" - enum="DesktopIOSPromotionEntryPoint"> + enum="DesktopIOSPromotionEntryPoint" expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23308,7 +23598,7 @@ </histogram> <histogram name="DesktopIOSPromotion.OAuthTokenCompletion" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23320,7 +23610,7 @@ </histogram> <histogram name="DesktopIOSPromotion.OAuthTokenResponseCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23332,7 +23622,7 @@ </histogram> <histogram name="DesktopIOSPromotion.QueryPhoneNumberSucceeded" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23344,7 +23634,8 @@ </summary> </histogram> -<histogram name="DesktopIOSPromotion.SendSMSSucceeded" enum="BooleanSuccess"> +<histogram name="DesktopIOSPromotion.SendSMSSucceeded" enum="BooleanSuccess" + expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23355,7 +23646,8 @@ </summary> </histogram> -<histogram name="DesktopIOSPromotion.SMSToSigninTime" units="hours"> +<histogram name="DesktopIOSPromotion.SMSToSigninTime" units="hours" + expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23372,7 +23664,8 @@ </summary> </histogram> -<histogram base="true" name="DesktopIOSPromotion.VariationSigninReason"> +<histogram base="true" name="DesktopIOSPromotion.VariationSigninReason" + expires_after="2018-11-05"> <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> @@ -23427,7 +23720,8 @@ <summary>Specified DevTools setting was changed.</summary> </histogram> -<histogram name="Diagnostics.Recovery.ConflictingDlls" enum="DiagnosticsResult"> +<histogram name="Diagnostics.Recovery.ConflictingDlls" enum="DiagnosticsResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -23494,7 +23788,8 @@ </summary> </histogram> -<histogram name="Diagnostics.Recovery.OperatingSystem" enum="DiagnosticsResult"> +<histogram name="Diagnostics.Recovery.OperatingSystem" enum="DiagnosticsResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -23553,7 +23848,7 @@ </histogram> <histogram name="Diagnostics.Recovery.SQLiteIntegrityAppCache" - enum="DiagnosticsResult"> + enum="DiagnosticsResult" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -23567,7 +23862,7 @@ </histogram> <histogram name="Diagnostics.Recovery.SQLiteIntegrityArchivedHistory" - enum="DiagnosticsResult"> + enum="DiagnosticsResult" expires_after="2015-09-10"> <obsolete> Removed as of Jun 2014: we no longer have an archived database. </obsolete> @@ -23647,7 +23942,7 @@ </histogram> <histogram name="Diagnostics.Recovery.SQLiteIntegrityThumbnails" - enum="DiagnosticsResult"> + enum="DiagnosticsResult" expires_after="2016-06-05"> <obsolete> Deprecated 05/2016 in Issue 617226; has not been valid for many years. </obsolete> @@ -23702,7 +23997,8 @@ </summary> </histogram> -<histogram name="Diagnostics.Test.ConflictingDlls" enum="DiagnosticsResult"> +<histogram name="Diagnostics.Test.ConflictingDlls" enum="DiagnosticsResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -23765,7 +24061,8 @@ </summary> </histogram> -<histogram name="Diagnostics.Test.OperatingSystem" enum="DiagnosticsResult"> +<histogram name="Diagnostics.Test.OperatingSystem" enum="DiagnosticsResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -23821,7 +24118,7 @@ </histogram> <histogram name="Diagnostics.Test.SQLiteIntegrityAppCache" - enum="DiagnosticsResult"> + enum="DiagnosticsResult" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -23834,7 +24131,7 @@ </histogram> <histogram name="Diagnostics.Test.SQLiteIntegrityArchivedHistory" - enum="DiagnosticsResult"> + enum="DiagnosticsResult" expires_after="2015-09-10"> <obsolete> Removed as of Jun 2014: we no longer have an archived database. </obsolete> @@ -23907,7 +24204,7 @@ </histogram> <histogram name="Diagnostics.Test.SQLiteIntegrityThumbnails" - enum="DiagnosticsResult"> + enum="DiagnosticsResult" expires_after="2016-06-05"> <obsolete> Deprecated 05/2016 in Issue 617226; has not been valid for many years. </obsolete> @@ -23974,7 +24271,8 @@ </summary> </histogram> -<histogram name="Dialog.Delegate.Creation" enum="BooleanCreated"> +<histogram name="Dialog.Delegate.Creation" enum="BooleanCreated" + expires_after="2017-05-14"> <obsolete> Deprecated, use Dialog.DialogDelegate.Create. </obsolete> @@ -24224,7 +24522,8 @@ </summary> </histogram> -<histogram name="DisabledExtension.ExtensionWipedStatus" enum="BooleanWiped"> +<histogram name="DisabledExtension.ExtensionWipedStatus" enum="BooleanWiped" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -24232,7 +24531,8 @@ <summary>Whether an extension has been wiped out.</summary> </histogram> -<histogram name="DisabledExtension.SideloadWipeoutCount"> +<histogram name="DisabledExtension.SideloadWipeoutCount" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -24243,7 +24543,8 @@ </summary> </histogram> -<histogram name="DisabledExtension.SideloadWipeoutNeeded" enum="BooleanSuccess"> +<histogram name="DisabledExtension.SideloadWipeoutNeeded" enum="BooleanSuccess" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -24254,7 +24555,8 @@ </summary> </histogram> -<histogram name="DisabledExtension.UserSelection" enum="SideloadWipeoutBubble"> +<histogram name="DisabledExtension.UserSelection" enum="SideloadWipeoutBubble" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -24321,7 +24623,8 @@ </summary> </histogram> -<histogram name="DiskBasedCertCache.CertIo" enum="CertificateChainPosition"> +<histogram name="DiskBasedCertCache.CertIo" enum="CertificateChainPosition" + expires_after="2016-01-25"> <obsolete> Deprecated as of 01/2016. CertCacheTrial has been removed. https://crbug.com/522312 @@ -24334,7 +24637,8 @@ </summary> </histogram> -<histogram name="DiskBasedCertCache.CertIoCacheResult" enum="CacheResult"> +<histogram name="DiskBasedCertCache.CertIoCacheResult" enum="CacheResult" + expires_after="2016-01-25"> <obsolete> Deprecated as of 01/2016. CertCacheTrial has been removed. https://crbug.com/522312 @@ -24347,7 +24651,7 @@ </histogram> <histogram name="DiskBasedCertCache.CertIoReadSuccessLeaf" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-01-25"> <obsolete> Deprecated as of 01/2016. CertCacheTrial has been removed. https://crbug.com/522312 @@ -24360,7 +24664,7 @@ </histogram> <histogram name="DiskBasedCertCache.CertIoWriteSuccessLeaf" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-01-25"> <obsolete> Deprecated as of 01/2016. CertCacheTrial has been removed. https://crbug.com/522312 @@ -24372,7 +24676,8 @@ </summary> </histogram> -<histogram name="DiskBasedCertCache.ChainReadTime" units="ms"> +<histogram name="DiskBasedCertCache.ChainReadTime" units="ms" + expires_after="2016-01-25"> <obsolete> Deprecated as of 01/2016. CertCacheTrial has been removed. https://crbug.com/522312 @@ -24385,7 +24690,8 @@ </summary> </histogram> -<histogram name="DiskBasedCertCache.ChainWriteTime" units="ms"> +<histogram name="DiskBasedCertCache.ChainWriteTime" units="ms" + expires_after="2016-01-25"> <obsolete> Deprecated as of 01/2016. CertCacheTrial has been removed. https://crbug.com/522312 @@ -24425,7 +24731,7 @@ <summary>The size distribution of data stored in the HTTP cache.</summary> </histogram> -<histogram name="DiskCache.TotalIOTime" units="ms"> +<histogram name="DiskCache.TotalIOTime" units="ms" expires_after="2013-04-11"> <obsolete> Deprecated. </obsolete> @@ -24485,7 +24791,8 @@ </summary> </histogram> -<histogram base="true" name="DisplayScheduler.ShouldNotDraw" enum="Boolean"> +<histogram base="true" name="DisplayScheduler.ShouldNotDraw" enum="Boolean" + expires_after="2018-11-21"> <obsolete> Deprecated after M72 since no longer needed. </obsolete> @@ -24499,7 +24806,7 @@ </summary> </histogram> -<histogram name="DNS.AttemptCancelled"> +<histogram name="DNS.AttemptCancelled" expires_after="2018-07-03"> <obsolete> Deprecated as of 6/2018. </obsolete> @@ -24509,7 +24816,7 @@ </summary> </histogram> -<histogram name="DNS.AttemptDiscarded"> +<histogram name="DNS.AttemptDiscarded" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -24522,7 +24829,7 @@ </summary> </histogram> -<histogram name="DNS.AttemptFailDuration" units="ms"> +<histogram name="DNS.AttemptFailDuration" units="ms" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -24536,7 +24843,7 @@ </summary> </histogram> -<histogram name="DNS.AttemptFailure"> +<histogram name="DNS.AttemptFailure" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -24545,7 +24852,7 @@ <summary>The attempt that has not resolved the host successfully.</summary> </histogram> -<histogram name="DNS.AttemptFirstFailure"> +<histogram name="DNS.AttemptFirstFailure" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -24557,7 +24864,7 @@ </summary> </histogram> -<histogram name="DNS.AttemptFirstSuccess"> +<histogram name="DNS.AttemptFirstSuccess" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -24568,7 +24875,7 @@ </summary> </histogram> -<histogram name="DNS.AttemptSuccess"> +<histogram name="DNS.AttemptSuccess" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -24577,7 +24884,8 @@ <summary>The attempt that has resolved the host successfully.</summary> </histogram> -<histogram name="DNS.AttemptSuccessDuration" units="ms"> +<histogram name="DNS.AttemptSuccessDuration" units="ms" + expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -24592,7 +24900,8 @@ </summary> </histogram> -<histogram name="DNS.AttemptTimeSavedByRetry" units="ms"> +<histogram name="DNS.AttemptTimeSavedByRetry" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated as of 6/2018. </obsolete> @@ -24603,7 +24912,7 @@ </summary> </histogram> -<histogram name="DNS.CacheEvicted" units="ms"> +<histogram name="DNS.CacheEvicted" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -24614,7 +24923,7 @@ </summary> </histogram> -<histogram name="DNS.CacheExpired" units="ms"> +<histogram name="DNS.CacheExpired" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -24625,7 +24934,7 @@ </summary> </histogram> -<histogram name="DNS.CacheExpiredOnGet" units="ms"> +<histogram name="DNS.CacheExpiredOnGet" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -24636,7 +24945,7 @@ </histogram> <histogram name="DNS.EmptyAddressListAndNoError" - enum="DNSEmptyAddressListAndNoError"> + enum="DNSEmptyAddressListAndNoError" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -24646,7 +24955,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.Erase" enum="DNS.HostCache.EraseReason"> +<histogram name="DNS.HostCache.Erase" enum="DNS.HostCache.EraseReason" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24655,7 +24965,8 @@ <summary>The reason for erasing a DNS entry from the host cache.</summary> </histogram> -<histogram name="DNS.HostCache.EraseStale.ExpiredBy" units="ms"> +<histogram name="DNS.HostCache.EraseStale.ExpiredBy" units="ms" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24667,7 +24978,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.EraseStale.NetworkChanges" units="changes"> +<histogram name="DNS.HostCache.EraseStale.NetworkChanges" units="changes" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24679,7 +24991,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.EraseStale.StaleHits" units="hits"> +<histogram name="DNS.HostCache.EraseStale.StaleHits" units="hits" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24691,7 +25004,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.EraseValid.ValidFor" units="ms"> +<histogram name="DNS.HostCache.EraseValid.ValidFor" units="ms" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24703,7 +25017,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.Lookup" enum="DNS.HostCache.LookupOutcome"> +<histogram name="DNS.HostCache.Lookup" enum="DNS.HostCache.LookupOutcome" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24712,7 +25027,8 @@ <summary>The outcome of looking up a DNS entry in the host cache.</summary> </histogram> -<histogram name="DNS.HostCache.LookupStale.ExpiredBy" units="ms"> +<histogram name="DNS.HostCache.LookupStale.ExpiredBy" units="ms" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24724,7 +25040,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.LookupStale.NetworkChanges" units="changes"> +<histogram name="DNS.HostCache.LookupStale.NetworkChanges" units="changes" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24752,7 +25069,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.Set" enum="DNS.HostCache.SetOutcome"> +<histogram name="DNS.HostCache.Set" enum="DNS.HostCache.SetOutcome" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24762,7 +25080,7 @@ </histogram> <histogram name="DNS.HostCache.UpdateStale.AddressListDelta" - enum="DNS.AddressListDeltaType"> + enum="DNS.AddressListDeltaType" expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24775,7 +25093,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.UpdateStale.ExpiredBy" units="ms"> +<histogram name="DNS.HostCache.UpdateStale.ExpiredBy" units="ms" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24787,7 +25106,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.UpdateStale.NetworkChanges" units="changes"> +<histogram name="DNS.HostCache.UpdateStale.NetworkChanges" units="changes" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24800,7 +25120,8 @@ </summary> </histogram> -<histogram name="DNS.HostCache.UpdateStale.StaleHits" units="hits"> +<histogram name="DNS.HostCache.UpdateStale.StaleHits" units="hits" + expires_after="2018-11-27"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -24812,7 +25133,8 @@ </summary> </histogram> -<histogram name="DNS.IndependentFailedNavigation" units="ms"> +<histogram name="DNS.IndependentFailedNavigation" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -24828,7 +25150,8 @@ </summary> </histogram> -<histogram name="DNS.IndependentNavigation" units="ms"> +<histogram name="DNS.IndependentNavigation" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -24844,7 +25167,7 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTime" units="ms"> +<histogram name="DNS.JobQueueTime" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -24856,7 +25179,8 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTime_HIGHEST" units="ms"> +<histogram name="DNS.JobQueueTime_HIGHEST" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -24868,7 +25192,7 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTime_IDLE" units="ms"> +<histogram name="DNS.JobQueueTime_IDLE" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -24880,7 +25204,7 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTime_LOW" units="ms"> +<histogram name="DNS.JobQueueTime_LOW" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -24892,7 +25216,7 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTime_LOWEST" units="ms"> +<histogram name="DNS.JobQueueTime_LOWEST" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -24904,7 +25228,7 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTime_MEDIUM" units="ms"> +<histogram name="DNS.JobQueueTime_MEDIUM" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime. </obsolete> @@ -24916,7 +25240,8 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTimeAfterChange" units="ms"> +<histogram name="DNS.JobQueueTimeAfterChange" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -24928,7 +25253,8 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTimeAfterChange_HIGHEST" units="ms"> +<histogram name="DNS.JobQueueTimeAfterChange_HIGHEST" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -24941,7 +25267,8 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTimeAfterChange_IDLE" units="ms"> +<histogram name="DNS.JobQueueTimeAfterChange_IDLE" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -24954,7 +25281,8 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTimeAfterChange_LOW" units="ms"> +<histogram name="DNS.JobQueueTimeAfterChange_LOW" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -24967,7 +25295,8 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTimeAfterChange_LOWEST" units="ms"> +<histogram name="DNS.JobQueueTimeAfterChange_LOWEST" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -24980,7 +25309,8 @@ </summary> </histogram> -<histogram name="DNS.JobQueueTimeAfterChange_MEDIUM" units="ms"> +<histogram name="DNS.JobQueueTimeAfterChange_MEDIUM" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange. </obsolete> @@ -24993,7 +25323,8 @@ </summary> </histogram> -<histogram name="DNS.PrefetchCacheEviction" units="ms"> +<histogram name="DNS.PrefetchCacheEviction" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25006,7 +25337,8 @@ </summary> </histogram> -<histogram name="DNS.PrefetchCacheEvictionL" units="ms"> +<histogram name="DNS.PrefetchCacheEvictionL" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25019,7 +25351,7 @@ </summary> </histogram> -<histogram name="DNS.PrefetchFoundName"> +<histogram name="DNS.PrefetchFoundName" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25027,7 +25359,7 @@ <summary>Replaced by DNS.PrefetchFoundNameL.</summary> </histogram> -<histogram name="DNS.PrefetchFoundNameL" units="ms"> +<histogram name="DNS.PrefetchFoundNameL" units="ms" expires_after="2013-05-16"> <obsolete> Deprecated 2/2010, and replaced by DNS.PrefetchResolution </obsolete> @@ -25044,7 +25376,7 @@ </summary> </histogram> -<histogram name="DNS.PrefetchNegativeHit"> +<histogram name="DNS.PrefetchNegativeHit" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25052,7 +25384,8 @@ <summary>Replaced by DNS.PrefetchNegativeHitL.</summary> </histogram> -<histogram name="DNS.PrefetchNegativeHitL" units="ms"> +<histogram name="DNS.PrefetchNegativeHitL" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25073,7 +25406,7 @@ </summary> </histogram> -<histogram name="DNS.PrefetchPositiveHit"> +<histogram name="DNS.PrefetchPositiveHit" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25081,7 +25414,8 @@ <summary>Replaced by DNS.PrefetchPositiveHitL.</summary> </histogram> -<histogram name="DNS.PrefetchPositiveHitL" units="ms"> +<histogram name="DNS.PrefetchPositiveHitL" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25100,7 +25434,7 @@ </summary> </histogram> -<histogram name="DNS.PrefetchQueue" units="ms"> +<histogram name="DNS.PrefetchQueue" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25112,7 +25446,8 @@ </summary> </histogram> -<histogram name="DNS.PrefetchReferredPositiveHit" units="ms"> +<histogram name="DNS.PrefetchReferredPositiveHit" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25145,7 +25480,7 @@ </summary> </histogram> -<histogram name="DNS.QueueRecycledDeltaOver2"> +<histogram name="DNS.QueueRecycledDeltaOver2" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25158,7 +25493,7 @@ </summary> </histogram> -<histogram name="DNS.QueueRecycledUnder2"> +<histogram name="DNS.QueueRecycledUnder2" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25171,7 +25506,8 @@ </summary> </histogram> -<histogram name="DNS.ResolveCategory" enum="ResolutionCategory"> +<histogram name="DNS.ResolveCategory" enum="ResolutionCategory" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ResolveCategory. </obsolete> @@ -25181,7 +25517,7 @@ </summary> </histogram> -<histogram name="DNS.ResolveFail" units="ms"> +<histogram name="DNS.ResolveFail" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail. </obsolete> @@ -25192,7 +25528,8 @@ </summary> </histogram> -<histogram name="DNS.ResolveFail_FAMILY_IPV4" units="ms"> +<histogram name="DNS.ResolveFail_FAMILY_IPV4" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail. </obsolete> @@ -25200,7 +25537,8 @@ <summary>Same as DNS.ResolveFail, but limited to pure IPv4 lookups.</summary> </histogram> -<histogram name="DNS.ResolveFail_FAMILY_IPV6" units="ms"> +<histogram name="DNS.ResolveFail_FAMILY_IPV6" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail. </obsolete> @@ -25208,7 +25546,8 @@ <summary>Same as DNS.ResolveFail, but limited to pure IPv6 lookups.</summary> </histogram> -<histogram name="DNS.ResolveFail_FAMILY_UNSPEC" units="ms"> +<histogram name="DNS.ResolveFail_FAMILY_UNSPEC" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail. </obsolete> @@ -25216,7 +25555,8 @@ <summary>Same as DNS.ResolveFail, but limited to IPv4/IPv6 lookups.</summary> </histogram> -<histogram name="DNS.ResolveSpeculativeFail" units="ms"> +<histogram name="DNS.ResolveSpeculativeFail" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail. </obsolete> @@ -25227,7 +25567,8 @@ </summary> </histogram> -<histogram name="DNS.ResolveSpeculativeSuccess" units="ms"> +<histogram name="DNS.ResolveSpeculativeSuccess" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess. </obsolete> @@ -25238,7 +25579,7 @@ </summary> </histogram> -<histogram name="DNS.ResolveSuccess" units="ms"> +<histogram name="DNS.ResolveSuccess" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess. </obsolete> @@ -25250,7 +25591,8 @@ </summary> </histogram> -<histogram name="DNS.ResolveSuccess_FAMILY_IPV4" units="ms"> +<histogram name="DNS.ResolveSuccess_FAMILY_IPV4" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess. </obsolete> @@ -25260,7 +25602,8 @@ </summary> </histogram> -<histogram name="DNS.ResolveSuccess_FAMILY_IPV6" units="ms"> +<histogram name="DNS.ResolveSuccess_FAMILY_IPV6" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess. </obsolete> @@ -25270,7 +25613,8 @@ </summary> </histogram> -<histogram name="DNS.ResolveSuccess_FAMILY_UNSPEC" units="ms"> +<histogram name="DNS.ResolveSuccess_FAMILY_UNSPEC" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess. </obsolete> @@ -25280,7 +25624,8 @@ </summary> </histogram> -<histogram name="DNS.ResolveUnspecWaste" enum="ResolutionUnspecWasteCategory"> +<histogram name="DNS.ResolveUnspecWaste" enum="ResolutionUnspecWasteCategory" + expires_after="2013-05-23"> <obsolete> Deprecated as of 5/2013. </obsolete> @@ -25351,7 +25696,7 @@ </summary> </histogram> -<histogram name="DNS.TotalTime" units="ms"> +<histogram name="DNS.TotalTime" units="ms" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime. </obsolete> @@ -25363,7 +25708,8 @@ </summary> </histogram> -<histogram name="DNS.TotalTime_speculative" units="ms"> +<histogram name="DNS.TotalTime_speculative" units="ms" + expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime_speculative. </obsolete> @@ -25375,7 +25721,7 @@ </summary> </histogram> -<histogram name="DNS.UnexpectedResolution"> +<histogram name="DNS.UnexpectedResolution" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25395,7 +25741,7 @@ </summary> </histogram> -<histogram name="DNS.UnexpectedResolutionL"> +<histogram name="DNS.UnexpectedResolutionL" expires_after="2017-09-28"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -25423,7 +25769,7 @@ <summary>Status of DNS probe updates sent to a DNS error page.</summary> </histogram> -<histogram name="DnsProbe.Probe.Elapsed" units="ms"> +<histogram name="DnsProbe.Probe.Elapsed" units="ms" expires_after="2013-08-01"> <obsolete> Renamed 7/2013 to DnsProbe.ProbeDuration. </obsolete> @@ -25431,7 +25777,8 @@ <summary>Time between starting and finishing DNS probe.</summary> </histogram> -<histogram name="DnsProbe.Probe.NcnOffline.Elapsed" units="ms"> +<histogram name="DnsProbe.Probe.NcnOffline.Elapsed" units="ms" + expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25442,7 +25789,7 @@ </histogram> <histogram name="DnsProbe.Probe.NcnOffline.Result" - enum="DnsProbe.ObsoleteProbeResult"> + enum="DnsProbe.ObsoleteProbeResult" expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25452,7 +25799,8 @@ </summary> </histogram> -<histogram name="DnsProbe.Probe.NcnOnline.Elapsed" units="ms"> +<histogram name="DnsProbe.Probe.NcnOnline.Elapsed" units="ms" + expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25463,7 +25811,7 @@ </histogram> <histogram name="DnsProbe.Probe.NcnOnline.Result" - enum="DnsProbe.ObsoleteProbeResult"> + enum="DnsProbe.ObsoleteProbeResult" expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25473,7 +25821,8 @@ </summary> </histogram> -<histogram name="DnsProbe.Probe.Result" enum="DnsProbe.ObsoleteProbeResult"> +<histogram name="DnsProbe.Probe.Result" enum="DnsProbe.ObsoleteProbeResult" + expires_after="2013-08-01"> <obsolete> Renamed 7/2013 to DnsProbe.ProbeResult. (Also switched to the full DnsProbe.ProbeStatus enum.) @@ -25482,7 +25831,8 @@ <summary>Result of DNS probes sent by the probe service.</summary> </histogram> -<histogram name="DnsProbe.Probe.ResultBadConfig.Elapsed" units="ms"> +<histogram name="DnsProbe.Probe.ResultBadConfig.Elapsed" units="ms" + expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25491,7 +25841,7 @@ </histogram> <histogram name="DnsProbe.Probe.ResultBadConfig.SystemIsLocalhost" - enum="DnsProbe.SystemIsLocalhost"> + enum="DnsProbe.SystemIsLocalhost" expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25503,7 +25853,7 @@ </histogram> <histogram name="DnsProbe.Probe.ResultBadConfig.SystemJobResult" - enum="DnsProbe.JobResult"> + enum="DnsProbe.JobResult" expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25514,7 +25864,8 @@ </summary> </histogram> -<histogram name="DnsProbe.Probe.ResultBadConfig.SystemNameserverCount"> +<histogram name="DnsProbe.Probe.ResultBadConfig.SystemNameserverCount" + expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25525,7 +25876,8 @@ </summary> </histogram> -<histogram name="DnsProbe.Probe.ResultNoInternet.Elapsed" units="ms"> +<histogram name="DnsProbe.Probe.ResultNoInternet.Elapsed" units="ms" + expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25533,7 +25885,8 @@ <summary>Elapsed time of DNS probes that return PROBE_NO_INTERNET.</summary> </histogram> -<histogram name="DnsProbe.Probe.ResultNxdomain.Elapsed" units="ms"> +<histogram name="DnsProbe.Probe.ResultNxdomain.Elapsed" units="ms" + expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25541,7 +25894,8 @@ <summary>Elapsed time of DNS probes that return PROBE_NXDOMAIN.</summary> </histogram> -<histogram name="DnsProbe.Probe.ResultUnknown.Elapsed" units="ms"> +<histogram name="DnsProbe.Probe.ResultUnknown.Elapsed" units="ms" + expires_after="2013-08-01"> <obsolete> Removed 7/2013. </obsolete> @@ -25549,7 +25903,7 @@ <summary>Elapsed time of DNS probes that return PROBE_UNKNOWN.</summary> </histogram> -<histogram name="DnsProbe.ProbeDuration" units="ms"> +<histogram name="DnsProbe.ProbeDuration" units="ms" expires_after="2019-02-28"> <obsolete> Replaced 2/2019 with DnsProbe.ProbeDuration2, which uses TimeTicks instead of Time. @@ -25600,7 +25954,8 @@ </summary> </histogram> -<histogram name="DocumentActivity.Enabled" enum="RunningMode"> +<histogram name="DocumentActivity.Enabled" enum="RunningMode" + expires_after="2016-09-13"> <obsolete> Removed 9/2016. </obsolete> @@ -25730,7 +26085,7 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.DBLoadedCount"> +<histogram name="DomainBoundCerts.DBLoadedCount" expires_after="2018-01-22"> <obsolete> Removed January 2018. </obsolete> @@ -25747,7 +26102,8 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.DBLoadTime" units="ms"> +<histogram name="DomainBoundCerts.DBLoadTime" units="ms" + expires_after="2018-01-22"> <obsolete> Removed January 2018. </obsolete> @@ -25755,7 +26111,8 @@ <summary>Time spent loading domain bound cert database.</summary> </histogram> -<histogram name="DomainBoundCerts.DBSizeInKB" units="KB"> +<histogram name="DomainBoundCerts.DBSizeInKB" units="KB" + expires_after="2017-04-05"> <obsolete> Removed 4/2017. </obsolete> @@ -25773,7 +26130,8 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.GenerateCertTime" units="ms"> +<histogram name="DomainBoundCerts.GenerateCertTime" units="ms" + expires_after="2017-04-05"> <obsolete> Removed 4/2017. </obsolete> @@ -25781,7 +26139,8 @@ <summary>Time spent generating a domain bound cert.</summary> </histogram> -<histogram name="DomainBoundCerts.GetCertTime" units="ms"> +<histogram name="DomainBoundCerts.GetCertTime" units="ms" + expires_after="2017-04-05"> <obsolete> Removed 4/2017. </obsolete> @@ -25792,7 +26151,8 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.GetCertTimeAsync" units="ms"> +<histogram name="DomainBoundCerts.GetCertTimeAsync" units="ms" + expires_after="2017-04-05"> <obsolete> Removed 4/2017. </obsolete> @@ -25803,7 +26163,8 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.GetCertTimeSync" units="ms"> +<histogram name="DomainBoundCerts.GetCertTimeSync" units="ms" + expires_after="2017-04-05"> <obsolete> Removed 4/2017. </obsolete> @@ -25812,7 +26173,7 @@ </histogram> <histogram name="DomainBoundCerts.GetDomainBoundCertResult" - enum="DomainBoundCerts.GetCertResult"> + enum="DomainBoundCerts.GetCertResult" expires_after="2018-01-22"> <obsolete> Removed January 2018. </obsolete> @@ -25828,7 +26189,8 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.Support" enum="DomainBoundCerts.Support"> +<histogram name="DomainBoundCerts.Support" enum="DomainBoundCerts.Support" + expires_after="2018-01-22"> <obsolete> Removed January 2018. </obsolete> @@ -25840,7 +26202,8 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.TaskMaxWaitTime" units="ms"> +<histogram name="DomainBoundCerts.TaskMaxWaitTime" units="ms" + expires_after="2017-04-05"> <obsolete> Removed 4/2017. </obsolete> @@ -25851,7 +26214,7 @@ </summary> </histogram> -<histogram name="DomainBoundCerts.TaskWaitCount"> +<histogram name="DomainBoundCerts.TaskWaitCount" expires_after="2017-04-05"> <obsolete> Removed 4/2017. </obsolete> @@ -25901,7 +26264,8 @@ </summary> </histogram> -<histogram name="DomainReliability.BeaconInterval" units="ms"> +<histogram name="DomainReliability.BeaconInterval" units="ms" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25912,7 +26276,8 @@ </summary> </histogram> -<histogram name="DomainReliability.BeaconIntervalGlobal" units="ms"> +<histogram name="DomainReliability.BeaconIntervalGlobal" units="ms" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25923,7 +26288,8 @@ </summary> </histogram> -<histogram name="DomainReliability.BeaconReported" enum="BooleanReported"> +<histogram name="DomainReliability.BeaconReported" enum="BooleanReported" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25934,7 +26300,8 @@ </summary> </histogram> -<histogram name="DomainReliability.OnBeaconDidEvict" enum="BooleanDidEvict"> +<histogram name="DomainReliability.OnBeaconDidEvict" enum="BooleanDidEvict" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25945,7 +26312,8 @@ </summary> </histogram> -<histogram name="DomainReliability.ReportedBeaconError" enum="NetErrorCodes"> +<histogram name="DomainReliability.ReportedBeaconError" enum="NetErrorCodes" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25957,7 +26325,7 @@ </histogram> <histogram name="DomainReliability.ReportedBeaconError_HasServerIP" - enum="NetErrorCodes"> + enum="NetErrorCodes" expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25968,7 +26336,8 @@ </summary> </histogram> -<histogram name="DomainReliability.ReportedBeaconUploadDepth" units="levels"> +<histogram name="DomainReliability.ReportedBeaconUploadDepth" units="levels" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25981,7 +26350,7 @@ </histogram> <histogram name="DomainReliability.SetConfigRecreatedContext" - enum="BooleanCreated"> + enum="BooleanCreated" expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -25993,7 +26362,8 @@ </summary> </histogram> -<histogram name="DomainReliability.UploadCollectorIndex"> +<histogram name="DomainReliability.UploadCollectorIndex" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -26004,7 +26374,8 @@ </summary> </histogram> -<histogram name="DomainReliability.UploadCollectorRetryDelay" units="ms"> +<histogram name="DomainReliability.UploadCollectorRetryDelay" units="ms" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -26025,7 +26396,7 @@ </histogram> <histogram name="DomainReliability.UploadFailover" - enum="DomainReliability.BooleanFailover"> + enum="DomainReliability.BooleanFailover" expires_after="2014-11-03"> <obsolete> Deprecated 11/2014; see UploadCollectorIndex </obsolete> @@ -26037,7 +26408,8 @@ </summary> </histogram> -<histogram name="DomainReliability.UploadInterval" units="ms"> +<histogram name="DomainReliability.UploadInterval" units="ms" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -26049,7 +26421,8 @@ </summary> </histogram> -<histogram name="DomainReliability.UploadIntervalGlobal" units="ms"> +<histogram name="DomainReliability.UploadIntervalGlobal" units="ms" + expires_after="2017-11-14"> <obsolete> Removed November 2017. </obsolete> @@ -26094,7 +26467,8 @@ <summary>Whether a Domain Reliability upload succeeded.</summary> </histogram> -<histogram name="DomDistiller.BarCloseButtonUsage" enum="BooleanPanelWasOpen"> +<histogram name="DomDistiller.BarCloseButtonUsage" enum="BooleanPanelWasOpen" + expires_after="2017-06-13"> <obsolete> UI rewrite to be an InfoBar makes this metric irrelevant as of 05/2017. </obsolete> @@ -26163,7 +26537,8 @@ </summary> </histogram> -<histogram name="DomDistiller.PageDistillable" enum="DistillableType"> +<histogram name="DomDistiller.PageDistillable" enum="DistillableType" + expires_after="2016-02-09"> <obsolete> PageDistillableAfterLoading and PageDistillableAfterParsing provide more details since 02/2016. @@ -26195,7 +26570,8 @@ </summary> </histogram> -<histogram name="DomDistiller.PageDistilledType" enum="DistillableType"> +<histogram name="DomDistiller.PageDistilledType" enum="DistillableType" + expires_after="2016-02-09"> <obsolete> Not collected anymore. </obsolete> @@ -26291,7 +26667,8 @@ </summary> </histogram> -<histogram name="DomDistiller.Time.SwipeToPaint" units="ms"> +<histogram name="DomDistiller.Time.SwipeToPaint" units="ms" + expires_after="2017-06-13"> <obsolete> UI rewrite to be an InfoBar makes this metric irrelevant as of 05/2017. </obsolete> @@ -26318,7 +26695,8 @@ </summary> </histogram> -<histogram name="DomDistiller.Time.ViewingReaderModePanel" units="ms"> +<histogram name="DomDistiller.Time.ViewingReaderModePanel" units="ms" + expires_after="2017-06-13"> <obsolete> UI rewrite to be an InfoBar makes this metric irrelevant as of 05/2017. </obsolete> @@ -26329,7 +26707,7 @@ </summary> </histogram> -<histogram name="DOMStorage.clear" units="ms"> +<histogram name="DOMStorage.clear" units="ms" expires_after="2015-02-20"> <obsolete> Deprecated 2012. </obsolete> @@ -26339,7 +26717,7 @@ </summary> </histogram> -<histogram name="DOMStorage.getItem" units="ms"> +<histogram name="DOMStorage.getItem" units="ms" expires_after="2015-02-20"> <obsolete> Deprecated 2012. </obsolete> @@ -26349,7 +26727,7 @@ </summary> </histogram> -<histogram name="DOMStorage.key" units="ms"> +<histogram name="DOMStorage.key" units="ms" expires_after="2015-02-20"> <obsolete> Deprecated 2012. </obsolete> @@ -26359,7 +26737,7 @@ </summary> </histogram> -<histogram name="DOMStorage.length" units="ms"> +<histogram name="DOMStorage.length" units="ms" expires_after="2015-02-20"> <obsolete> Deprecated 2012. </obsolete> @@ -26369,7 +26747,7 @@ </summary> </histogram> -<histogram name="DOMStorage.removeItem" units="ms"> +<histogram name="DOMStorage.removeItem" units="ms" expires_after="2015-02-20"> <obsolete> Deprecated 2012. </obsolete> @@ -26380,7 +26758,7 @@ </summary> </histogram> -<histogram name="DOMStorage.setItem" units="ms"> +<histogram name="DOMStorage.setItem" units="ms" expires_after="2015-02-20"> <obsolete> Deprecated 2012. </obsolete> @@ -26391,7 +26769,7 @@ </histogram> <histogram name="Doodle.ConfigDownloadOutcome" - enum="DoodleConfigDownloadOutcome"> + enum="DoodleConfigDownloadOutcome" expires_after="2017-08-24"> <obsolete> Removed from code 2017-08. </obsolete> @@ -26399,7 +26777,8 @@ <summary>Outcome of downloading the Doodle config.</summary> </histogram> -<histogram name="Doodle.ConfigDownloadTime" units="ms"> +<histogram name="Doodle.ConfigDownloadTime" units="ms" + expires_after="2017-08-24"> <obsolete> Removed from code 2017-08. </obsolete> @@ -26410,7 +26789,8 @@ </summary> </histogram> -<histogram name="Download.AcceptRangesBytes.KBytes" units="KB"> +<histogram name="Download.AcceptRangesBytes.KBytes" units="KB" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26418,7 +26798,8 @@ <summary>The length of downloads for serves that accept byte ranges.</summary> </histogram> -<histogram name="Download.AcceptRangesMissingOrInvalid.KBytes" units="KB"> +<histogram name="Download.AcceptRangesMissingOrInvalid.KBytes" units="KB" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26429,7 +26810,8 @@ </summary> </histogram> -<histogram name="Download.AcceptRangesNone.KBytes" units="KB"> +<histogram name="Download.AcceptRangesNone.KBytes" units="KB" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26439,7 +26821,8 @@ </summary> </histogram> -<histogram name="Download.ActualBandwidth" units="Bytes/second"> +<histogram name="Download.ActualBandwidth" units="Bytes/second" + expires_after="2017-01-05"> <obsolete> Deprecated January 2017. </obsolete> @@ -26462,7 +26845,7 @@ </histogram> <histogram name="Download.AttachmentServices.Result" - enum="AttachmentServicesResult"> + enum="AttachmentServicesResult" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26473,7 +26856,8 @@ </summary> </histogram> -<histogram name="Download.BandwidthDiskBytesPerSecond"> +<histogram name="Download.BandwidthDiskBytesPerSecond" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26494,7 +26878,7 @@ </summary> </histogram> -<histogram name="Download.BandwidthUsed" units="%"> +<histogram name="Download.BandwidthUsed" units="%" expires_after="2017-01-05"> <obsolete> Deprecated January 2017. </obsolete> @@ -26507,7 +26891,7 @@ </histogram> <histogram name="Download.BandwidthWithoutParallelStreamsBytesPerSecond" - units="bytes/second"> + units="bytes/second" expires_after="2017-04-20"> <obsolete> Deprecated April 2017. </obsolete> @@ -26521,7 +26905,7 @@ </histogram> <histogram name="Download.BandwidthWithParallelStreamsBytesPerSecond" - units="bytes/second"> + units="bytes/second" expires_after="2017-04-20"> <obsolete> Deprecated April 2017. </obsolete> @@ -26533,7 +26917,7 @@ </summary> </histogram> -<histogram name="Download.ClearAllSize"> +<histogram name="Download.ClearAllSize" expires_after="2017-01-05"> <obsolete> Deprecated 1/2017. </obsolete> @@ -26561,7 +26945,8 @@ </summary> </histogram> -<histogram name="Download.ContentType" enum="DownloadContentType"> +<histogram name="Download.ContentType" enum="DownloadContentType" + expires_after="2017-03-23"> <obsolete> Deprecated 03/2017, and replaced by Download.Start.ContentType. </obsolete> @@ -26661,7 +27046,8 @@ </summary> </histogram> -<histogram name="Download.Database.CreateDownloadDuration" units="ms"> +<histogram name="Download.Database.CreateDownloadDuration" units="ms" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26679,7 +27065,8 @@ </summary> </histogram> -<histogram name="Download.Database.QueryDownloadDuration" units="ms"> +<histogram name="Download.Database.QueryDownloadDuration" units="ms" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26687,7 +27074,8 @@ <summary>Time taken to query all downloads from history DB.</summary> </histogram> -<histogram name="Download.Database.UpdateDownloadDuration" units="ms"> +<histogram name="Download.Database.UpdateDownloadDuration" units="ms" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26706,7 +27094,7 @@ </histogram> <histogram name="Download.DatabaseRecordDropped" - enum="DownloadDatabaseRecordDroppedType"> + enum="DownloadDatabaseRecordDroppedType" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26714,7 +27102,8 @@ <summary>Reason for dropping a record read in from the DB.</summary> </histogram> -<histogram name="Download.DatabaseRemoveDownloadsCount"> +<histogram name="Download.DatabaseRemoveDownloadsCount" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26722,7 +27111,8 @@ <summary>Number of downloads removed from the history at once.</summary> </histogram> -<histogram name="Download.DatabaseRemoveDownloadsTime" units="microseconds"> +<histogram name="Download.DatabaseRemoveDownloadsTime" units="microseconds" + expires_after="2017-02-14"> <obsolete> Deprecated 2/2017 </obsolete> @@ -26733,7 +27123,7 @@ </histogram> <histogram name="Download.DatabaseRemoveDownloadsTimePerRecord" - units="nanoseconds/record"> + units="nanoseconds/record" expires_after="2017-02-14"> <obsolete> Deprecated 2/2017 </obsolete> @@ -26772,7 +27162,8 @@ </summary> </histogram> -<histogram name="Download.DiskBandwidthUsedPercentage" units="%"> +<histogram name="Download.DiskBandwidthUsedPercentage" units="%" + expires_after="2017-01-05"> <obsolete> Deprecated 1/2017. </obsolete> @@ -26859,7 +27250,8 @@ </summary> </histogram> -<histogram name="Download.FilePickerResult" enum="DownloadFilePickerResult"> +<histogram name="Download.FilePickerResult" enum="DownloadFilePickerResult" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26870,7 +27262,7 @@ </summary> </histogram> -<histogram name="Download.FileThreadBlockedTime"> +<histogram name="Download.FileThreadBlockedTime" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26881,7 +27273,7 @@ </summary> </histogram> -<histogram name="Download.FileThreadReceiveBuffers"> +<histogram name="Download.FileThreadReceiveBuffers" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26891,7 +27283,7 @@ </summary> </histogram> -<histogram name="Download.FirstOpenTime" units="ms"> +<histogram name="Download.FirstOpenTime" units="ms" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -26902,7 +27294,8 @@ </summary> </histogram> -<histogram name="Download.FrameGesture" enum="DownloadFrameGesture"> +<histogram name="Download.FrameGesture" enum="DownloadFrameGesture" + expires_after="2018-11-02"> <obsolete> Deprecated 11/2018. </obsolete> @@ -27020,7 +27413,7 @@ </histogram> <histogram name="Download.InterruptedUnknownSize" - enum="DownloadInterruptedUnknownSizeType"> + enum="DownloadInterruptedUnknownSizeType" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27135,7 +27528,8 @@ </summary> </histogram> -<histogram name="Download.MainFrame.HasGesture" enum="Boolean"> +<histogram name="Download.MainFrame.HasGesture" enum="Boolean" + expires_after="2019-01-10"> <obsolete> Deprecated as of 01/2019. </obsolete> @@ -27148,7 +27542,7 @@ </histogram> <histogram name="Download.MainFrame.SandboxGesture" - enum="MainFrameDownloadSandboxGesture"> + enum="MainFrameDownloadSandboxGesture" expires_after="2019-03-19"> <obsolete> Deprecated as of 03/2019. </obsolete> @@ -27182,7 +27576,7 @@ </histogram> <histogram name="Download.MapWinShErrorAccessDenied" - enum="SpecialShFileOperationCodes"> + enum="SpecialShFileOperationCodes" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27194,7 +27588,7 @@ </histogram> <histogram name="Download.MapWinShErrorFileFailed" - enum="SpecialShFileOperationCodes"> + enum="SpecialShFileOperationCodes" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27206,7 +27600,7 @@ </histogram> <histogram name="Download.MapWinShErrorTransientError" - enum="SpecialShFileOperationCodes"> + enum="SpecialShFileOperationCodes" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27243,7 +27637,7 @@ </summary> </histogram> -<histogram name="Download.OnChanged"> +<histogram name="Download.OnChanged" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27277,7 +27671,7 @@ </histogram> <histogram name="Download.OriginStateOnFullResumption" - enum="DownloadOriginStateOnResumption"> + enum="DownloadOriginStateOnResumption" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27289,7 +27683,7 @@ </histogram> <histogram name="Download.OriginStateOnPartialResumption" - enum="DownloadOriginStateOnResumption"> + enum="DownloadOriginStateOnResumption" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27311,7 +27705,8 @@ </summary> </histogram> -<histogram name="Download.ParallelDownload.BandwidthRatioPercentage" units="%"> +<histogram name="Download.ParallelDownload.BandwidthRatioPercentage" units="%" + expires_after="2018-08-31"> <obsolete> Deprecated August 2018. </obsolete> @@ -27343,7 +27738,8 @@ </summary> </histogram> -<histogram name="Download.ParallelDownload.TotalTimeRatioPercentage" units="%"> +<histogram name="Download.ParallelDownload.TotalTimeRatioPercentage" units="%" + expires_after="2018-08-31"> <obsolete> Deprecated August 2018. </obsolete> @@ -27414,7 +27810,8 @@ </summary> </histogram> -<histogram name="Download.PotentialBandwidth" units="Bytes/second"> +<histogram name="Download.PotentialBandwidth" units="Bytes/second" + expires_after="2017-01-05"> <obsolete> Deprecated January 2017. </obsolete> @@ -27426,7 +27823,8 @@ </summary> </histogram> -<histogram name="Download.ResourceHandlerBlockedPercentage" units="%"> +<histogram name="Download.ResourceHandlerBlockedPercentage" units="%" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27758,7 +28156,8 @@ </summary> </histogram> -<histogram name="Download.ShelfInProgressSizeOnAutoClose"> +<histogram name="Download.ShelfInProgressSizeOnAutoClose" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27769,7 +28168,8 @@ </summary> </histogram> -<histogram name="Download.ShelfInProgressSizeOnUserClose"> +<histogram name="Download.ShelfInProgressSizeOnUserClose" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27780,7 +28180,7 @@ </summary> </histogram> -<histogram name="Download.ShelfSizeOnAutoClose"> +<histogram name="Download.ShelfSizeOnAutoClose" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27790,7 +28190,7 @@ </summary> </histogram> -<histogram name="Download.ShelfSizeOnUserClose"> +<histogram name="Download.ShelfSizeOnUserClose" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27809,7 +28209,8 @@ </summary> </histogram> -<histogram name="Download.Sources" enum="DownloadSource"> +<histogram name="Download.Sources" enum="DownloadSource" + expires_after="2018-01-17"> <obsolete> Deprecated 1/2018, integrated into Download.Counts.DOWNLOAD_TRIGGERED_COUNT </obsolete> @@ -27870,7 +28271,7 @@ </histogram> <histogram name="Download.Subframe.SandboxOriginAdGesture" - enum="SubframeDownloadSandboxOriginAdGesture"> + enum="SubframeDownloadSandboxOriginAdGesture" expires_after="2019-03-19"> <obsolete> Deprecated as of 03/2019. </obsolete> @@ -27893,7 +28294,7 @@ </summary> </histogram> -<histogram name="Download.Time" units="ms"> +<histogram name="Download.Time" units="ms" expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27901,7 +28302,8 @@ <summary>Time between the start of a download and its completion.</summary> </histogram> -<histogram name="Download.TimeToRenameFailureAfterInitialFailure" units="ms"> +<histogram name="Download.TimeToRenameFailureAfterInitialFailure" units="ms" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27912,7 +28314,8 @@ </summary> </histogram> -<histogram name="Download.TimeToRenameSuccessAfterInitialFailure" units="ms"> +<histogram name="Download.TimeToRenameSuccessAfterInitialFailure" units="ms" + expires_after="2018-08-14"> <obsolete> Removed in 08/2018. </obsolete> @@ -27941,7 +28344,7 @@ <summary>Records events for local video thumbnail retrieval.</summary> </histogram> -<histogram name="Download.WriteLoopCount"> +<histogram name="Download.WriteLoopCount" expires_after="2017-01-05"> <obsolete> Deprecated 1/2017 </obsolete> @@ -27951,7 +28354,7 @@ </summary> </histogram> -<histogram name="Download.WriteSize" units="Bytes"> +<histogram name="Download.WriteSize" units="Bytes" expires_after="2017-01-05"> <obsolete> Deprecated 1/2017 </obsolete> @@ -27959,7 +28362,8 @@ <summary>The write size for calls to BaseFile::AppendDataTofile().</summary> </histogram> -<histogram name="DownloadableStrings.InstallTime" units="ms"> +<histogram name="DownloadableStrings.InstallTime" units="ms" + expires_after="2018-02-06"> <obsolete> Deprecated 2/2018 </obsolete> @@ -27971,7 +28375,7 @@ </histogram> <histogram name="DownloadableStrings.SimCountryCode" - enum="DownloadableStrings.MobileCountryCode"> + enum="DownloadableStrings.MobileCountryCode" expires_after="2018-02-06"> <obsolete> Deprecated 2/2018 </obsolete> @@ -27985,7 +28389,7 @@ </histogram> <histogram name="DownloadableStrings.Status" - enum="DownloadableStrings.InstallStatus"> + enum="DownloadableStrings.InstallStatus" expires_after="2018-02-06"> <obsolete> Deprecated 2/2018 </obsolete> @@ -27996,7 +28400,8 @@ </summary> </histogram> -<histogram name="DownloadableStrings.Timeout" units="ms"> +<histogram name="DownloadableStrings.Timeout" units="ms" + expires_after="2018-02-06"> <obsolete> Deprecated 2/2018 </obsolete> @@ -28013,7 +28418,8 @@ <summary>Respose code of batch upload request.</summary> </histogram> -<histogram name="Drive.CacheDBOpenStatus" enum="DriveCacheDBOpenStatus"> +<histogram name="Drive.CacheDBOpenStatus" enum="DriveCacheDBOpenStatus" + expires_after="2013-12-03"> <obsolete> Deprecated 8/2013. </obsolete> @@ -28038,7 +28444,8 @@ </summary> </histogram> -<histogram name="Drive.DownloadFromDriveFileSize" units="KB"> +<histogram name="Drive.DownloadFromDriveFileSize" units="KB" + expires_after="2019-02-15"> <obsolete> This was a temporary histogram for bug http://crbug.com/229650 that has been closed. @@ -28050,7 +28457,8 @@ </summary> </histogram> -<histogram name="Drive.EntireFeedLoadTime" units="microseconds"> +<histogram name="Drive.EntireFeedLoadTime" units="microseconds" + expires_after="2013-12-03"> <obsolete> Deprecated 12/2013 due to the UMA stat bucket layout change. We'll use Drive.FullFeedLoadTime instead. @@ -28061,7 +28469,8 @@ </summary> </histogram> -<histogram name="Drive.EntryKind" enum="DriveEntryKind"> +<histogram name="Drive.EntryKind" enum="DriveEntryKind" + expires_after="2013-12-03"> <obsolete> Deprecated 10/2012. </obsolete> @@ -28072,7 +28481,8 @@ </summary> </histogram> -<histogram name="Drive.FileFormat" enum="DriveFileFormat"> +<histogram name="Drive.FileFormat" enum="DriveFileFormat" + expires_after="2013-12-03"> <obsolete> Deprecated 10/2012. </obsolete> @@ -28084,7 +28494,7 @@ </histogram> <histogram name="Drive.FilesListRequestRunner.ApiErrorCode" - enum="DriveApiErrorCode"> + enum="DriveApiErrorCode" expires_after="2019-02-15"> <obsolete> Obsolete 02/2019 as DriveFS implementation obsoletes this metric. </obsolete> @@ -28095,7 +28505,8 @@ </summary> </histogram> -<histogram name="Drive.FilesListRequestRunner.MaxResults"> +<histogram name="Drive.FilesListRequestRunner.MaxResults" + expires_after="2019-02-15"> <obsolete> Obsolete 02/2019 as DriveFS implementation obsoletes this metric. </obsolete> @@ -28113,7 +28524,8 @@ </summary> </histogram> -<histogram name="Drive.InitialFeedLoadTime" units="microseconds"> +<histogram name="Drive.InitialFeedLoadTime" units="microseconds" + expires_after="2013-12-03"> <obsolete> Deperecated 12/2013 since it did not record meaningful information. Drive.DirectoryFeedLoadTime should be checked for measuring the time until @@ -28262,7 +28674,8 @@ <summary>Total file size contained in a drive batch upload request.</summary> </histogram> -<histogram name="Drive.TransferBlockedOnJobs" units="jobs"> +<histogram name="Drive.TransferBlockedOnJobs" units="jobs" + expires_after="2019-02-15"> <obsolete> This was a temporary histogram for bug http://crbug.com/229650 that has been closed. @@ -28285,7 +28698,8 @@ </summary> </histogram> -<histogram name="Drive.UploadToDriveFileSize" units="KB"> +<histogram name="Drive.UploadToDriveFileSize" units="KB" + expires_after="2019-02-15"> <obsolete> This was a temporary histogram for bug http://crbug.com/229650 that has been closed. @@ -28399,7 +28813,8 @@ </summary> </histogram> -<histogram name="EasyUnlock.AuthenticationSuccess" enum="BooleanSuccess"> +<histogram name="EasyUnlock.AuthenticationSuccess" enum="BooleanSuccess" + expires_after="2018-04-06"> <obsolete> Deprecated as of 03/2018. </obsolete> @@ -28493,7 +28908,8 @@ </details> </histogram> -<histogram name="EasyUnlock.AuthProximity.TimeSinceLastZeroRssi" units="ms"> +<histogram name="EasyUnlock.AuthProximity.TimeSinceLastZeroRssi" units="ms" + expires_after="2018-11-14"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -28513,7 +28929,8 @@ </details> </histogram> -<histogram name="EasyUnlock.AuthProximity.TransmitPowerDelta" units="dBm"> +<histogram name="EasyUnlock.AuthProximity.TransmitPowerDelta" units="dBm" + expires_after="2018-11-14"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -28539,7 +28956,7 @@ </histogram> <histogram name="EasyUnlock.BluetoothAvailability" - enum="EasyUnlockBluetoothType"> + enum="EasyUnlockBluetoothType" expires_after="2017-02-18"> <obsolete> Deprecated as of 02/2017. </obsolete> @@ -28563,7 +28980,7 @@ </histogram> <histogram name="EasyUnlock.NotificationEvent" - enum="EasyUnlockNotificationEvent"> + enum="EasyUnlockNotificationEvent" expires_after="2015-02-24"> <obsolete> Deprecated 02/2015. Replaced by EasyUnlock.Setup.PromoNotificationEvent. </obsolete> @@ -28694,7 +29111,8 @@ </details> </histogram> -<histogram name="EasyUnlock.SetupStateOnClose" enum="EasyUnlockSetupState"> +<histogram name="EasyUnlock.SetupStateOnClose" enum="EasyUnlockSetupState" + expires_after="2018-04-06"> <obsolete> Deprecated as of 03/2018. </obsolete> @@ -28705,7 +29123,8 @@ </summary> </histogram> -<histogram name="EasyUnlock.SignIn.LoginEvent" enum="EasyUnlockAuthEvent"> +<histogram name="EasyUnlock.SignIn.LoginEvent" enum="EasyUnlockAuthEvent" + expires_after="2015-02-11"> <obsolete> Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.SignIn. </obsolete> @@ -28746,7 +29165,8 @@ </details> </histogram> -<histogram name="EasyUnlock.UnlockEvent" enum="EasyUnlockUnlockEvent"> +<histogram name="EasyUnlock.UnlockEvent" enum="EasyUnlockUnlockEvent" + expires_after="2015-02-11"> <obsolete> Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.Unlock. </obsolete> @@ -28755,7 +29175,8 @@ <summary>Screen unlock events detected while EasyUnlock was enabled.</summary> </histogram> -<histogram name="EmbeddedWorkerInstance.ExistingProcessAllocation" units="ms"> +<histogram name="EmbeddedWorkerInstance.ExistingProcessAllocation" units="ms" + expires_after="2016-04-07"> <obsolete> Deprecated 03/2016; replaced by EmbeddedWorkerInstance.Start.SendStartWorker_ExistingProcess and @@ -28768,7 +29189,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.NewProcessAllocation" units="ms"> +<histogram name="EmbeddedWorkerInstance.NewProcessAllocation" units="ms" + expires_after="2016-04-07"> <obsolete> Deprecated 03/2016; replaced by EmbeddedWorkerInstance.Start.SendStartWorker_NewProcess and @@ -28781,7 +29203,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.ProcessAllocation" units="ms"> +<histogram name="EmbeddedWorkerInstance.ProcessAllocation" units="ms" + expires_after="2015-05-26"> <obsolete> Deprecated as of 05/2015. Replaced by EmbeddedWorkerInstance.NewProcessAllocation and @@ -28802,7 +29225,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.ScriptEvaluate" units="ms"> +<histogram name="EmbeddedWorkerInstance.ScriptEvaluate" units="ms" + expires_after="2016-04-07"> <obsolete> Deprecated as of 03/2016. Replaced by EmbeddedWorkerInstance.Start.TimeToEvaluateScript. @@ -28813,7 +29237,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.ScriptLoadWithNetworkAccess" units="ms"> +<histogram name="EmbeddedWorkerInstance.ScriptLoadWithNetworkAccess" units="ms" + expires_after="2016-04-07"> <obsolete> Deprecated as of 03/2016. Replaced by EmbeddedWorkerInstance.Start.TimeToLoad_Network. @@ -28826,7 +29251,7 @@ </histogram> <histogram name="EmbeddedWorkerInstance.ScriptLoadWithoutNetworkAccess" - units="ms"> + units="ms" expires_after="2016-04-07"> <obsolete> Deprecated as of 03/2016. Replaced by EmbeddedWorkerInstance.Start.TimeToLoad_HttpCache and @@ -28839,7 +29264,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.Start.StartMessageLatency" units="ms"> +<histogram name="EmbeddedWorkerInstance.Start.StartMessageLatency" units="ms" + expires_after="2018-06-29"> <obsolete> Removed June 2018 (M69). Replaced with ServiceWorker.StartTiming.SentStartWorkerToReceivedStartWorker. @@ -28856,7 +29282,7 @@ </histogram> <histogram name="EmbeddedWorkerInstance.Start.StartMessageLatency.Type" - enum="CrossProcessTimeDelta"> + enum="CrossProcessTimeDelta" expires_after="2018-06-29"> <obsolete> Removed June 2018 (M69). Replaced with ServiceWorker.StartTiming.ClockConsistency. @@ -28868,7 +29294,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript" units="ms"> +<histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript" units="ms" + expires_after="2018-07-03"> <obsolete> Removed July 2018 (M69). Replaced with ServiceWorker.StartTiming.ScriptEvaluationStartToScriptEvaluationEnd. @@ -28882,7 +29309,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache" units="ms"> +<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache" units="ms" + expires_after="2018-06-25"> <obsolete> Removed June 2018 (M69). This depended on the URLRequestJob code path, which won't be taken with S13nServiceWorker/NetworkService. If we want this again, @@ -28897,7 +29325,7 @@ </histogram> <histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript" - units="ms"> + units="ms" expires_after="2018-06-25"> <obsolete> Removed June 2018 (M69). This path is no longer taken since service worker installed script manager is used for installed scripts. @@ -28906,7 +29334,8 @@ <summary>The time taken to load an installed service worker.</summary> </histogram> -<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network" units="ms"> +<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network" units="ms" + expires_after="2018-06-25"> <obsolete> Removed June 2018 (M69), see note in EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache. @@ -28918,7 +29347,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker" units="ms"> +<histogram name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker" units="ms" + expires_after="2018-07-03"> <obsolete> Removed July 2018 (M69). Replaced with ServiceWorker.StartTiming.StartToSentStartWorker. @@ -28930,7 +29360,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread" units="ms"> +<histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread" units="ms" + expires_after="2018-07-03"> <obsolete> Removed July 2018 (M69). Replaced with ServiceWorker.StartTiming.ReceivedStartWorkerToScriptEvaluationStart. @@ -28944,7 +29375,8 @@ </summary> </histogram> -<histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob" units="ms"> +<histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob" units="ms" + expires_after="2018-06-25"> <obsolete> Removed June 2018 (M69). This path is no longer taken since service worker installed script manager is used for installed scripts. @@ -28958,7 +29390,7 @@ </histogram> <histogram name="EmbeddedWorkerInstance.Start.WaitedForRendererSetup" - enum="BooleanWaited"> + enum="BooleanWaited" expires_after="2018-06-27"> <obsolete> Removed June 2018 (M69). </obsolete> @@ -28975,7 +29407,7 @@ </histogram> <histogram name="EmbeddedWorkerInstance.Start.WaitedForRendererSetup.Time" - units="ms"> + units="ms" expires_after="2018-06-27"> <obsolete> Removed June 2018 (M69). </obsolete> @@ -28989,7 +29421,8 @@ </summary> </histogram> -<histogram name="EnhancedBookmarks.AllBookmarksCount"> +<histogram name="EnhancedBookmarks.AllBookmarksCount" + expires_after="2016-05-04"> <obsolete> Removed 4/2016 after we no longer show "all bookamrks" in bookmark manager. @@ -28999,7 +29432,7 @@ </histogram> <histogram name="EnhancedBookmarks.SyncExperimentState" - enum="BookmarksExperimentState"> + enum="BookmarksExperimentState" expires_after="2015-03-17"> <obsolete> Removed 3/2015 along with the enhanced bookmarks sync experiment. </obsolete> @@ -29012,7 +29445,8 @@ </summary> </histogram> -<histogram name="EnhancedBookmarks.ViewMode" enum="EnhancedBookmarkViewMode"> +<histogram name="EnhancedBookmarks.ViewMode" enum="EnhancedBookmarkViewMode" + expires_after="2015-09-22"> <obsolete> Removed 9/2015 after list view became the only view mode. </obsolete> @@ -29138,7 +29572,8 @@ </summary> </histogram> -<histogram name="Enterprise.DMToken" enum="EnterpriseDMTokenType"> +<histogram name="Enterprise.DMToken" enum="EnterpriseDMTokenType" + expires_after="2019-03-15"> <obsolete> Deprecated 03/2019, since no code reports it anymore. </obsolete> @@ -29150,7 +29585,7 @@ </histogram> <histogram name="Enterprise.DomainWhitelistRegexFailure" - enum="EnterpriseDomainRegex"> + enum="EnterpriseDomainRegex" expires_after="2019-03-28"> <obsolete> Deprecated 03/2019, since the issues has been long fixed. </obsolete> @@ -29163,7 +29598,7 @@ </histogram> <histogram name="Enterprise.DomainWhitelistRegexFailureStatus" - units="icu error"> + units="icu error" expires_after="2019-03-28"> <obsolete> Deprecated 03/2019, since the issues has been long fixed. </obsolete> @@ -29175,7 +29610,8 @@ </summary> </histogram> -<histogram name="Enterprise.DomainWhitelistRegexSuccess" enum="BooleanSuccess"> +<histogram name="Enterprise.DomainWhitelistRegexSuccess" enum="BooleanSuccess" + expires_after="2019-03-28"> <obsolete> Deprecated 03/2019, since the issues has been long fixed. </obsolete> @@ -29422,7 +29858,8 @@ </summary> </histogram> -<histogram name="Enterprise.Policy" enum="EnterprisePolicyType"> +<histogram name="Enterprise.Policy" enum="EnterprisePolicyType" + expires_after="2019-03-15"> <obsolete> Deprecated 03/2019, since no code reports it anymore. </obsolete> @@ -29595,7 +30032,8 @@ </summary> </histogram> -<histogram name="Enterprise.SystemLogPIILeak" enum="SystemLogPIIType"> +<histogram name="Enterprise.SystemLogPIILeak" enum="SystemLogPIIType" + expires_after="2016-01-26"> <obsolete> Deprecated and removed from code as of 01/2016. </obsolete> @@ -29788,7 +30226,7 @@ </histogram> <histogram name="EnterpriseCheck.DeprecatedDomainBindSucceeded" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-07-19"> <obsolete> Deprecated 07/2016 in Issue 621270. </obsolete> @@ -29801,7 +30239,7 @@ </histogram> <histogram name="EnterpriseCheck.DeprecatedDomainCheckFailed" - enum="EnterpriseCheckError"> + enum="EnterpriseCheckError" expires_after="2016-07-19"> <obsolete> Deprecated 07/2016 in Issue 621270. </obsolete> @@ -29934,7 +30372,8 @@ </summary> </histogram> -<histogram name="Event.ActionAfterDoubleTapNoDelay" enum="ActionAfterDoubleTap"> +<histogram name="Event.ActionAfterDoubleTapNoDelay" enum="ActionAfterDoubleTap" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -29949,7 +30388,7 @@ </histogram> <histogram name="Event.ActionAfterDoubleTapWithDelay" - enum="ActionAfterDoubleTap"> + enum="ActionAfterDoubleTap" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30042,7 +30481,8 @@ <summary>Number of Touch events coalesced.</summary> </histogram> -<histogram name="Event.CoalescedLatency.Mouse" units="ms"> +<histogram name="Event.CoalescedLatency.Mouse" units="ms" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30054,7 +30494,8 @@ </summary> </histogram> -<histogram name="Event.CoalescedLatency.Touch" units="ms"> +<histogram name="Event.CoalescedLatency.Touch" units="ms" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30067,7 +30508,7 @@ </histogram> <histogram name="Event.CompositorThreadEventQueue.CoalescedCount" - units="events"> + units="events" expires_after="2019-01-03"> <obsolete> Deprecated 01/2019 due to lack of usage. </obsolete> @@ -30083,7 +30524,7 @@ </histogram> <histogram name="Event.CompositorThreadEventQueue.Continuous.HeadQueueingTime" - units="microseconds"> + units="microseconds" expires_after="2019-01-03"> <obsolete> Deprecated 01/2019 due to lack of usage. </obsolete> @@ -30104,7 +30545,7 @@ </histogram> <histogram name="Event.CompositorThreadEventQueue.Continuous.TailQueueingTime" - units="microseconds"> + units="microseconds" expires_after="2019-01-03"> <obsolete> Deprecated 01/2019 due to lack of usage. </obsolete> @@ -30125,7 +30566,7 @@ </histogram> <histogram name="Event.CompositorThreadEventQueue.NonContinuous.QueueingTime" - units="microseconds"> + units="microseconds" expires_after="2019-01-03"> <obsolete> Deprecated 01/2019 due to lack of usage. </obsolete> @@ -30146,7 +30587,7 @@ </histogram> <histogram name="Event.DownEventCount.PerDestination" - enum="DownEventDestination"> + enum="DownEventDestination" expires_after="2018-01-11"> <obsolete> Deprecated 01/2018 in favor of Event.DownEventCount.PerInputFormFactorDestinationCombination. @@ -30161,7 +30602,8 @@ </summary> </histogram> -<histogram name="Event.DownEventCount.PerFormFactor" enum="DownEventFormFactor"> +<histogram name="Event.DownEventCount.PerFormFactor" enum="DownEventFormFactor" + expires_after="2018-01-11"> <obsolete> Deprecated 01/2018 in favor of Event.DownEventCount.PerInputFormFactorDestinationCombination. @@ -30173,7 +30615,8 @@ </summary> </histogram> -<histogram name="Event.DownEventCount.PerInput" enum="DownEventSource"> +<histogram name="Event.DownEventCount.PerInput" enum="DownEventSource" + expires_after="2018-01-11"> <obsolete> Deprecated 01/2018 in favor of Event.DownEventCount.PerInputFormFactorDestinationCombination. @@ -30302,7 +30745,8 @@ </summary> </histogram> -<histogram name="Event.Frequency.Renderer.FlingAnimate" units="hertz"> +<histogram name="Event.Frequency.Renderer.FlingAnimate" units="hertz" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30318,7 +30762,8 @@ </summary> </histogram> -<histogram name="Event.Frequency.RendererImpl.FlingAnimate" units="hertz"> +<histogram name="Event.Frequency.RendererImpl.FlingAnimate" units="hertz" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30540,7 +30985,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser" units="microseconds"> +<histogram name="Event.Latency.Browser" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30553,7 +30999,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_DROP_TARGET_EVENT" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30565,7 +31011,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_GESTURE_BEGIN" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_GESTURE_BEGIN" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30578,7 +31025,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_DOUBLE_TAP" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30590,7 +31037,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_GESTURE_END" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_GESTURE_END" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30603,7 +31051,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_LONG_PRESS" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30616,7 +31064,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_LONG_TAP" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30629,7 +31077,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_MULTIFINGER_SWIPE" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30642,7 +31090,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_BEGIN" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30655,7 +31103,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_END" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30668,7 +31116,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_UPDATE" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30681,7 +31129,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_BEGIN" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30694,7 +31142,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_END" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30707,7 +31155,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_UPDATE" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30719,7 +31167,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_GESTURE_TAP" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_GESTURE_TAP" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30732,7 +31181,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_TAP_CANCEL" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30745,7 +31194,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_TAP_DOWN" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30758,7 +31207,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_GESTURE_TWO_FINGER_TAP" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30770,7 +31219,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_KEY_PRESSED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_KEY_PRESSED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30782,7 +31232,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_KEY_RELEASED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_KEY_RELEASED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30795,7 +31246,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_MOUSE_CAPTURE_CHANGED" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30807,7 +31258,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_MOUSE_DRAGGED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_MOUSE_DRAGGED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30819,7 +31271,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_MOUSE_ENTERED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_MOUSE_ENTERED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30831,7 +31284,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_MOUSE_EXITED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_MOUSE_EXITED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30843,7 +31297,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_MOUSE_MOVED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_MOUSE_MOVED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30855,7 +31310,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_MOUSE_RELEASED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_MOUSE_RELEASED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30867,7 +31323,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_MOUSEWHEEL" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_MOUSEWHEEL" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30879,7 +31336,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_SCROLL" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_SCROLL" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30892,7 +31350,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_SCROLL_FLING_CANCEL" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30905,7 +31363,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_SCROLL_FLING_START" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30917,7 +31375,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_TOUCH_CANCELLED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_TOUCH_CANCELLED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30929,7 +31388,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_TOUCH_MOVED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_TOUCH_MOVED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30941,7 +31401,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_TOUCH_PRESSED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_TOUCH_PRESSED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30953,7 +31414,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_TOUCH_RELEASED" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_TOUCH_RELEASED" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30966,7 +31428,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_TOUCH_STATIONARY" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30979,7 +31441,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_PRESS" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -30992,7 +31454,7 @@ </histogram> <histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_RELEASE" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31004,7 +31466,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.ET_UNKNOWN" units="microseconds"> +<histogram name="Event.Latency.Browser.ET_UNKNOWN" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31016,7 +31479,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.KeyPressAcked" units="microseconds"> +<histogram name="Event.Latency.Browser.KeyPressAcked" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31027,7 +31491,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.KeyPressUI" units="microseconds"> +<histogram name="Event.Latency.Browser.KeyPressUI" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31038,7 +31503,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.TouchAcked" units="microseconds"> +<histogram name="Event.Latency.Browser.TouchAcked" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31050,7 +31516,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.TouchUI" units="microseconds"> +<histogram name="Event.Latency.Browser.TouchUI" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31062,7 +31529,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.WheelAcked" units="microseconds"> +<histogram name="Event.Latency.Browser.WheelAcked" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31074,7 +31542,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Browser.WheelUI" units="microseconds"> +<histogram name="Event.Latency.Browser.WheelUI" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31276,7 +31745,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Renderer" units="microseconds"> +<histogram name="Event.Latency.Renderer" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31289,7 +31759,8 @@ </summary> </histogram> -<histogram name="Event.Latency.Renderer2" units="microseconds"> +<histogram name="Event.Latency.Renderer2" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31305,7 +31776,8 @@ </summary> </histogram> -<histogram name="Event.Latency.RendererImpl" units="microseconds"> +<histogram name="Event.Latency.RendererImpl" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31321,7 +31793,8 @@ </summary> </histogram> -<histogram name="Event.Latency.RendererImpl.GestureScroll" units="microseconds"> +<histogram name="Event.Latency.RendererImpl.GestureScroll" units="microseconds" + expires_after="2013-12-12"> <obsolete> Deprecated 12/2013 and replaced by Event.Latency.RendererImpl.GestureScroll2 </obsolete> @@ -31333,7 +31806,7 @@ </histogram> <histogram name="Event.Latency.RendererImpl.GestureScroll2" - units="microseconds"> + units="microseconds" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -31391,7 +31864,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin" - units="microseconds"> + units="microseconds" expires_after="2018-06-12"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin2 https://crbug.com/849735 in M68. </obsolete> @@ -31515,7 +31988,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2" - units="microseconds"> + units="microseconds" expires_after="2019-01-17"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -31540,7 +32013,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin3" - units="microseconds"> + units="microseconds" expires_after="2018-06-12"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -31666,7 +32139,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2" - units="microseconds"> + units="microseconds" expires_after="2019-01-17"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -31691,7 +32164,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin3" - units="microseconds"> + units="microseconds" expires_after="2018-06-12"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -31847,7 +32320,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap" - units="microseconds"> + units="microseconds" expires_after="2016-10-07"> <obsolete> To be replaced by Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2, @@ -31861,7 +32334,8 @@ </summary> </histogram> -<histogram name="Event.Latency.ScrollUpdate.GpuSwap" units="microseconds"> +<histogram name="Event.Latency.ScrollUpdate.GpuSwap" units="microseconds" + expires_after="2016-10-07"> <obsolete> To be replaced by Event.Latency.ScrollUpdate.Touch.GpuSwap2, Event.Latency.ScrollUpdate.wheel.GpuSwap2 in M56. https://crbug.com/649754 @@ -31874,7 +32348,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.HandledToRendererSwap" - units="microseconds"> + units="microseconds" expires_after="2016-10-07"> <obsolete> To be replaced by Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2, Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2 in M56. @@ -31888,7 +32362,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified" - units="microseconds"> + units="microseconds" expires_after="2016-10-07"> <obsolete> To be replaced by Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2, @@ -31903,7 +32377,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.TimeToScrollUpdateSwapBegin" - units="microseconds"> + units="microseconds" expires_after="2018-06-12"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin2 https://crbug.com/849735 in M68. </obsolete> @@ -32043,7 +32517,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2" - units="microseconds"> + units="microseconds" expires_after="2019-01-17"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -32067,7 +32541,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin3" - units="microseconds"> + units="microseconds" expires_after="2018-06-12"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -32113,7 +32587,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.TouchToHandled" - units="microseconds"> + units="microseconds" expires_after="2016-10-07"> <obsolete> To be replaced by Event.Latency.ScrollUpdate.Touch.TimeToHandled2 in M56. https://crbug.com/649754 @@ -32227,7 +32701,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin2" - units="microseconds"> + units="microseconds" expires_after="2019-01-17"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -32251,7 +32725,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin3" - units="microseconds"> + units="microseconds" expires_after="2018-06-12"> <obsolete> Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68. </obsolete> @@ -32294,7 +32768,7 @@ </histogram> <histogram name="Event.Latency.Touch.TimeToFirstScrollUpdateSwapBegin2" - units="microseconds"> + units="microseconds" expires_after="2016-10-14"> <obsolete> Replaced by Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2. @@ -32309,7 +32783,7 @@ </histogram> <histogram name="Event.Latency.Touch.TimeToScrollUpdateSwapBegin2" - units="microseconds"> + units="microseconds" expires_after="2016-10-14"> <obsolete> Replaced by Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2. </obsolete> @@ -32322,7 +32796,7 @@ </histogram> <histogram name="Event.Latency.TouchToFirstScrollUpdateSwap" - units="microseconds"> + units="microseconds" expires_after="2015-04-24"> <obsolete> Replaced by Event.Latency.TouchToFirstScrollUpdateSwapBegin. crbug.com/478845 @@ -32337,7 +32811,7 @@ </histogram> <histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin" - units="microseconds"> + units="microseconds" expires_after="2017-10-19"> <obsolete> Replaced by Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2. </obsolete> @@ -32356,7 +32830,8 @@ </summary> </histogram> -<histogram name="Event.Latency.TouchToScrollUpdateSwap" units="microseconds"> +<histogram name="Event.Latency.TouchToScrollUpdateSwap" units="microseconds" + expires_after="2015-04-24"> <obsolete> Replaced by Event.Latency.TouchToScrollUpdateSwapBegin. crbug.com/478845 </obsolete> @@ -32369,7 +32844,7 @@ </histogram> <histogram name="Event.Latency.TouchToScrollUpdateSwapBegin" - units="microseconds"> + units="microseconds" expires_after="2017-10-19"> <obsolete> Replaced by Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2. </obsolete> @@ -32388,7 +32863,7 @@ </histogram> <histogram name="Event.Latency.Wheel.TimeToFirstScrollUpdateSwapBegin2" - units="microseconds"> + units="microseconds" expires_after="2016-10-14"> <obsolete> Replaced by Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2. @@ -32403,7 +32878,7 @@ </histogram> <histogram name="Event.Latency.X11EventSource.UpdateServerTime" - units="microseconds"> + units="microseconds" expires_after="2016-09-02"> <obsolete> Deprecated 08/2016, and replaced by Linux.X11.ServerRTT. </obsolete> @@ -32411,7 +32886,8 @@ <summary>Time to request a timestamp from the X server.</summary> </histogram> -<histogram name="Event.MainThreadEventQueue.CoalescedCount" units="events"> +<histogram name="Event.MainThreadEventQueue.CoalescedCount" units="events" + expires_after="2018-03-07"> <obsolete> Deprecated 03/2018 due to lack of usage. </obsolete> @@ -32426,7 +32902,7 @@ </histogram> <histogram name="Event.MainThreadEventQueue.Continuous.FreshnessTime" - units="microseconds"> + units="microseconds" expires_after="2018-01-03"> <obsolete> Deprecated 01/2018 due to lack of usage. </obsolete> @@ -32441,7 +32917,7 @@ </histogram> <histogram name="Event.MainThreadEventQueue.Continuous.QueueingTime" - units="microseconds"> + units="microseconds" expires_after="2018-01-03"> <obsolete> Deprecated 01/2018 due to lack of usage. </obsolete> @@ -32466,7 +32942,7 @@ </histogram> <histogram name="Event.MainThreadEventQueue.NonContinuous.QueueingTime" - units="microseconds"> + units="microseconds" expires_after="2018-01-03"> <obsolete> Deprecated 01/2018 due to lack of usage. </obsolete> @@ -32503,7 +32979,7 @@ </histogram> <histogram name="Event.PassiveListeners.ForcedNonBlockingLatency" - units="microseconds"> + units="microseconds" expires_after="2016-08-19"> <obsolete> Deprecated 08/2016 in Issue 595327, and replaced by Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling. @@ -32570,7 +33046,8 @@ </summary> </histogram> -<histogram name="Event.RenderView.DiscardInput" enum="BooleanHit"> +<histogram name="Event.RenderView.DiscardInput" enum="BooleanHit" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32583,7 +33060,8 @@ </summary> </histogram> -<histogram name="Event.Scroll.ScrollerSize.OnLoad" units="pixels"> +<histogram name="Event.Scroll.ScrollerSize.OnLoad" units="pixels" + expires_after="2017-10-18"> <obsolete> Deprecated 10/2017 due to the completion of the experiment. </obsolete> @@ -32598,7 +33076,8 @@ </summary> </histogram> -<histogram name="Event.Scroll.ScrollerSize.OnScroll" units="pixels"> +<histogram name="Event.Scroll.ScrollerSize.OnScroll" units="pixels" + expires_after="2017-10-23"> <obsolete> Deprecated 10/2017 due to the completion of the experiment. </obsolete> @@ -32625,7 +33104,8 @@ </summary> </histogram> -<histogram name="Event.TimestampHasValidTimebase" enum="EventTimestampValidity"> +<histogram name="Event.TimestampHasValidTimebase" enum="EventTimestampValidity" + expires_after="2018-01-17"> <obsolete> Deprecated as of 1/2018 in issue 650338 (http://crbug.com/650338). Using a DCHECK instead. @@ -32667,7 +33147,7 @@ </histogram> <histogram name="Event.Touch.TargetAndDispatchResult" - enum="TouchTargetAndDispatchResultType"> + enum="TouchTargetAndDispatchResultType" expires_after="2016-05-19"> <obsolete> Deprecated 05/2016, and replaced by Event.Touch.TargetAndDispatchResult2. </obsolete> @@ -32732,7 +33212,7 @@ </histogram> <histogram name="Event.Touch.TouchAdjustment.AdjustedNode" - enum="TouchAdjustmentNodeRelation"> + enum="TouchAdjustmentNodeRelation" expires_after="2018-05-11"> <obsolete> Deprecated 03/2018 due to no longer needed. </obsolete> @@ -32747,7 +33227,8 @@ </summary> </histogram> -<histogram name="Event.Touch.TouchAdjustment.AdjustToSameNode" enum="Boolean"> +<histogram name="Event.Touch.TouchAdjustment.AdjustToSameNode" enum="Boolean" + expires_after="2018-02-22"> <obsolete> Deprecated 02/2018 and replaced by Event.Touch.TouchAdjustment.AdjustedNode. </obsolete> @@ -32762,7 +33243,7 @@ </histogram> <histogram name="Event.Touch.TouchDispositionsAfterPageLoad" - enum="TouchEventDispatchResultType"> + enum="TouchEventDispatchResultType" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32777,7 +33258,7 @@ </histogram> <histogram name="Event.Touch.TouchDispositionsBeforePageLoad" - enum="TouchEventDispatchResultType"> + enum="TouchEventDispatchResultType" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32792,7 +33273,7 @@ </histogram> <histogram name="Event.Touch.TouchDispositionsDuringFling" - enum="TouchEventDispatchResultType"> + enum="TouchEventDispatchResultType" expires_after="2016-08-19"> <obsolete> Deprecated 08/2016 in Issue 595327, and replaced by Event.Touch.TouchDispositionsDuringFling2. @@ -32805,7 +33286,7 @@ </histogram> <histogram name="Event.Touch.TouchDispositionsDuringFling2" - enum="TouchEventDispatchResultType"> + enum="TouchEventDispatchResultType" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32820,7 +33301,7 @@ </histogram> <histogram name="Event.Touch.TouchDispositionsOutsideFling" - enum="TouchEventDispatchResultType"> + enum="TouchEventDispatchResultType" expires_after="2016-08-19"> <obsolete> Deprecated 08/2016 in Issue 595327, and replaced by Event.Touch.TouchDispositionsOutsideFling2. @@ -32833,7 +33314,7 @@ </histogram> <histogram name="Event.Touch.TouchDispositionsOutsideFling2" - enum="TouchEventDispatchResultType"> + enum="TouchEventDispatchResultType" expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32847,7 +33328,8 @@ </summary> </histogram> -<histogram name="Event.Touch.TouchLatencyAfterPageLoad" units="microseconds"> +<histogram name="Event.Touch.TouchLatencyAfterPageLoad" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32861,7 +33343,8 @@ </summary> </histogram> -<histogram name="Event.Touch.TouchLatencyBeforePageLoad" units="microseconds"> +<histogram name="Event.Touch.TouchLatencyBeforePageLoad" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32876,7 +33359,8 @@ </summary> </histogram> -<histogram name="Event.Touch.TouchLatencyOutsideFling" units="microseconds"> +<histogram name="Event.Touch.TouchLatencyOutsideFling" units="microseconds" + expires_after="2017-06-26"> <obsolete> Deprecated 06/2017 due to lack of usage. </obsolete> @@ -32890,7 +33374,8 @@ </summary> </histogram> -<histogram name="Event.Touch.TouchStartLatencyDuringFling" units="microseconds"> +<histogram name="Event.Touch.TouchStartLatencyDuringFling" units="microseconds" + expires_after="2016-08-19"> <obsolete> Deprecated 08/2016 in Issue 595327, and replaced by Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling. @@ -32905,7 +33390,7 @@ </histogram> <histogram name="Event.Touch.TouchStartLatencyOutsideFling" - units="microseconds"> + units="microseconds" expires_after="2016-08-19"> <obsolete> Deprecated 08/2016 in Issue 595327, and replaced by Event.Touch.TouchLatencyOutsideFling. @@ -33024,7 +33509,8 @@ </summary> </histogram> -<histogram name="Event.VizHitTest.AggregateTime" units="ms"> +<histogram name="Event.VizHitTest.AggregateTime" units="ms" + expires_after="2018-07-10"> <obsolete> Deprecated as of 07/2018. Replaced with Event.VizHitTest.AggregateTimeUs. </obsolete> @@ -33073,7 +33559,8 @@ </summary> </histogram> -<histogram name="Event.VizHitTest.TargetTime" units="ms"> +<histogram name="Event.VizHitTest.TargetTime" units="ms" + expires_after="2018-07-10"> <obsolete> Deprecated as of 07/2018. Replaced with Event.VizHitTest.TargetTimeUs. </obsolete> @@ -33094,7 +33581,8 @@ </summary> </histogram> -<histogram name="Event.VizHitTest.TransformTime" units="ms"> +<histogram name="Event.VizHitTest.TransformTime" units="ms" + expires_after="2018-07-10"> <obsolete> Deprecated as of 07/2018. Replaced with Event.VizHitTest.TransformTimeUs. </obsolete> @@ -33287,7 +33775,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.AdInjected" units="Extension Count"> +<histogram name="ExtensionActivity.AdInjected" units="Extension Count" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33298,7 +33787,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.AdLikelyInjected" units="Extension Count"> +<histogram name="ExtensionActivity.AdLikelyInjected" units="Extension Count" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33310,7 +33800,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.AdLikelyReplaced" units="Extension Count"> +<histogram name="ExtensionActivity.AdLikelyReplaced" units="Extension Count" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33322,7 +33813,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.AdRemoved" units="Extension Count"> +<histogram name="ExtensionActivity.AdRemoved" units="Extension Count" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33333,7 +33825,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.AdReplaced" units="Extension Count"> +<histogram name="ExtensionActivity.AdReplaced" units="Extension Count" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33344,7 +33837,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.ContentScript"> +<histogram name="ExtensionActivity.ContentScript" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33354,7 +33847,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.CreatedDiv"> +<histogram name="ExtensionActivity.CreatedDiv" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33365,7 +33858,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.CreatedEmbed"> +<histogram name="ExtensionActivity.CreatedEmbed" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33376,7 +33869,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.CreatedIframe"> +<histogram name="ExtensionActivity.CreatedIframe" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33387,7 +33880,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.CreatedInput"> +<histogram name="ExtensionActivity.CreatedInput" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33398,7 +33891,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.CreatedLink"> +<histogram name="ExtensionActivity.CreatedLink" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33409,7 +33902,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.CreatedObject"> +<histogram name="ExtensionActivity.CreatedObject" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33420,7 +33913,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.CreatedScript"> +<histogram name="ExtensionActivity.CreatedScript" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33431,7 +33924,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.DocumentWrite"> +<histogram name="ExtensionActivity.DocumentWrite" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33441,7 +33934,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.ContentScript"> +<histogram name="ExtensionActivity.Google.ContentScript" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33452,7 +33946,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.CreatedDiv"> +<histogram name="ExtensionActivity.Google.CreatedDiv" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33463,7 +33958,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.CreatedEmbed"> +<histogram name="ExtensionActivity.Google.CreatedEmbed" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33482,7 +33978,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.CreatedInput"> +<histogram name="ExtensionActivity.Google.CreatedInput" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33493,7 +33990,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.CreatedLink"> +<histogram name="ExtensionActivity.Google.CreatedLink" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33504,7 +34002,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.CreatedObject"> +<histogram name="ExtensionActivity.Google.CreatedObject" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33515,7 +34014,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.CreatedScript"> +<histogram name="ExtensionActivity.Google.CreatedScript" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33526,7 +34026,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.DocumentWrite"> +<histogram name="ExtensionActivity.Google.DocumentWrite" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33537,7 +34038,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.InnerHtml"> +<histogram name="ExtensionActivity.Google.InnerHtml" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33548,7 +34049,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.InvokedDomMethod"> +<histogram name="ExtensionActivity.Google.InvokedDomMethod" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33559,7 +34061,8 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.ModifiedDom"> +<histogram name="ExtensionActivity.Google.ModifiedDom" + expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33570,7 +34073,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.Google.ReadDom"> +<histogram name="ExtensionActivity.Google.ReadDom" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33581,7 +34084,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.InnerHtml"> +<histogram name="ExtensionActivity.InnerHtml" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33591,7 +34094,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.InvokedDomMethod"> +<histogram name="ExtensionActivity.InvokedDomMethod" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33601,7 +34104,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.ModifiedDom"> +<histogram name="ExtensionActivity.ModifiedDom" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33612,7 +34115,7 @@ </summary> </histogram> -<histogram name="ExtensionActivity.ReadDom"> +<histogram name="ExtensionActivity.ReadDom" expires_after="2015-08-17"> <obsolete> Deprecated with M46. </obsolete> @@ -33741,7 +34244,7 @@ </histogram> <histogram name="ExtensionInstalledLoader.ForceDisabled" - enum="BooleanForceDisabled"> + enum="BooleanForceDisabled" expires_after="2017-08-23"> <obsolete> Replaced with ExtensionInstalledLoader.ForceDisabled2. </obsolete> @@ -33753,7 +34256,7 @@ </histogram> <histogram name="ExtensionInstalledLoader.ForceDisabled2" - enum="BooleanForceDisabled"> + enum="BooleanForceDisabled" expires_after="2019-02-16"> <obsolete> Expired 2018-08-30 </obsolete> @@ -33934,7 +34437,7 @@ </histogram> <histogram name="Extensions.ActiveScriptController.ShownActiveScriptsOnPage" - units="Number of Actions"> + units="Number of Actions" expires_after="2015-02-10"> <obsolete> Deprecated 2/2014. </obsolete> @@ -34007,7 +34510,8 @@ </summary> </histogram> -<histogram name="Extensions.APIUse_RelativeURL" enum="UrlResolutionResult"> +<histogram name="Extensions.APIUse_RelativeURL" enum="UrlResolutionResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -34027,7 +34531,8 @@ </summary> </histogram> -<histogram name="Extensions.AppLaunchContainer" enum="AppLaunchContainer"> +<histogram name="Extensions.AppLaunchContainer" enum="AppLaunchContainer" + expires_after="2014-12-03"> <obsolete> Deprecated as of 12/2014, replaced by Apps.HostedAppLaunchContainer. </obsolete> @@ -34116,7 +34621,8 @@ </summary> </histogram> -<histogram name="Extensions.BackgroundPageLoadTime" units="ms"> +<histogram name="Extensions.BackgroundPageLoadTime" units="ms" + expires_after="2015-02-06"> <obsolete> Replaced by Extensions.BackgroundPageLoadTime2. </obsolete> @@ -34565,7 +35071,7 @@ </histogram> <histogram name="Extensions.CorruptPolicyExtensionWouldBeDisabled" - enum="BooleanHit"> + enum="BooleanHit" expires_after="2016-09-09"> <obsolete> Deprecated 9/2016 by fix for Issue 447040. </obsolete> @@ -34653,7 +35159,7 @@ </histogram> <histogram name="Extensions.Database.Restore" - enum="LevelDBDatabaseCorruptionRestoreValue"> + enum="LevelDBDatabaseCorruptionRestoreValue" expires_after="2016-01-07"> <obsolete> Shipped only in M48. Superceded by Extensions.Database.Database.Restore and Extensions.Database.Value.Restore. @@ -34736,7 +35242,8 @@ </summary> </histogram> -<histogram name="Extensions.DeclarativeNetRequest.IndexRulesTime" units="ms"> +<histogram name="Extensions.DeclarativeNetRequest.IndexRulesTime" units="ms" + expires_after="2019-03-22"> <obsolete> Deprecated March 2019. </obsolete> @@ -34917,7 +35424,8 @@ </summary> </histogram> -<histogram name="Extensions.DepricatedExternalJsonCount"> +<histogram name="Extensions.DepricatedExternalJsonCount" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -34928,7 +35436,8 @@ </summary> </histogram> -<histogram name="Extensions.DialogLoadTime" units="ms"> +<histogram name="Extensions.DialogLoadTime" units="ms" + expires_after="2015-02-06"> <obsolete> There is no such thing as an extension dialog. </obsolete> @@ -35060,7 +35569,7 @@ </histogram> <histogram name="Extensions.DisabledUIUserResponse" - enum="ExtensionDisabledUIUserResponse"> + enum="ExtensionDisabledUIUserResponse" expires_after="2017-03-15"> <obsolete> Deprecated 03/2017 because miscounting IGNORE histogram entry. This error is fixed with DisabledUIUserResponse2. @@ -35084,7 +35593,7 @@ </histogram> <histogram name="Extensions.DisabledUIUserResponseRemoteInstall" - enum="ExtensionDisabledUIUserResponse"> + enum="ExtensionDisabledUIUserResponse" expires_after="2017-03-15"> <obsolete> Deprecated 03/2017 because miscounting IGNORE histogram entry. This error is fixed with DisabledUIUserResponseRemoteInstall2. @@ -35153,7 +35662,8 @@ </summary> </histogram> -<histogram name="Extensions.EnhancedBookmarksManagerNumEventListeners"> +<histogram name="Extensions.EnhancedBookmarksManagerNumEventListeners" + expires_after="2016-04-15"> <obsolete> Obsolete since the enhanced bookmarks manager is no longer using an event page. @@ -35185,7 +35695,8 @@ </summary> </histogram> -<histogram name="Extensions.EventPageActiveTime" units="ms"> +<histogram name="Extensions.EventPageActiveTime" units="ms" + expires_after="2015-02-06"> <obsolete> Replaced by Extensions.EventPageActiveTime2. </obsolete> @@ -35206,7 +35717,8 @@ <summary>The time an extension's event page has spent unloaded.</summary> </histogram> -<histogram name="Extensions.EventPageLoadTime" units="ms"> +<histogram name="Extensions.EventPageLoadTime" units="ms" + expires_after="2015-02-06"> <obsolete> Replaced by Extensions.EventPageLoadTime2. </obsolete> @@ -35392,7 +35904,8 @@ </summary> </histogram> -<histogram name="Extensions.ExtensionRendererStateCacheHit" units="Boolean"> +<histogram name="Extensions.ExtensionRendererStateCacheHit" units="Boolean" + expires_after="2016-04-05"> <obsolete> Deprecated 4/2016. ExtensionRendererState was replaced with ExtensionFrameMap. @@ -35521,7 +36034,8 @@ </summary> </histogram> -<histogram name="Extensions.ExternalWarningUninstallationResult" enum="Boolean"> +<histogram name="Extensions.ExternalWarningUninstallationResult" enum="Boolean" + expires_after="2019-01-29"> <obsolete> Expired 2018-08. </obsolete> @@ -35720,7 +36234,8 @@ </summary> </histogram> -<histogram name="Extensions.GetUserDataTempDir" enum="GetUserDataTempDirResult"> +<histogram name="Extensions.GetUserDataTempDir" enum="GetUserDataTempDirResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -36046,7 +36561,8 @@ </summary> </histogram> -<histogram name="Extensions.InjectScriptTime" units="ms"> +<histogram name="Extensions.InjectScriptTime" units="ms" + expires_after="2017-03-20"> <obsolete> Deprecated 03/2017 in favor of Extensions.InjectedScriptExecutionTime. </obsolete> @@ -36205,7 +36721,7 @@ </summary> </histogram> -<histogram name="Extensions.LoadContentPack"> +<histogram name="Extensions.LoadContentPack" expires_after="2015-04-23"> <obsolete> Deprecated as of 4/2015. Replaced by ManagedUsers.Whitelist.Count. </obsolete> @@ -36539,7 +37055,8 @@ </summary> </histogram> -<histogram name="Extensions.NetworkDelayStartup" units="ms"> +<histogram name="Extensions.NetworkDelayStartup" units="ms" + expires_after="2016-09-15"> <obsolete> Never used. Added to source 06/2012. Removed from source and added here 09/2016. @@ -36566,7 +37083,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_AutoDisable" enum="ExtensionPermission"> +<histogram name="Extensions.Permissions_AutoDisable" enum="ExtensionPermission" + expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_AutoDisable2. </obsolete> @@ -36579,7 +37097,7 @@ </histogram> <histogram name="Extensions.Permissions_AutoDisable2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_AutoDisable3. </obsolete> @@ -36605,7 +37123,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_Install" enum="ExtensionPermission"> +<histogram name="Extensions.Permissions_Install" enum="ExtensionPermission" + expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_Install2. </obsolete> @@ -36616,7 +37135,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_Install2" enum="ExtensionPermission2"> +<histogram name="Extensions.Permissions_Install2" enum="ExtensionPermission2" + expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_Install3. </obsolete> @@ -36639,7 +37159,7 @@ </histogram> <histogram name="Extensions.Permissions_InstallAbort" - enum="ExtensionPermission"> + enum="ExtensionPermission" expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallAbort2. </obsolete> @@ -36652,7 +37172,7 @@ </histogram> <histogram name="Extensions.Permissions_InstallAbort2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallAbort3. </obsolete> @@ -36679,7 +37199,7 @@ </histogram> <histogram name="Extensions.Permissions_InstallCancel" - enum="ExtensionPermission"> + enum="ExtensionPermission" expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallCancel2. </obsolete> @@ -36691,7 +37211,7 @@ </histogram> <histogram name="Extensions.Permissions_InstallCancel2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallCancel3. </obsolete> @@ -36714,7 +37234,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_Load" enum="ExtensionPermission"> +<histogram name="Extensions.Permissions_Load" enum="ExtensionPermission" + expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_Load2. </obsolete> @@ -36723,7 +37244,8 @@ <summary>The permissions present in an extension when it was loaded.</summary> </histogram> -<histogram name="Extensions.Permissions_Load2" enum="ExtensionPermission2"> +<histogram name="Extensions.Permissions_Load2" enum="ExtensionPermission2" + expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_Load3. </obsolete> @@ -36743,7 +37265,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_ReEnable" enum="ExtensionPermission"> +<histogram name="Extensions.Permissions_ReEnable" enum="ExtensionPermission" + expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnable2. </obsolete> @@ -36755,7 +37278,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_ReEnable2" enum="ExtensionPermission2"> +<histogram name="Extensions.Permissions_ReEnable2" enum="ExtensionPermission2" + expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnable3. </obsolete> @@ -36780,7 +37304,7 @@ </histogram> <histogram name="Extensions.Permissions_ReEnableAbort" - enum="ExtensionPermission"> + enum="ExtensionPermission" expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableAbort2. </obsolete> @@ -36793,7 +37317,7 @@ </histogram> <histogram name="Extensions.Permissions_ReEnableAbort2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableAbort3. </obsolete> @@ -36820,7 +37344,7 @@ </histogram> <histogram name="Extensions.Permissions_ReEnableCancel" - enum="ExtensionPermission"> + enum="ExtensionPermission" expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableCancel2. </obsolete> @@ -36833,7 +37357,7 @@ </histogram> <histogram name="Extensions.Permissions_ReEnableCancel2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableCancel3. </obsolete> @@ -36857,7 +37381,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_Uninstall" enum="ExtensionPermission"> +<histogram name="Extensions.Permissions_Uninstall" enum="ExtensionPermission" + expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_Uninstall2. </obsolete> @@ -36868,7 +37393,8 @@ </summary> </histogram> -<histogram name="Extensions.Permissions_Uninstall2" enum="ExtensionPermission2"> +<histogram name="Extensions.Permissions_Uninstall2" enum="ExtensionPermission2" + expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_Uninstall3. </obsolete> @@ -36891,7 +37417,7 @@ </histogram> <histogram name="Extensions.Permissions_WebStoreInstall" - enum="ExtensionPermission"> + enum="ExtensionPermission" expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_WebStoreInstall2. @@ -36905,7 +37431,7 @@ </histogram> <histogram name="Extensions.Permissions_WebStoreInstall2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_WebStoreInstall3. @@ -36932,7 +37458,7 @@ </histogram> <histogram name="Extensions.Permissions_WebStoreInstallAbort" - enum="ExtensionPermission"> + enum="ExtensionPermission" expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_WebStoreInstallAbort2. @@ -36946,7 +37472,7 @@ </histogram> <histogram name="Extensions.Permissions_WebStoreInstallAbort2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_WebStoreInstallAbort3. @@ -36974,7 +37500,7 @@ </histogram> <histogram name="Extensions.Permissions_WebStoreInstallCancel" - enum="ExtensionPermission"> + enum="ExtensionPermission" expires_after="2014-06-04"> <obsolete> Deprecated as of 5/2014, replaced by Extensions.Permissions_WebStoreInstallCancel2. @@ -36988,7 +37514,7 @@ </histogram> <histogram name="Extensions.Permissions_WebStoreInstallCancel2" - enum="ExtensionPermission2"> + enum="ExtensionPermission2" expires_after="2015-06-12"> <obsolete> Deprecated as of 6/2015, replaced by Extensions.Permissions_WebStoreInstallCancel3. @@ -37026,7 +37552,8 @@ </summary> </histogram> -<histogram name="Extensions.PopupLoadTime" units="ms"> +<histogram name="Extensions.PopupLoadTime" units="ms" + expires_after="2015-02-06"> <obsolete> Replaced by Extensions.PopupLoadTime2. </obsolete> @@ -37270,7 +37797,8 @@ <summary>Length of the path under which a CRX is unpacked.</summary> </histogram> -<histogram name="Extensions.SettingsQuotaExceeded.BytesPerSetting"> +<histogram name="Extensions.SettingsQuotaExceeded.BytesPerSetting" + expires_after="2016-09-13"> <obsolete> Removed in September, 2016 </obsolete> @@ -37281,7 +37809,8 @@ </summary> </histogram> -<histogram name="Extensions.SettingsQuotaExceeded.KeyCount"> +<histogram name="Extensions.SettingsQuotaExceeded.KeyCount" + expires_after="2016-09-13"> <obsolete> Removed in September, 2016 </obsolete> @@ -37292,7 +37821,8 @@ </summary> </histogram> -<histogram name="Extensions.SettingsQuotaExceeded.TotalBytes"> +<histogram name="Extensions.SettingsQuotaExceeded.TotalBytes" + expires_after="2016-09-13"> <obsolete> Removed in September, 2016 </obsolete> @@ -37326,7 +37856,7 @@ </summary> </histogram> -<histogram name="Extensions.StartupDelay" units="ms"> +<histogram name="Extensions.StartupDelay" units="ms" expires_after="2017-05-15"> <obsolete> This has not been recorded since at least mid-2013. </obsolete> @@ -37334,7 +37864,8 @@ <summary>The time one extension delays network requests at startup.</summary> </histogram> -<histogram name="Extensions.StartupDelay_Total" units="ms"> +<histogram name="Extensions.StartupDelay_Total" units="ms" + expires_after="2017-05-15"> <obsolete> This has not been recorded since at least mid-2013. </obsolete> @@ -37388,7 +37919,8 @@ </summary> </histogram> -<histogram name="Extensions.ToolstripLoadTime" units="ms"> +<histogram name="Extensions.ToolstripLoadTime" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -37519,7 +38051,8 @@ </summary> </histogram> -<histogram name="Extensions.UpdateCheckGap" units="minutes"> +<histogram name="Extensions.UpdateCheckGap" units="minutes" + expires_after="2019-01-18"> <obsolete> Removed 2019-01. </obsolete> @@ -37565,7 +38098,7 @@ </histogram> <histogram name="Extensions.UpdateFrequencyCommandLineFlagIsUsed" - enum="BooleanPresent"> + enum="BooleanPresent" expires_after="2018-03-20"> <obsolete> Deprecated 3/2018 in https://crbug.com/357781 with the removal of the extensions-update-frequency command line flag. @@ -37604,7 +38137,8 @@ </summary> </histogram> -<histogram name="Extensions.UpdaterWriteCrx" enum="ExtensionFileWriteResult"> +<histogram name="Extensions.UpdaterWriteCrx" enum="ExtensionFileWriteResult" + expires_after="2013-10-03"> <obsolete> Deprecated 10/2013. </obsolete> @@ -37668,7 +38202,7 @@ </histogram> <histogram name="Extensions.WebRequest.ModifiedResponseHeaders" - enum="WebRequestResponseHeaderType"> + enum="WebRequestResponseHeaderType" expires_after="2018-11-08"> <obsolete> Removed 11/2018 as this is no longer needed. </obsolete> @@ -37741,7 +38275,7 @@ </histogram> <histogram name="Extensions.WebRequest.SpecialHeadersRemoved" - enum="WebRequestSpecialHeaderRemoval"> + enum="WebRequestSpecialHeaderRemoval" expires_after="2018-11-08"> <obsolete> Removed 11/2018 as this is no longer needed. </obsolete> @@ -37841,7 +38375,7 @@ </histogram> <histogram name="Extensions.WebRequest.WS_CookiesAreModifiedOnHeadersReceived" - units="boolean"> + units="boolean" expires_after="2019-01-09"> <obsolete> Removed as of Jan 2019. </obsolete> @@ -37853,7 +38387,8 @@ </summary> </histogram> -<histogram base="true" name="Extensions.WebRequest.WS_RequestHeaders"> +<histogram base="true" name="Extensions.WebRequest.WS_RequestHeaders" + expires_after="2019-01-09"> <obsolete> Removed as of Jan 2019. </obsolete> @@ -37865,7 +38400,7 @@ </histogram> <histogram name="Extensions.WebRequest.WS_RequestHeadersModification" - enum="WebRequestWSRequestHeadersModification"> + enum="WebRequestWSRequestHeadersModification" expires_after="2019-01-09"> <obsolete> Removed as of Jan 2019. </obsolete> @@ -37879,7 +38414,7 @@ </histogram> <histogram name="Extensions.WebRequest.WS_ResponseHeadersAreModified" - units="boolean"> + units="boolean" expires_after="2019-01-09"> <obsolete> Removed as of Jan 2019. </obsolete> @@ -37922,7 +38457,8 @@ </summary> </histogram> -<histogram name="Extensions.WebRequestEventFoundFrame" units="boolean"> +<histogram name="Extensions.WebRequestEventFoundFrame" units="boolean" + expires_after="2017-12-11"> <obsolete> Deprecated as of 11/2017. No longer relevant after refactoring. </obsolete> @@ -38012,7 +38548,7 @@ </histogram> <histogram name="ExtensionService.ZipUnpackerDisabledReason" - enum="ExtensionDisableReason"> + enum="ExtensionDisableReason" expires_after="2018-10-04"> <obsolete> Deprecated as of 09/2018, with the removal of the "Zip Unpacker" component extension. @@ -38134,7 +38670,7 @@ </summary> </histogram> -<histogram name="Favicons.CandidatesCount"> +<histogram name="Favicons.CandidatesCount" expires_after="2017-12-20"> <obsolete> Deprecated as of 12/2017. </obsolete> @@ -38145,7 +38681,8 @@ </summary> </histogram> -<histogram name="Favicons.CandidatesWithDefinedSizesCount"> +<histogram name="Favicons.CandidatesWithDefinedSizesCount" + expires_after="2017-12-20"> <obsolete> Deprecated as of 12/2017. </obsolete> @@ -38156,7 +38693,8 @@ </summary> </histogram> -<histogram name="Favicons.CandidatesWithTouchIconsCount"> +<histogram name="Favicons.CandidatesWithTouchIconsCount" + expires_after="2017-12-20"> <obsolete> Deprecated as of 12/2017. </obsolete> @@ -38167,7 +38705,8 @@ </summary> </histogram> -<histogram base="true" name="Favicons.DownloadAttempts" units="attempts"> +<histogram base="true" name="Favicons.DownloadAttempts" units="attempts" + expires_after="2017-12-20"> <obsolete> Deprecated as of 12/2017. </obsolete> @@ -38180,7 +38719,8 @@ </summary> </histogram> -<histogram name="Favicons.DownloadOutcome" enum="FaviconDownloadStatus"> +<histogram name="Favicons.DownloadOutcome" enum="FaviconDownloadStatus" + expires_after="2017-12-20"> <obsolete> Deprecated as of 12/2017. </obsolete> @@ -38355,7 +38895,7 @@ </histogram> <histogram name="FileBrowser.CloudImport.UserAction" - enum="CloudImportUserAction"> + enum="CloudImportUserAction" expires_after="2018-12-11"> <obsolete> Was removed from the code at an unknown time. </obsolete> @@ -38729,7 +39269,8 @@ </summary> </histogram> -<histogram name="FileBrowser.OpeningFileType" enum="FileType"> +<histogram name="FileBrowser.OpeningFileType" enum="FileType" + expires_after="2013-04-25"> <obsolete> Deprecated 4/2013, and replaced by FileBrowser.ViewingFileType. </obsolete> @@ -38813,7 +39354,8 @@ <summary>Chrome OS Photo Editor: the button which the user clicked.</summary> </histogram> -<histogram name="FileBrowser.PhotoImport.Action" enum="ExternalDeviceAction"> +<histogram name="FileBrowser.PhotoImport.Action" enum="ExternalDeviceAction" + expires_after="2018-11-14"> <obsolete> Code seems to have been removed at an unknown time. </obsolete> @@ -38825,7 +39367,8 @@ </summary> </histogram> -<histogram name="FileBrowser.PhotoImport.ImportCount"> +<histogram name="FileBrowser.PhotoImport.ImportCount" + expires_after="2018-11-14"> <obsolete> Code seems to have been removed at an unknown time. </obsolete> @@ -38837,7 +39380,8 @@ </summary> </histogram> -<histogram name="FileBrowser.PhotoImport.ImportPercentage" units="%"> +<histogram name="FileBrowser.PhotoImport.ImportPercentage" units="%" + expires_after="2018-11-14"> <obsolete> Code seems to have been removed at an unknown time. </obsolete> @@ -38849,7 +39393,8 @@ </summary> </histogram> -<histogram name="FileBrowser.PhotoImport.Load" units="ms"> +<histogram name="FileBrowser.PhotoImport.Load" units="ms" + expires_after="2018-11-14"> <obsolete> Code seems to have been removed at an unknown time. </obsolete> @@ -38862,7 +39407,8 @@ </summary> </histogram> -<histogram name="FileBrowser.PhotoImport.Scan" units="ms"> +<histogram name="FileBrowser.PhotoImport.Scan" units="ms" + expires_after="2018-11-14"> <obsolete> Code seems to have been removed at an unknown time. </obsolete> @@ -39626,7 +40172,8 @@ </summary> </histogram> -<histogram name="Gamepad.KnownGamepadConnected" enum="GamepadId"> +<histogram name="Gamepad.KnownGamepadConnected" enum="GamepadId" + expires_after="2019-01-22"> <obsolete> Deprecated as of 01/2018. Use Gamepad.KnownGamepadConnectedWithId instead. </obsolete> @@ -39665,7 +40212,8 @@ </summary> </histogram> -<histogram name="GCM.AndroidGcmReceiverError" enum="GcmReceiverStatus"> +<histogram name="GCM.AndroidGcmReceiverError" enum="GcmReceiverStatus" + expires_after="2016-01-25"> <obsolete> Deprecated as of 01/2016. The error has been fixed by GCM. (crbug/580367) </obsolete> @@ -39698,7 +40246,8 @@ <summary>Number of retries before a GCM checkin succeeds.</summary> </histogram> -<histogram name="GCM.ConnectedViaProxy" enum="Boolean"> +<histogram name="GCM.ConnectedViaProxy" enum="Boolean" + expires_after="2018-03-20"> <obsolete> Deprecated as of 03/2018 (M67). </obsolete> @@ -39849,7 +40398,7 @@ </histogram> <histogram name="GCM.DataMessageReceivedHasRegisteredApp" - enum="BooleanRegistered"> + enum="BooleanRegistered" expires_after="2017-07-07"> <obsolete> No longer used starting with Chrome 61 as the check was removed. </obsolete> @@ -39904,7 +40453,8 @@ <summary>Status code of loading from the persistent GCM store.</summary> </histogram> -<histogram name="GCM.LoadSucceeded" enum="BooleanSuccess"> +<histogram name="GCM.LoadSucceeded" enum="BooleanSuccess" + expires_after="2015-02-10"> <obsolete> Deprecated as of 2/2015. </obsolete> @@ -39923,7 +40473,7 @@ </summary> </histogram> -<histogram name="GCM.NumUsers"> +<histogram name="GCM.NumUsers" expires_after="2014-03-21"> <obsolete> Deprecated as of 3/2014. </obsolete> @@ -40016,7 +40566,8 @@ <summary>Number of sender IDs specified in a registration request.</summary> </histogram> -<histogram name="GCM.ResetStore" enum="GCMResetStoreError"> +<histogram name="GCM.ResetStore" enum="GCMResetStoreError" + expires_after="2016-11-04"> <obsolete> Deprecated in M56 in favor of GCM.ResetStoreError </obsolete> @@ -40153,7 +40704,8 @@ <summary>Result of the authentication for Drive.</summary> </histogram> -<histogram name="GData.EntireFeedLoadTime" units="microseconds"> +<histogram name="GData.EntireFeedLoadTime" units="microseconds" + expires_after="2013-04-25"> <obsolete> Deprecated 9/2012, and replaced by Drive.EntireFeedLoadTime </obsolete> @@ -40163,7 +40715,8 @@ </summary> </histogram> -<histogram name="GData.EntryKind" enum="GDataEntryKind"> +<histogram name="GData.EntryKind" enum="GDataEntryKind" + expires_after="2013-04-25"> <obsolete> Deprecated 9/2012, and replaced by Drive.EntryKind </obsolete> @@ -40174,7 +40727,8 @@ </summary> </histogram> -<histogram name="GData.InitialFeedLoadTime" units="microseconds"> +<histogram name="GData.InitialFeedLoadTime" units="microseconds" + expires_after="2013-04-25"> <obsolete> Deprecated 9/2012, and replaced by Drive.InitialFeedLoadTime </obsolete> @@ -40185,7 +40739,7 @@ </summary> </histogram> -<histogram name="GData.NumberOfHostedDocuments"> +<histogram name="GData.NumberOfHostedDocuments" expires_after="2013-04-25"> <obsolete> Deprecated 9/2012, and replaced by Drive.NumberOfHostedDocuments </obsolete> @@ -40196,7 +40750,7 @@ </summary> </histogram> -<histogram name="GData.NumberOfRegularFiles"> +<histogram name="GData.NumberOfRegularFiles" expires_after="2013-04-25"> <obsolete> Deprecated 9/2012, and replaced by Drive.NumberOfRegularFiles </obsolete> @@ -40206,7 +40760,7 @@ </summary> </histogram> -<histogram name="GData.NumberOfTotalFiles"> +<histogram name="GData.NumberOfTotalFiles" expires_after="2013-04-25"> <obsolete> Deprecated 9/2012, and replaced by Drive.NumberOfTotalFiles </obsolete> @@ -40285,7 +40839,7 @@ </histogram> <histogram name="Geolocation.InfoBarDelegate.Event" - enum="GeolocationInfoBarDelegateEvent"> + enum="GeolocationInfoBarDelegateEvent" expires_after="2014-09-29"> <obsolete> Deprecated 9/2014, and replaced by ContentSettings.PermissionActions_Geolocation. @@ -40295,7 +40849,7 @@ </histogram> <histogram name="Geolocation.InfoBarDelegateAndroid.Event" - enum="GeolocationInfoBarDelegateAndroidEvent"> + enum="GeolocationInfoBarDelegateAndroidEvent" expires_after="2014-09-29"> <obsolete> Deprecated 9/2014, and replaced by ContentSettings.PermissionActions_Geolocation. @@ -40402,7 +40956,7 @@ </histogram> <histogram name="GeolocationDisclosure.PostDisclosureContentSetting" - enum="ContentSetting"> + enum="ContentSetting" expires_after="2017-12-04"> <obsolete> Deprecated 2017/11. Use PostDisclosureDSESetting instead. </obsolete> @@ -40425,7 +40979,7 @@ </histogram> <histogram name="GeolocationDisclosure.PostDisclosurePermission" - enum="PermissionStatus"> + enum="PermissionStatus" expires_after="2017-01-13"> <obsolete> Deprecated 2017/01. Replaced by PostDisclosureContentSetting. </obsolete> @@ -40438,7 +40992,7 @@ </histogram> <histogram name="GeolocationDisclosure.PreDisclosureContentSetting" - enum="ContentSetting"> + enum="ContentSetting" expires_after="2017-12-04"> <obsolete> Deprecated 2017/11. Use PreDisclosureDSESetting instead. </obsolete> @@ -40461,7 +41015,7 @@ </histogram> <histogram name="GeolocationDisclosure.PreDisclosurePermission" - enum="PermissionStatus"> + enum="PermissionStatus" expires_after="2017-01-13"> <obsolete> Deprecated 2017/01. Replaced by PreDisclosureContentSetting. </obsolete> @@ -40527,7 +41081,8 @@ </summary> </histogram> -<histogram name="GoogleSearch.AccessPoint" enum="SearchAccessPoint"> +<histogram name="GoogleSearch.AccessPoint" enum="SearchAccessPoint" + expires_after="2015-09-15"> <obsolete> Deprecated 2015/08. </obsolete> @@ -40557,7 +41112,7 @@ </histogram> <histogram name="GoogleUpdate.InfoBar.ActionTaken" - enum="GoogleUpdateInfoBarActions"> + enum="GoogleUpdateInfoBarActions" expires_after="2015-12-30"> <obsolete> Deprecated 12/2015 in Issue 566085. </obsolete> @@ -40589,7 +41144,8 @@ </summary> </histogram> -<histogram name="GoogleUpdate.InfoBar.TimeShown" units="ms"> +<histogram name="GoogleUpdate.InfoBar.TimeShown" units="ms" + expires_after="2015-12-30"> <obsolete> Deprecated 12/2015 in Issue 566085. </obsolete> @@ -40919,7 +41475,8 @@ </summary> </histogram> -<histogram name="GPU.AtExitMBytesAllocated" units="MB"> +<histogram name="GPU.AtExitMBytesAllocated" units="MB" + expires_after="2018-11-02"> <obsolete> Removed sometime around M55. </obsolete> @@ -40930,7 +41487,8 @@ </summary> </histogram> -<histogram name="GPU.AtExitMBytesAllocatedMax" units="MB"> +<histogram name="GPU.AtExitMBytesAllocatedMax" units="MB" + expires_after="2018-11-02"> <obsolete> Removed sometime around M55. </obsolete> @@ -40941,7 +41499,7 @@ </summary> </histogram> -<histogram name="GPU.AtExitMBytesLimit" units="MB"> +<histogram name="GPU.AtExitMBytesLimit" units="MB" expires_after="2018-11-02"> <obsolete> Removed sometime around M55. </obsolete> @@ -40961,7 +41519,7 @@ </summary> </histogram> -<histogram name="GPU.AtExitWindowCount"> +<histogram name="GPU.AtExitWindowCount" expires_after="2018-11-02"> <obsolete> Removed sometime around M55. </obsolete> @@ -40982,7 +41540,7 @@ </histogram> <histogram name="GPU.BlacklistFeatureTestResultsWindows" - enum="GPUBlacklistFeatureTestResultsWindows"> + enum="GPUBlacklistFeatureTestResultsWindows" expires_after="2018-02-28"> <obsolete> Replaced by GPU.BlacklistFeatureTestResultsWindows2 in M67. </obsolete> @@ -41030,7 +41588,8 @@ </summary> </histogram> -<histogram name="GPU.CheckFramebufferValidDuration" units="ms"> +<histogram name="GPU.CheckFramebufferValidDuration" units="ms" + expires_after="2017-01-12"> <obsolete> Deprecated 01/2017. </obsolete> @@ -41067,7 +41626,8 @@ <summary>The amount of memory used by a GL Context.</summary> </histogram> -<histogram name="GPU.CreateBrowserCompositor" units="microseconds"> +<histogram name="GPU.CreateBrowserCompositor" units="microseconds" + expires_after="2018-07-13"> <obsolete> Deprecated 07/2018: not useful anymore. </obsolete> @@ -41119,7 +41679,8 @@ </summary> </histogram> -<histogram name="GPU.DestroyProgramManagerPrograms.Elapsed" units="ms"> +<histogram name="GPU.DestroyProgramManagerPrograms.Elapsed" units="ms" + expires_after="2016-11-30"> <obsolete> Deprecated 11/2016. </obsolete> @@ -41129,7 +41690,8 @@ </summary> </histogram> -<histogram name="GPU.DestroyProgramManagerPrograms.Programs" units="programs"> +<histogram name="GPU.DestroyProgramManagerPrograms.Programs" units="programs" + expires_after="2016-11-30"> <obsolete> Deprecated 11/2016. </obsolete> @@ -41140,7 +41702,7 @@ </histogram> <histogram name="GPU.DestroyProgramManagerPrograms.ProgramsPerMs" - units="programs per ms"> + units="programs per ms" expires_after="2016-11-30"> <obsolete> Deprecated 11/2016. </obsolete> @@ -41162,7 +41724,8 @@ </summary> </histogram> -<histogram name="GPU.DirectComposition.DCLayerResult" enum="DCLayerResult"> +<histogram name="GPU.DirectComposition.DCLayerResult" enum="DCLayerResult" + expires_after="2018-11-28"> <obsolete> Deprecated 11/2018. Replaced by GPU.DirectComposition.DCLayerResult2.Clear. </obsolete> @@ -41273,7 +41836,8 @@ </summary> </histogram> -<histogram name="GPU.DirectComposition.OverlayFormatUsed" enum="OverlayFormat"> +<histogram name="GPU.DirectComposition.OverlayFormatUsed" enum="OverlayFormat" + expires_after="2018-10-03"> <obsolete> Deprecated 10/2018. Replaced by GPU.DirectComposition.OverlayFormatUsed2. </obsolete> @@ -41313,7 +41877,7 @@ </histogram> <histogram name="GPU.DirectComposition.OverlaySupportFlags" - enum="OverlaySupportFlag"> + enum="OverlaySupportFlag" expires_after="2018-07-10"> <obsolete> Replaced by format specific histograms under OverlaySupportFlags2. </obsolete> @@ -41326,7 +41890,7 @@ </histogram> <histogram base="true" name="GPU.DirectComposition.OverlaySupportFlags2" - enum="OverlaySupportFlag"> + enum="OverlaySupportFlag" expires_after="2019-04-06"> <obsolete> Deprecated 04/2019. BGRA is never supported, NV12 always supports scaling, and YUY2 supports scaling in 75% cases. @@ -41347,7 +41911,8 @@ <summary>Whether or not a frame displays an overlay.</summary> </histogram> -<histogram name="GPU.DirectComposition.SwapBuffersFailed" enum="BooleanHit"> +<histogram name="GPU.DirectComposition.SwapBuffersFailed" enum="BooleanHit" + expires_after="2018-08-25"> <obsolete> Deprecated 08/2018. Replaced by SwapBuffersResult which is emitted on both success and failure. @@ -41356,7 +41921,8 @@ <summary>Emitted on direct composition surface swap buffers failure.</summary> </histogram> -<histogram name="GPU.DirectComposition.SwapBuffersLastError" enum="Hresult"> +<histogram name="GPU.DirectComposition.SwapBuffersLastError" enum="Hresult" + expires_after="2018-06-06"> <obsolete> Deprecated 05/2018. GetLastError returns error for last successful or failed win32 call so this doesn't work as expected. @@ -41415,7 +41981,8 @@ </summary> </histogram> -<histogram name="GPU.DirectComposition.SwapchainFormat" enum="SwapchainFormat"> +<histogram name="GPU.DirectComposition.SwapchainFormat" enum="SwapchainFormat" + expires_after="2018-10-03"> <obsolete> Deprecated 10/2018. Replaced by GPU.DirectComposition.SwapChainFormatUsed. </obsolete> @@ -41454,7 +42021,7 @@ </histogram> <histogram name="GPU.DisplayCompositorLifetimeEvents" - enum="GPUProcessLifetimeEvent"> + enum="GPUProcessLifetimeEvent" expires_after="2018-06-05"> <obsolete> Deprecated 05/2018. Moved to GPU.ProcessLifetimeEvents.DisplayCompositor. </obsolete> @@ -41466,7 +42033,7 @@ </histogram> <histogram name="GPU.DisplayLinkInstallationStatus" - enum="DisplayLinkInstallationStatus"> + enum="DisplayLinkInstallationStatus" expires_after="2017-05-25"> <obsolete> Deprecated 2/2017. The values hadn't been updated since it was created, and the code gathering the installation status has been removed in Chrome CL @@ -41574,7 +42141,8 @@ </summary> </histogram> -<histogram name="GPU.GPUProcessLaunchCause" enum="GPUProcessLaunchCauses"> +<histogram name="GPU.GPUProcessLaunchCause" enum="GPUProcessLaunchCauses" + expires_after="2016-08-03"> <obsolete> Deprecated 08/2016. </obsolete> @@ -41591,7 +42159,8 @@ </summary> </histogram> -<histogram name="GPU.GPUProcessLifetimeEvents" enum="GPUProcessLifetimeEvent"> +<histogram name="GPU.GPUProcessLifetimeEvents" enum="GPUProcessLifetimeEvent" + expires_after="2018-06-05"> <obsolete> Deprecated 05/2018. Moved to GPU.ProcessLifetimeEvents.HardwareAccelerated. </obsolete> @@ -41601,7 +42170,8 @@ </summary> </histogram> -<histogram name="GPU.GPUProcessSoftwareRendering" enum="GPUProcessType"> +<histogram name="GPU.GPUProcessSoftwareRendering" enum="GPUProcessType" + expires_after="2018-11-12"> <obsolete> This histogram is no longer recorded. Use GPU.GLImplementation == kGLImplementationSwiftShaderGL to check if the gpu process is launched with @@ -41627,7 +42197,8 @@ </summary> </histogram> -<histogram name="GPU.GPUProcessTerminationStatus" enum="TerminationStatus"> +<histogram name="GPU.GPUProcessTerminationStatus" enum="TerminationStatus" + expires_after="2018-04-23"> <obsolete> Deprecated April 2018. Replaced by GPU.GPUProcessTerminationStatus2. </obsolete> @@ -41644,7 +42215,8 @@ </summary> </histogram> -<histogram name="GPU.InForceCompositingModeFieldTrial" enum="BooleanEnabled"> +<histogram name="GPU.InForceCompositingModeFieldTrial" enum="BooleanEnabled" + expires_after="2017-05-25"> <obsolete> Deprecated 10/2013. </obsolete> @@ -41663,7 +42235,8 @@ </summary> </histogram> -<histogram name="GPU.InitializeOneOffTime" units="microseconds"> +<histogram name="GPU.InitializeOneOffTime" units="microseconds" + expires_after="2015-04-10"> <obsolete> Deprecated 4/2015. </obsolete> @@ -41998,7 +42571,7 @@ </histogram> <histogram name="GPU.SoftwareRendererLifetimeEvents" - enum="GPUProcessLifetimeEvent"> + enum="GPUProcessLifetimeEvent" expires_after="2018-06-05"> <obsolete> Never used. </obsolete> @@ -42035,7 +42608,7 @@ </summary> </histogram> -<histogram name="GPU.SurfaceCountAtExit"> +<histogram name="GPU.SurfaceCountAtExit" expires_after="2017-05-25"> <obsolete> Deprecated 12/2012. Moved to GPU.AtExitSurfaceCount. </obsolete> @@ -42056,7 +42629,8 @@ </summary> </histogram> -<histogram name="GPU.SwiftShaderLifetimeEvents" enum="GPUProcessLifetimeEvent"> +<histogram name="GPU.SwiftShaderLifetimeEvents" enum="GPUProcessLifetimeEvent" + expires_after="2018-06-05"> <obsolete> Deprecated 05/2018. Moved to GPU.ProcessLifetimeEvents.SwiftShader. </obsolete> @@ -42086,7 +42660,7 @@ </histogram> <histogram name="GPU.ThreeDAPIInfoBarDismissal" - enum="GPUThreeDAPIInfoBarDismissal"> + enum="GPUThreeDAPIInfoBarDismissal" expires_after="2018-04-12"> <obsolete> Deprecated 04/2018. Infobar has been removed. </obsolete> @@ -42441,7 +43015,8 @@ </summary> </histogram> -<histogram name="Histogram.InconsistenciesBrowser" enum="Inconsistencies"> +<histogram name="Histogram.InconsistenciesBrowser" enum="Inconsistencies" + expires_after="2017-07-25"> <obsolete> Deprecated 7/2017. </obsolete> @@ -42457,7 +43032,8 @@ </summary> </histogram> -<histogram name="Histogram.InconsistenciesBrowserUnique" enum="Inconsistencies"> +<histogram name="Histogram.InconsistenciesBrowserUnique" enum="Inconsistencies" + expires_after="2017-07-25"> <obsolete> Deprecated 7/2017. </obsolete> @@ -42473,7 +43049,8 @@ </summary> </histogram> -<histogram name="Histogram.InconsistenciesChildProcess" enum="Inconsistencies"> +<histogram name="Histogram.InconsistenciesChildProcess" enum="Inconsistencies" + expires_after="2017-07-25"> <obsolete> Deprecated 7/2017. </obsolete> @@ -42490,7 +43067,7 @@ </histogram> <histogram name="Histogram.InconsistenciesChildProcessUnique" - enum="Inconsistencies"> + enum="Inconsistencies" expires_after="2017-07-25"> <obsolete> Deprecated 7/2017. </obsolete> @@ -42506,7 +43083,8 @@ </summary> </histogram> -<histogram name="Histogram.InconsistenciesRenderer" enum="Inconsistencies"> +<histogram name="Histogram.InconsistenciesRenderer" enum="Inconsistencies" + expires_after="2014-08-12"> <obsolete> Deprecated 7/2012. </obsolete> @@ -42523,7 +43101,7 @@ </histogram> <histogram name="Histogram.InconsistenciesRendererUnique" - enum="Inconsistencies"> + enum="Inconsistencies" expires_after="2014-08-12"> <obsolete> Deprecated 7/2012. </obsolete> @@ -42539,7 +43117,7 @@ </summary> </histogram> -<histogram name="Histogram.InconsistentCountHigh"> +<histogram name="Histogram.InconsistentCountHigh" expires_after="2017-07-25"> <obsolete> Deprecated 7/2017. </obsolete> @@ -42550,7 +43128,7 @@ </summary> </histogram> -<histogram name="Histogram.InconsistentCountLow"> +<histogram name="Histogram.InconsistentCountLow" expires_after="2017-07-25"> <obsolete> Deprecated 7/2017. </obsolete> @@ -42579,7 +43157,8 @@ </summary> </histogram> -<histogram name="Histogram.InconsistentSnapshotRenderer"> +<histogram name="Histogram.InconsistentSnapshotRenderer" + expires_after="2014-08-12"> <obsolete> Deprecated 7/2012. </obsolete> @@ -42866,7 +43445,8 @@ </summary> </histogram> -<histogram name="History.FaviconsRecoveredPercentage" units="%"> +<histogram name="History.FaviconsRecoveredPercentage" units="%" + expires_after="2017-04-12"> <obsolete> No longer tracked as of March 2017. </obsolete> @@ -42880,7 +43460,8 @@ </summary> </histogram> -<histogram name="History.FaviconsRecoveredRowsFaviconBitmaps"> +<histogram name="History.FaviconsRecoveredRowsFaviconBitmaps" + expires_after="2017-04-12"> <obsolete> No longer tracked as of March 2017. </obsolete> @@ -42890,7 +43471,8 @@ </summary> </histogram> -<histogram name="History.FaviconsRecoveredRowsFavicons"> +<histogram name="History.FaviconsRecoveredRowsFavicons" + expires_after="2017-04-12"> <obsolete> No longer tracked as of March 2017. </obsolete> @@ -42898,7 +43480,8 @@ <summary>Rows recovered from [favicons] table in Favicons recovery.</summary> </histogram> -<histogram name="History.FaviconsRecoveredRowsIconMapping"> +<histogram name="History.FaviconsRecoveredRowsIconMapping" + expires_after="2017-04-12"> <obsolete> No longer tracked as of March 2017. </obsolete> @@ -42908,7 +43491,8 @@ </summary> </histogram> -<histogram name="History.FaviconsRecovery" enum="HistoryFaviconsRecoveryEnum"> +<histogram name="History.FaviconsRecovery" enum="HistoryFaviconsRecoveryEnum" + expires_after="2017-04-12"> <obsolete> No longer tracked as of March 2017. </obsolete> @@ -43213,7 +43797,8 @@ </summary> </histogram> -<histogram name="History.TopHostsVisitsByRank" units="rank"> +<histogram name="History.TopHostsVisitsByRank" units="rank" + expires_after="2018-11-02"> <obsolete> Deprecated as of 11/2018, not used in production since 2/2018. </obsolete> @@ -43259,7 +43844,8 @@ </summary> </histogram> -<histogram name="History.TopSitesVisitsByRank" units="rank"> +<histogram name="History.TopSitesVisitsByRank" units="rank" + expires_after="2014-11-17"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -43271,7 +43857,8 @@ </summary> </histogram> -<histogram name="History.UpdateTopSitesOnDBThreadTime" units="ms"> +<histogram name="History.UpdateTopSitesOnDBThreadTime" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated because only the execution time at startup is of interest. See histogram History.UpdateTopSitesOnDBThread_Startup_Time. @@ -43391,7 +43978,8 @@ </summary> </histogram> -<histogram name="Hotword.AudioLoggingEnabled" enum="BooleanEnabled"> +<histogram name="Hotword.AudioLoggingEnabled" enum="BooleanEnabled" + expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43404,7 +43992,8 @@ </summary> </histogram> -<histogram name="Hotword.Enabled" enum="HotwordPrefState"> +<histogram name="Hotword.Enabled" enum="HotwordPrefState" + expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43415,7 +44004,8 @@ </summary> </histogram> -<histogram name="Hotword.ExtensionAvailability" enum="HotwordAvailability"> +<histogram name="Hotword.ExtensionAvailability" enum="HotwordAvailability" + expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43428,7 +44018,8 @@ </summary> </histogram> -<histogram name="Hotword.HotwordError" enum="HotwordError"> +<histogram name="Hotword.HotwordError" enum="HotwordError" + expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43441,7 +44032,7 @@ </histogram> <histogram name="Hotword.HotwordMediaStreamResult" - enum="HotwordMediaStreamResult"> + enum="HotwordMediaStreamResult" expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43455,7 +44046,7 @@ </histogram> <histogram name="Hotword.HotwordNaClMessageTimeout" - enum="HotwordNaClMessageTimeout"> + enum="HotwordNaClMessageTimeout" expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43470,7 +44061,7 @@ </histogram> <histogram name="Hotword.HotwordNaClPluginLoadResult" - enum="HotwordNaClPluginLoadResult"> + enum="HotwordNaClPluginLoadResult" expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43482,7 +44073,8 @@ </summary> </histogram> -<histogram name="Hotword.HotwordTriggerSource" enum="HotwordTriggerSource"> +<histogram name="Hotword.HotwordTriggerSource" enum="HotwordTriggerSource" + expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43495,7 +44087,8 @@ </summary> </histogram> -<histogram name="Hotword.SharedModuleReinstallLanguage" enum="LanguageCode"> +<histogram name="Hotword.SharedModuleReinstallLanguage" enum="LanguageCode" + expires_after="2017-11-28"> <obsolete> Deprecated as of 10/2017. Feature removed with crbug/761426. </obsolete> @@ -43524,7 +44117,8 @@ </summary> </histogram> -<histogram name="HttpCache.AsyncValidationDuration" units="ms"> +<histogram name="HttpCache.AsyncValidationDuration" units="ms" + expires_after="2015-06-19"> <obsolete> Deprecated as of 3/2015. </obsolete> @@ -43576,7 +44170,7 @@ </histogram> <histogram name="HttpCache.ExternallyConditionalized" - enum="ExternallyConditionalizedType"> + enum="ExternallyConditionalizedType" expires_after="2017-03-27"> <obsolete> stale-while-revalidate implementation removed for now, see https://crbug.com/700568. @@ -43589,7 +44183,8 @@ </summary> </histogram> -<histogram name="HttpCache.OfflineStatus" enum="OfflineStatus"> +<histogram name="HttpCache.OfflineStatus" enum="OfflineStatus" + expires_after="2015-04-27"> <obsolete> Deprecated 4/2015. </obsolete> @@ -43702,7 +44297,7 @@ <summary>For each validation attempt, the cause for the validation.</summary> </histogram> -<histogram name="HttpCache.Vary" enum="VaryType"> +<histogram name="HttpCache.Vary" enum="VaryType" expires_after="2014-11-04"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -44016,7 +44611,8 @@ </summary> </histogram> -<histogram name="Import_ShowDlg.FromBookmarkBarView" units="seconds"> +<histogram name="Import_ShowDlg.FromBookmarkBarView" units="seconds" + expires_after="2013-05-20"> <obsolete> Deprecated and replaced by Import.ShowDialog.FromBookmarkBarView </obsolete> @@ -44027,7 +44623,8 @@ </summary> </histogram> -<histogram name="Import_ShowDlg.FromFloatingBookmarkBarView" units="seconds"> +<histogram name="Import_ShowDlg.FromFloatingBookmarkBarView" units="seconds" + expires_after="2013-05-20"> <obsolete> Deprecated and replaced by Import.ShowDialog.FromFloatingBookmarkBarView </obsolete> @@ -44230,7 +44827,7 @@ </histogram> <histogram name="InertialSensor.RotationVectorAndroidAvailable" - enum="BooleanAvailable"> + enum="BooleanAvailable" expires_after="2014-11-19"> <obsolete> Deprecated 11/2014 (crbug.com/347507). Replaced by InertialSensor.DeviceOrientationSensorAndroid. @@ -44403,7 +45000,8 @@ </summary> </histogram> -<histogram name="InputMethod.Commit.Type" enum="IMECommitType"> +<histogram name="InputMethod.Commit.Type" enum="IMECommitType" + expires_after="2015-03-23"> <obsolete> Deprecated 03/2015, and replaced by InputMethod.Commit.Type2. </obsolete> @@ -44425,7 +45023,8 @@ <summary>The number of characters committed with composition text.</summary> </histogram> -<histogram name="InputMethod.ID" enum="InputMethodID"> +<histogram name="InputMethod.ID" enum="InputMethodID" + expires_after="2015-07-16"> <obsolete> This is deprecated since M46, InputMethod.ID2 is used since then. </obsolete> @@ -44816,7 +45415,8 @@ </summary> </histogram> -<histogram name="Installer.Recovery.Count" units="count"> +<histogram name="Installer.Recovery.Count" units="count" + expires_after="2017-08-17"> <obsolete> Superseded by Installer.Recovery.Reason in 8/2017. </obsolete> @@ -44937,7 +45537,7 @@ </summary> </histogram> -<histogram name="InstallSigner.InvalidCount"> +<histogram name="InstallSigner.InvalidCount" expires_after="2015-04-23"> <obsolete> Deprecated 4/2015. It appears the code at some point changed to use the histogram name 'ExtensionInstallSigner.InvalidCount' and we forgot to update @@ -44950,7 +45550,7 @@ </summary> </histogram> -<histogram name="InstallSigner.InvalidSignature"> +<histogram name="InstallSigner.InvalidSignature" expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallSigner.ResultWasValid. @@ -44962,7 +45562,8 @@ </summary> </histogram> -<histogram name="InstallVerifier.CallbackInvalidSignature"> +<histogram name="InstallVerifier.CallbackInvalidSignature" + expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.GetSignatureResult. @@ -44974,7 +45575,8 @@ </summary> </histogram> -<histogram name="InstallVerifier.CallbackNoSignature"> +<histogram name="InstallVerifier.CallbackNoSignature" + expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.GetSignatureResult. @@ -44987,7 +45589,8 @@ </summary> </histogram> -<histogram name="InstallVerifier.CallbackValidSignature"> +<histogram name="InstallVerifier.CallbackValidSignature" + expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.GetSignatureResult. @@ -44999,7 +45602,7 @@ </summary> </histogram> -<histogram name="InstallVerifier.InitGoodSignature"> +<histogram name="InstallVerifier.InitGoodSignature" expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.InitResult. @@ -45011,7 +45614,8 @@ </summary> </histogram> -<histogram name="InstallVerifier.InitInvalidSignature"> +<histogram name="InstallVerifier.InitInvalidSignature" + expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.InitResult. @@ -45025,7 +45629,7 @@ </summary> </histogram> -<histogram name="InstallVerifier.InitNoSignature"> +<histogram name="InstallVerifier.InitNoSignature" expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.InitResult. @@ -45037,7 +45641,8 @@ </summary> </histogram> -<histogram name="InstallVerifier.InitUnparseablePref"> +<histogram name="InstallVerifier.InitUnparseablePref" + expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.InitResult. @@ -45049,7 +45654,8 @@ </summary> </histogram> -<histogram name="InstallVerifier.SignatureFailedButNotEnforcing"> +<histogram name="InstallVerifier.SignatureFailedButNotEnforcing" + expires_after="2014-01-15"> <obsolete> Deprecated 1/2014 (crbug.com/333934). Replaced by ExtensionInstallVerifier.MustRemainDisabled. @@ -45135,7 +45741,8 @@ </summary> </histogram> -<histogram name="Instant.InstantControllerEvent" enum="InstantControllerEvent"> +<histogram name="Instant.InstantControllerEvent" enum="InstantControllerEvent" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -45147,7 +45754,7 @@ </histogram> <histogram name="Instant.SessionsStorageNamespace" - enum="InstantSessionStorageNamespace"> + enum="InstantSessionStorageNamespace" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -45158,7 +45765,7 @@ </summary> </histogram> -<histogram name="Instant.TimeToFirstShow" units="ms"> +<histogram name="Instant.TimeToFirstShow" units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -45180,7 +45787,7 @@ </histogram> <histogram name="InstantExtended.FallbackToLocalOverlay" - enum="InstantExtended_FallbackCause"> + enum="InstantExtended_FallbackCause" expires_after="2014-02-03"> <obsolete> Depcreated as of 10/2013. No longer relevant since the HTML overlay was abandoned. @@ -45193,7 +45800,7 @@ </histogram> <histogram name="InstantExtended.InstantNavigation" - enum="InstantExtended_InstantNavigation"> + enum="InstantExtended_InstantNavigation" expires_after="2013-10-28"> <obsolete> Deprecated as of 10/2013. This histogram is no longer relevant since the HTML overlay went away. @@ -45206,7 +45813,7 @@ </histogram> <histogram name="InstantExtended.NewOptInState" - enum="InstantExtended_NewOptInState"> + enum="InstantExtended_NewOptInState" expires_after="2013-11-20"> <obsolete> Deprecated as of 11/2013. </obsolete> @@ -45217,7 +45824,8 @@ </summary> </histogram> -<histogram name="InstantExtended.OptInState" enum="InstantExtended_OptInState"> +<histogram name="InstantExtended.OptInState" enum="InstantExtended_OptInState" + expires_after="2013-06-27"> <obsolete> Deprecated 2013-06. As of m30 use InstantExtended.NewOptInState. </obsolete> @@ -45228,7 +45836,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchQuerytoQuery" units="%"> +<histogram name="InstantExtended.PercentageMatchQuerytoQuery" units="%" + expires_after="2013-07-24"> <obsolete> Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_QuerytoQuery instead. @@ -45241,7 +45850,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchQuerytoURL" units="%"> +<histogram name="InstantExtended.PercentageMatchQuerytoURL" units="%" + expires_after="2013-07-24"> <obsolete> Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_QuerytoURL instead. @@ -45255,7 +45865,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchURLtoQuery" units="%"> +<histogram name="InstantExtended.PercentageMatchURLtoQuery" units="%" + expires_after="2013-07-24"> <obsolete> Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoQuery instead. @@ -45268,7 +45879,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchURLtoURL" units="%"> +<histogram name="InstantExtended.PercentageMatchURLtoURL" units="%" + expires_after="2013-07-24"> <obsolete> Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoURL instead. @@ -45281,7 +45893,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery" units="%"> +<histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery" units="%" + expires_after="2016-09-22"> <obsolete> Removed in August 2016 with the removal of query in the omnibox code. </obsolete> @@ -45293,7 +45906,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchV2_QuerytoURL" units="%"> +<histogram name="InstantExtended.PercentageMatchV2_QuerytoURL" units="%" + expires_after="2016-09-22"> <obsolete> Removed in August 2016 with the removal of query in the omnibox code. </obsolete> @@ -45306,7 +45920,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchV2_URLtoQuery" units="%"> +<histogram name="InstantExtended.PercentageMatchV2_URLtoQuery" units="%" + expires_after="2016-09-22"> <obsolete> Removed in September 2016 because (i) this measurement was somewhat wrong, (ii) it's difficult to understand the data, and (iii) there are better ways @@ -45326,7 +45941,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PercentageMatchV2_URLtoURL" units="%"> +<histogram name="InstantExtended.PercentageMatchV2_URLtoURL" units="%" + expires_after="2016-09-22"> <obsolete> Removed in September 2016 because (i) this measurement was somewhat wrong, and (ii) there are better ways to answer the same question. The measurement @@ -45343,7 +45959,8 @@ </summary> </histogram> -<histogram name="InstantExtended.PrefValue" enum="BooleanEnabled"> +<histogram name="InstantExtended.PrefValue" enum="BooleanEnabled" + expires_after="2013-07-08"> <obsolete> Deprecated 2013-06. This preference has not been exposed or used for months, and we do not plan to use it in the future. @@ -45357,7 +45974,7 @@ </histogram> <histogram name="InstantSearchClicks.PreviewScrollState" - enum="InstantSearchClicks_PreviewScrollState"> + enum="InstantSearchClicks_PreviewScrollState" expires_after="2015-07-22"> <obsolete> Deprecated as of 7/2015. </obsolete> @@ -45369,7 +45986,7 @@ </histogram> <histogram name="InstantSearchClicks.ReasonForSwap" - enum="InstantSearchClicks_ReasonForSwap"> + enum="InstantSearchClicks_ReasonForSwap" expires_after="2015-07-22"> <obsolete> Deprecated as of 7/2015. </obsolete> @@ -45380,7 +45997,8 @@ </summary> </histogram> -<histogram name="InstantSearchClicks.TimeInPreview" units="ms"> +<histogram name="InstantSearchClicks.TimeInPreview" units="ms" + expires_after="2015-07-22"> <obsolete> Deprecated as of 7/2015. </obsolete> @@ -45391,7 +46009,8 @@ </summary> </histogram> -<histogram name="InstantSearchClicks.TimeToSwap" units="ms"> +<histogram name="InstantSearchClicks.TimeToSwap" units="ms" + expires_after="2015-07-22"> <obsolete> Deprecated as of 7/2015. </obsolete> @@ -45533,7 +46152,8 @@ </histogram> <histogram name="InstantTethering.ConnectionToHostResult.SuccessRate" - enum="InstantTethering_ConnectionToHostResult_SuccessRate"> + enum="InstantTethering_ConnectionToHostResult_SuccessRate" + expires_after="2019-02-21"> <obsolete> Removed 2019/02 in favor of MultiDevice.* equivalent. </obsolete> @@ -45628,7 +46248,7 @@ </histogram> <histogram name="InstantTethering.GattConnectionAttempt.SuccessRate" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2019-02-21"> <obsolete> Removed 2019/02 in favor of MultiDevice.* equivalent. </obsolete> @@ -45643,7 +46263,7 @@ </histogram> <histogram name="InstantTethering.GattConnectionAttempt.SuccessRate.Background" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2019-02-21"> <obsolete> Removed 2019/02 in favor of MultiDevice.* equivalent. </obsolete> @@ -45782,7 +46402,8 @@ </summary> </histogram> -<histogram name="InstantTethering.Performance.ConnectToHostDuration" units="ms"> +<histogram name="InstantTethering.Performance.ConnectToHostDuration" units="ms" + expires_after="2019-02-21"> <obsolete> Removed 2019/02 in favor of MultiDevice.* equivalent. </obsolete> @@ -45950,7 +46571,8 @@ </summary> </histogram> -<histogram name="interstitial.authority_invalid_time" units="ms"> +<histogram name="interstitial.authority_invalid_time" units="ms" + expires_after="2013-08-03"> <obsolete> Removed on 8/1/13. </obsolete> @@ -45971,7 +46593,8 @@ </summary> </histogram> -<histogram name="interstitial.common_name_invalid_time" units="ms"> +<histogram name="interstitial.common_name_invalid_time" units="ms" + expires_after="2013-08-03"> <obsolete> Removed on 8/1/13. </obsolete> @@ -45984,7 +46607,8 @@ </summary> </histogram> -<histogram name="interstitial.date_invalid_time" units="ms"> +<histogram name="interstitial.date_invalid_time" units="ms" + expires_after="2013-08-03"> <obsolete> Removed on 8/1/13. </obsolete> @@ -46033,7 +46657,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl" enum="SSLResponseTypesV2"> +<histogram name="interstitial.ssl" enum="SSLResponseTypesV2" + expires_after="2015-01-17"> <obsolete> Replaced by interstitial.ssl_overridable.* and interstitial.ssl_nonoverridable.* in Jan 2015 (M42). @@ -46102,7 +46727,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl.clockstate.network" enum="ClockStates"> +<histogram name="interstitial.ssl.clockstate.network" enum="ClockStates" + expires_after="2016-08-30"> <obsolete> Deprecated August 2016. Replaced with interstitial.ssl.clockstate.network2, which records reasons why network time might be unavailable. @@ -46115,7 +46741,7 @@ </histogram> <histogram name="interstitial.ssl.clockstate.network2" - enum="NetworkClockStates"> + enum="NetworkClockStates" expires_after="2016-10-18"> <obsolete> Deprecated October 2016. Due to a bug, data in this histogram is mislabelled and should be disregarded. Replaced with @@ -46150,7 +46776,7 @@ </histogram> <histogram name="interstitial.ssl.did_user_revoke_decisions" - enum="BooleanRevoked"> + enum="BooleanRevoked" expires_after="2017-09-21"> <obsolete> Deprecated September 13 2017. </obsolete> @@ -46176,7 +46802,7 @@ </histogram> <histogram name="interstitial.ssl.expiration_and_decision.nonoverridable" - enum="SSLIsExpiredAndDecision"> + enum="SSLIsExpiredAndDecision" expires_after="2017-12-13"> <obsolete> Deprecated Dec 2017 (M65). </obsolete> @@ -46189,7 +46815,7 @@ </histogram> <histogram name="interstitial.ssl.expiration_and_decision.overridable" - enum="SSLIsExpiredAndDecision"> + enum="SSLIsExpiredAndDecision" expires_after="2017-12-13"> <obsolete> Deprecated Dec 2017 (M65). </obsolete> @@ -46201,7 +46827,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl.good_cert_seen" enum="SSLGoodCertSeenEvent"> +<histogram name="interstitial.ssl.good_cert_seen" enum="SSLGoodCertSeenEvent" + expires_after="2017-11-14"> <obsolete> Deprecated Nov 2017 (M64). </obsolete> @@ -46212,7 +46839,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl.good_cert_seen_type_is_frame" enum="Boolean"> +<histogram name="interstitial.ssl.good_cert_seen_type_is_frame" enum="Boolean" + expires_after="2017-12-04"> <obsolete> Deprecated December 2017 (M65). </obsolete> @@ -46223,7 +46851,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl.severity_score.authority_invalid" units="%"> +<histogram name="interstitial.ssl.severity_score.authority_invalid" units="%" + expires_after="2015-01-14"> <obsolete> Deprecated Jan 2015 (M42). </obsolete> @@ -46233,7 +46862,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl.severity_score.common_name_invalid" units="%"> +<histogram name="interstitial.ssl.severity_score.common_name_invalid" units="%" + expires_after="2015-01-14"> <obsolete> Deprecated Jan 2015 (M42). </obsolete> @@ -46243,7 +46873,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl.severity_score.date_invalid" units="%"> +<histogram name="interstitial.ssl.severity_score.date_invalid" units="%" + expires_after="2015-01-14"> <obsolete> Deprecated Jan 2015 (M42). </obsolete> @@ -46262,7 +46893,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl_accept_time" units="ms"> +<histogram name="interstitial.ssl_accept_time" units="ms" + expires_after="2013-08-03"> <obsolete> Removed on 8/1/13. </obsolete> @@ -46295,7 +46927,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl_error_handler.superfish" enum="Boolean"> +<histogram name="interstitial.ssl_error_handler.superfish" enum="Boolean" + expires_after="2018-11-01"> <obsolete> Deprecated 2018-11. </obsolete> @@ -46380,7 +47013,8 @@ </summary> </histogram> -<histogram name="interstitial.ssl_reject_time" units="ms"> +<histogram name="interstitial.ssl_reject_time" units="ms" + expires_after="2013-08-03"> <obsolete> Removed on 8/1/13. </obsolete> @@ -46415,7 +47049,8 @@ </summary> </histogram> -<histogram name="IOS.CanonicalURLResult" enum="CanonicalURLResult"> +<histogram name="IOS.CanonicalURLResult" enum="CanonicalURLResult" + expires_after="2018-01-02"> <obsolete> Deprecated 2018-01. As of M65 use Mobile.CanonicalURLResult. </obsolete> @@ -46573,7 +47208,8 @@ </summary> </histogram> -<histogram name="IOS.MailtoURLRewritten" enum="Boolean"> +<histogram name="IOS.MailtoURLRewritten" enum="Boolean" + expires_after="2018-12-04"> <obsolete> Deprecated 2018-12. </obsolete> @@ -46626,7 +47262,7 @@ </histogram> <histogram name="IOS.PageLoadCountMigration.Counts" - enum="IOSPageLoadCountNavigationType"> + enum="IOSPageLoadCountNavigationType" expires_after="2017-11-28"> <obsolete> Deprecated 2017-11. </obsolete> @@ -46906,7 +47542,8 @@ </summary> </histogram> -<histogram name="JSDialogs.CharacterCountUserSuppressed" units="characters"> +<histogram name="JSDialogs.CharacterCountUserSuppressed" units="characters" + expires_after="2018-06-25"> <obsolete> Deprecated 2018-06. </obsolete> @@ -46918,7 +47555,8 @@ </summary> </histogram> -<histogram name="JSDialogs.CountOfJSDialogMessageCharacters" units="characters"> +<histogram name="JSDialogs.CountOfJSDialogMessageCharacters" units="characters" + expires_after="2018-06-25"> <obsolete> Deprecated 2018-06. </obsolete> @@ -46928,7 +47566,8 @@ </summary> </histogram> -<histogram name="JSDialogs.CountOfJSDialogMessageNewlines"> +<histogram name="JSDialogs.CountOfJSDialogMessageNewlines" + expires_after="2018-06-25"> <obsolete> Deprecated 2018-06. </obsolete> @@ -46940,7 +47579,7 @@ </histogram> <histogram name="JSDialogs.CountOfOnBeforeUnloadMessageCharacters" - units="characters"> + units="characters" expires_after="2016-03-11"> <obsolete> Deprecated 2016-02. </obsolete> @@ -46950,7 +47589,8 @@ </summary> </histogram> -<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageNewlines"> +<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageNewlines" + expires_after="2016-03-11"> <obsolete> Deprecated 2016-02. </obsolete> @@ -47027,7 +47667,8 @@ <summary>The scheme of the URL showing a JavaScript dialog.</summary> </histogram> -<histogram name="JSDialogs.SiteEngagementOfBeforeUnload" units="%"> +<histogram name="JSDialogs.SiteEngagementOfBeforeUnload" units="%" + expires_after="2017-10-11"> <obsolete> Deprecated 2017-10. </obsolete> @@ -47038,7 +47679,8 @@ </summary> </histogram> -<histogram base="true" name="JSDialogs.SiteEngagementOfDialogs" units="%"> +<histogram base="true" name="JSDialogs.SiteEngagementOfDialogs" units="%" + expires_after="2016-10-19"> <obsolete> Deprecated 2016-10. Site engagement needed to be measured in small buckets anyway so it was never high-resolution enough for use. @@ -47050,7 +47692,8 @@ </summary> </histogram> -<histogram name="Keyboard.KeystrokeDeltas" units="ms"> +<histogram name="Keyboard.KeystrokeDeltas" units="ms" + expires_after="2016-07-28"> <obsolete> Deprecated 07/2016 in crbug.com/631204 with KeyboardUmaEventFilter removal. </obsolete> @@ -47283,7 +47926,8 @@ </summary> </histogram> -<histogram name="Launch.InvalidIntent" enum="BooleanHit"> +<histogram name="Launch.InvalidIntent" enum="BooleanHit" + expires_after="2016-06-14"> <obsolete> Deprecated 2016-06 -- hit rate is neglible. </obsolete> @@ -47483,7 +48127,7 @@ </histogram> <histogram name="Layout.ScrollRestoration.PrecededByJsScroll" - enum="BooleanPrecededByJsScroll"> + enum="BooleanPrecededByJsScroll" expires_after="2018-09-07"> <obsolete> Deprecated 2018-09. No longer needed. </obsolete> @@ -47497,7 +48141,8 @@ </summary> </histogram> -<histogram name="LevelDB.ApproximateMemoryUse" units="bytes"> +<histogram name="LevelDB.ApproximateMemoryUse" units="bytes" + expires_after="2018-09-17"> <obsolete> Replaced by LevelDB.ApproximateMemTableMemoryUse indefinitely. </obsolete> @@ -47523,7 +48168,8 @@ <summary>The result of an open attempt of a leveldb.</summary> </histogram> -<histogram name="LevelDB.SharedCache.BytesUsed" units="Bytes"> +<histogram name="LevelDB.SharedCache.BytesUsed" units="Bytes" + expires_after="2017-10-20"> <obsolete> Deprecated 2017-10. Superceded by LevelDB.SharedCache.KBUsed. </obsolete> @@ -47550,7 +48196,8 @@ </summary> </histogram> -<histogram name="LevelDBEnv.All.SafeThreadAccess" units="accesses"> +<histogram name="LevelDBEnv.All.SafeThreadAccess" units="accesses" + expires_after="2013-10-16"> <obsolete> Deprecated 2013-10. No thread-unsafety was found. </obsolete> @@ -47575,7 +48222,8 @@ <summary>Methods where leveldb's Chromium environment has IO errors.</summary> </histogram> -<histogram name="LevelDBEnv.IOError." enum="PlatformFileError"> +<histogram name="LevelDBEnv.IOError." enum="PlatformFileError" + expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE. </obsolete> @@ -47590,7 +48238,8 @@ </summary> </histogram> -<histogram name="LevelDBEnv.IOError.NewLogger" enum="PopularOSErrno"> +<histogram name="LevelDBEnv.IOError.NewLogger" enum="PopularOSErrno" + expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewLogger. </obsolete> @@ -47598,7 +48247,8 @@ <summary>Errno of errors encountered in NewLogger.</summary> </histogram> -<histogram name="LevelDBEnv.IOError.NewSequentialFile" enum="PopularOSErrno"> +<histogram name="LevelDBEnv.IOError.NewSequentialFile" enum="PopularOSErrno" + expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewSequentialFile. </obsolete> @@ -47606,7 +48256,8 @@ <summary>Errno of errors encountered in NewSequentialFile.</summary> </histogram> -<histogram name="LevelDBEnv.IOError.RandomAccessFile" enum="PlatformFileError"> +<histogram name="LevelDBEnv.IOError.RandomAccessFile" enum="PlatformFileError" + expires_after="2013-04-11"> <obsolete> Deprecated 2013-04. As of m28 use LevelDBEnv.IOError.NewRandomAccessFile. </obsolete> @@ -47616,7 +48267,8 @@ </summary> </histogram> -<histogram name="LevelDBEnv.IOError.WritableFileAppend" enum="PopularOSErrno"> +<histogram name="LevelDBEnv.IOError.WritableFileAppend" enum="PopularOSErrno" + expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileAppend. </obsolete> @@ -47624,7 +48276,8 @@ <summary>Errno of errors encountered in WritableFileAppend.</summary> </histogram> -<histogram name="LevelDBEnv.IOError.WritableFileFlush" enum="PopularOSErrno"> +<histogram name="LevelDBEnv.IOError.WritableFileFlush" enum="PopularOSErrno" + expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileFlush. </obsolete> @@ -47641,7 +48294,7 @@ </summary> </histogram> -<histogram name="LevelDBEnv.MaxFDs" units="files"> +<histogram name="LevelDBEnv.MaxFDs" units="files" expires_after="2017-09-21"> <obsolete> Deprecated as of September 20, 2017. </obsolete> @@ -47668,7 +48321,8 @@ </summary> </histogram> -<histogram name="LevelDBEnv.Table" enum="BooleanSuccess"> +<histogram name="LevelDBEnv.Table" enum="BooleanSuccess" + expires_after="2016-08-12"> <obsolete> As of M54 no longer creating or using table backup files. </obsolete> @@ -47679,7 +48333,7 @@ </summary> </histogram> -<histogram name="LevelDBEnv.TimeTo" units="ms"> +<histogram name="LevelDBEnv.TimeTo" units="ms" expires_after="2013-04-30"> <obsolete> Deprecated 2013-04. As of m28 use LevelDBEnv.TimeUntilSuccessFor. </obsolete> @@ -47716,7 +48370,8 @@ </summary> </histogram> -<histogram name="LibraryLoader.NativeLibraryHack" enum="BooleanUsage"> +<histogram name="LibraryLoader.NativeLibraryHack" enum="BooleanUsage" + expires_after="2014-11-26"> <obsolete> Deprecated as of 11/2014, removed from code. </obsolete> @@ -47874,7 +48529,8 @@ </summary> </histogram> -<histogram name="LoadingPredictor.SubresourceConnectDuration" units="ms"> +<histogram name="LoadingPredictor.SubresourceConnectDuration" units="ms" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -48670,7 +49326,8 @@ </summary> </histogram> -<histogram name="Media.AcceleratedCompositingActive" enum="BooleanSuccess"> +<histogram name="Media.AcceleratedCompositingActive" enum="BooleanSuccess" + expires_after="2014-07-22"> <obsolete> Deprecated as of July 21, 2014. </obsolete> @@ -48698,7 +49355,8 @@ </summary> </histogram> -<histogram name="Media.Android.IsHttpLiveStreamingMedia" enum="MediaUrlType"> +<histogram name="Media.Android.IsHttpLiveStreamingMedia" enum="MediaUrlType" + expires_after="2017-08-21"> <obsolete> Deprecated as of 08/2017 </obsolete> @@ -48710,7 +49368,7 @@ </histogram> <histogram name="Media.Android.IsHttpLiveStreamingMediaPredictionResult" - enum="MediaTypePredictionResult"> + enum="MediaTypePredictionResult" expires_after="2017-08-21"> <obsolete> Deprecated as of 08/2017 </obsolete> @@ -48725,7 +49383,8 @@ <summary>Android: Whether MediaPlayer exited without errors.</summary> </histogram> -<histogram name="Media.Android.NumMediaServerCrashes"> +<histogram name="Media.Android.NumMediaServerCrashes" + expires_after="2017-04-12"> <obsolete> Deprecated as of 04/2017 </obsolete> @@ -48738,7 +49397,7 @@ </histogram> <histogram name="Media.Android.ThrottleInfobarResponse" - enum="ThrottleInfobarResponse"> + enum="ThrottleInfobarResponse" expires_after="2017-04-12"> <obsolete> Deprecated as of 04/2017 </obsolete> @@ -48749,7 +49408,7 @@ </histogram> <histogram name="Media.ArcGpuVideoDecodeAccelerator.InitializeResult" - enum="ArcVideoDecodeAcceleratorResult"> + enum="ArcVideoDecodeAcceleratorResult" expires_after="2017-06-14"> <obsolete> Deprecated as of June 12, 2017. Replaced by Media.ChromeArcVideoDecodeAccelerator.InitializeResult. @@ -48820,7 +49479,8 @@ </summary> </histogram> -<histogram name="Media.Audio.AutomaticGainControlMac" enum="BooleanEnabled"> +<histogram name="Media.Audio.AutomaticGainControlMac" enum="BooleanEnabled" + expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -48868,7 +49528,8 @@ </summary> </histogram> -<histogram name="Media.Audio.Capture.CallbackError" enum="BooleanError"> +<histogram name="Media.Audio.Capture.CallbackError" enum="BooleanError" + expires_after="2017-02-03"> <obsolete> Deprecated as of 02/2017. </obsolete> @@ -48985,7 +49646,8 @@ </summary> </histogram> -<histogram name="Media.Audio.Capture.StreamCallbackError" enum="BooleanError"> +<histogram name="Media.Audio.Capture.StreamCallbackError" enum="BooleanError" + expires_after="2018-06-07"> <obsolete> Replaced by Media.Audio.Capture.StreamCallbackError2 </obsolete> @@ -49142,7 +49804,7 @@ </histogram> <histogram name="Media.Audio.InputBufferSizeWasChangedAudioWorkedMac" - enum="BooleanChanged"> + enum="BooleanChanged" expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49168,7 +49830,7 @@ </histogram> <histogram name="Media.Audio.InputDevicePropertyChangedMac" - enum="AudioDevicePropertyResult"> + enum="AudioDevicePropertyResult" expires_after="2018-02-07"> <obsolete> Deprecated Feb 2018. Was put in place to debug missing callback issues that have since been resolved. @@ -49183,7 +49845,7 @@ </histogram> <histogram name="Media.Audio.InputDevicePropertyChangedStartupFailedMac" - enum="AudioDevicePropertyResult"> + enum="AudioDevicePropertyResult" expires_after="2018-02-07"> <obsolete> Deprecated Feb 2018. Was put in place to debug missing callback issues that have since been resolved. @@ -49196,7 +49858,8 @@ </summary> </histogram> -<histogram name="Media.Audio.InputRestartAttemptsMac"> +<histogram name="Media.Audio.InputRestartAttemptsMac" + expires_after="2017-05-24"> <obsolete> Deprecated May 2017. Restart mechanism is removed. </obsolete> @@ -49217,7 +49880,7 @@ </histogram> <histogram name="Media.Audio.InputStartWasDeferredAudioWorkedMac" - enum="BooleanDeferred"> + enum="BooleanDeferred" expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49231,7 +49894,8 @@ </summary> </histogram> -<histogram name="Media.Audio.InputStartWasDeferredMac" enum="BooleanDeferred"> +<histogram name="Media.Audio.InputStartWasDeferredMac" enum="BooleanDeferred" + expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49242,7 +49906,8 @@ </summary> </histogram> -<histogram name="Media.Audio.IsOnBatteryPowerMac" enum="BooleanOnBattery"> +<histogram name="Media.Audio.IsOnBatteryPowerMac" enum="BooleanOnBattery" + expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49261,7 +49926,8 @@ </summary> </histogram> -<histogram name="Media.Audio.NumberOfBasicInputStreamsMac"> +<histogram name="Media.Audio.NumberOfBasicInputStreamsMac" + expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49272,7 +49938,8 @@ </summary> </histogram> -<histogram name="Media.Audio.NumberOfLowLatencyInputStreamsMac"> +<histogram name="Media.Audio.NumberOfLowLatencyInputStreamsMac" + expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49283,7 +49950,8 @@ </summary> </histogram> -<histogram name="Media.Audio.NumberOfOutputStreamsMac"> +<histogram name="Media.Audio.NumberOfOutputStreamsMac" + expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49700,7 +50368,8 @@ </summary> </histogram> -<histogram name="Media.Audio.Render.StreamCallbackError" enum="BooleanError"> +<histogram name="Media.Audio.Render.StreamCallbackError" enum="BooleanError" + expires_after="2018-06-07"> <obsolete> Replaced by Media.Audio.Render.StreamCallbackError2 </obsolete> @@ -49743,7 +50412,7 @@ </summary> </histogram> -<histogram name="Media.Audio.ResumeEventsMac"> +<histogram name="Media.Audio.ResumeEventsMac" expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49776,7 +50445,8 @@ </summary> </histogram> -<histogram name="Media.Audio.UptimeMac" units="hours"> +<histogram name="Media.Audio.UptimeMac" units="hours" + expires_after="2018-08-22"> <obsolete> Deprecated as of Aug 2018. </obsolete> @@ -49840,7 +50510,8 @@ </summary> </histogram> -<histogram name="Media.AudioCapturerRepetition" units="ms"> +<histogram name="Media.AudioCapturerRepetition" units="ms" + expires_after="2018-01-18"> <obsolete> Deprecated as of Jan 2018. </obsolete> @@ -49876,7 +50547,7 @@ </histogram> <histogram name="Media.AudioInputControllerCaptureStartupSuccess" - enum="CaptureStartupResult"> + enum="CaptureStartupResult" expires_after="2017-02-03"> <obsolete> Deprecated as of 02/2017. </obsolete> @@ -50070,7 +50741,8 @@ </summary> </histogram> -<histogram name="Media.AudioRendererEvents" enum="AudioRendererEvents"> +<histogram name="Media.AudioRendererEvents" enum="AudioRendererEvents" + expires_after="2016-03-18"> <obsolete> Deprecated Mar 2016 in favor of a new PipelineStatus code. </obsolete> @@ -50090,7 +50762,7 @@ </summary> </histogram> -<histogram name="Media.AudioRendererIpcStreams"> +<histogram name="Media.AudioRendererIpcStreams" expires_after="2017-02-08"> <obsolete> Deprecated 02/2017. No longer needed. </obsolete> @@ -50101,7 +50773,7 @@ </summary> </histogram> -<histogram name="Media.AudioRendererIpcStreamsTotal"> +<histogram name="Media.AudioRendererIpcStreamsTotal" expires_after="2017-02-08"> <obsolete> Deprecated 02/2017. No longer needed. </obsolete> @@ -50174,7 +50846,8 @@ </summary> </histogram> -<histogram name="Media.AudioService.ObservedDowntime" units="ms"> +<histogram name="Media.AudioService.ObservedDowntime" units="ms" + expires_after="2018-06-09"> <obsolete> Deprecated 06/2018. Split into Media.AudioService.ObservedInitialDowntime and Media.AudioService.ObservedDowntime2. @@ -50212,7 +50885,7 @@ </histogram> <histogram name="Media.AudioService.ObservedProcessTerminationStatus" - enum="AudioServiceProcessTerminationStatus"> + enum="AudioServiceProcessTerminationStatus" expires_after="2018-10-19"> <obsolete> Deprecated 10/2018. Covered by the more generic stats ChildProcess.Crashed.UtilityProcessHash and @@ -50306,7 +50979,7 @@ </histogram> <histogram name="Media.Autoplay.CrossOrigin.Result" - enum="CrossOriginAutoplayResult"> + enum="CrossOriginAutoplayResult" expires_after="2019-01-25"> <obsolete> Deprecated January 2019. No longer needed. </obsolete> @@ -50335,7 +51008,8 @@ </summary> </histogram> -<histogram name="Media.AVDA.InputQueueTime" units="ms"> +<histogram name="Media.AVDA.InputQueueTime" units="ms" + expires_after="2016-03-31"> <obsolete> Deprecated 03/2016. No longer needed. </obsolete> @@ -50346,7 +51020,8 @@ </summary> </histogram> -<histogram name="Media.AVDA.MissingFormatChanged" enum="BooleanFormatChanged"> +<histogram name="Media.AVDA.MissingFormatChanged" enum="BooleanFormatChanged" + expires_after="2016-10-21"> <obsolete> Deprecated 10/2016. No longer needed. </obsolete> @@ -50359,7 +51034,8 @@ </summary> </histogram> -<histogram name="Media.AVDA.NumAVDAInstances" units="AVDA instances"> +<histogram name="Media.AVDA.NumAVDAInstances" units="AVDA instances" + expires_after="2016-10-21"> <obsolete> Deprecated 10/2016. No longer needed. </obsolete> @@ -50370,7 +51046,8 @@ </summary> </histogram> -<histogram name="Media.AVDA.VirtualContext" enum="BooleanVirtualContext"> +<histogram name="Media.AVDA.VirtualContext" enum="BooleanVirtualContext" + expires_after="2016-10-21"> <obsolete> Deprecated 10/2016. No longer needed. </obsolete> @@ -50381,7 +51058,8 @@ </summary> </histogram> -<histogram name="Media.AvdaCodecImage.WaitTimeForFrame" units="ms"> +<histogram name="Media.AvdaCodecImage.WaitTimeForFrame" units="ms" + expires_after="2018-06-14"> <obsolete> Deprecated 06/2018. This has been renamed to Media.CodecImage.SurfaceTextureGLOwner.WaitTimeForFrame and @@ -50424,7 +51102,7 @@ </histogram> <histogram name="Media.ChromeArcVideoDecodeAccelerator.InitializeResult" - enum="ArcVideoDecodeAcceleratorResult"> + enum="ArcVideoDecodeAcceleratorResult" expires_after="2017-12-19"> <obsolete> Deprecated as of Dec 18, 2017. Replaced by Media.GpuArcVideoDecodeAccelerator.InitializeResult. @@ -50445,7 +51123,8 @@ </summary> </histogram> -<histogram name="Media.ChromeCast.DisplayedFramesPerSecond" units="frames/s"> +<histogram name="Media.ChromeCast.DisplayedFramesPerSecond" units="frames/s" + expires_after="2015-07-15"> <obsolete> Deprecated 07/2015 in issue 508534. </obsolete> @@ -50538,7 +51217,8 @@ </summary> </histogram> -<histogram name="Media.Controls.Download" enum="MediaControlsDownloadReason"> +<histogram name="Media.Controls.Download" enum="MediaControlsDownloadReason" + expires_after="2017-07-14"> <obsolete> Deprecated July 2017 in favor of Media.Controls.CTR.DownloadButton. </obsolete> @@ -50577,7 +51257,8 @@ </summary> </histogram> -<histogram name="Media.Controls.Show" enum="MediaControlsShowReason"> +<histogram name="Media.Controls.Show" enum="MediaControlsShowReason" + expires_after="2016-05-24"> <obsolete> Deprecated May 19 2016 in favor of Media.Controls.Show.{Audio,Video} </obsolete> @@ -50627,7 +51308,8 @@ </summary> </histogram> -<histogram name="Media.DetectedAudioCodec" enum="FFmpegCodecs"> +<histogram name="Media.DetectedAudioCodec" enum="FFmpegCodecs" + expires_after="2015-09-17"> <obsolete> Deprecated Sep 15 2015 in favor of Media.DetectedAudioCodecHash </obsolete> @@ -50688,7 +51370,8 @@ </summary> </histogram> -<histogram name="Media.DetectedVideoCodec" enum="FFmpegCodecs"> +<histogram name="Media.DetectedVideoCodec" enum="FFmpegCodecs" + expires_after="2015-09-17"> <obsolete> Deprecated Sep 15 2015 in favor of Media.DetectedVideoCodecHash </obsolete> @@ -50710,7 +51393,8 @@ <summary>Video codec used in HTML5 media for a local file playback.</summary> </histogram> -<histogram name="Media.DevicePermissionActions" enum="DevicePermissionActions"> +<histogram name="Media.DevicePermissionActions" enum="DevicePermissionActions" + expires_after="2015-11-09"> <obsolete> Removed 10/2015 in favor of Permissions.Action. </obsolete> @@ -50730,7 +51414,7 @@ </summary> </histogram> -<histogram name="Media.Duration" units="ms"> +<histogram name="Media.Duration" units="ms" expires_after="2017-03-04"> <obsolete> Removed 03/2017 in favor of Media.Duration2 with larger max bucket. </obsolete> @@ -50816,7 +51500,8 @@ <summary>Result of EME promises that were handled by Chromium code.</summary> </histogram> -<histogram base="true" name="Media.EME.addKey" enum="MediaKeyException"> +<histogram base="true" name="Media.EME.addKey" enum="MediaKeyException" + expires_after="2018-01-04"> <obsolete> Deprecated 02/2016 with removal of prefixed EME. </obsolete> @@ -50825,7 +51510,7 @@ </histogram> <histogram base="true" name="Media.EME.cancelKeyRequest" - enum="MediaKeyException"> + enum="MediaKeyException" expires_after="2018-01-04"> <obsolete> Deprecated 02/2016 with removal of prefixed EME. </obsolete> @@ -50951,7 +51636,7 @@ </histogram> <histogram base="true" name="Media.EME.generateKeyRequest" - enum="MediaKeyException"> + enum="MediaKeyException" expires_after="2018-01-04"> <obsolete> Deprecated 02/2016 with removal of prefixed EME. </obsolete> @@ -50968,7 +51653,7 @@ </summary> </histogram> -<histogram base="true" name="Media.EME.KeyAdded"> +<histogram base="true" name="Media.EME.KeyAdded" expires_after="2018-01-04"> <obsolete> Deprecated 02/2016 with removal of prefixed EME. </obsolete> @@ -50976,7 +51661,8 @@ <summary>KeyAdded event count.</summary> </histogram> -<histogram base="true" name="Media.EME.KeyError" enum="MediaKeyError"> +<histogram base="true" name="Media.EME.KeyError" enum="MediaKeyError" + expires_after="2018-01-04"> <obsolete> Deprecated 02/2016 with removal of prefixed EME. </obsolete> @@ -50991,7 +51677,7 @@ </histogram> <histogram name="Media.EME.KeySystemSupport.Widevine" - enum="MediaKeySystemSupportStatus"> + enum="MediaKeySystemSupportStatus" expires_after="2016-02-22"> <obsolete> Deprecated 02/2016 with removal of prefixed EME. </obsolete> @@ -51042,7 +51728,7 @@ </summary> </histogram> -<histogram name="Media.EME.NeedKey"> +<histogram name="Media.EME.NeedKey" expires_after="2017-10-21"> <obsolete> Renamed to Media.EME.EncryptedEvent in 10/2017. </obsolete> @@ -51155,7 +51841,8 @@ </summary> </histogram> -<histogram name="Media.Engagement.ScoreAtStartup" units="%"> +<histogram name="Media.Engagement.ScoreAtStartup" units="%" + expires_after="2018-11-13"> <obsolete> Deprecated 11/2018 in Issue 900679 as we are no longer using this. </obsolete> @@ -51254,7 +51941,8 @@ </summary> </histogram> -<histogram name="Media.FallbackHardwareAudioBitsPerChannel"> +<histogram name="Media.FallbackHardwareAudioBitsPerChannel" + expires_after="2018-05-04"> <obsolete> Deprecated May 2018; has been 32-bit for years now. </obsolete> @@ -51308,7 +51996,8 @@ </summary> </histogram> -<histogram name="Media.Fling.DelayedAndDroppedFramesPer5Sec" units="frames/5s"> +<histogram name="Media.Fling.DelayedAndDroppedFramesPer5Sec" units="frames/5s" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -51319,7 +52008,8 @@ </summary> </histogram> -<histogram name="Media.Fling.DisplayedFramesPerSecond" units="frames/s"> +<histogram name="Media.Fling.DisplayedFramesPerSecond" units="frames/s" + expires_after="2015-07-15"> <obsolete> Deprecated 07/2015 in issue 508534. </obsolete> @@ -51330,7 +52020,8 @@ </summary> </histogram> -<histogram name="Media.Fling.TimeToBufferAv" units="ms"> +<histogram name="Media.Fling.TimeToBufferAv" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -51341,7 +52032,8 @@ </summary> </histogram> -<histogram name="Media.Fling.TimeToBufferAvAfterAbort" units="ms"> +<histogram name="Media.Fling.TimeToBufferAvAfterAbort" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -51351,7 +52043,8 @@ </summary> </histogram> -<histogram name="Media.Fling.TimeToBufferAvAfterUnderrun" units="ms"> +<histogram name="Media.Fling.TimeToBufferAvAfterUnderrun" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -51409,7 +52102,7 @@ </summary> </histogram> -<histogram name="Media.HardwareAudioBitsPerChannel"> +<histogram name="Media.HardwareAudioBitsPerChannel" expires_after="2018-05-04"> <obsolete> Deprecated May 2018; has been 32-bit for years now. </obsolete> @@ -51468,7 +52161,7 @@ </summary> </histogram> -<histogram name="Media.InfoLoadDelay" units="ms"> +<histogram name="Media.InfoLoadDelay" units="ms" expires_after="2017-06-26"> <obsolete> Deprecated June 2017. Found that the MediaInfoLoader class (the only user of this histogram) is no longer used by anyone. @@ -51480,7 +52173,8 @@ </summary> </histogram> -<histogram name="Media.Initialize.Windows" enum="WinGetLastError"> +<histogram name="Media.Initialize.Windows" enum="WinGetLastError" + expires_after="2015-06-08"> <obsolete> Deprecated 05/2015 in Issue 1141703002. FFmpeg is now statically linked. </obsolete> @@ -51498,7 +52192,8 @@ </summary> </histogram> -<histogram name="Media.InputInvalidSampleRateMac" units="Hz"> +<histogram name="Media.InputInvalidSampleRateMac" units="Hz" + expires_after="2016-02-11"> <obsolete> Deprecated and removed from code as of 02/2016. </obsolete> @@ -51616,7 +52311,7 @@ </histogram> <histogram name="Media.MediaElement.PlaybackPositionIsInfinity" - enum="BooleanInfinity"> + enum="BooleanInfinity" expires_after="2019-01-11"> <obsolete> Deprecated and removed from code as of January 2019. </obsolete> @@ -51672,7 +52367,7 @@ </summary> </histogram> -<histogram name="Media.MicrophoneVolume" units="%"> +<histogram name="Media.MicrophoneVolume" units="%" expires_after="2018-08-22"> <obsolete> Deprecated 08/2018. Histogram Eraser marked this histogram as unnecessary. See https://crbug.com/871467 for details. @@ -51748,7 +52443,7 @@ </histogram> <histogram name="Media.MSE.AudioSpliceDurationType" - enum="StreamParserBufferDurationType"> + enum="StreamParserBufferDurationType" expires_after="2018-05-25"> <obsolete> Deprecated 05/2018. Splicing no longer performed on buffers with estimated duration. See https://crbug.com/396634. @@ -51818,7 +52513,7 @@ </histogram> <histogram name="Media.MSE.LateAudioFrames" - units="late frames per million frames"> + units="late frames per million frames" expires_after="2016-10-03"> <obsolete> Deleted along with browser side MSE implementation. </obsolete> @@ -51833,7 +52528,7 @@ </histogram> <histogram name="Media.MSE.LateVideoFrames" - units="late frames per million frames"> + units="late frames per million frames" expires_after="2016-10-03"> <obsolete> Deleted along with browser side MSE implementation. </obsolete> @@ -51901,7 +52596,8 @@ </summary> </histogram> -<histogram name="Media.MSE.Playback" enum="BooleanSuccess"> +<histogram name="Media.MSE.Playback" enum="BooleanSuccess" + expires_after="2015-08-06"> <obsolete> Renamed to Media.LoadType. </obsolete> @@ -51912,7 +52608,8 @@ </summary> </histogram> -<histogram name="Media.MSE.PlaybackDuration" units="ms"> +<histogram name="Media.MSE.PlaybackDuration" units="ms" + expires_after="2016-10-03"> <obsolete> Deleted along with browser side MSE implementation. </obsolete> @@ -51926,7 +52623,8 @@ </summary> </histogram> -<histogram name="Media.MSE.Starvations" units="starvations per million frames"> +<histogram name="Media.MSE.Starvations" units="starvations per million frames" + expires_after="2016-10-03"> <obsolete> Deleted along with browser side MSE implementation. </obsolete> @@ -51963,7 +52661,8 @@ </summary> </histogram> -<histogram name="Media.Netflix.AudioBitrate" units="kbps"> +<histogram name="Media.Netflix.AudioBitrate" units="kbps" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -51974,7 +52673,8 @@ </summary> </histogram> -<histogram name="Media.Netflix.AudioNumChannels" units="channels"> +<histogram name="Media.Netflix.AudioNumChannels" units="channels" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -51986,7 +52686,7 @@ </histogram> <histogram name="Media.Netflix.DelayedAndDroppedFramesPer5Sec" - units="frames/5s"> + units="frames/5s" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -51997,7 +52697,8 @@ </summary> </histogram> -<histogram name="Media.Netflix.DisplayedFramesPerSecond" units="frames/s"> +<histogram name="Media.Netflix.DisplayedFramesPerSecond" units="frames/s" + expires_after="2015-07-15"> <obsolete> Deprecated 07/2015 in issue 508534. </obsolete> @@ -52008,7 +52709,8 @@ </summary> </histogram> -<histogram name="Media.Netflix.VideoBitrate" units="kbps"> +<histogram name="Media.Netflix.VideoBitrate" units="kbps" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -52019,7 +52721,8 @@ </summary> </histogram> -<histogram name="Media.Netflix.VideoHeight" units="pixels"> +<histogram name="Media.Netflix.VideoHeight" units="pixels" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -52132,7 +52835,7 @@ </histogram> <histogram name="Media.PlayMovies.DelayedAndDroppedFramesPer5Sec" - units="frames/5s"> + units="frames/5s" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -52143,7 +52846,8 @@ </summary> </histogram> -<histogram name="Media.PlayMovies.DisplayedFramesPerSecond" units="frames/s"> +<histogram name="Media.PlayMovies.DisplayedFramesPerSecond" units="frames/s" + expires_after="2015-07-15"> <obsolete> Deprecated 07/2015 in issue 508534. </obsolete> @@ -52208,7 +52912,8 @@ </summary> </histogram> -<histogram name="Media.Remoting.CapacityOverMediaBitrate" units="kbps"> +<histogram name="Media.Remoting.CapacityOverMediaBitrate" units="kbps" + expires_after="2017-11-29"> <obsolete> Deprecated 11/2017 in issue 788940. </obsolete> @@ -52219,7 +52924,8 @@ </summary> </histogram> -<histogram name="Media.Remoting.MediaBitrateOverCapacity" units="kbps"> +<histogram name="Media.Remoting.MediaBitrateOverCapacity" units="kbps" + expires_after="2017-11-29"> <obsolete> Deprecated 11/2017 in issue 788940. </obsolete> @@ -52230,7 +52936,8 @@ </summary> </histogram> -<histogram name="Media.Remoting.PosterDownloadDuration.Fail" units="ms"> +<histogram name="Media.Remoting.PosterDownloadDuration.Fail" units="ms" + expires_after="2017-08-02"> <obsolete> Deprecated as no more poster image is being downloaded while remoting content. @@ -52242,7 +52949,8 @@ </summary> </histogram> -<histogram name="Media.Remoting.PosterDownloadDuration.Success" units="ms"> +<histogram name="Media.Remoting.PosterDownloadDuration.Success" units="ms" + expires_after="2017-08-02"> <obsolete> Deprecated as no more poster image is being downloaded while remoting content. @@ -52281,7 +52989,8 @@ </summary> </histogram> -<histogram name="Media.Remoting.StartMediaBitrate" units="kbps"> +<histogram name="Media.Remoting.StartMediaBitrate" units="kbps" + expires_after="2017-11-29"> <obsolete> Deprecated 11/2017 in issue 788940. </obsolete> @@ -52316,7 +53025,8 @@ <summary>Tracks whether audio or video or both are remoted.</summary> </histogram> -<histogram name="Media.Remoting.TransmissionCapacity" units="kbps"> +<histogram name="Media.Remoting.TransmissionCapacity" units="kbps" + expires_after="2017-11-29"> <obsolete> Deprecated 11/2017 in issue 788940. </obsolete> @@ -52362,7 +53072,8 @@ <summary>Counts of video decode errors reported to RTCVideoDecoder.</summary> </histogram> -<histogram name="Media.RTCVideoDecoderInitDecodeStatus" enum="BooleanSuccess"> +<histogram name="Media.RTCVideoDecoderInitDecodeStatus" enum="BooleanSuccess" + expires_after="2013-10-22"> <obsolete> Renamed to Media.RTCVideoDecoderInitDecodeSuccess. </obsolete> @@ -52644,7 +53355,8 @@ </summary> </histogram> -<histogram base="true" name="Media.TimeToFirstFrame.SRC.ManyVideos" units="ms"> +<histogram base="true" name="Media.TimeToFirstFrame.SRC.ManyVideos" units="ms" + expires_after="2018-12-01"> <obsolete> Removed from code 2018/11/29. </obsolete> @@ -52666,7 +53378,8 @@ </summary> </histogram> -<histogram name="Media.TimeToPipelineStarted" units="ms"> +<histogram name="Media.TimeToPipelineStarted" units="ms" + expires_after="2014-06-21"> <obsolete> Removed from code 2014/6/18. </obsolete> @@ -52700,7 +53413,7 @@ </summary> </histogram> -<histogram name="Media.UnderflowCount"> +<histogram name="Media.UnderflowCount" expires_after="2017-02-22"> <obsolete> Removed Feb 2017. Media.UnderflowDuration provides more useful counts. </obsolete> @@ -52710,7 +53423,7 @@ </summary> </histogram> -<histogram name="Media.UnderflowDuration" units="ms"> +<histogram name="Media.UnderflowDuration" units="ms" expires_after="2017-08-07"> <obsolete> Removed Aug 2017. Media.UnderflowDuration2.SRC removes zero-weighting so that we only report actual underflows. @@ -52722,7 +53435,8 @@ </summary> </histogram> -<histogram name="Media.UnderflowDuration.EME" units="ms"> +<histogram name="Media.UnderflowDuration.EME" units="ms" + expires_after="2017-08-07"> <obsolete> Removed Aug 2017. Media.UnderflowDuration2.EME removes zero-weighting so that we only report actual underflows. @@ -52734,7 +53448,8 @@ </summary> </histogram> -<histogram name="Media.UnderflowDuration.MSE" units="ms"> +<histogram name="Media.UnderflowDuration.MSE" units="ms" + expires_after="2017-08-07"> <obsolete> Removed Aug 2017. Media.UnderflowDuration2.MSE removes zero-weighting so that we only report actual underflows. @@ -52757,7 +53472,8 @@ </summary> </histogram> -<histogram name="Media.URLScheme" enum="URLSchemeForHistogram"> +<histogram name="Media.URLScheme" enum="URLSchemeForHistogram" + expires_after="2018-08-30"> <obsolete> Replaced with Media.URLScheme2 which is only recorded for src=URL playbacks instead of including MediaSource playbacks which are always blob. @@ -52832,7 +53548,8 @@ </summary> </histogram> -<histogram name="Media.VAVDAH264.DecoderFailure" enum="VAVDAH264DecoderFailure"> +<histogram name="Media.VAVDAH264.DecoderFailure" enum="VAVDAH264DecoderFailure" + expires_after="2015-04-11"> <obsolete> Deprecated as of 4/2015, partially replaced by Media.VAVDA.DecoderFailure. </obsolete> @@ -52875,7 +53592,7 @@ </histogram> <histogram name="Media.Video.Autoplay.Muted.Attribute.OffscreenDuration" - units="ms"> + units="ms" expires_after="2017-03-08"> <obsolete> Deprecated as autoplay muted video by attributed is paused when going offscreen since https://crbug.com/683141. @@ -52968,7 +53685,8 @@ </summary> </histogram> -<histogram name="Media.Video.KeyFrameDistance" units="ms"> +<histogram name="Media.Video.KeyFrameDistance" units="ms" + expires_after="2018-11-07"> <obsolete> Deprecated as of 11/2018 -- no longer used and expensive to monitor. </obsolete> @@ -52980,7 +53698,8 @@ </summary> </histogram> -<histogram name="Media.Video.TimeFromForegroundToFirstFrame" units="ms"> +<histogram name="Media.Video.TimeFromForegroundToFirstFrame" units="ms" + expires_after="2017-01-19"> <obsolete> Deprecated as of 01/18/2017 in issue 670150. Replaced by Media.Video.TimeFromForegroundToFirstFrame.DisableTrack and @@ -53081,7 +53800,8 @@ </summary> </histogram> -<histogram name="Media.VideoCapture.FramesReceived" enum="BooleanReceived"> +<histogram name="Media.VideoCapture.FramesReceived" enum="BooleanReceived" + expires_after="2015-06-08"> <obsolete> Deprecated as of 10/2014 in issue 422822. Replaced by Media.VideoCaptureManager.Event and the two new values 3 and 4 in the enum @@ -53157,7 +53877,8 @@ </summary> </histogram> -<histogram name="Media.VideoCapture.PixelFormat" enum="CapturePixelFormat"> +<histogram name="Media.VideoCapture.PixelFormat" enum="CapturePixelFormat" + expires_after="2014-10-20"> <obsolete> Deprecated 10/2014 in Issue 660493002. </obsolete> @@ -53305,7 +54026,8 @@ </summary> </histogram> -<histogram name="Media.VideoCaptureService.DurationUntilReconnect" units="ms"> +<histogram name="Media.VideoCaptureService.DurationUntilReconnect" units="ms" + expires_after="2017-07-20"> <obsolete> Deprecated 07/2017 in favor of the more differentiated durations. </obsolete> @@ -53358,7 +54080,8 @@ <summary>Video codec profile used in HTML5 media.</summary> </histogram> -<histogram name="Media.VideoCodedAspectRatio" units="%"> +<histogram name="Media.VideoCodedAspectRatio" units="%" + expires_after="2016-11-15"> <obsolete> Deprecated 11/2016 in issue 2506533002. </obsolete> @@ -53366,7 +54089,7 @@ <summary>Coded aspect ratio of HTML5 video.</summary> </histogram> -<histogram name="Media.VideoCodedWidth"> +<histogram name="Media.VideoCodedWidth" expires_after="2016-11-15"> <obsolete> Deprecated 11/2016 in issue 2506533002. </obsolete> @@ -53397,7 +54120,8 @@ </summary> </histogram> -<histogram name="Media.VideoFormat" enum="VideoFormat"> +<histogram name="Media.VideoFormat" enum="VideoFormat" + expires_after="2015-05-29"> <obsolete> Replaced by Media.VideoFramePixelFormat 05/2015. </obsolete> @@ -53411,7 +54135,8 @@ <summary>Video frame color space. Emitted for each video frame.</summary> </histogram> -<histogram name="Media.VideoFramePixelFormat" enum="VideoFramePixelFormat"> +<histogram name="Media.VideoFramePixelFormat" enum="VideoFramePixelFormat" + expires_after="2015-09-01"> <obsolete> Replaced by Media.VideoPixelFormatUnion 08/2015. </obsolete> @@ -53469,7 +54194,8 @@ </summary> </histogram> -<histogram name="Media.VideoPixelFormat" enum="VideoPixelFormat"> +<histogram name="Media.VideoPixelFormat" enum="VideoPixelFormat" + expires_after="2015-05-22"> <obsolete> Replaced by Media.VideoFormat 05/2015. </obsolete> @@ -53508,7 +54234,8 @@ <summary>Metadata rotation in mp4 videos. Emitted during demuxing.</summary> </histogram> -<histogram name="Media.VideoTrackAdapter.FramesReceived" enum="BooleanReceived"> +<histogram name="Media.VideoTrackAdapter.FramesReceived" enum="BooleanReceived" + expires_after="2014-09-05"> <obsolete> Replaced by Media.VideoCapture.FramesReceived 09/2014. </obsolete> @@ -53539,7 +54266,8 @@ </summary> </histogram> -<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoder"> +<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoder" + expires_after="2016-05-25"> <obsolete> Deprecated 05/2016. </obsolete> @@ -53547,7 +54275,8 @@ <summary>Number of frame buffers used by Vpx decoder.</summary> </histogram> -<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoderAndVideoFrame"> +<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoderAndVideoFrame" + expires_after="2016-05-25"> <obsolete> Deprecated 05/2016. </obsolete> @@ -53558,7 +54287,8 @@ </summary> </histogram> -<histogram name="Media.VpxVideoDecoder.Vp9DecodeTime" units="ms"> +<histogram name="Media.VpxVideoDecoder.Vp9DecodeTime" units="ms" + expires_after="2018-11-07"> <obsolete> Deprecated 11/2018 -- shows nothing interesting; it's been static for years. </obsolete> @@ -53617,7 +54347,7 @@ </histogram> <histogram name="Media.WebAudioSourceProvider.SinkStatus" - enum="OutputDeviceStatus"> + enum="OutputDeviceStatus" expires_after="2018-11-30"> <obsolete> Replaced by Media.AudioRendererImpl.SinkStatus in Nov 2018. </obsolete> @@ -53692,7 +54422,7 @@ </histogram> <histogram name="Media.WebView.UnsupportedContainer" - enum="UnsupportedContainers"> + enum="UnsupportedContainers" expires_after="2018-09-22"> <obsolete> Deprecated 09/2018 since support for these containers has been deprecated. </obsolete> @@ -53704,7 +54434,8 @@ </summary> </histogram> -<histogram name="Media.WindowsCoreAudioInput" enum="BooleanSuccess"> +<histogram name="Media.WindowsCoreAudioInput" enum="BooleanSuccess" + expires_after="2017-01-26"> <obsolete> Deprecated 01/2017 as Windows Core Audio is now the only audio input implementation on Windows. @@ -53717,7 +54448,7 @@ </histogram> <histogram name="Media.YouTube.DelayedAndDroppedFramesPer5Sec" - units="frames/5s"> + units="frames/5s" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -53728,7 +54459,8 @@ </summary> </histogram> -<histogram name="Media.YouTube.DisplayedFramesPerSecond" units="frames/s"> +<histogram name="Media.YouTube.DisplayedFramesPerSecond" units="frames/s" + expires_after="2015-07-15"> <obsolete> Deprecated 07/2015 in issue 508534. </obsolete> @@ -53747,7 +54479,8 @@ </summary> </histogram> -<histogram name="Media.YouTube.TimeToBufferAvAfterAbort" units="ms"> +<histogram name="Media.YouTube.TimeToBufferAvAfterAbort" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -54276,7 +55009,9 @@ </histogram> <histogram name="Memory.AudioService.ResidentSet" units="MiB" - expires_after="2019-01-31"> + expires_after="never"> +<!-- expires-never: Generic system health metric used to diagnose various performance issues. --> + <owner>fdoray@chromium.org</owner> <summary> The size of the resident memory in a audio service process. This is @@ -54304,7 +55039,7 @@ <summary>TBD.</summary> </histogram> -<histogram name="Memory.Browser" units="KB"> +<histogram name="Memory.Browser" units="KB" expires_after="2016-10-03"> <obsolete> Deprecated 06/2016 Replaced with Memory.Browser.Large2. </obsolete> @@ -54319,7 +55054,8 @@ </summary> </histogram> -<histogram name="Memory.Browser.Committed" units="MB"> +<histogram name="Memory.Browser.Committed" units="MB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -54331,7 +55067,7 @@ </summary> </histogram> -<histogram name="Memory.Browser.Large" units="MB"> +<histogram name="Memory.Browser.Large" units="MB" expires_after="2016-07-19"> <obsolete> Deprecated 07/2016 as it reports wrong numbers. crbug.com/629354. Replaced with Memory.Browser.Large2 @@ -54343,7 +55079,7 @@ </summary> </histogram> -<histogram name="Memory.Browser.Large2" units="MB"> +<histogram name="Memory.Browser.Large2" units="MB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017 Replaced with Memory.Browser.PrivateMemoryFootprint. </obsolete> @@ -54375,8 +55111,9 @@ </summary> </histogram> -<histogram name="Memory.Browser.ResidentSet" units="MiB" - expires_after="2019-01-31"> +<histogram name="Memory.Browser.ResidentSet" units="MiB" expires_after="never"> +<!-- expires-never: Generic system health metric used to diagnose various performance issues. --> + <owner>fdoray@chromium.org</owner> <summary> The size of the resident memory in the browser process. This is influenced @@ -54402,7 +55139,7 @@ <summary>TBD.</summary> </histogram> -<histogram name="Memory.Chrome" units="KB"> +<histogram name="Memory.Chrome" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement, but Memory.Renderer.PrivateMemoryFootprint is similar. @@ -54416,7 +55153,8 @@ </summary> </histogram> -<histogram name="Memory.ChromeProcessCount" units="processes"> +<histogram name="Memory.ChromeProcessCount" units="processes" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -54430,7 +55168,7 @@ </histogram> <histogram name="Memory.CompressibleStringCount" - enum="CompressibleStringCountType"> + enum="CompressibleStringCountType" expires_after="2016-08-10"> <obsolete> Deprecated as of Aug 2016. CompressibleString has been reverted once at https://crrev.com/2227933002. @@ -54455,7 +55193,8 @@ </summary> </histogram> -<histogram name="Memory.Coordinator.StateDuration" units="seconds"> +<histogram name="Memory.Coordinator.StateDuration" units="seconds" + expires_after="2017-02-27"> <obsolete> Obsolete as of 2/2017 </obsolete> @@ -54464,7 +55203,7 @@ </histogram> <histogram name="Memory.Coordinator.StateOnCriticalNotificationReceived" - enum="MemoryState"> + enum="MemoryState" expires_after="2017-02-27"> <obsolete> Obsolete as of 2/2017 </obsolete> @@ -54476,7 +55215,7 @@ </histogram> <histogram name="Memory.Coordinator.StateOnModerateNotificationReceived" - enum="MemoryState"> + enum="MemoryState" expires_after="2017-02-27"> <obsolete> Obsolete as of 2/2017 </obsolete> @@ -54487,7 +55226,8 @@ </summary> </histogram> -<histogram name="Memory.Coordinator.TotalPrivate" units="MB"> +<histogram name="Memory.Coordinator.TotalPrivate" units="MB" + expires_after="2017-02-27"> <obsolete> Obsolete as of 2/2017 </obsolete> @@ -54499,7 +55239,7 @@ </histogram> <histogram name="Memory.Coordinator.TrimMemoryLevel.Normal" - enum="TrimMemoryLevel"> + enum="TrimMemoryLevel" expires_after="2017-02-27"> <obsolete> Obsolete as of 2/2017 </obsolete> @@ -54510,7 +55250,7 @@ </histogram> <histogram name="Memory.Coordinator.TrimMemoryLevel.Suspended" - enum="TrimMemoryLevel"> + enum="TrimMemoryLevel" expires_after="2017-02-27"> <obsolete> Obsolete as of 2/2017 </obsolete> @@ -54521,7 +55261,7 @@ </histogram> <histogram name="Memory.Coordinator.TrimMemoryLevel.Throttled" - enum="TrimMemoryLevel"> + enum="TrimMemoryLevel" expires_after="2017-02-27"> <obsolete> Obsolete as of 2/2017 </obsolete> @@ -54549,7 +55289,7 @@ </histogram> <histogram name="Memory.Experimental.Browser.PrivateMemoryFootprint.MacOS" - units="MB"> + units="MB" expires_after="2018-01-03"> <obsolete> Deprecated 12/2017. Replaced by Memory.Browser.PrivateMemoryFootprint. </obsolete> @@ -54559,7 +55299,8 @@ </summary> </histogram> -<histogram name="Memory.Experimental.Browser.PurgedMemory" units="MB"> +<histogram name="Memory.Experimental.Browser.PurgedMemory" units="MB" + expires_after="2018-03-08"> <obsolete> Deprecated 03/2018. </obsolete> @@ -54653,7 +55394,7 @@ </histogram> <histogram name="Memory.Experimental.Extension.PrivateMemoryFootprint.MacOS" - units="MB"> + units="MB" expires_after="2018-01-03"> <obsolete> Deprecated 12/2017. Replaced by Memory.Extension.PrivateMemoryFootprint. </obsolete> @@ -54696,7 +55437,7 @@ </histogram> <histogram name="Memory.Experimental.Gpu.PrivateMemoryFootprint.MacOS" - units="MB"> + units="MB" expires_after="2018-01-03"> <obsolete> Deprecated 12/2017. Replaced by Memory.Gpu.PrivateMemoryFootprint. </obsolete> @@ -54731,7 +55472,7 @@ </histogram> <histogram name="Memory.Experimental.OomIntervention.BrowserMonitorStatus" - enum="OomInterventionBrowserMonitorStatus"> + enum="OomInterventionBrowserMonitorStatus" expires_after="2018-08-29"> <obsolete> Deprecated 08/2018. Made a decision in issue 871507 that we no longer need this data. @@ -54946,7 +55687,7 @@ </histogram> <histogram name="Memory.Experimental.OomIntervention.RendererEnabledStatus" - enum="OomInterventionRendererStatus"> + enum="OomInterventionRendererStatus" expires_after="2018-08-29"> <obsolete> Deprecated 08/2018. Made a decision in issue 871507 that we no longer need this data. @@ -55120,7 +55861,7 @@ </histogram> <histogram name="Memory.Experimental.Renderer.PrivateMemoryFootprint.MacOS" - units="MB"> + units="MB" expires_after="2018-01-03"> <obsolete> Deprecated 12/2017. Replaced by Memory.Renderer.PrivateMemoryFootprint. </obsolete> @@ -55327,7 +56068,7 @@ </summary> </histogram> -<histogram name="Memory.Extension" units="KB"> +<histogram name="Memory.Extension" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. Replaced by Memory.Extension.PrivateMemoryFootprint. </obsolete> @@ -55353,7 +56094,9 @@ </histogram> <histogram name="Memory.Extension.ResidentSet" units="MiB" - expires_after="2019-01-31"> + expires_after="never"> +<!-- expires-never: Generic system health metric used to diagnose various performance issues. --> + <owner>fdoray@chromium.org</owner> <summary> The size of the resident memory in an extension process. This is influenced @@ -55402,7 +56145,7 @@ </summary> </histogram> -<histogram name="Memory.Gpu" units="KB"> +<histogram name="Memory.Gpu" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. Replaced by Memory.Gpu.PrivateMemoryFootprint. </obsolete> @@ -55437,7 +56180,9 @@ </summary> </histogram> -<histogram name="Memory.Gpu.ResidentSet" units="MiB" expires_after="2019-01-31"> +<histogram name="Memory.Gpu.ResidentSet" units="MiB" expires_after="never"> +<!-- expires-never: Generic system health metric used to diagnose various performance issues. --> + <owner>fdoray@chromium.org</owner> <summary> The size of the resident memory in the GPU process. This is influenced by @@ -55469,7 +56214,8 @@ </summary> </histogram> -<histogram name="Memory.IPCChannelReader.ReceivedMessageSize" units="bytes"> +<histogram name="Memory.IPCChannelReader.ReceivedMessageSize" units="bytes" + expires_after="2015-10-29"> <obsolete> Obsolete as of 11/2015 </obsolete> @@ -55505,7 +56251,7 @@ </summary> </histogram> -<histogram name="Memory.NativeClient" units="KB"> +<histogram name="Memory.NativeClient" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -55518,7 +56264,8 @@ </summary> </histogram> -<histogram name="Memory.NativeClientBroker" units="KB"> +<histogram name="Memory.NativeClientBroker" units="KB" + expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -55656,7 +56403,8 @@ </summary> </histogram> -<histogram name="Memory.OtherProcessCount" units="processes"> +<histogram name="Memory.OtherProcessCount" units="processes" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -55795,7 +56543,8 @@ </summary> </histogram> -<histogram name="Memory.PepperFlashPlugin" units="KB"> +<histogram name="Memory.PepperFlashPlugin" units="KB" + expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -55806,7 +56555,7 @@ </summary> </histogram> -<histogram name="Memory.PepperPlugin" units="KB"> +<histogram name="Memory.PepperPlugin" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -55819,7 +56568,8 @@ </summary> </histogram> -<histogram name="Memory.PepperPluginBroker" units="KB"> +<histogram name="Memory.PepperPluginBroker" units="KB" + expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -55832,7 +56582,8 @@ </summary> </histogram> -<histogram name="Memory.PepperPluginBrokerProcessCount" units="processes"> +<histogram name="Memory.PepperPluginBrokerProcessCount" units="processes" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -55845,7 +56596,8 @@ </summary> </histogram> -<histogram name="Memory.PepperPluginProcessCount" units="processes"> +<histogram name="Memory.PepperPluginProcessCount" units="processes" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -55857,7 +56609,7 @@ </summary> </histogram> -<histogram name="Memory.Plugin" units="KB"> +<histogram name="Memory.Plugin" units="KB" expires_after="2016-04-11"> <obsolete> Deprecated due to NPAPI removal. </obsolete> @@ -55870,7 +56622,8 @@ </summary> </histogram> -<histogram name="Memory.PluginProcessCount" units="processes"> +<histogram name="Memory.PluginProcessCount" units="processes" + expires_after="2016-04-11"> <obsolete> Deprecated due to NPAPI removal. </obsolete> @@ -55907,7 +56660,7 @@ </summary> </histogram> -<histogram name="Memory.ProcessLimit"> +<histogram name="Memory.ProcessLimit" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -55917,7 +56670,7 @@ <summary>The current process limit. Recorded once per UMA ping.</summary> </histogram> -<histogram name="Memory.Renderer" units="KB"> +<histogram name="Memory.Renderer" units="KB" expires_after="2016-10-03"> <obsolete> Deprecated 06/2016 Replaced with Memory.Renderer.Large2. </obsolete> @@ -55931,7 +56684,8 @@ </summary> </histogram> -<histogram name="Memory.Renderer.Committed" units="MB"> +<histogram name="Memory.Renderer.Committed" units="MB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -55954,7 +56708,7 @@ </summary> </histogram> -<histogram name="Memory.Renderer.Large2" units="MB"> +<histogram name="Memory.Renderer.Large2" units="MB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. Replaced by Memory.Renderer.PrivateMemoryFootprint. </obsolete> @@ -55982,8 +56736,9 @@ </summary> </histogram> -<histogram name="Memory.Renderer.ResidentSet" units="MiB" - expires_after="2019-01-31"> +<histogram name="Memory.Renderer.ResidentSet" units="MiB" expires_after="never"> +<!-- expires-never: Generic system health metric used to diagnose various performance issues. --> + <owner>fdoray@chromium.org</owner> <summary> The size of the resident memory in a renderer process. This is influenced by @@ -56003,7 +56758,7 @@ </summary> </histogram> -<histogram name="Memory.RendererAll" units="MB"> +<histogram name="Memory.RendererAll" units="MB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement, although Memory.Total.PrivateMemoryFootprint is similar. @@ -56019,7 +56774,8 @@ </summary> </histogram> -<histogram name="Memory.RendererAll.Committed" units="MB"> +<histogram name="Memory.RendererAll.Committed" units="MB" + expires_after="2018-01-15"> <obsolete> Deprecated 01/2018. No direct replacement, although Memory.Total.PrivateMemoryFootprint is similar. @@ -56035,7 +56791,8 @@ </summary> </histogram> -<histogram name="Memory.RendererGrowthIn30Min" units="KB"> +<histogram name="Memory.RendererGrowthIn30Min" units="KB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56069,7 +56826,8 @@ </summary> </histogram> -<histogram name="Memory.RendererShrinkIn30Min" units="KB"> +<histogram name="Memory.RendererShrinkIn30Min" units="KB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56123,7 +56881,7 @@ </summary> </histogram> -<histogram name="Memory.SandboxHelper" units="KB"> +<histogram name="Memory.SandboxHelper" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -56145,7 +56903,8 @@ </summary> </histogram> -<histogram name="Memory.Stats.Win.AvailPageFile" units="MB"> +<histogram name="Memory.Stats.Win.AvailPageFile" units="MB" + expires_after="2016-03-17"> <obsolete> Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPageFile2. </obsolete> @@ -56166,7 +56925,8 @@ </summary> </histogram> -<histogram name="Memory.Stats.Win.AvailPhys" units="MB"> +<histogram name="Memory.Stats.Win.AvailPhys" units="MB" + expires_after="2016-03-17"> <obsolete> Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPhys2. </obsolete> @@ -56189,7 +56949,8 @@ </summary> </histogram> -<histogram name="Memory.Stats.Win.AvailVirtual" units="MB"> +<histogram name="Memory.Stats.Win.AvailVirtual" units="MB" + expires_after="2016-03-17"> <obsolete> Deprecated in 595320 and replaced with Memory.Stats.Win.AvailVirtual2. </obsolete> @@ -56219,7 +56980,8 @@ </summary> </histogram> -<histogram name="Memory.Stats.Win.TotalPageFile" units="MB"> +<histogram name="Memory.Stats.Win.TotalPageFile" units="MB" + expires_after="2016-03-17"> <obsolete> Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPageFile2. </obsolete> @@ -56239,7 +57001,8 @@ </summary> </histogram> -<histogram name="Memory.Stats.Win.TotalPhys" units="MB"> +<histogram name="Memory.Stats.Win.TotalPhys" units="MB" + expires_after="2016-03-17"> <obsolete> Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPhys2. </obsolete> @@ -56256,7 +57019,8 @@ </summary> </histogram> -<histogram name="Memory.Stats.Win.TotalVirtual" units="MB"> +<histogram name="Memory.Stats.Win.TotalVirtual" units="MB" + expires_after="2016-03-17"> <obsolete> Deprecated in 595320 and replaced with Memory.Stats.Win.TotalVirtual2. </obsolete> @@ -56285,7 +57049,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Browser" units="KB"> +<histogram name="Memory.Swap.Browser" units="KB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56298,7 +57062,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Chrome" units="KB"> +<histogram name="Memory.Swap.Chrome" units="KB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56311,7 +57075,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.CompressedDataSize" units="MB"> +<histogram name="Memory.Swap.CompressedDataSize" units="MB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56324,7 +57089,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.CompressionRatio"> +<histogram name="Memory.Swap.CompressionRatio" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56337,7 +57102,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Extension" units="KB"> +<histogram name="Memory.Swap.Extension" units="KB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56350,7 +57115,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Gpu" units="KB"> +<histogram name="Memory.Swap.Gpu" units="KB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56363,7 +57128,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.HaveSwapped" enum="BooleanSuccess"> +<histogram name="Memory.Swap.HaveSwapped" enum="BooleanSuccess" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56376,7 +57142,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.MemUsedTotal" units="MB"> +<histogram name="Memory.Swap.MemUsedTotal" units="MB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56389,7 +57156,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.NativeClient" units="KB"> +<histogram name="Memory.Swap.NativeClient" units="KB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56403,7 +57171,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.NativeClientBroker" units="KB"> +<histogram name="Memory.Swap.NativeClientBroker" units="KB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56417,7 +57186,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.NumReads"> +<histogram name="Memory.Swap.NumReads" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56430,7 +57199,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.NumWrites"> +<histogram name="Memory.Swap.NumWrites" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56443,7 +57212,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.OriginalDataSize" units="MB"> +<histogram name="Memory.Swap.OriginalDataSize" units="MB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56456,7 +57226,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.PepperPlugin" units="KB"> +<histogram name="Memory.Swap.PepperPlugin" units="KB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56470,7 +57241,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.PepperPluginBroker" units="KB"> +<histogram name="Memory.Swap.PepperPluginBroker" units="KB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56484,7 +57256,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Plugin" units="KB"> +<histogram name="Memory.Swap.Plugin" units="KB" expires_after="2016-04-11"> <obsolete> Deprecated due to NPAPI removal. </obsolete> @@ -56497,7 +57269,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Renderer" units="KB"> +<histogram name="Memory.Swap.Renderer" units="KB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56510,7 +57282,8 @@ </summary> </histogram> -<histogram name="Memory.Swap.SandboxHelper" units="KB"> +<histogram name="Memory.Swap.SandboxHelper" units="KB" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56524,7 +57297,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Total" units="MB"> +<histogram name="Memory.Swap.Total" units="MB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56538,7 +57311,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Total2" units="MiB"> +<histogram name="Memory.Swap.Total2" units="MiB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56552,7 +57325,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Utility" units="KB"> +<histogram name="Memory.Swap.Utility" units="KB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56575,7 +57348,7 @@ </summary> </histogram> -<histogram name="Memory.Swap.Zygote" units="KB"> +<histogram name="Memory.Swap.Zygote" units="KB" expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56588,7 +57361,7 @@ </summary> </histogram> -<histogram name="Memory.Total" units="MB"> +<histogram name="Memory.Total" units="MB" expires_after="2016-09-29"> <obsolete> Deprecated 09/2016. Replaced by Memory.Total2. </obsolete> @@ -56622,8 +57395,9 @@ </summary> </histogram> -<histogram name="Memory.Total.ResidentSet" units="MiB" - expires_after="2019-01-31"> +<histogram name="Memory.Total.ResidentSet" units="MiB" expires_after="never"> +<!-- expires-never: Generic system health metric used to diagnose various performance issues. --> + <owner>fdoray@chromium.org</owner> <summary> The size of the resident memory in all processes. This is influenced by @@ -56643,7 +57417,7 @@ </summary> </histogram> -<histogram name="Memory.Total2" units="MiB"> +<histogram name="Memory.Total2" units="MiB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. Replaced by Memory.Total.PrivateMemoryFootprint. </obsolete> @@ -56657,7 +57431,7 @@ </summary> </histogram> -<histogram name="Memory.Utility" units="KB"> +<histogram name="Memory.Utility" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -56689,8 +57463,9 @@ </summary> </histogram> -<histogram name="Memory.Utility.ResidentSet" units="MiB" - expires_after="2019-01-31"> +<histogram name="Memory.Utility.ResidentSet" units="MiB" expires_after="never"> +<!-- expires-never: Generic system health metric used to diagnose various performance issues. --> + <owner>fdoray@chromium.org</owner> <summary> The size of the resident memory in a utility process. This is influenced by @@ -56720,7 +57495,8 @@ </summary> </histogram> -<histogram name="Memory.WorkerProcessCount" units="processes"> +<histogram name="Memory.WorkerProcessCount" units="processes" + expires_after="2018-03-09"> <obsolete> Deprecated 03/2018. No direct replacement. </obsolete> @@ -56732,7 +57508,7 @@ </summary> </histogram> -<histogram name="Memory.Zygote" units="KB"> +<histogram name="Memory.Zygote" units="KB" expires_after="2017-11-10"> <obsolete> Deprecated 11/2017. No direct replacement. </obsolete> @@ -56776,7 +57552,8 @@ </summary> </histogram> -<histogram name="MemoryAndroid.LowMemoryTimeBetween" units="ms"> +<histogram name="MemoryAndroid.LowMemoryTimeBetween" units="ms" + expires_after="2018-04-25"> <obsolete> Deprecated 04/2018. </obsolete> @@ -56802,7 +57579,7 @@ </histogram> <histogram name="MemoryAndroid.NotificationBackground" - enum="AndroidMemoryNotificationBackground"> + enum="AndroidMemoryNotificationBackground" expires_after="2018-04-25"> <obsolete> Deprecated 04/2018 in favor of Android.MemoryPressureNotification. </obsolete> @@ -56816,7 +57593,7 @@ </histogram> <histogram name="MemoryAndroid.NotificationForeground" - enum="AndroidMemoryNotificationForeground"> + enum="AndroidMemoryNotificationForeground" expires_after="2018-04-25"> <obsolete> Deprecated 04/2018 in favor of Android.MemoryPressureNotification. </obsolete> @@ -56836,7 +57613,8 @@ <summary>The amount of reclaimed memory after a tab became inactive.</summary> </histogram> -<histogram name="MemoryWarning.EvictedTabTimeSinceActive" units="ms"> +<histogram name="MemoryWarning.EvictedTabTimeSinceActive" units="ms" + expires_after="2016-10-06"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -56853,7 +57631,8 @@ </summary> </histogram> -<histogram name="MemoryWarning.ProtectedTabTimeSinceActive" units="ms"> +<histogram name="MemoryWarning.ProtectedTabTimeSinceActive" units="ms" + expires_after="2016-10-06"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -56863,7 +57642,8 @@ </summary> </histogram> -<histogram name="MessageLoop.DelayedTaskQueue.PendingTasksCountOnIdle"> +<histogram name="MessageLoop.DelayedTaskQueue.PendingTasksCountOnIdle" + expires_after="2018-07-24"> <obsolete> Deprecated as of 07/2018. </obsolete> @@ -56874,7 +57654,8 @@ </summary> </histogram> -<histogram name="MessageLoop.DelayedTaskQueue.PostedDelay" units="ms"> +<histogram name="MessageLoop.DelayedTaskQueue.PostedDelay" units="ms" + expires_after="2018-07-24"> <obsolete> Deprecated as of 07/2018. </obsolete> @@ -56885,7 +57666,8 @@ </summary> </histogram> -<histogram name="MessageLoop.DelayedTaskQueueForUI.PendingTasksCountOnIdle"> +<histogram name="MessageLoop.DelayedTaskQueueForUI.PendingTasksCountOnIdle" + expires_after="2018-11-14"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -56898,7 +57680,8 @@ </summary> </histogram> -<histogram name="MessageLoop.ScheduledSleep.Completed" units="ms"> +<histogram name="MessageLoop.ScheduledSleep.Completed" units="ms" + expires_after="2018-07-24"> <obsolete> Deprecated as of 07/2018. </obsolete> @@ -56910,7 +57693,8 @@ </summary> </histogram> -<histogram name="MessageLoop.ScheduledSleep.Interrupted" units="ms"> +<histogram name="MessageLoop.ScheduledSleep.Interrupted" units="ms" + expires_after="2018-07-24"> <obsolete> Deprecated as of 07/2018. </obsolete> @@ -57131,7 +57915,7 @@ </histogram> <histogram name="MobileDownload.InterceptFailureReason" - enum="MobileDownloadInterceptFailureReason"> + enum="MobileDownloadInterceptFailureReason" expires_after="2016-09-21"> <obsolete> Deprecated 09/2016 in Issue 647755 with all downloads going through Chrome. </obsolete> @@ -57217,7 +58001,7 @@ </histogram> <histogram name="MobileDownload.Notification.FixingSummaryLeak" - enum="BooleanForegroundNotification"> + enum="BooleanForegroundNotification" expires_after="2017-10-27"> <obsolete> Deprecated 10/2017 in Issue 722320 with the removal of DownloadNotificationService.hideDanglingSummaryNotification. @@ -57486,7 +58270,8 @@ </summary> </histogram> -<histogram name="MobileStartup.MainIntentAction" enum="MobileStartingAction"> +<histogram name="MobileStartup.MainIntentAction" enum="MobileStartingAction" + expires_after="2018-05-22"> <obsolete> Deprecated and removed from the code 05/2018 </obsolete> @@ -57526,7 +58311,8 @@ </summary> </histogram> -<histogram name="MobileStartup.NonMainIntentAction" enum="MobileStartingAction"> +<histogram name="MobileStartup.NonMainIntentAction" enum="MobileStartingAction" + expires_after="2018-05-22"> <obsolete> Deprecated and removed from the code 05/2018 </obsolete> @@ -57538,7 +58324,8 @@ </summary> </histogram> -<histogram name="MobileStartup.TimeSinceLastUse" units="minutes"> +<histogram name="MobileStartup.TimeSinceLastUse" units="minutes" + expires_after="2018-05-22"> <obsolete> Deprecated and removed from the code 05/2018 </obsolete> @@ -57553,7 +58340,8 @@ </summary> </histogram> -<histogram base="true" name="MobileStartup.ToolbarFirstDrawTime" units="ms"> +<histogram base="true" name="MobileStartup.ToolbarFirstDrawTime" units="ms" + expires_after="2018-06-28"> <obsolete> Deprecated and renamed to MobileStartup.ToolbarFirstDrawTime2 due to double reporting bug (see https://crbug.com/857508). @@ -57583,7 +58371,8 @@ </summary> </histogram> -<histogram base="true" name="MobileStartup.ToolbarFirstFocusTime" units="ms"> +<histogram base="true" name="MobileStartup.ToolbarFirstFocusTime" units="ms" + expires_after="2018-06-28"> <obsolete> Deprecated and renamed to MobileStartup.ToolbarFirstFocusTime2 due to double reporting bug (see https://crbug.com/857508). @@ -57680,7 +58469,8 @@ </summary> </histogram> -<histogram name="ModuleIntegrityVerification.Difference" units="bytes"> +<histogram name="ModuleIntegrityVerification.Difference" units="bytes" + expires_after="2015-05-19"> <obsolete> Deprecated and removed from code as of 05/2015. </obsolete> @@ -57703,7 +58493,8 @@ </summary> </histogram> -<histogram name="ModuleIntegrityVerification.RelocationsUnorderedModuleIndex"> +<histogram name="ModuleIntegrityVerification.RelocationsUnorderedModuleIndex" + expires_after="2015-04-15"> <obsolete> Deprecated 04/2015; replaced by ModuleIntegrityVerification.RelocationsUnordered. @@ -57735,7 +58526,8 @@ </summary> </histogram> -<histogram name="Mojo.Shell.ChildConnectionTime" units="ms"> +<histogram name="Mojo.Shell.ChildConnectionTime" units="ms" + expires_after="2018-02-21"> <obsolete> Deprecated 2/2018. Has not actually been collected for some time. </obsolete> @@ -57747,7 +58539,8 @@ </summary> </histogram> -<histogram name="Mojo.System.GetParentPlatformHandleSyncTime" units="ms"> +<histogram name="Mojo.System.GetParentPlatformHandleSyncTime" units="ms" + expires_after="2018-02-21"> <obsolete> Deprecated 2/2018. Data no longer useful. </obsolete> @@ -57759,7 +58552,8 @@ </summary> </histogram> -<histogram name="Mojo.System.MessagesAcceptedPerEvent"> +<histogram name="Mojo.System.MessagesAcceptedPerEvent" + expires_after="2017-06-07"> <obsolete> Deprecated as of 6/2017. </obsolete> @@ -57772,7 +58566,7 @@ </summary> </histogram> -<histogram name="Mojo.System.Node.ConnectedPeers"> +<histogram name="Mojo.System.Node.ConnectedPeers" expires_after="2018-02-21"> <obsolete> Deprecated 2/2018. Data no longer useful. </obsolete> @@ -57783,7 +58577,7 @@ </summary> </histogram> -<histogram name="Mojo.System.Node.PendingChildren"> +<histogram name="Mojo.System.Node.PendingChildren" expires_after="2018-02-21"> <obsolete> Deprecated 2/2018. Data no longer useful. </obsolete> @@ -57855,7 +58649,8 @@ <summary>Tracks mouse reverse scroll setting on startup.</summary> </histogram> -<histogram name="Mouse.Sensitivity.Changed" enum="PointerSensitivity"> +<histogram name="Mouse.Sensitivity.Changed" enum="PointerSensitivity" + expires_after="2013-07-02"> <obsolete> Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Changed. </obsolete> @@ -57863,7 +58658,8 @@ <summary>Tracks mouse sensitivity setting.</summary> </histogram> -<histogram name="Mouse.Sensitivity.Started" enum="PointerSensitivity"> +<histogram name="Mouse.Sensitivity.Started" enum="PointerSensitivity" + expires_after="2013-07-02"> <obsolete> Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Started. </obsolete> @@ -57871,7 +58667,8 @@ <summary>Tracks mouse sensitivity setting on startup.</summary> </histogram> -<histogram name="MouseEventPrefetch.MouseDownDuration_Click" units="ms"> +<histogram name="MouseEventPrefetch.MouseDownDuration_Click" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57883,7 +58680,7 @@ </histogram> <histogram name="MouseEventPrefetch.MouseDownFollowedByClick" - enum="MouseEventFollowedByClick"> + enum="MouseEventFollowedByClick" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57895,7 +58692,7 @@ </summary> </histogram> -<histogram name="MouseEventPrefetch.MouseDowns"> +<histogram name="MouseEventPrefetch.MouseDowns" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57906,7 +58703,8 @@ </summary> </histogram> -<histogram name="MouseEventPrefetch.MouseOverDuration_Click" units="ms"> +<histogram name="MouseEventPrefetch.MouseOverDuration_Click" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57917,7 +58715,8 @@ </summary> </histogram> -<histogram name="MouseEventPrefetch.MouseOverDuration_NoClick" units="ms"> +<histogram name="MouseEventPrefetch.MouseOverDuration_NoClick" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57928,7 +58727,7 @@ </summary> </histogram> -<histogram name="MouseEventPrefetch.MouseOvers"> +<histogram name="MouseEventPrefetch.MouseOvers" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57940,7 +58739,7 @@ </histogram> <histogram name="MouseEventPrefetch.PreTapEventsFollowedByClick" - enum="PreTapEvents"> + enum="PreTapEvents" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57951,7 +58750,8 @@ </summary> </histogram> -<histogram name="MouseEventPrefetch.TapDownDuration_Click" units="ms"> +<histogram name="MouseEventPrefetch.TapDownDuration_Click" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57962,7 +58762,7 @@ </summary> </histogram> -<histogram name="MouseEventPrefetch.TapDowns"> +<histogram name="MouseEventPrefetch.TapDowns" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -57973,7 +58773,7 @@ </summary> </histogram> -<histogram name="MouseEventPrefetch.TapUnconfirmeds"> +<histogram name="MouseEventPrefetch.TapUnconfirmeds" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -58007,7 +58807,8 @@ </summary> </histogram> -<histogram name="MPArch.IIR_InputEventDelta" units="ms"> +<histogram name="MPArch.IIR_InputEventDelta" units="ms" + expires_after="2016-08-29"> <obsolete> Deprecated 08/2016 due to lack of use (Histogram Eraser). </obsolete> @@ -58017,7 +58818,7 @@ </summary> </histogram> -<histogram name="MPArch.RendererLaunchFirst"> +<histogram name="MPArch.RendererLaunchFirst" expires_after="2014-08-13"> <obsolete> Deprecated 2/2013, renamed. </obsolete> @@ -58028,7 +58829,7 @@ </summary> </histogram> -<histogram name="MPArch.RendererLaunchSubsequent"> +<histogram name="MPArch.RendererLaunchSubsequent" expires_after="2014-08-13"> <obsolete> Deprecated 2/2013, renamed. </obsolete> @@ -58048,7 +58849,8 @@ </summary> </histogram> -<histogram name="MPArch.RWH_HangMonitorUnresponsive" units="ms"> +<histogram name="MPArch.RWH_HangMonitorUnresponsive" units="ms" + expires_after="2017-12-14"> <obsolete> Deprecated 12/2017 due to lack of usage. </obsolete> @@ -58059,7 +58861,8 @@ </summary> </histogram> -<histogram name="MPArch.RWH_InputEventDelta" units="ms"> +<histogram name="MPArch.RWH_InputEventDelta" units="ms" + expires_after="2014-09-02"> <obsolete> renamed MPArch.IIR_InputEventDelta. </obsolete> @@ -58069,7 +58872,8 @@ </summary> </histogram> -<histogram name="MPArch.RWH_OnMsgPaintRect" units="ms"> +<histogram name="MPArch.RWH_OnMsgPaintRect" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -58077,7 +58881,7 @@ <summary>The time spent inside RenderWidgetHost::OnMsgPaintRect.</summary> </histogram> -<histogram name="MPArch.RWH_OnMsgResizeOrRepaintACK"> +<histogram name="MPArch.RWH_OnMsgResizeOrRepaintACK" expires_after="2018-10-16"> <obsolete> Deprecated 09/2018 as message no longer exists. </obsolete> @@ -58090,7 +58894,8 @@ </summary> </histogram> -<histogram name="MPArch.RWH_OnMsgScrollRect" units="ms"> +<histogram name="MPArch.RWH_OnMsgScrollRect" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -58098,7 +58903,7 @@ <summary>The time spent inside RenderWidgetHost::OnMsgScrollRect.</summary> </histogram> -<histogram name="MPArch.RWH_OnMsgUpdateRect"> +<histogram name="MPArch.RWH_OnMsgUpdateRect" expires_after="2017-10-03"> <obsolete> Deprecated 10/2017. Replaced with MPArch.RWH_OnMsgResizeOrRepaintACK. </obsolete> @@ -58119,7 +58924,8 @@ </summary> </histogram> -<histogram name="MPArch.RWHH_WhiteoutDuration" units="ms"> +<histogram name="MPArch.RWHH_WhiteoutDuration" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -58414,7 +59220,7 @@ </summary> </histogram> -<histogram name="MultiProfile.DiscardedTabsPerUser"> +<histogram name="MultiProfile.DiscardedTabsPerUser" expires_after="2017-11-22"> <obsolete> Deprecated 11/2017. Analysis confirms that the number of discards increases with the number of logged in users. No action will be taken based on this @@ -58430,7 +59236,8 @@ </summary> </histogram> -<histogram name="MultiProfile.SessionMode" enum="MultiProfileSessionMode"> +<histogram name="MultiProfile.SessionMode" enum="MultiProfileSessionMode" + expires_after="2018-05-01"> <obsolete> Deprecated 09/2017 when side-by-side multi-profile mode was removed. There is now only one multi-profile mode (separate desktop). See the metric @@ -58465,7 +59272,7 @@ </histogram> <histogram name="MultiProfile.TeleportWindow" - enum="MultiProfileTeleportWindowAction"> + enum="MultiProfileTeleportWindowAction" expires_after="2018-05-01"> <obsolete> Deprecated 04/2018. Was not being maintained - some cases leading to teleport were not captured. See counts of 'MultiProfile.TeleportWindowType' @@ -58486,7 +59293,7 @@ </summary> </histogram> -<histogram name="MultiProfile.UsersPerSession"> +<histogram name="MultiProfile.UsersPerSession" expires_after="2014-03-09"> <obsolete> Deprecated 3/2014, renamed to MultiProfile.UsersPerSessionIncremental. </obsolete> @@ -58648,7 +59455,8 @@ </summary> </histogram> -<histogram name="NaCl.ManifestDownloadTime" units="ms"> +<histogram name="NaCl.ManifestDownloadTime" units="ms" + expires_after="2014-02-21"> <obsolete> Deprecated 6/2011, renamed. </obsolete> @@ -58673,7 +59481,7 @@ <summary>The time a NaCl module ran without crashing, at shutdown.</summary> </histogram> -<histogram name="NaCl.NexeDownloadTime" units="ms"> +<histogram name="NaCl.NexeDownloadTime" units="ms" expires_after="2014-02-21"> <obsolete> Deprecated 6/2011, renamed. </obsolete> @@ -58683,7 +59491,7 @@ </summary> </histogram> -<histogram name="NaCl.NexeSize" units="KB"> +<histogram name="NaCl.NexeSize" units="KB" expires_after="2014-02-21"> <obsolete> Deprecated 6/2011, renamed. </obsolete> @@ -58693,7 +59501,7 @@ </summary> </histogram> -<histogram name="NaCl.NexeStartupTime" units="ms"> +<histogram name="NaCl.NexeStartupTime" units="ms" expires_after="2014-02-21"> <obsolete> Deprecated 6/2011, renamed. </obsolete> @@ -58705,7 +59513,8 @@ </summary> </histogram> -<histogram name="NaCl.NexeStartupTimePerMB" units="milliseconds/MB"> +<histogram name="NaCl.NexeStartupTimePerMB" units="milliseconds/MB" + expires_after="2014-02-21"> <obsolete> Deprecated 6/2011, renamed. </obsolete> @@ -58728,7 +59537,7 @@ </summary> </histogram> -<histogram name="NaCl.OSArch" enum="NaClOSArchEnum"> +<histogram name="NaCl.OSArch" enum="NaClOSArchEnum" expires_after="2014-02-21"> <obsolete> Deprecated 6/2011, renamed. </obsolete> @@ -58987,7 +59796,8 @@ </summary> </histogram> -<histogram name="NaCl.Startups" enum="NaClStartupEnum"> +<histogram name="NaCl.Startups" enum="NaClStartupEnum" + expires_after="2014-02-21"> <obsolete> Deprecated 5/2011, data is duplicated by NaCl.NexeStartupTime, and normalizing to 'tab opens' is unusual. @@ -59133,7 +59943,7 @@ </histogram> <histogram name="Navigation.BackForward.IsSameProcess" - enum="NavigationIsSameProcess"> + enum="NavigationIsSameProcess" expires_after="2018-02-17"> <obsolete> Deprecated 2018-02, replaced by Navigation.IsSameProcess.BackForward. </obsolete> @@ -59154,7 +59964,8 @@ </summary> </histogram> -<histogram name="Navigation.BackForward.ReadyToCommitUntilCommit" units="ms"> +<histogram name="Navigation.BackForward.ReadyToCommitUntilCommit" units="ms" + expires_after="2018-02-17"> <obsolete> Deprecated 2018-02, replaced by Navigation.ReadyToCommitUntilCommit.BackForward. @@ -59181,7 +59992,8 @@ </summary> </histogram> -<histogram name="Navigation.BackForward.TimeToReadyToCommit" units="ms"> +<histogram name="Navigation.BackForward.TimeToReadyToCommit" units="ms" + expires_after="2018-02-17"> <obsolete> Deprecated 2018-02, replaced by Navigation.TimeToReadyToCommit.BackForward. </obsolete> @@ -59217,7 +60029,7 @@ </histogram> <histogram name="Navigation.DeferredDocumentLoading.StatesV1" - enum="DocumentStateForDeferredLoading"> + enum="DocumentStateForDeferredLoading" expires_after="2016-10-21"> <obsolete> Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV2. </obsolete> @@ -59229,7 +60041,7 @@ </histogram> <histogram name="Navigation.DeferredDocumentLoading.StatesV2" - enum="DocumentStateForDeferredLoadingV2"> + enum="DocumentStateForDeferredLoadingV2" expires_after="2016-10-27"> <obsolete> Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV3. </obsolete> @@ -59241,7 +60053,7 @@ </histogram> <histogram name="Navigation.DeferredDocumentLoading.StatesV3" - enum="DocumentStateForDeferredLoadingV3"> + enum="DocumentStateForDeferredLoadingV3" expires_after="2017-02-28"> <obsolete> Deprecated 3/2017 in favor of Navigation.DeferredDocumentLoading.StatesV4. </obsolete> @@ -59255,7 +60067,7 @@ </histogram> <histogram name="Navigation.DeferredDocumentLoading.StatesV4" - enum="DocumentStateForDeferredLoadingV4"> + enum="DocumentStateForDeferredLoadingV4" expires_after="2018-11-01"> <obsolete> Deprecated 11/2018 because LazyLoading has real stats now. </obsolete> @@ -59330,7 +60142,8 @@ </summary> </histogram> -<histogram name="Navigation.FrameHasEmbeddedCredentials" enum="Boolean"> +<histogram name="Navigation.FrameHasEmbeddedCredentials" enum="Boolean" + expires_after="2017-03-24"> <obsolete> Deprecated 03/2017 in Issue 703460. </obsolete> @@ -59371,7 +60184,8 @@ </summary> </histogram> -<histogram name="Navigation.IsMobileOptimized" enum="BooleanIsMobileOptimized"> +<histogram name="Navigation.IsMobileOptimized" enum="BooleanIsMobileOptimized" + expires_after="2018-03-05"> <obsolete> Removed from code March 2018. </obsolete> @@ -59401,7 +60215,8 @@ </summary> </histogram> -<histogram name="Navigation.MainFrameHasEmbeddedCredentials" enum="Boolean"> +<histogram name="Navigation.MainFrameHasEmbeddedCredentials" enum="Boolean" + expires_after="2017-03-24"> <obsolete> Deprecated 03/2017 in Issue 703460. </obsolete> @@ -59419,7 +60234,7 @@ </histogram> <histogram name="Navigation.MainFrameScheme.DataUrl.MimeType" - enum="DataUrlMimeType"> + enum="DataUrlMimeType" expires_after="2017-10-06"> <obsolete> Removed from code October 2017. </obsolete> @@ -59487,7 +60302,8 @@ </summary> </histogram> -<histogram name="Navigation.ReadyToCommitUntilCommit" units="ms"> +<histogram name="Navigation.ReadyToCommitUntilCommit" units="ms" + expires_after="2019-01-04"> <obsolete> Deprecated 2019-01 (M73), replaced by Navigation.ReadyToCommitUntilCommit2 (same histogram, different bucketing). @@ -59511,7 +60327,8 @@ </summary> </histogram> -<histogram name="Navigation.RedirectChainSize" units="characters"> +<histogram name="Navigation.RedirectChainSize" units="characters" + expires_after="2019-01-14"> <obsolete> Removed January 2019 because it wasn't used. </obsolete> @@ -59621,7 +60438,8 @@ </summary> </histogram> -<histogram name="Navigation.SchemePerUniqueOrigin" enum="NavigationScheme"> +<histogram name="Navigation.SchemePerUniqueOrigin" enum="NavigationScheme" + expires_after="2017-04-19"> <obsolete> Deprecated 4/2017 in Issue 712843. </obsolete> @@ -59633,7 +60451,8 @@ </summary> </histogram> -<histogram name="Navigation.SchemePerUniqueOriginOTR" enum="NavigationScheme"> +<histogram name="Navigation.SchemePerUniqueOriginOTR" enum="NavigationScheme" + expires_after="2017-04-19"> <obsolete> Deprecated 4/2017 in Issue 712843. </obsolete> @@ -59655,7 +60474,7 @@ </histogram> <histogram name="Navigation.Start.RendererBrowserDifference.Negative" - units="ms"> + units="ms" expires_after="2016-12-22"> <obsolete> Data collected and posted on issue 675833. </obsolete> @@ -59671,7 +60490,7 @@ </histogram> <histogram name="Navigation.Start.RendererBrowserDifference.Positive" - units="ms"> + units="ms" expires_after="2016-12-22"> <obsolete> Data collected and posted on issue 675833. </obsolete> @@ -59695,7 +60514,7 @@ </summary> </histogram> -<histogram name="Navigation.TimeToCommit" units="ms"> +<histogram name="Navigation.TimeToCommit" units="ms" expires_after="2018-03-30"> <obsolete> Deprecated March 2018 in favor of Navigation.StartToCommit variants. </obsolete> @@ -59706,7 +60525,8 @@ </summary> </histogram> -<histogram name="Navigation.TimeToReadyToCommit" units="ms"> +<histogram name="Navigation.TimeToReadyToCommit" units="ms" + expires_after="2019-01-04"> <obsolete> Deprecated 2019-01 (M73), replaced by Navigation.TimeToReadyToCommit2 (same histogram, different bucketing). @@ -59736,7 +60556,8 @@ </summary> </histogram> -<histogram name="Navigation.UI_OnCommitProvisionalLoad.Intent" units="ms"> +<histogram name="Navigation.UI_OnCommitProvisionalLoad.Intent" units="ms" + expires_after="2018-06-19"> <obsolete> Deprecated 06/2018 in favor of PageLoad metrics. </obsolete> @@ -59747,7 +60568,8 @@ </summary> </histogram> -<histogram name="Navigation.UI_OnCommitProvisionalLoad.Link" units="ms"> +<histogram name="Navigation.UI_OnCommitProvisionalLoad.Link" units="ms" + expires_after="2018-06-19"> <obsolete> Deprecated 06/2018 in favor of PageLoad metrics. </obsolete> @@ -59757,7 +60579,8 @@ </summary> </histogram> -<histogram name="Navigation.UI_OnLoadComplete.Intent" units="ms"> +<histogram name="Navigation.UI_OnLoadComplete.Intent" units="ms" + expires_after="2018-06-19"> <obsolete> Deprecated 06/2018 in favor of PageLoad metrics. </obsolete> @@ -59768,7 +60591,8 @@ </summary> </histogram> -<histogram name="Navigation.UI_OnLoadComplete.Link" units="ms"> +<histogram name="Navigation.UI_OnLoadComplete.Link" units="ms" + expires_after="2018-06-19"> <obsolete> Deprecated 06/2018 in favor of PageLoad metrics. </obsolete> @@ -59841,7 +60665,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOn2G" units="ms"> +<histogram name="NCN.CM.FastestRTTOn2G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59857,7 +60681,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOn3G" units="ms"> +<histogram name="NCN.CM.FastestRTTOn3G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59873,7 +60697,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOn4G" units="ms"> +<histogram name="NCN.CM.FastestRTTOn4G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59889,7 +60713,8 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOnBluetooth" units="ms"> +<histogram name="NCN.CM.FastestRTTOnBluetooth" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59905,7 +60730,8 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOnEthernet" units="ms"> +<histogram name="NCN.CM.FastestRTTOnEthernet" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59921,7 +60747,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOnNone" units="ms"> +<histogram name="NCN.CM.FastestRTTOnNone" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59938,7 +60764,8 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOnUnknown" units="ms"> +<histogram name="NCN.CM.FastestRTTOnUnknown" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59954,7 +60781,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FastestRTTOnWifi" units="ms"> +<histogram name="NCN.CM.FastestRTTOnWifi" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59970,7 +60797,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOn2G" units="ms"> +<histogram name="NCN.CM.FirstReadOn2G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -59986,7 +60813,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOn3G" units="ms"> +<histogram name="NCN.CM.FirstReadOn3G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60002,7 +60829,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOn4G" units="ms"> +<histogram name="NCN.CM.FirstReadOn4G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60018,7 +60845,8 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOnBluetooth" units="ms"> +<histogram name="NCN.CM.FirstReadOnBluetooth" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60034,7 +60862,8 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOnEthernet" units="ms"> +<histogram name="NCN.CM.FirstReadOnEthernet" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60050,7 +60879,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOnNone" units="ms"> +<histogram name="NCN.CM.FirstReadOnNone" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60065,7 +60894,8 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOnUnknown" units="ms"> +<histogram name="NCN.CM.FirstReadOnUnknown" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60081,7 +60911,7 @@ </summary> </histogram> -<histogram name="NCN.CM.FirstReadOnWifi" units="ms"> +<histogram name="NCN.CM.FirstReadOnWifi" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60097,7 +60927,7 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOn2G" units="KB"> +<histogram name="NCN.CM.KBTransferedOn2G" units="KB" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60113,7 +60943,7 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOn3G" units="KB"> +<histogram name="NCN.CM.KBTransferedOn3G" units="KB" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60129,7 +60959,7 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOn4G" units="KB"> +<histogram name="NCN.CM.KBTransferedOn4G" units="KB" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60145,7 +60975,8 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOnBluetooth" units="KB"> +<histogram name="NCN.CM.KBTransferedOnBluetooth" units="KB" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60161,7 +60992,8 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOnEthernet" units="KB"> +<histogram name="NCN.CM.KBTransferedOnEthernet" units="KB" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60177,7 +61009,8 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOnNone" units="KB"> +<histogram name="NCN.CM.KBTransferedOnNone" units="KB" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60194,7 +61027,8 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOnUnknown" units="KB"> +<histogram name="NCN.CM.KBTransferedOnUnknown" units="KB" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60210,7 +61044,8 @@ </summary> </histogram> -<histogram name="NCN.CM.KBTransferedOnWifi" units="KB"> +<histogram name="NCN.CM.KBTransferedOnWifi" units="KB" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60226,7 +61061,7 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOn2G" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOn2G" units="Kbps" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60242,7 +61077,7 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOn3G" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOn3G" units="Kbps" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60258,7 +61093,7 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOn4G" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOn4G" units="Kbps" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60274,7 +61109,8 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOnBluetooth" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOnBluetooth" units="Kbps" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60290,7 +61126,8 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOnEthernet" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOnEthernet" units="Kbps" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60306,7 +61143,7 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOnNone" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOnNone" units="Kbps" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60323,7 +61160,8 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOnUnknown" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOnUnknown" units="Kbps" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60339,7 +61177,7 @@ </summary> </histogram> -<histogram name="NCN.CM.PeakKbpsOnWifi" units="Kbps"> +<histogram name="NCN.CM.PeakKbpsOnWifi" units="Kbps" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60355,7 +61193,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOn2G" units="ms"> +<histogram name="NCN.CM.TimeOn2G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60371,7 +61209,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOn3G" units="ms"> +<histogram name="NCN.CM.TimeOn3G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60387,7 +61225,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOn4G" units="ms"> +<histogram name="NCN.CM.TimeOn4G" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60403,7 +61241,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOnBluetooth" units="ms"> +<histogram name="NCN.CM.TimeOnBluetooth" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60419,7 +61257,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOnEthernet" units="ms"> +<histogram name="NCN.CM.TimeOnEthernet" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60435,7 +61273,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOnNone" units="ms"> +<histogram name="NCN.CM.TimeOnNone" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60451,7 +61289,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOnUnknown" units="ms"> +<histogram name="NCN.CM.TimeOnUnknown" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60467,7 +61305,7 @@ </summary> </histogram> -<histogram name="NCN.CM.TimeOnWifi" units="ms"> +<histogram name="NCN.CM.TimeOnWifi" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60483,7 +61321,8 @@ </summary> </histogram> -<histogram name="NCN.ConnectionTypeChangeToIPAddressChange" units="ms"> +<histogram name="NCN.ConnectionTypeChangeToIPAddressChange" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60493,7 +61332,7 @@ </summary> </histogram> -<histogram name="NCN.DNSConfigChange" units="ms"> +<histogram name="NCN.DNSConfigChange" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60502,7 +61341,7 @@ </histogram> <histogram name="NCN.GetActiveNetworkInfoResult" - enum="NCNGetActiveNetworkInfoResult"> + enum="NCNGetActiveNetworkInfoResult" expires_after="2017-05-11"> <obsolete> Deprecated 05/2017 in Issue 677365. </obsolete> @@ -60523,7 +61362,7 @@ </histogram> <histogram name="NCN.getNetInfo1stSuccess" - enum="BooleanAvoidedNullPointerException"> + enum="BooleanAvoidedNullPointerException" expires_after="2017-05-12"> <obsolete> Deprecated 5/2017 for Issue 592131. </obsolete> @@ -60536,7 +61375,7 @@ </histogram> <histogram name="NCN.getNetInfo2ndSuccess" - enum="BooleanAvoidedNullPointerException"> + enum="BooleanAvoidedNullPointerException" expires_after="2017-05-12"> <obsolete> Deprecated 5/2017 for Issue 592131. </obsolete> @@ -60551,7 +61390,7 @@ </histogram> <histogram name="NCN.getWifiInfo1stSuccess" - enum="BooleanAvoidedNullPointerException"> + enum="BooleanAvoidedNullPointerException" expires_after="2017-05-12"> <obsolete> Deprecated 5/2017 for Issue 592131. </obsolete> @@ -60564,7 +61403,7 @@ </histogram> <histogram name="NCN.getWifiInfo2ndSuccess" - enum="BooleanAvoidedNullPointerException"> + enum="BooleanAvoidedNullPointerException" expires_after="2017-05-12"> <obsolete> Deprecated 5/2017 for Issue 592131. </obsolete> @@ -60578,7 +61417,7 @@ </summary> </histogram> -<histogram name="NCN.IPAddressChange" units="ms"> +<histogram name="NCN.IPAddressChange" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60586,7 +61425,8 @@ <summary>Time between IP address change messages.</summary> </histogram> -<histogram name="NCN.IPAddressChangeToConnectionTypeChange" units="ms"> +<histogram name="NCN.IPAddressChangeToConnectionTypeChange" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60596,7 +61436,8 @@ </summary> </histogram> -<histogram name="NCN.NetworkOfflineChange" units="ms"> +<histogram name="NCN.NetworkOfflineChange" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60607,7 +61448,7 @@ </summary> </histogram> -<histogram name="NCN.NetworkOnlineChange" units="ms"> +<histogram name="NCN.NetworkOnlineChange" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60629,7 +61470,7 @@ </summary> </histogram> -<histogram name="NCN.OfflineChange" units="ms"> +<histogram name="NCN.OfflineChange" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60639,7 +61480,7 @@ </summary> </histogram> -<histogram name="NCN.OfflineDataRecv" units="ms"> +<histogram name="NCN.OfflineDataRecv" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60650,7 +61491,8 @@ </summary> </histogram> -<histogram name="NCN.OfflineDataRecvAny5sBeforeOnline"> +<histogram name="NCN.OfflineDataRecvAny5sBeforeOnline" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60662,7 +61504,8 @@ </summary> </histogram> -<histogram name="NCN.OfflineDataRecvUntilOnline" units="ms"> +<histogram name="NCN.OfflineDataRecvUntilOnline" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60673,7 +61516,7 @@ </summary> </histogram> -<histogram name="NCN.OfflinePolls"> +<histogram name="NCN.OfflinePolls" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60684,7 +61527,7 @@ </summary> </histogram> -<histogram name="NCN.OnlineChange" units="ms"> +<histogram name="NCN.OnlineChange" units="ms" expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60694,7 +61537,8 @@ </summary> </histogram> -<histogram name="NCN.PollingOfflineDataRecv" units="ms"> +<histogram name="NCN.PollingOfflineDataRecv" units="ms" + expires_after="2018-06-27"> <obsolete> Deprecated 6/2018. </obsolete> @@ -60723,7 +61567,7 @@ </histogram> <histogram name="Net.AlternateProtocolUsage.1000Truncated" - enum="AlternateProtocolUsage"> + enum="AlternateProtocolUsage" expires_after="2014-10-24"> <obsolete> Deprecated 10/2014. </obsolete> @@ -60736,7 +61580,7 @@ </histogram> <histogram name="Net.AlternateProtocolUsage.200Truncated" - enum="AlternateProtocolUsage"> + enum="AlternateProtocolUsage" expires_after="2014-10-24"> <obsolete> Deprecated 10/2014. </obsolete> @@ -60799,7 +61643,8 @@ </summary> </histogram> -<histogram name="Net.AsyncResourceHandler_PendingDataCount"> +<histogram name="Net.AsyncResourceHandler_PendingDataCount" + expires_after="2015-03-24"> <obsolete> Deprecated 03/2015. </obsolete> @@ -60810,7 +61655,8 @@ </summary> </histogram> -<histogram name="Net.AsyncResourceHandler_PendingDataCount_WhenFull"> +<histogram name="Net.AsyncResourceHandler_PendingDataCount_WhenFull" + expires_after="2015-03-24"> <obsolete> Deprecated 03/2015. </obsolete> @@ -60821,7 +61667,8 @@ </summary> </histogram> -<histogram name="Net.AsyncResourceHandler_RedirectHopTime" units="ms"> +<histogram name="Net.AsyncResourceHandler_RedirectHopTime" units="ms" + expires_after="2015-03-31"> <obsolete> Data collection finished on 2015-03-31. </obsolete> @@ -60833,7 +61680,8 @@ </summary> </histogram> -<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Alloc" units="bytes"> +<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Alloc" units="bytes" + expires_after="2015-03-24"> <obsolete> Deprecated 03/2015. </obsolete> @@ -60841,7 +61689,8 @@ <summary>The size of a SharedIOBuffer allocation.</summary> </histogram> -<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Used" units="bytes"> +<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Used" units="bytes" + expires_after="2015-03-24"> <obsolete> Deprecated 03/2015. </obsolete> @@ -60850,7 +61699,7 @@ </histogram> <histogram name="Net.AsyncResourceHandler_SharedIOBuffer_UsedPercentage" - units="%"> + units="%" expires_after="2015-03-24"> <obsolete> Deprecated 03/2015. </obsolete> @@ -60860,7 +61709,8 @@ </summary> </histogram> -<histogram name="Net.AsyncRevalidation.ReadError" enum="NetErrorCodes"> +<histogram name="Net.AsyncRevalidation.ReadError" enum="NetErrorCodes" + expires_after="2018-08-06"> <obsolete> Removed in March 2017. See https://crbug.com/700568. </obsolete> @@ -60872,7 +61722,8 @@ </summary> </histogram> -<histogram name="Net.AsyncRevalidation.ResponseError" enum="NetErrorCodes"> +<histogram name="Net.AsyncRevalidation.ResponseError" enum="NetErrorCodes" + expires_after="2018-08-06"> <obsolete> Removed in March 2017. See https://crbug.com/700568. </obsolete> @@ -60884,7 +61735,8 @@ </summary> </histogram> -<histogram name="Net.AsyncRevalidation.Result" enum="AsyncRevalidationResult"> +<histogram name="Net.AsyncRevalidation.Result" enum="AsyncRevalidationResult" + expires_after="2018-08-06"> <obsolete> Removed in March 2017. See https://crbug.com/700568. </obsolete> @@ -60896,7 +61748,8 @@ </summary> </histogram> -<histogram name="Net.AuthGenerateToken_basic" units="ms"> +<histogram name="Net.AuthGenerateToken_basic" units="ms" + expires_after="2014-09-09"> <obsolete> Deprecated 01/2011 in https://crrev.com/70740 </obsolete> @@ -60904,7 +61757,8 @@ <summary>The time to generate a Basic HTTP authentication token.</summary> </histogram> -<histogram name="Net.AuthGenerateToken_digest" units="ms"> +<histogram name="Net.AuthGenerateToken_digest" units="ms" + expires_after="2014-09-09"> <obsolete> Deprecated 01/2011 in https://crrev.com/70740 </obsolete> @@ -60912,7 +61766,8 @@ <summary>The time to generate a Digest HTTP authentication token.</summary> </histogram> -<histogram name="Net.AuthGenerateToken_negotiate" units="ms"> +<histogram name="Net.AuthGenerateToken_negotiate" units="ms" + expires_after="2014-09-09"> <obsolete> Deprecated 01/2011 in https://crrev.com/70740 </obsolete> @@ -60922,7 +61777,8 @@ </summary> </histogram> -<histogram name="Net.AuthGenerateToken_ntlm" units="ms"> +<histogram name="Net.AuthGenerateToken_ntlm" units="ms" + expires_after="2014-09-09"> <obsolete> Deprecated 01/2011 in https://crrev.com/70740 </obsolete> @@ -61020,7 +61876,7 @@ </summary> </histogram> -<histogram name="Net.CacheState.AllBytes"> +<histogram name="Net.CacheState.AllBytes" expires_after="2016-08-02"> <obsolete> Part of a concluded experiment, 2016-08-02. </obsolete> @@ -61028,7 +61884,8 @@ <summary>Counts of response bytes by cache state.</summary> </histogram> -<histogram name="Net.CacheState.AllRequests" enum="NetCacheState"> +<histogram name="Net.CacheState.AllRequests" enum="NetCacheState" + expires_after="2016-10-27"> <obsolete> Part of a concluded experiment, 2016-08-02. </obsolete> @@ -61038,7 +61895,7 @@ </summary> </histogram> -<histogram name="Net.CacheState.EncodeableBytes"> +<histogram name="Net.CacheState.EncodeableBytes" expires_after="2016-10-27"> <obsolete> Part of a concluded experiment, 2016-08-02. </obsolete> @@ -61049,7 +61906,8 @@ </summary> </histogram> -<histogram name="Net.CacheState.EncodeableRequests" enum="NetCacheState"> +<histogram name="Net.CacheState.EncodeableRequests" enum="NetCacheState" + expires_after="2016-08-02"> <obsolete> Part of a concluded experiment, 2016-08-02. </obsolete> @@ -61125,7 +61983,8 @@ </summary> </histogram> -<histogram name="Net.Certificate.SHA1.MainFrame" enum="SHA1Status"> +<histogram name="Net.Certificate.SHA1.MainFrame" enum="SHA1Status" + expires_after="2017-06-12"> <obsolete> Deprecated 06/2017 as SHA-1 was successfully disabled in 01/2017. </obsolete> @@ -61136,7 +61995,8 @@ </summary> </histogram> -<histogram name="Net.Certificate.SHA1.Subresource" enum="SHA1Status"> +<histogram name="Net.Certificate.SHA1.Subresource" enum="SHA1Status" + expires_after="2017-06-12"> <obsolete> Deprecated 06/2017 as SHA-1 was successfully disabled in 01/2017. </obsolete> @@ -61217,7 +62077,8 @@ </summary> </histogram> -<histogram name="Net.CertificatePinSuccess" enum="BooleanSuccess"> +<histogram name="Net.CertificatePinSuccess" enum="BooleanSuccess" + expires_after="2013-04-09"> <obsolete> Renamed to Net.PublicKeyPinSuccess 28 Oct 2011. </obsolete> @@ -61243,7 +62104,7 @@ </histogram> <histogram name="Net.CertificateTransparency.ConnectionComplianceStatus.QUIC" - enum="CTComplianceStatus"> + enum="CTComplianceStatus" expires_after="2017-11-30"> <obsolete> Deprecated Nov 2017, replaced with Net.CertificateTransparency.ConnectionComplianceStatus2 @@ -61260,7 +62121,7 @@ </histogram> <histogram name="Net.CertificateTransparency.ConnectionComplianceStatus.SSL" - enum="CTComplianceStatus"> + enum="CTComplianceStatus" expires_after="2017-11-30"> <obsolete> Deprecated Nov 2017, replaced with Net.CertificateTransparency.ConnectionComplianceStatus2 @@ -61441,7 +62302,7 @@ </histogram> <histogram name="Net.CertificateTransparency.EVCompliance.QUIC" - enum="CTComplianceStatus"> + enum="CTComplianceStatus" expires_after="2017-11-30"> <obsolete> Deprecated Nov 2017, replaced with Net.CertificateTransparency.EVCompliance2.QUIC @@ -61456,7 +62317,7 @@ </histogram> <histogram name="Net.CertificateTransparency.EVCompliance.SSL" - enum="CTComplianceStatus"> + enum="CTComplianceStatus" expires_after="2017-11-30"> <obsolete> Deprecated Nov 2017, replaced with Net.CertificateTransparency.EVCompliance2.SSL @@ -61497,7 +62358,8 @@ </summary> </histogram> -<histogram name="Net.CertificateTransparency.MainFrameValidSCTCount"> +<histogram name="Net.CertificateTransparency.MainFrameValidSCTCount" + expires_after="2018-12-20"> <obsolete> Deprecated 12/2018. </obsolete> @@ -61568,7 +62430,8 @@ </summary> </histogram> -<histogram name="Net.CertificateTransparency.SCTsPerConnection"> +<histogram name="Net.CertificateTransparency.SCTsPerConnection" + expires_after="2018-12-20"> <obsolete> Deprecated 12/2018. </obsolete> @@ -61627,7 +62490,8 @@ </summary> </histogram> -<histogram name="Net.CoalescePotential" enum="CoalescePotentialPackets"> +<histogram name="Net.CoalescePotential" enum="CoalescePotentialPackets" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -61637,7 +62501,8 @@ </summary> </histogram> -<histogram name="Net.ComodoDNSExperimentFailureTime" units="ms"> +<histogram name="Net.ComodoDNSExperimentFailureTime" units="ms" + expires_after="2014-08-11"> <obsolete> This experiment has concluded. </obsolete> @@ -61649,7 +62514,8 @@ </summary> </histogram> -<histogram name="Net.ComodoDNSExperimentSuccessTime" units="ms"> +<histogram name="Net.ComodoDNSExperimentSuccessTime" units="ms" + expires_after="2014-08-11"> <obsolete> This experiment has concluded. </obsolete> @@ -61661,7 +62527,8 @@ </summary> </histogram> -<histogram name="Net.Compress.NoProxy.BytesAfterCompression" units="bytes"> +<histogram name="Net.Compress.NoProxy.BytesAfterCompression" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61673,7 +62540,8 @@ </summary> </histogram> -<histogram name="Net.Compress.NoProxy.BytesBeforeCompression" units="bytes"> +<histogram name="Net.Compress.NoProxy.BytesBeforeCompression" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61685,7 +62553,8 @@ </summary> </histogram> -<histogram name="Net.Compress.NoProxy.ShouldHaveBeenCompressed" units="bytes"> +<histogram name="Net.Compress.NoProxy.ShouldHaveBeenCompressed" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61697,7 +62566,8 @@ </summary> </histogram> -<histogram name="Net.Compress.Proxy.BytesAfterCompression" units="bytes"> +<histogram name="Net.Compress.Proxy.BytesAfterCompression" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61708,7 +62578,8 @@ </summary> </histogram> -<histogram name="Net.Compress.Proxy.BytesBeforeCompression" units="bytes"> +<histogram name="Net.Compress.Proxy.BytesBeforeCompression" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61719,7 +62590,8 @@ </summary> </histogram> -<histogram name="Net.Compress.Proxy.ShouldHaveBeenCompressed" units="bytes"> +<histogram name="Net.Compress.Proxy.ShouldHaveBeenCompressed" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61731,7 +62603,8 @@ </summary> </histogram> -<histogram name="Net.Compress.SSL.BytesAfterCompression" units="bytes"> +<histogram name="Net.Compress.SSL.BytesAfterCompression" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61742,7 +62615,8 @@ </summary> </histogram> -<histogram name="Net.Compress.SSL.BytesBeforeCompression" units="bytes"> +<histogram name="Net.Compress.SSL.BytesBeforeCompression" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61753,7 +62627,8 @@ </summary> </histogram> -<histogram name="Net.Compress.SSL.ShouldHaveBeenCompressed" units="bytes"> +<histogram name="Net.Compress.SSL.ShouldHaveBeenCompressed" units="bytes" + expires_after="2015-02-10"> <obsolete> Removed as of 02/2015 </obsolete> @@ -61783,7 +62658,8 @@ </summary> </histogram> -<histogram name="Net.ConnectionTypeCount" enum="ConnectionType"> +<histogram name="Net.ConnectionTypeCount" enum="ConnectionType" + expires_after="2013-04-09"> <obsolete> The count was inaccurate (it counted transactions rather than connections) </obsolete> @@ -61794,7 +62670,8 @@ </summary> </histogram> -<histogram name="Net.ConnectionTypeCount2" enum="ConnectionType"> +<histogram name="Net.ConnectionTypeCount2" enum="ConnectionType" + expires_after="2013-04-09"> <obsolete> Renamed to match HadConnectionType. </obsolete> @@ -61805,7 +62682,8 @@ </summary> </histogram> -<histogram name="Net.ConnectionTypeCount3" enum="ConnectionType"> +<histogram name="Net.ConnectionTypeCount3" enum="ConnectionType" + expires_after="2016-05-20"> <obsolete> Removed May 2016. </obsolete> @@ -61816,7 +62694,8 @@ </summary> </histogram> -<histogram name="Net.ConnectionTypeFailCount2" enum="ConnectionType"> +<histogram name="Net.ConnectionTypeFailCount2" enum="ConnectionType" + expires_after="2013-04-09"> <obsolete> No longer collected. </obsolete> @@ -61828,7 +62707,7 @@ </histogram> <histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback" - enum="BooleanDeprecatedCiphers"> + enum="BooleanDeprecatedCiphers" expires_after="2015-05-04"> <obsolete> Replaced with Net.ConnectionUsedSSLDeprecatedCipherFallback2 in Chrome 44. </obsolete> @@ -61840,7 +62719,7 @@ </histogram> <histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback2" - enum="BooleanDeprecatedCiphers"> + enum="BooleanDeprecatedCiphers" expires_after="2017-05-10"> <obsolete> Removed May 2017. </obsolete> @@ -61851,7 +62730,7 @@ </summary> </histogram> -<histogram name="Net.ConnectionUsedSSLv3Fallback"> +<histogram name="Net.ConnectionUsedSSLv3Fallback" expires_after="2013-04-09"> <obsolete> Replaced by Net.ConnectionUsedSSLVersionFallback in Chrome 21. </obsolete> @@ -61862,7 +62741,7 @@ </histogram> <histogram name="Net.ConnectionUsedSSLVersionFallback" - enum="FallbackSSLVersion"> + enum="FallbackSSLVersion" expires_after="2015-05-04"> <obsolete> Replaced with Net.ConnectionUsedSSLVersionFallback2 in Chrome 44. </obsolete> @@ -61874,7 +62753,7 @@ </histogram> <histogram name="Net.ConnectionUsedSSLVersionFallback2" - enum="FallbackSSLVersion"> + enum="FallbackSSLVersion" expires_after="2016-06-24"> <obsolete> Removed June 2016. </obsolete> @@ -61885,7 +62764,8 @@ </summary> </histogram> -<histogram name="Net.ContentDecodingFailed.FilterType" enum="NetFilterType"> +<histogram name="Net.ContentDecodingFailed.FilterType" enum="NetFilterType" + expires_after="2017-07-22"> <obsolete> Obsoleted in favor of Net.ContentDecodingFailed2.FilterType below. </obsolete> @@ -61903,7 +62783,8 @@ </summary> </histogram> -<histogram name="Net.ContentDecodingFailed2.FilterType" enum="NetFilterType2"> +<histogram name="Net.ContentDecodingFailed2.FilterType" enum="NetFilterType2" + expires_after="2017-07-22"> <obsolete> Obsoleted in favor of Net.ContentDecodingFailed2 above. </obsolete> @@ -61915,7 +62796,7 @@ </histogram> <histogram name="net.CookieBackingStoreUpdateResults" - enum="BackingStoreResults"> + enum="BackingStoreResults" expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -61927,7 +62808,8 @@ </summary> </histogram> -<histogram name="net.CookieBetweenAccessIntervalMinutes" units="minutes"> +<histogram name="net.CookieBetweenAccessIntervalMinutes" units="minutes" + expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -61936,7 +62818,7 @@ <summary>Intervals between access time updates for each cookie.</summary> </histogram> -<histogram name="net.CookieCount"> +<histogram name="net.CookieCount" expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -61948,7 +62830,8 @@ </summary> </histogram> -<histogram name="net.CookieDeletionCause" enum="CookieDeletionCause"> +<histogram name="net.CookieDeletionCause" enum="CookieDeletionCause" + expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -61959,7 +62842,7 @@ </summary> </histogram> -<histogram name="net.CookieDomainCount"> +<histogram name="net.CookieDomainCount" expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -61971,7 +62854,7 @@ </summary> </histogram> -<histogram name="net.CookieDomainPerEtldp1Count"> +<histogram name="net.CookieDomainPerEtldp1Count" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -61982,7 +62865,7 @@ </summary> </histogram> -<histogram name="net.CookieEtldp1Count"> +<histogram name="net.CookieEtldp1Count" expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -61994,7 +62877,8 @@ </summary> </histogram> -<histogram name="net.CookieEvictedLastAccessMinutes" units="minutes"> +<histogram name="net.CookieEvictedLastAccessMinutes" units="minutes" + expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -62006,7 +62890,8 @@ </summary> </histogram> -<histogram name="net.CookieExpirationDurationMinutes" units="minutes"> +<histogram name="net.CookieExpirationDurationMinutes" units="minutes" + expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -62015,7 +62900,7 @@ <summary>Number of minutes until cookie expires when set.</summary> </histogram> -<histogram name="net.CookieTimeGet"> +<histogram name="net.CookieTimeGet" expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -62026,7 +62911,7 @@ </summary> </histogram> -<histogram name="net.CookieTimeLoad"> +<histogram name="net.CookieTimeLoad" expires_after="2013-04-09"> <obsolete> Initial typo; only here to get results from builds before r59117. See "Cookie." group. @@ -62070,7 +62955,8 @@ </summary> </histogram> -<histogram name="Net.CountOfPipelineCapableServers" units="servers"> +<histogram name="Net.CountOfPipelineCapableServers" units="servers" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -62108,7 +62994,7 @@ </summary> </histogram> -<histogram name="Net.CountOfSpdySettings"> +<histogram name="Net.CountOfSpdySettings" expires_after="2016-11-10"> <obsolete> Removed on 2016-10-11. </obsolete> @@ -62119,7 +63005,8 @@ </summary> </histogram> -<histogram name="Net.CRLRequestFailedTimeMs" units="ms"> +<histogram name="Net.CRLRequestFailedTimeMs" units="ms" + expires_after="2017-04-21"> <obsolete> Deprecated 2017-04-21 as it was Linux/CrOS only. </obsolete> @@ -62131,7 +63018,8 @@ </summary> </histogram> -<histogram name="Net.CRLRequestSuccess" enum="BooleanSuccess"> +<histogram name="Net.CRLRequestSuccess" enum="BooleanSuccess" + expires_after="2017-04-21"> <obsolete> Deprecated 2017-04-21 as it was Linux/CrOS only. </obsolete> @@ -62142,7 +63030,7 @@ </summary> </histogram> -<histogram name="Net.CRLRequestTimeMs" units="ms"> +<histogram name="Net.CRLRequestTimeMs" units="ms" expires_after="2017-04-21"> <obsolete> Deprecated 2017-04-21 as it was Linux/CrOS only. </obsolete> @@ -62233,7 +63121,7 @@ </histogram> <histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Unknown" - units="KB"> + units="KB" expires_after="2015-08-18"> <obsolete> Deprecated. Moved to Net.DailyContentLength_DataReductionProxyEnabled_UnknownBypass in M46. @@ -62408,7 +63296,8 @@ </summary> </histogram> -<histogram name="Net.DailyHttpContentLengthViaDataReductionProxy" units="KB"> +<histogram name="Net.DailyHttpContentLengthViaDataReductionProxy" units="KB" + expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyContentLength_ViaDataReductionProxy. </obsolete> @@ -62420,7 +63309,7 @@ </histogram> <histogram name="Net.DailyHttpContentLengthWithDataReductionProxyEnabled" - units="KB"> + units="KB" expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyContentLength_DataReductionProxyEnabled </obsolete> @@ -62431,7 +63320,8 @@ </summary> </histogram> -<histogram name="Net.DailyHttpContentSavings" units="%"> +<histogram name="Net.DailyHttpContentSavings" units="%" + expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyContentSavingPercent. </obsolete> @@ -62442,7 +63332,8 @@ </summary> </histogram> -<histogram name="Net.DailyHttpContentSavings_DataReductionProxy" units="%"> +<histogram name="Net.DailyHttpContentSavings_DataReductionProxy" units="%" + expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyContentSavingPercent_DataReductionProxyEnabled. </obsolete> @@ -62454,7 +63345,8 @@ </summary> </histogram> -<histogram name="Net.DailyHttpOriginalContentLength" units="KB"> +<histogram name="Net.DailyHttpOriginalContentLength" units="KB" + expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyOriginalContentLength. </obsolete> @@ -62466,7 +63358,8 @@ </summary> </histogram> -<histogram name="Net.DailyHttpReceivedContentLength" units="KB"> +<histogram name="Net.DailyHttpReceivedContentLength" units="KB" + expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyContentLength. </obsolete> @@ -62513,7 +63406,8 @@ </summary> </histogram> -<histogram name="Net.DailyReceivedContentViaDataReductionProxy" units="%"> +<histogram name="Net.DailyReceivedContentViaDataReductionProxy" units="%" + expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyContentPercent_ViaDataReductionProxy. </obsolete> @@ -62526,7 +63420,7 @@ </histogram> <histogram name="Net.DailyReceivedContentWithDataReductionProxyEnabled" - units="%"> + units="%" expires_after="2013-09-24"> <obsolete> Deprecated- see Net.DailyContentPercent_DataReductionProxyEnabled. </obsolete> @@ -62539,7 +63433,7 @@ </histogram> <histogram name="Net.DailyUserVisibleSavingsPercent_DataReductionProxyEnabled" - units="%"> + units="%" expires_after="2016-12-22"> <obsolete> Removed in Chrome 57. </obsolete> @@ -62553,7 +63447,7 @@ </histogram> <histogram name="Net.DailyUserVisibleSavingsSize_DataReductionProxyEnabled" - units="KB"> + units="KB" expires_after="2016-12-22"> <obsolete> Removed in Chrome 57. </obsolete> @@ -62566,7 +63460,8 @@ </summary> </histogram> -<histogram name="Net.DetachableResourceHandler.Duration" units="ms"> +<histogram name="Net.DetachableResourceHandler.Duration" units="ms" + expires_after="2017-11-13"> <obsolete> Removed in Chrome 64. </obsolete> @@ -62577,7 +63472,7 @@ </summary> </histogram> -<histogram name="Net.DhcpWpadCancelTime" units="ms"> +<histogram name="Net.DhcpWpadCancelTime" units="ms" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62589,7 +63484,8 @@ </summary> </histogram> -<histogram name="Net.DhcpWpadCompletionTime" units="ms"> +<histogram name="Net.DhcpWpadCompletionTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62601,7 +63497,8 @@ </summary> </histogram> -<histogram name="Net.DhcpWpadFetchError" enum="NetErrorCodes"> +<histogram name="Net.DhcpWpadFetchError" enum="NetErrorCodes" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62614,7 +63511,7 @@ </histogram> <histogram name="Net.DhcpWpadGetAdaptersAddressesError" - enum="ErrorCodesGetAdaptersAddresses"> + enum="ErrorCodesGetAdaptersAddresses" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62625,7 +63522,8 @@ </summary> </histogram> -<histogram name="Net.DhcpWpadGetAdaptersAddressesTime" units="ms"> +<histogram name="Net.DhcpWpadGetAdaptersAddressesTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62637,7 +63535,7 @@ </summary> </histogram> -<histogram name="Net.DhcpWpadNumAdaptersAtWaitTimer"> +<histogram name="Net.DhcpWpadNumAdaptersAtWaitTimer" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62649,7 +63547,8 @@ </summary> </histogram> -<histogram name="Net.DhcpWpadNumPendingAdaptersAtWaitTimer"> +<histogram name="Net.DhcpWpadNumPendingAdaptersAtWaitTimer" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62662,7 +63561,7 @@ </summary> </histogram> -<histogram name="Net.DhcpWpadUnhandledDhcpError"> +<histogram name="Net.DhcpWpadUnhandledDhcpError" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -62674,7 +63573,7 @@ </summary> </histogram> -<histogram name="Net.DiskCache.Size" units="MB"> +<histogram name="Net.DiskCache.Size" units="MB" expires_after="2017-12-18"> <obsolete> Removed in Chrome 65. </obsolete> @@ -62767,7 +63666,7 @@ </summary> </histogram> -<histogram name="Net.DNS.JobQueueTime" units="ms"> +<histogram name="Net.DNS.JobQueueTime" units="ms" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -62779,7 +63678,8 @@ </summary> </histogram> -<histogram name="Net.DNS.JobQueueTimeAfterChange" units="ms"> +<histogram name="Net.DNS.JobQueueTimeAfterChange" units="ms" + expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -62792,7 +63692,8 @@ </summary> </histogram> -<histogram name="Net.DNS.ProcTask.FailureTime" units="ms"> +<histogram name="Net.DNS.ProcTask.FailureTime" units="ms" + expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -62803,7 +63704,8 @@ </summary> </histogram> -<histogram name="Net.DNS.ProcTask.SuccessTime" units="ms"> +<histogram name="Net.DNS.ProcTask.SuccessTime" units="ms" + expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -62873,7 +63775,7 @@ </histogram> <histogram name="Net.DNS.ResultAfterMalformedResponse" - enum="MalformedResponseResult"> + enum="MalformedResponseResult" expires_after="2018-07-30"> <obsolete> Deprecated July 2018. </obsolete> @@ -62919,14 +63821,16 @@ </summary> </histogram> -<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency"> +<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency" + expires_after="2013-05-10"> <obsolete> Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2 </obsolete> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> </histogram> -<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency"> +<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency" + expires_after="2013-04-09"> <obsolete> Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2 </obsolete> @@ -62941,14 +63845,16 @@ </summary> </histogram> -<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency2"> +<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency2" + expires_after="2013-05-10"> <obsolete> Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2 </obsolete> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> </histogram> -<histogram name="Net.DNSNameCompliantIfValid" enum="Boolean"> +<histogram name="Net.DNSNameCompliantIfValid" enum="Boolean" + expires_after="2017-07-19"> <obsolete> Deprecated 07/2017, not necessary to determine deprecation for invalid DNS names. @@ -62964,7 +63870,7 @@ </histogram> <histogram name="Net.DoubleGetExperiment_InitialResponseMethod" - enum="DoubleGetExperimentMethods"> + enum="DoubleGetExperimentMethods" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -62980,7 +63886,8 @@ </summary> </histogram> -<histogram name="Net.DoubleGetExperiment_ResponseCode"> +<histogram name="Net.DoubleGetExperiment_ResponseCode" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -62994,7 +63901,7 @@ </summary> </histogram> -<histogram name="Net.DownloadBandwidth"> +<histogram name="Net.DownloadBandwidth" expires_after="2015-03-31"> <obsolete> Deprecated as of 03/2015. No longer generated. </obsolete> @@ -63005,7 +63912,8 @@ </summary> </histogram> -<histogram name="Net.ErrAborted.CountPerUpload" units="aborts"> +<histogram name="Net.ErrAborted.CountPerUpload" units="aborts" + expires_after="2017-06-14"> <obsolete> Deprecated in favor of Net.ErrAborted.CountPerUpload2 which has a higher upper bound @@ -63033,7 +63941,8 @@ </summary> </histogram> -<histogram name="Net.ErrAborted.ReceivedBytes" units="bytes"> +<histogram name="Net.ErrAborted.ReceivedBytes" units="bytes" + expires_after="2018-07-02"> <obsolete> Removed from Chromium as of 2018/7/2. </obsolete> @@ -63043,7 +63952,8 @@ </summary> </histogram> -<histogram name="Net.ErrAborted.SentBytes" units="bytes"> +<histogram name="Net.ErrAborted.SentBytes" units="bytes" + expires_after="2018-07-02"> <obsolete> Removed from Chromium as of 2018/7/2. </obsolete> @@ -63053,7 +63963,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame" enum="NetErrorCodes" + expires_after="2015-11-09"> <obsolete> Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForHTTPSGoogleMainFrame2, which measures the same data but @@ -63069,7 +63980,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame2" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame2" enum="NetErrorCodes" + expires_after="2018-07-06"> <obsolete> Deprecated as of 7/2018, replaced by Net.ErrorCodesForHTTPSGoogleMainFrame3. </obsolete> @@ -63095,7 +64007,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForImages" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForImages" enum="NetErrorCodes" + expires_after="2018-07-06"> <obsolete> Deprecated as of 7/2018, replaced by Net.ErrorCodesForImages2, which is recorded in a net-service friendly way. @@ -63117,7 +64030,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForMainFrame" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForMainFrame" enum="NetErrorCodes" + expires_after="2013-04-09"> <obsolete> Deprecated as of 2011/5/24, replaced by Net.ErrorCodesForMainFrame2, which measures the same data but uses a different bucket structure (adds guard @@ -63132,7 +64046,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForMainFrame2" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForMainFrame2" enum="NetErrorCodes" + expires_after="2013-04-09"> <obsolete> Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForMainFrame3, which measures the same data but includes ERR_ABORTED and OK. @@ -63146,7 +64061,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForMainFrame3" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForMainFrame3" enum="NetErrorCodes" + expires_after="2018-07-06"> <obsolete> Deprecated as of 7/2018, replaced by Net.ErrorCodesForMainFrame4, which is recorded in a net-service friendly way. @@ -63171,7 +64087,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForSubresources" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForSubresources" enum="NetErrorCodes" + expires_after="2013-04-09"> <obsolete> Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForSubresources2, which measures the same data but includes ERR_ABORT and OK. @@ -63183,7 +64100,8 @@ </summary> </histogram> -<histogram name="Net.ErrorCodesForSubresources2" enum="NetErrorCodes"> +<histogram name="Net.ErrorCodesForSubresources2" enum="NetErrorCodes" + expires_after="2018-07-06"> <obsolete> Deprecated as of 7/2018, replaced by Net.ErrorCodesForSubresources3, which is recorded in a net-service friendly way. @@ -63204,7 +64122,7 @@ </histogram> <histogram name="Net.ErrorCodesForTLS13ExperimentMainFrame" - enum="NetErrorCodes"> + enum="NetErrorCodes" expires_after="2018-07-06"> <obsolete> Deprecated as of 7/2018, replaced by Net.ErrorCodesForTLS13ExperimentMainFrame2, which is recorded in a @@ -63231,7 +64149,7 @@ </histogram> <histogram name="Net.ErrorPageButtonPressedWhileInUnexpectedState" - enum="ErrorPageButton"> + enum="ErrorPageButton" expires_after="2015-08-26"> <obsolete> Deprecated as of 2015/8/21 </obsolete> @@ -63245,7 +64163,7 @@ </histogram> <histogram name="Net.ErrorPageButtonPressUnexpectedStates" - enum="ErrorPageUnexpectedStates"> + enum="ErrorPageUnexpectedStates" expires_after="2015-08-26"> <obsolete> Deprecated as of 2015/8/21 </obsolete> @@ -63307,7 +64225,8 @@ </summary> </histogram> -<histogram name="Net.ErrorResponseHasContentMainFrame" enum="BooleanSuccess"> +<histogram name="Net.ErrorResponseHasContentMainFrame" enum="BooleanSuccess" + expires_after="2016-10-13"> <obsolete> Deprecated 10/2016. </obsolete> @@ -63319,7 +64238,8 @@ </summary> </histogram> -<histogram name="Net.ErrorResponseHasContentNonMainFrame" enum="BooleanSuccess"> +<histogram name="Net.ErrorResponseHasContentNonMainFrame" enum="BooleanSuccess" + expires_after="2016-10-13"> <obsolete> Deprecated 10/2016. </obsolete> @@ -63368,7 +64288,8 @@ </summary> </histogram> -<histogram name="Net.ExpectCTHeaderResult" enum="ExpectCTHeaderResult"> +<histogram name="Net.ExpectCTHeaderResult" enum="ExpectCTHeaderResult" + expires_after="2017-04-26"> <obsolete> Deprecated 04/2017. </obsolete> @@ -63382,7 +64303,7 @@ </summary> </histogram> -<histogram name="Net.FileError_Flush"> +<histogram name="Net.FileError_Flush" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63393,7 +64314,7 @@ </summary> </histogram> -<histogram name="Net.FileError_GetSize"> +<histogram name="Net.FileError_GetSize" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63404,7 +64325,7 @@ </summary> </histogram> -<histogram name="Net.FileError_Open"> +<histogram name="Net.FileError_Open" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63415,7 +64336,7 @@ </summary> </histogram> -<histogram name="Net.FileError_Read"> +<histogram name="Net.FileError_Read" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63426,7 +64347,7 @@ </summary> </histogram> -<histogram name="Net.FileError_Seek"> +<histogram name="Net.FileError_Seek" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63437,7 +64358,7 @@ </summary> </histogram> -<histogram name="Net.FileError_SetEof"> +<histogram name="Net.FileError_SetEof" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63448,7 +64369,7 @@ </summary> </histogram> -<histogram name="Net.FileError_Write"> +<histogram name="Net.FileError_Write" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63459,7 +64380,7 @@ </summary> </histogram> -<histogram name="Net.FileErrorRange_Flush"> +<histogram name="Net.FileErrorRange_Flush" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63472,7 +64393,7 @@ </summary> </histogram> -<histogram name="Net.FileErrorRange_GetSize"> +<histogram name="Net.FileErrorRange_GetSize" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63485,7 +64406,7 @@ </summary> </histogram> -<histogram name="Net.FileErrorRange_Open"> +<histogram name="Net.FileErrorRange_Open" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63498,7 +64419,7 @@ </summary> </histogram> -<histogram name="Net.FileErrorRange_Read"> +<histogram name="Net.FileErrorRange_Read" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63511,7 +64432,7 @@ </summary> </histogram> -<histogram name="Net.FileErrorRange_Seek"> +<histogram name="Net.FileErrorRange_Seek" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63524,7 +64445,7 @@ </summary> </histogram> -<histogram name="Net.FileErrorRange_SetEof"> +<histogram name="Net.FileErrorRange_SetEof" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63537,7 +64458,7 @@ </summary> </histogram> -<histogram name="Net.FileErrorRange_Write"> +<histogram name="Net.FileErrorRange_Write" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -63562,7 +64483,8 @@ </summary> </histogram> -<histogram name="Net.ForceAlternativeService" enum="BooleanForced"> +<histogram name="Net.ForceAlternativeService" enum="BooleanForced" + expires_after="2015-03-30"> <obsolete> Data collection ended, corresponding feature removed. </obsolete> @@ -63601,7 +64523,8 @@ </summary> </histogram> -<histogram name="Net.FtpServerTypeCount" enum="FtpServerType"> +<histogram name="Net.FtpServerTypeCount" enum="FtpServerType" + expires_after="2014-06-20"> <obsolete> Replaced by Net.FtpServerTypeCount2 on 2012-11-03. </obsolete> @@ -63618,7 +64541,7 @@ </summary> </histogram> -<histogram name="Net.GetProxyForUrl_FAIL" units="ms"> +<histogram name="Net.GetProxyForUrl_FAIL" units="ms" expires_after="2014-09-16"> <obsolete> Removed at some time before 2014/09/15. </obsolete> @@ -63628,7 +64551,7 @@ </summary> </histogram> -<histogram name="Net.GetProxyForUrl_OK" units="ms"> +<histogram name="Net.GetProxyForUrl_OK" units="ms" expires_after="2014-09-16"> <obsolete> Removed at some time before 2014/09/15. </obsolete> @@ -63639,7 +64562,7 @@ </histogram> <histogram name="Net.GoogleConnectionInappropriateFallback" - enum="BooleanInappropriateFallback"> + enum="BooleanInappropriateFallback" expires_after="2016-06-24"> <obsolete> Removed June 2016. </obsolete> @@ -63653,7 +64576,7 @@ </histogram> <histogram name="Net.GoogleConnectionUsedSSLVersionFallback" - enum="FallbackSSLVersion"> + enum="FallbackSSLVersion" expires_after="2015-05-04"> <obsolete> Replaced with Net.GoogleConnectionUsedSSLVersionFallback2 in Chrome 44. </obsolete> @@ -63667,7 +64590,7 @@ </histogram> <histogram name="Net.GoogleConnectionUsedSSLVersionFallback2" - enum="FallbackSSLVersion"> + enum="FallbackSSLVersion" expires_after="2016-06-24"> <obsolete> Removed June 2016. </obsolete> @@ -63680,7 +64603,8 @@ </summary> </histogram> -<histogram name="Net.GzipEncodingFixupResult" enum="GzipEncodingFixupResult"> +<histogram name="Net.GzipEncodingFixupResult" enum="GzipEncodingFixupResult" + expires_after="2015-03-23"> <obsolete> Removed around 2015/03/18. The code which implemented Gzip encoding fixup was removed. @@ -63694,7 +64618,8 @@ </summary> </histogram> -<histogram name="Net.HadConnectionType" enum="ConnectionType"> +<histogram name="Net.HadConnectionType" enum="ConnectionType" + expires_after="2013-04-09"> <obsolete> The count was inaccurate (it counted transactions rather than connections). </obsolete> @@ -63705,7 +64630,8 @@ </summary> </histogram> -<histogram name="Net.HadConnectionType2" enum="ConnectionType"> +<histogram name="Net.HadConnectionType2" enum="ConnectionType" + expires_after="2013-04-09"> <obsolete> This statistic measures successful and failed connections, the new one only measures successful ones. @@ -63717,7 +64643,8 @@ </summary> </histogram> -<histogram name="Net.HadConnectionType3" enum="ConnectionType"> +<histogram name="Net.HadConnectionType3" enum="ConnectionType" + expires_after="2016-05-20"> <obsolete> Removed May 2016. </obsolete> @@ -63728,7 +64655,8 @@ </summary> </histogram> -<histogram name="Net.HadFtpServerType" enum="FtpServerType"> +<histogram name="Net.HadFtpServerType" enum="FtpServerType" + expires_after="2014-06-20"> <obsolete> Replaced by Net.HadFtpServerType2 on 2012-11-13. </obsolete> @@ -63756,7 +64684,8 @@ </summary> </histogram> -<histogram name="Net.Http2ResponseStatusHeader" enum="StatusHeader"> +<histogram name="Net.Http2ResponseStatusHeader" enum="StatusHeader" + expires_after="2017-03-29"> <obsolete> Removed in 2017 March. </obsolete> @@ -63764,7 +64693,8 @@ <summary>Format of :status header value in HTTP/2 response.</summary> </histogram> -<histogram name="Net.Http2SSLCipherSuite" enum="SSLCipherSuite"> +<histogram name="Net.Http2SSLCipherSuite" enum="SSLCipherSuite" + expires_after="2017-02-13"> <obsolete> Removed 2017-02. </obsolete> @@ -63806,7 +64736,8 @@ </summary> </histogram> -<histogram name="Net.HttpAuthCacheEntriesExaminedWhenNoMatch"> +<histogram name="Net.HttpAuthCacheEntriesExaminedWhenNoMatch" + expires_after="2018-10-12"> <obsolete> Deprecated 10/2018 when changing the cache implementation such that the number of entries examined no longer applies. @@ -63821,7 +64752,8 @@ </summary> </histogram> -<histogram name="Net.HttpAuthCacheLookupByPathPosition"> +<histogram name="Net.HttpAuthCacheLookupByPathPosition" + expires_after="2018-10-12"> <obsolete> Deprecated 10/2018 when changing the cache implementation such that the lookup position no longer applies. @@ -63833,7 +64765,7 @@ </summary> </histogram> -<histogram name="Net.HttpAuthCacheLookupPosition"> +<histogram name="Net.HttpAuthCacheLookupPosition" expires_after="2018-10-12"> <obsolete> Deprecated 10/2018 when changing the cache implementation such that the lookup position no longer applies. @@ -63859,7 +64791,8 @@ <summary>Type of the HTTP auth prompt displayed.</summary> </histogram> -<histogram name="Net.HttpAuthResource" enum="HttpAuthResource"> +<histogram name="Net.HttpAuthResource" enum="HttpAuthResource" + expires_after="2014-09-09"> <obsolete> Removed in https://crrev.com/209100 </obsolete> @@ -63879,7 +64812,8 @@ </summary> </histogram> -<histogram name="Net.HttpConnectionLatency" units="ms"> +<histogram name="Net.HttpConnectionLatency" units="ms" + expires_after="2015-03-25"> <obsolete> Deprecated as of 03/2015. </obsolete> @@ -63895,7 +64829,8 @@ <summary>Length of time that a received resource will be cacheable.</summary> </histogram> -<histogram name="Net.HttpContentLength" units="bytes"> +<histogram name="Net.HttpContentLength" units="bytes" + expires_after="2017-07-12"> <obsolete> Replaced by Net.HttpContentLengthV2 </obsolete> @@ -63907,7 +64842,8 @@ </summary> </histogram> -<histogram name="Net.HttpContentLengthCacheable" units="bytes"> +<histogram name="Net.HttpContentLengthCacheable" units="bytes" + expires_after="2018-04-04"> <obsolete> Deprecated 04/2018. </obsolete> @@ -63919,7 +64855,8 @@ </summary> </histogram> -<histogram name="Net.HttpContentLengthCacheable24Hours" units="bytes"> +<histogram name="Net.HttpContentLengthCacheable24Hours" units="bytes" + expires_after="2018-04-04"> <obsolete> Deprecated 04/2018. </obsolete> @@ -63931,7 +64868,8 @@ </summary> </histogram> -<histogram name="Net.HttpContentLengthCacheable4Hours" units="bytes"> +<histogram name="Net.HttpContentLengthCacheable4Hours" units="bytes" + expires_after="2018-04-04"> <obsolete> Deprecated 04/2018. </obsolete> @@ -63943,7 +64881,8 @@ </summary> </histogram> -<histogram name="Net.HttpContentLengthDifference" units="bytes"> +<histogram name="Net.HttpContentLengthDifference" units="bytes" + expires_after="2018-06-04"> <obsolete> Deprecated 06/2018. </obsolete> @@ -63977,7 +64916,8 @@ </summary> </histogram> -<histogram name="Net.HttpContentLengthWithValidOCL" units="bytes"> +<histogram name="Net.HttpContentLengthWithValidOCL" units="bytes" + expires_after="2018-04-04"> <obsolete> Deprecated 04/2018. </obsolete> @@ -63988,7 +64928,8 @@ </summary> </histogram> -<histogram name="Net.HttpHeaderParserEvent" enum="HttpHeaderParserEvent"> +<histogram name="Net.HttpHeaderParserEvent" enum="HttpHeaderParserEvent" + expires_after="2016-12-08"> <obsolete> Deprecated as of 12/2016. </obsolete> @@ -64057,7 +64998,8 @@ </summary> </histogram> -<histogram name="Net.HttpOriginalContentLength" units="bytes"> +<histogram name="Net.HttpOriginalContentLength" units="bytes" + expires_after="2017-07-12"> <obsolete> Replaced by Net.HttpOriginalContentLengthV2. </obsolete> @@ -64097,7 +65039,8 @@ <summary>Time taken to establish the connection to the HTTP proxy.</summary> </histogram> -<histogram name="Net.HttpProxySocketRequestTime" units="ms"> +<histogram name="Net.HttpProxySocketRequestTime" units="ms" + expires_after="2016-10-13"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -64106,7 +65049,7 @@ </histogram> <histogram name="Net.HttpRequest.ContainsInvalidHeaderValuesInRFC7230" - enum="Boolean"> + enum="Boolean" expires_after="2016-06-28"> <obsolete> Deprecated 06/2016 because this is not continuously tracked. </obsolete> @@ -64137,7 +65080,7 @@ </histogram> <histogram name="Net.HttpResponse.ContainsInvalidHeaderValuesInRFC7230" - enum="Boolean"> + enum="Boolean" expires_after="2016-06-28"> <obsolete> Deprecated 06/2016 because this is not continuously tracked. </obsolete> @@ -64161,7 +65104,8 @@ </summary> </histogram> -<histogram name="Net.HttpResponseInfo.ConnectionInfo" enum="ConnectionInfo"> +<histogram name="Net.HttpResponseInfo.ConnectionInfo" enum="ConnectionInfo" + expires_after="2016-07-11"> <obsolete> Deprecated as of 06/2016. </obsolete> @@ -64173,7 +65117,7 @@ </histogram> <histogram name="Net.HttpResponseInfo.ConnectionInfo.MainFrame" - enum="ConnectionInfo"> + enum="ConnectionInfo" expires_after="2018-07-03"> <obsolete> Deprecated as of July 2018. </obsolete> @@ -64185,7 +65129,7 @@ </histogram> <histogram name="Net.HttpResponseInfo.ConnectionInfo.SubResource" - enum="ConnectionInfo"> + enum="ConnectionInfo" expires_after="2018-07-03"> <obsolete> Deprecated as of July 2018. </obsolete> @@ -64206,7 +65150,8 @@ </summary> </histogram> -<histogram name="Net.HttpSocketType" enum="HttpSocketType"> +<histogram name="Net.HttpSocketType" enum="HttpSocketType" + expires_after="2015-03-25"> <obsolete> Deprecated as of 03/2015. </obsolete> @@ -64217,7 +65162,8 @@ </summary> </histogram> -<histogram name="Net.HttpStatusLineStatus" enum="HttpStatusLineStatus"> +<histogram name="Net.HttpStatusLineStatus" enum="HttpStatusLineStatus" + expires_after="2016-12-08"> <obsolete> Deprecated as of 12/2016. </obsolete> @@ -64229,7 +65175,7 @@ </histogram> <histogram name="Net.HttpStreamFactoryJob.Alt.NextState" - enum="HttpStreamFactoryJobState"> + enum="HttpStreamFactoryJobState" expires_after="2018-01-04"> <obsolete> Deprecated as of 1/2018. </obsolete> @@ -64239,7 +65185,7 @@ </histogram> <histogram name="Net.HttpStreamFactoryJob.Alt.State" - enum="HttpStreamFactoryJobState"> + enum="HttpStreamFactoryJobState" expires_after="2018-01-04"> <obsolete> Deprecated as of 1/2018. </obsolete> @@ -64249,7 +65195,7 @@ </histogram> <histogram name="Net.HttpStreamFactoryJob.Main.NextState" - enum="HttpStreamFactoryJobState"> + enum="HttpStreamFactoryJobState" expires_after="2018-01-04"> <obsolete> Deprecated as of 1/2018. </obsolete> @@ -64259,7 +65205,7 @@ </histogram> <histogram name="Net.HttpStreamFactoryJob.Main.State" - enum="HttpStreamFactoryJobState"> + enum="HttpStreamFactoryJobState" expires_after="2018-01-04"> <obsolete> Deprecated as of 1/2018. </obsolete> @@ -64268,7 +65214,8 @@ <summary>Reports the state that the Main Job is in.</summary> </histogram> -<histogram name="Net.HttpStreamFactoryJob.StreamReadyCallbackTime" units="ms"> +<histogram name="Net.HttpStreamFactoryJob.StreamReadyCallbackTime" units="ms" + expires_after="2017-08-07"> <obsolete> Deprecated 08/2017. No longer tracked. </obsolete> @@ -64294,7 +65241,8 @@ </summary> </histogram> -<histogram name="Net.IOError_SocketReuseType" enum="HttpSocketType"> +<histogram name="Net.IOError_SocketReuseType" enum="HttpSocketType" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -64306,7 +65254,7 @@ </histogram> <histogram name="Net.IOError_SocketReuseType_disable_late_binding" - enum="HttpSocketType"> + enum="HttpSocketType" expires_after="2013-04-09"> <obsolete> Late bindings are on by default now. </obsolete> @@ -64318,7 +65266,7 @@ </histogram> <histogram name="Net.IOError_SocketReuseType_enable_late_binding" - enum="HttpSocketType"> + enum="HttpSocketType" expires_after="2013-04-09"> <obsolete> Late bindings are on by default now. </obsolete> @@ -64329,7 +65277,8 @@ </summary> </histogram> -<histogram name="Net.IOThreadCreationToHttpRequestStart" units="ms"> +<histogram name="Net.IOThreadCreationToHttpRequestStart" units="ms" + expires_after="2014-11-13"> <obsolete> Deprecated 11/2014. No longer tracked. </obsolete> @@ -64341,7 +65290,7 @@ </summary> </histogram> -<histogram name="Net.IPv6ConnectDuration" units="ms"> +<histogram name="Net.IPv6ConnectDuration" units="ms" expires_after="2015-01-06"> <obsolete> Deprecated 1/2015. No longer tracked. </obsolete> @@ -64349,7 +65298,8 @@ <summary>Duration of time spent during the UDP-connect IPv6 probe.</summary> </histogram> -<histogram name="Net.IPv6ConnectFailureMatch" enum="BooleanSuccess"> +<histogram name="Net.IPv6ConnectFailureMatch" enum="BooleanSuccess" + expires_after="2015-03-30"> <obsolete> Deprecated 03/2015. No longer tracked. </obsolete> @@ -64360,7 +65310,8 @@ </summary> </histogram> -<histogram name="Net.IPv6ConnectSuccessMatch" enum="BooleanSuccess"> +<histogram name="Net.IPv6ConnectSuccessMatch" enum="BooleanSuccess" + expires_after="2015-03-30"> <obsolete> Deprecated 03/2015. No longer tracked. </obsolete> @@ -64371,7 +65322,8 @@ </summary> </histogram> -<histogram name="Net.IPv6Status" enum="IPV6ProbeResult"> +<histogram name="Net.IPv6Status" enum="IPV6ProbeResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -64379,7 +65331,8 @@ <summary>The probe results when a test for IPv6 support is done.</summary> </histogram> -<histogram name="Net.IPv6Status_retest" enum="IPV6ProbeResult"> +<histogram name="Net.IPv6Status_retest" enum="IPV6ProbeResult" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -64391,7 +65344,7 @@ </histogram> <histogram name="Net.JobControllerSet.CountOfJobController" - units="job_controllers"> + units="job_controllers" expires_after="2018-01-11"> <obsolete> Deprecated 01/2018. </obsolete> @@ -64429,7 +65382,7 @@ </histogram> <histogram name="Net.JobControllerSet.CountOfJobController.Preconnect" - units="job_controllers"> + units="job_controllers" expires_after="2018-01-11"> <obsolete> Deprecated 01/2018. </obsolete> @@ -64441,7 +65394,7 @@ </histogram> <histogram name="Net.JobControllerSet.CountOfJobControllerAtShutDown" - units="job_controllers"> + units="job_controllers" expires_after="2018-01-11"> <obsolete> Deprecated 01/2018. </obsolete> @@ -64452,7 +65405,7 @@ </histogram> <histogram name="Net.JobControllerSet.CountOfNonPreconnectAltJob" - units="alt_jobs"> + units="alt_jobs" expires_after="2017-08-28"> <obsolete> Deprecated 08/2017. </obsolete> @@ -64463,7 +65416,7 @@ </histogram> <histogram name="Net.JobControllerSet.CountOfNonPreconnectMainJob" - units="main_jobs"> + units="main_jobs" expires_after="2017-08-28"> <obsolete> Deprecated 08/2017. </obsolete> @@ -64471,7 +65424,8 @@ <summary>This counts number of main jobs which are still alive.</summary> </histogram> -<histogram name="Net.JobControllerSet.CountOfPendingRequest" units="requests"> +<histogram name="Net.JobControllerSet.CountOfPendingRequest" units="requests" + expires_after="2017-04-19"> <obsolete> Deprecated 04/2017, replaced by Net.JobController.CountOfJobController.NonPreconnect.PendingRequest. @@ -64483,7 +65437,7 @@ </histogram> <histogram name="Net.JobControllerSet.CountOfPreconnect" - units="job_controllers"> + units="job_controllers" expires_after="2017-04-19"> <obsolete> Deprecated 04/2017, replaced by Net.JobController.CountOfJobController.Preconnect. @@ -64496,7 +65450,7 @@ </histogram> <histogram name="Net.KeepaliveStatisticsRecorder.PeakInflightRequests" - units="requests"> + units="requests" expires_after="2018-03-07"> <obsolete> Deprecated 02/2018, replaced by Net.KeepaliveStatisticsRecorder.PeakInflightRequests2 @@ -64541,7 +65495,8 @@ </summary> </histogram> -<histogram name="Net.LoadPrefetch.Pattern" enum="PrefetchStatus"> +<histogram name="Net.LoadPrefetch.Pattern" enum="PrefetchStatus" + expires_after="2018-07-03"> <obsolete> Deprecated July 2018 </obsolete> @@ -64580,7 +65535,8 @@ </summary> </histogram> -<histogram name="Net.MTPR_GetProxyForUrl_Thread_Wait_Time" units="ms"> +<histogram name="Net.MTPR_GetProxyForUrl_Thread_Wait_Time" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -64591,7 +65547,8 @@ </summary> </histogram> -<histogram name="Net.MTPR_GetProxyForUrl_Time" units="ms"> +<histogram name="Net.MTPR_GetProxyForUrl_Time" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -64612,7 +65569,8 @@ </summary> </histogram> -<histogram name="Net.NetInternalsUi.Feature" enum="NetInternalsUiFeature"> +<histogram name="Net.NetInternalsUi.Feature" enum="NetInternalsUiFeature" + expires_after="2015-04-09"> <obsolete> Removed in Chrome 44. </obsolete> @@ -64693,7 +65651,8 @@ </summary> </histogram> -<histogram name="Net.NetworkErrorsRecovered.MainFrame" enum="NetErrorCodes"> +<histogram name="Net.NetworkErrorsRecovered.MainFrame" enum="NetErrorCodes" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -64704,7 +65663,8 @@ </summary> </histogram> -<histogram name="Net.NetworkErrorsRecovered.Subresource" enum="NetErrorCodes"> +<histogram name="Net.NetworkErrorsRecovered.Subresource" enum="NetErrorCodes" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -64715,7 +65675,8 @@ </summary> </histogram> -<histogram name="Net.NetworkErrorsUnrecovered.MainFrame" enum="NetErrorCodes"> +<histogram name="Net.NetworkErrorsUnrecovered.MainFrame" enum="NetErrorCodes" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -64727,7 +65688,8 @@ </summary> </histogram> -<histogram name="Net.NetworkErrorsUnrecovered.Subresource" enum="NetErrorCodes"> +<histogram name="Net.NetworkErrorsUnrecovered.Subresource" enum="NetErrorCodes" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -64749,7 +65711,7 @@ </summary> </histogram> -<histogram name="Net.NumDuplicateCookiesInDb"> +<histogram name="Net.NumDuplicateCookiesInDb" expires_after="2015-08-21"> <obsolete> Deprecated 2015-08-17 as part of cookie histogram cleanup (https://crbug.com/521135). @@ -64768,7 +65730,8 @@ </summary> </histogram> -<histogram name="Net.OCSPRequestFailedTimeMs" units="ms"> +<histogram name="Net.OCSPRequestFailedTimeMs" units="ms" + expires_after="2017-04-21"> <obsolete> Deprecated 2017-04-21 as it was Linux/CrOS only. </obsolete> @@ -64780,7 +65743,8 @@ </summary> </histogram> -<histogram name="Net.OCSPRequestSuccess" enum="BooleanSuccess"> +<histogram name="Net.OCSPRequestSuccess" enum="BooleanSuccess" + expires_after="2017-04-21"> <obsolete> Deprecated 2017-04-21 as it was Linux/CrOS only. </obsolete> @@ -64792,7 +65756,7 @@ </summary> </histogram> -<histogram name="Net.OCSPRequestTimeMs" units="ms"> +<histogram name="Net.OCSPRequestTimeMs" units="ms" expires_after="2017-04-21"> <obsolete> Deprecated 2017-04-21 as it was Linux/CrOS only. </obsolete> @@ -64804,7 +65768,8 @@ </summary> </histogram> -<histogram name="Net.OCSPResponseStapled" enum="BooleanSuccess"> +<histogram name="Net.OCSPResponseStapled" enum="BooleanSuccess" + expires_after="2018-12-20"> <obsolete> Deprecated 12/2018. </obsolete> @@ -64817,7 +65782,8 @@ </summary> </histogram> -<histogram name="Net.OSErrorsForGetAddrinfo" enum="ErrorCodesGetaddrinfo_All"> +<histogram name="Net.OSErrorsForGetAddrinfo" enum="ErrorCodesGetaddrinfo_All" + expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -64830,7 +65796,7 @@ </histogram> <histogram name="Net.OSErrorsForGetAddrinfo_Linux" - enum="ErrorCodesGetaddrinfo_Linux"> + enum="ErrorCodesGetaddrinfo_Linux" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -64842,7 +65808,7 @@ </histogram> <histogram name="Net.OSErrorsForGetAddrinfo_Mac" - enum="ErrorCodesGetaddrinfo_Mac"> + enum="ErrorCodesGetaddrinfo_Mac" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -64854,7 +65820,7 @@ </histogram> <histogram name="Net.OSErrorsForGetAddrinfo_Win" - enum="ErrorCodesGetaddrinfo_Win"> + enum="ErrorCodesGetaddrinfo_Win" expires_after="2018-11-08"> <obsolete> Deprecated 11/2018. </obsolete> @@ -64865,7 +65831,8 @@ </summary> </histogram> -<histogram name="Net.PacResultForStrippedUrl" enum="PacResultForStrippedUrl"> +<histogram name="Net.PacResultForStrippedUrl" enum="PacResultForStrippedUrl" + expires_after="2016-04-29"> <obsolete> Deprecated 4/27/2016. No longer tracked. </obsolete> @@ -64890,7 +65857,8 @@ </summary> </histogram> -<histogram name="Net.Ping_ResponseStartedTime" units="ms"> +<histogram name="Net.Ping_ResponseStartedTime" units="ms" + expires_after="2014-04-17"> <obsolete> Deprecated 4/16/2014. No longer tracked. </obsolete> @@ -64901,7 +65869,7 @@ </summary> </histogram> -<histogram name="Net.Ping_Result" enum="PingResult"> +<histogram name="Net.Ping_Result" enum="PingResult" expires_after="2014-04-17"> <obsolete> Deprecated 4/16/2014. No longer tracked. </obsolete> @@ -64912,7 +65880,8 @@ </summary> </histogram> -<histogram name="Net.PreconnectedLinkNavigations" enum="PreconnectedNavigation"> +<histogram name="Net.PreconnectedLinkNavigations" enum="PreconnectedNavigation" + expires_after="2016-03-30"> <obsolete> No longer tracked. </obsolete> @@ -64924,7 +65893,8 @@ </summary> </histogram> -<histogram name="Net.PreconnectedNavigation" enum="PreconnectedNavigation"> +<histogram name="Net.PreconnectedNavigation" enum="PreconnectedNavigation" + expires_after="2016-03-30"> <obsolete> No longer tracked. </obsolete> @@ -64936,7 +65906,8 @@ </summary> </histogram> -<histogram name="Net.PreconnectMotivation" enum="PreconnectMotivation"> +<histogram name="Net.PreconnectMotivation" enum="PreconnectMotivation" + expires_after="2018-05-15"> <obsolete> Deprecated May 2018 </obsolete> @@ -64957,7 +65928,8 @@ </details> </histogram> -<histogram name="Net.PreconnectProxyStatus" enum="ProxyStatus"> +<histogram name="Net.PreconnectProxyStatus" enum="ProxyStatus" + expires_after="2016-03-30"> <obsolete> No longer tracked. </obsolete> @@ -64976,7 +65948,7 @@ </histogram> <histogram name="Net.PreconnectSubresourceEval" - enum="PreconnectSubresourceEval"> + enum="PreconnectSubresourceEval" expires_after="2018-05-15"> <obsolete> Deprecated May 2018 </obsolete> @@ -64993,7 +65965,8 @@ </details> </histogram> -<histogram name="Net.PreconnectSubresourceExpectation"> +<histogram name="Net.PreconnectSubresourceExpectation" + expires_after="2018-05-15"> <obsolete> Deprecated May 2018 </obsolete> @@ -65009,7 +65982,8 @@ </details> </histogram> -<histogram name="Net.PreconnectTriggerUsed" enum="PreconnectTriggerUsed"> +<histogram name="Net.PreconnectTriggerUsed" enum="PreconnectTriggerUsed" + expires_after="2016-03-30"> <obsolete> No longer tracked. </obsolete> @@ -65021,7 +65995,8 @@ </summary> </histogram> -<histogram name="Net.PreconnectUtilization" enum="NetPreconnectUtilization"> +<histogram name="Net.PreconnectUtilization" enum="NetPreconnectUtilization" + expires_after="2013-04-09"> <obsolete> Sourced data corrected, and replaced by NetPreconnectUtilization2 </obsolete> @@ -65036,7 +66011,8 @@ </details> </histogram> -<histogram name="Net.PreconnectUtilization2" enum="NetPreconnectUtilization"> +<histogram name="Net.PreconnectUtilization2" enum="NetPreconnectUtilization" + expires_after="2018-05-11"> <obsolete> Deprecated in M68 (May 2018) </obsolete> @@ -65051,7 +66027,7 @@ </details> </histogram> -<histogram name="Net.Predictor.MRUIndex"> +<histogram name="Net.Predictor.MRUIndex" expires_after="2016-07-28"> <obsolete> Dev data was collected which was good enough to make a decision on the size of the predictor database. @@ -65063,7 +66039,8 @@ </summary> </histogram> -<histogram name="Net.Predictor.Startup.DBSize" units="bytes"> +<histogram name="Net.Predictor.Startup.DBSize" units="bytes" + expires_after="2018-05-15"> <obsolete> Deprecated May 2018 </obsolete> @@ -65081,7 +66058,8 @@ </summary> </histogram> -<histogram name="Net.Prefetch.Pattern" enum="PrefetchStatus"> +<histogram name="Net.Prefetch.Pattern" enum="PrefetchStatus" + expires_after="2018-07-03"> <obsolete> Deprecated July 2018 </obsolete> @@ -65115,7 +66093,8 @@ </details> </histogram> -<histogram name="Net.Prefetch.TimeBeforeCancel" units="ms"> +<histogram name="Net.Prefetch.TimeBeforeCancel" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated July 2018 </obsolete> @@ -65128,7 +66107,8 @@ </details> </histogram> -<histogram name="Net.Prefetch.TimeSpentOnPrefetchHit" units="ms"> +<histogram name="Net.Prefetch.TimeSpentOnPrefetchHit" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated July 2018 </obsolete> @@ -65139,7 +66119,8 @@ </summary> </histogram> -<histogram name="Net.Prefetch.TimeSpentPrefetchingFromCache" units="ms"> +<histogram name="Net.Prefetch.TimeSpentPrefetchingFromCache" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated July 2018 </obsolete> @@ -65150,7 +66131,8 @@ </details> </histogram> -<histogram name="Net.Prefetch.TimeSpentPrefetchingFromNetwork" units="ms"> +<histogram name="Net.Prefetch.TimeSpentPrefetchingFromNetwork" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated July 2018 </obsolete> @@ -65169,7 +66151,8 @@ </summary> </histogram> -<histogram name="Net.Priority_High_Latency" units="ms"> +<histogram name="Net.Priority_High_Latency" units="ms" + expires_after="2013-04-09"> <obsolete> Replaced by Net.Priority_High_Latency_b. </obsolete> @@ -65181,7 +66164,8 @@ </summary> </histogram> -<histogram name="Net.Priority_High_Latency_b" units="ms"> +<histogram name="Net.Priority_High_Latency_b" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -65192,7 +66176,8 @@ </summary> </histogram> -<histogram name="Net.Priority_Low_Latency" units="ms"> +<histogram name="Net.Priority_Low_Latency" units="ms" + expires_after="2013-04-09"> <obsolete> Replaced by Net.Priority_Low_Latency_b. </obsolete> @@ -65204,7 +66189,8 @@ </summary> </histogram> -<histogram name="Net.Priority_Low_Latency_b" units="ms"> +<histogram name="Net.Priority_Low_Latency_b" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -65231,7 +66217,8 @@ </summary> </histogram> -<histogram name="Net.ProxyAuthRequested.HasConnection"> +<histogram name="Net.ProxyAuthRequested.HasConnection" + expires_after="2019-03-01"> <obsolete> Removed 2019/02/28, in a proxy auth refactor. </obsolete> @@ -65243,7 +66230,7 @@ </summary> </histogram> -<histogram name="Net.ProxyPollConfigurationTime"> +<histogram name="Net.ProxyPollConfigurationTime" expires_after="2014-09-16"> <obsolete> Removed at some time before 2014/09/15. </obsolete> @@ -65264,7 +66251,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.AbandonedExecutionTotalTime" units="ms"> +<histogram name="Net.ProxyResolver.AbandonedExecutionTotalTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65277,7 +66265,7 @@ </histogram> <histogram name="Net.ProxyResolver.BlockingDNSMode.AbandonedExecutionTotalTime" - units="ms"> + units="ms" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65289,7 +66277,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.DnsWaitTotalTime" units="ms"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.DnsWaitTotalTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65301,7 +66290,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.ExecutionTime" units="ms"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.ExecutionTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65313,7 +66303,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.NumAlerts"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.NumAlerts" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65324,7 +66315,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.NumErrors"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.NumErrors" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65334,7 +66326,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.NumRestarts"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.NumRestarts" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65344,7 +66337,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTime" units="ms"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65355,7 +66349,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTimeDNS" units="ms"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTimeDNS" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65367,7 +66362,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.BlockingDNSMode.UniqueDNS"> +<histogram name="Net.ProxyResolver.BlockingDNSMode.UniqueDNS" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65378,7 +66374,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.DnsWaitTotalTime" units="ms"> +<histogram name="Net.ProxyResolver.DnsWaitTotalTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65390,7 +66387,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.ExecutionTime" units="ms"> +<histogram name="Net.ProxyResolver.ExecutionTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65403,7 +66401,7 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.NumAlerts"> +<histogram name="Net.ProxyResolver.NumAlerts" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65414,7 +66412,7 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.NumErrors"> +<histogram name="Net.ProxyResolver.NumErrors" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65424,7 +66422,7 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.NumRestarts"> +<histogram name="Net.ProxyResolver.NumRestarts" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65434,7 +66432,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.OriginThreadLatency" units="ms"> +<histogram name="Net.ProxyResolver.OriginThreadLatency" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65445,7 +66444,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.TotalTime" units="ms"> +<histogram name="Net.ProxyResolver.TotalTime" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65456,7 +66456,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.TotalTimeDNS" units="ms"> +<histogram name="Net.ProxyResolver.TotalTimeDNS" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65468,7 +66469,8 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.TotalTimeWorkerThread" units="ms"> +<histogram name="Net.ProxyResolver.TotalTimeWorkerThread" units="ms" + expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65480,7 +66482,7 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.UniqueDNS"> +<histogram name="Net.ProxyResolver.UniqueDNS" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65491,7 +66493,7 @@ </summary> </histogram> -<histogram name="Net.ProxyResolver.URLSize"> +<histogram name="Net.ProxyResolver.URLSize" expires_after="2014-09-16"> <obsolete> Removed in Chrome 39. </obsolete> @@ -65522,7 +66524,7 @@ </histogram> <histogram name="Net.ProxyService.GetProxyUsingScriptResult" - enum="NetErrorCodes"> + enum="NetErrorCodes" expires_after="2017-06-30"> <obsolete> Deprecated as of Chrome 61. </obsolete> @@ -65534,7 +66536,7 @@ </histogram> <histogram name="Net.ProxyService.GetProxyUsingScriptTime" - units="100s of microseconds"> + units="100s of microseconds" expires_after="2017-06-30"> <obsolete> Deprecated as of Chrome 61. </obsolete> @@ -65547,7 +66549,8 @@ </summary> </histogram> -<histogram name="Net.ProxyService.ResolvedUsingScript" enum="Boolean"> +<histogram name="Net.ProxyService.ResolvedUsingScript" enum="Boolean" + expires_after="2017-06-30"> <obsolete> Deprecated as of Chrome 61. </obsolete> @@ -65565,7 +66568,7 @@ </histogram> <histogram name="Net.ProxyService.ResolveProxyTime" - units="100s of microseconds"> + units="100s of microseconds" expires_after="2017-06-30"> <obsolete> Deprecated as of Chrome 61. </obsolete> @@ -65577,7 +66580,8 @@ </summary> </histogram> -<histogram name="Net.ProxyService.ScriptTerminated" enum="BooleanTerminated"> +<histogram name="Net.ProxyService.ScriptTerminated" enum="BooleanTerminated" + expires_after="2017-06-30"> <obsolete> Deprecated as of Chrome 61. </obsolete> @@ -65591,7 +66595,7 @@ </histogram> <histogram name="Net.ProxyService.ScriptTerminatedOnInit" - enum="BooleanTerminated"> + enum="BooleanTerminated" expires_after="2017-06-30"> <obsolete> Deprecated as of Chrome 61. </obsolete> @@ -65603,7 +66607,8 @@ </summary> </histogram> -<histogram name="Net.PublicKeyPinFailureDomain" enum="PublicKeyPinFailedDomain"> +<histogram name="Net.PublicKeyPinFailureDomain" enum="PublicKeyPinFailedDomain" + expires_after="2016-11-01"> <obsolete> Deprecated as of November 2016 because of disuse. Historical data is likely inaccurate due to changes in the data structure that calculated domain IDs @@ -65615,7 +66620,8 @@ </summary> </histogram> -<histogram name="Net.PublicKeyPinReportSendingFailure" enum="NetErrorCodes"> +<histogram name="Net.PublicKeyPinReportSendingFailure" enum="NetErrorCodes" + expires_after="2016-07-20"> <obsolete> Deprecated as of 07/2016. Replaced with Net.PublicKeyPinReportSendingFailure2. @@ -65650,7 +66656,8 @@ </summary> </histogram> -<histogram name="Net.PushedStreamAlreadyHasResponseHeaders" enum="Boolean"> +<histogram name="Net.PushedStreamAlreadyHasResponseHeaders" enum="Boolean" + expires_after="2017-11-17"> <obsolete> Deprecated 11/2017. </obsolete> @@ -65702,7 +66709,8 @@ </summary> </histogram> -<histogram name="Net.QuicClientHelloServerConfig.HowExpired" units="ms"> +<histogram name="Net.QuicClientHelloServerConfig.HowExpired" units="ms" + expires_after="2014-08-06"> <obsolete> Deprecated 08/2014, and replaced by Net.QuicClientHelloServerConfig.InvalidDuration. @@ -65723,7 +66731,7 @@ </histogram> <histogram name="Net.QuicClientHelloServerConfigState" - enum="QuicServerConfigState"> + enum="QuicServerConfigState" expires_after="2014-11-13"> <obsolete> Deprecated as of 11/2014. Replaced by Net.QuicInchoateClientHelloReason. </obsolete> @@ -65734,7 +66742,8 @@ </summary> </histogram> -<histogram name="Net.QuicCloseConnection.NullVisitor" enum="BooleanNullVisitor"> +<histogram name="Net.QuicCloseConnection.NullVisitor" enum="BooleanNullVisitor" + expires_after="2018-02-23"> <obsolete> Deprecated 02/2018. No data for this histogram for more than 30 days. </obsolete> @@ -65762,7 +66771,8 @@ </summary> </histogram> -<histogram name="Net.QuicDiskCache.APICall" enum="QuicDiskCacheAPICall"> +<histogram name="Net.QuicDiskCache.APICall" enum="QuicDiskCacheAPICall" + expires_after="2017-04-20"> <obsolete> Deprecated as of 4/15/2017. </obsolete> @@ -65773,7 +66783,8 @@ </summary> </histogram> -<histogram name="Net.QuicDiskCache.EntryState" enum="QuicDiskCacheEntryState"> +<histogram name="Net.QuicDiskCache.EntryState" enum="QuicDiskCacheEntryState" + expires_after="2014-10-31"> <obsolete> Deprecated as of 10/2014. </obsolete> @@ -65801,7 +66812,7 @@ </summary> </histogram> -<histogram name="Net.QuicEphemeralPortsSuggested"> +<histogram name="Net.QuicEphemeralPortsSuggested" expires_after="2016-04-25"> <obsolete> Deprecated as of 04/2016. </obsolete> @@ -65863,7 +66874,7 @@ </histogram> <histogram name="Net.QuicHttpStream::DoStreamRequest.IsNullSession" - enum="Boolean"> + enum="Boolean" expires_after="2016-09-12"> <obsolete> Deprecated 2016. No longer tracked. </obsolete> @@ -65913,7 +66924,8 @@ <summary>The number of client hello messages sent.</summary> </histogram> -<histogram name="Net.QuicNumSentClientHellosCryptoHandshakeConfirmed"> +<histogram name="Net.QuicNumSentClientHellosCryptoHandshakeConfirmed" + expires_after="2014-01-22"> <obsolete> see Net.QuicSession.Connect*PortForHTTP* </obsolete> @@ -65945,7 +66957,8 @@ </summary> </histogram> -<histogram name="Net.QuicReadAvailableData.NullStream" enum="BooleanNullStream"> +<histogram name="Net.QuicReadAvailableData.NullStream" enum="BooleanNullStream" + expires_after="2017-05-26"> <obsolete> Removed as of 05/2017. </obsolete> @@ -65956,7 +66969,8 @@ </summary> </histogram> -<histogram name="Net.QuicServerInfo.DiskCacheLoadTime" units="ms"> +<histogram name="Net.QuicServerInfo.DiskCacheLoadTime" units="ms" + expires_after="2017-04-20"> <obsolete> Deprecated as of 4/15/2017. </obsolete> @@ -65964,7 +66978,8 @@ <summary>Time spent to load QUIC server information from disk cache.</summary> </histogram> -<histogram name="Net.QuicServerInfo.DiskCacheReadTime" units="ms"> +<histogram name="Net.QuicServerInfo.DiskCacheReadTime" units="ms" + expires_after="2014-10-21"> <obsolete> Deprecated as of 10/2014. Replaced by DiskCacheWaitForDataReadyTime. </obsolete> @@ -65981,7 +66996,8 @@ </summary> </histogram> -<histogram name="Net.QuicServerInfo.DiskCacheWaitForDataReadyTime" units="ms"> +<histogram name="Net.QuicServerInfo.DiskCacheWaitForDataReadyTime" units="ms" + expires_after="2017-09-06"> <obsolete> Deprecated as of 4/19/2017. </obsolete> @@ -65992,7 +67008,7 @@ </histogram> <histogram name="Net.QuicServerInfo.ExpectConfigMissingFromDiskCache" - enum="BooleanMissingFromDiskCache"> + enum="BooleanMissingFromDiskCache" expires_after="2017-04-20"> <obsolete> Deprecated as of 4/15/2017. </obsolete> @@ -66005,7 +67021,7 @@ </histogram> <histogram name="Net.QuicServerInfo.WaitForDataReady.HandshakeConfirmedTime" - units="Milliseconds"> + units="Milliseconds" expires_after="2017-08-04"> <obsolete> Deprecated as of 8/3/2017. </obsolete> @@ -66018,7 +67034,8 @@ </summary> </histogram> -<histogram name="Net.QuicServerInfo.WaitForDataReadyToRtt" units="%"> +<histogram name="Net.QuicServerInfo.WaitForDataReadyToRtt" units="%" + expires_after="2017-04-20"> <obsolete> Deprecated as of 4/15/2017. </obsolete> @@ -66030,7 +67047,7 @@ </histogram> <histogram name="Net.QuicSession.21CumulativePacketsReceived" - units="Received in Ranges"> + units="Received in Ranges" expires_after="2016-08-18"> <obsolete> Deprecated 08/2016. </obsolete> @@ -66052,7 +67069,7 @@ </histogram> <histogram name="Net.QuicSession.6PacketsPatternsReceived" - units="Binay of Packets ACKed"> + units="Binay of Packets ACKed" expires_after="2016-08-18"> <obsolete> Deprecated 08/2016. </obsolete> @@ -66437,7 +67454,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.HandshakeRoundTrips" units="RTTs"> +<histogram name="Net.QuicSession.HandshakeRoundTrips" units="RTTs" + expires_after="2014-01-22"> <obsolete> see Net.QuicSession.Connect*PortForHTTP* </obsolete> @@ -66466,7 +67484,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.HeadersHOLBlockedTime" units="Milliseconds"> +<histogram name="Net.QuicSession.HeadersHOLBlockedTime" units="Milliseconds" + expires_after="2018-05-09"> <obsolete> The experiments with head of line blocking have been completed, and the code tracking head of line blocking was removed. @@ -66478,7 +67497,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.HeadersStream.EarlyFramesReceived"> +<histogram name="Net.QuicSession.HeadersStream.EarlyFramesReceived" + expires_after="2016-08-17"> <obsolete> Deprecated 08/2016. </obsolete> @@ -66498,7 +67518,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.HostResolutionTime" units="ms"> +<histogram name="Net.QuicSession.HostResolutionTime" units="ms" + expires_after="2016-08-17"> <obsolete> Deprecated 08/2016. No longer tracked. </obsolete> @@ -66697,7 +67718,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.PacketReceived" units="SequenceNumber"> +<histogram name="Net.QuicSession.PacketReceived" units="SequenceNumber" + expires_after="2016-08-18"> <obsolete> Deprecated 08/2016. </obsolete> @@ -66770,7 +67792,7 @@ </histogram> <histogram name="Net.QuicSession.PublicResetAddressMismatch" - enum="QuicAddressMismatch"> + enum="QuicAddressMismatch" expires_after="2018-03-01"> <obsolete> Deprecated 02/2018. Use Net.QuicSession.PublicResetAddressMismatch2. </obsolete> @@ -66863,7 +67885,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.RetryAfterWriteErrorCount" units="retries"> +<histogram name="Net.QuicSession.RetryAfterWriteErrorCount" units="retries" + expires_after="2017-11-22"> <obsolete> Deprecated 11/2017. Use Net.QuicSession.RetryAfterWriteErrorCount2. </obsolete> @@ -66905,7 +67928,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.SentConnectivityProbe" enum="Boolean"> +<histogram name="Net.QuicSession.SentConnectivityProbe" enum="Boolean" + expires_after="2018-03-21"> <obsolete> Deprecated 03/2018 as crbug.com/817496 is resolved. </obsolete> @@ -67051,7 +68075,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.TooManyOpenStream" enum="BooleanTooMany"> +<histogram name="Net.QuicSession.TooManyOpenStream" enum="BooleanTooMany" + expires_after="2015-04-06"> <obsolete> Deprecated 04/2015. Tracked as Net.QuicSession.TooManyOpenStreams. </obsolete> @@ -67069,7 +68094,8 @@ </summary> </histogram> -<histogram name="Net.QuicSession.TruncatedAcksReceived"> +<histogram name="Net.QuicSession.TruncatedAcksReceived" + expires_after="2016-08-04"> <obsolete> Deprecated 08/2016. </obsolete> @@ -67077,7 +68103,7 @@ <summary>The number of truncated ACK frames received.</summary> </histogram> -<histogram name="Net.QuicSession.TruncatedAcksSent"> +<histogram name="Net.QuicSession.TruncatedAcksSent" expires_after="2016-08-04"> <obsolete> Deprecated 08/2016. </obsolete> @@ -67157,7 +68183,7 @@ </histogram> <histogram name="Net.QuicSession.WriteOutOfOrderQueuedPacketAfterClose" - enum="Boolean"> + enum="Boolean" expires_after="2018-06-12"> <obsolete> Deprecated 06/2018 after https://crbug.com/818040 is fixed. </obsolete> @@ -67319,7 +68345,8 @@ </summary> </histogram> -<histogram name="Net.QuicStreamFactory.TSVIPCliIsLoaded" enum="Boolean"> +<histogram name="Net.QuicStreamFactory.TSVIPCliIsLoaded" enum="Boolean" + expires_after="2016-06-20"> <obsolete> Deprecated 06/2016. No longer tracked. </obsolete> @@ -67330,7 +68357,8 @@ </summary> </histogram> -<histogram name="Net.QuicTimeBetweenTwoPacketSent" units="ms"> +<histogram name="Net.QuicTimeBetweenTwoPacketSent" units="ms" + expires_after="2016-08-03"> <obsolete> Deprecated 08/2016. No longer tracked. </obsolete> @@ -67368,7 +68396,8 @@ </summary> </histogram> -<histogram name="Net.RenegotiationExtensionSupported"> +<histogram name="Net.RenegotiationExtensionSupported" + expires_after="2015-03-30"> <obsolete> Deprecated 03/2015. No longer tracked. </obsolete> @@ -67451,7 +68480,7 @@ </summary> </histogram> -<histogram name="Net.RequestTime"> +<histogram name="Net.RequestTime" expires_after="2015-07-08"> <obsolete> Replaced by Net.RequestTime2 due to bug in original implementation. </obsolete> @@ -67461,7 +68490,7 @@ </summary> </histogram> -<histogram name="Net.RequestTime2"> +<histogram name="Net.RequestTime2" expires_after="2017-09-01"> <obsolete> Unused, so removed from Chromium as of 2017/8/31. </obsolete> @@ -67471,7 +68500,8 @@ </summary> </histogram> -<histogram name="Net.RequestTime2.ErrAborted.HttpScheme" units="ms"> +<histogram name="Net.RequestTime2.ErrAborted.HttpScheme" units="ms" + expires_after="2017-09-01"> <obsolete> Unused, so removed from Chromium as of 2017/8/31. </obsolete> @@ -67482,7 +68512,8 @@ </summary> </histogram> -<histogram name="Net.RequestTime2.ErrAborted.NetworkContent" units="ms"> +<histogram name="Net.RequestTime2.ErrAborted.NetworkContent" units="ms" + expires_after="2017-09-01"> <obsolete> Unused, so removed from Chromium as of 2017/8/31. </obsolete> @@ -67493,7 +68524,8 @@ </summary> </histogram> -<histogram name="Net.RequestTime2.ErrAborted.NoBytesRead" units="ms"> +<histogram name="Net.RequestTime2.ErrAborted.NoBytesRead" units="ms" + expires_after="2017-09-01"> <obsolete> Unused, so removed from Chromium as of 2017/8/31. </obsolete> @@ -67506,7 +68538,7 @@ </histogram> <histogram name="Net.RequestTime2.ErrAborted.NoNetworkContent.CachedContent" - units="ms"> + units="ms" expires_after="2017-09-01"> <obsolete> Unused, so removed from Chromium as of 2017/8/31. </obsolete> @@ -67518,7 +68550,8 @@ </summary> </histogram> -<histogram name="Net.RequestTime2.ErrAborted.NonHttpScheme" units="ms"> +<histogram name="Net.RequestTime2.ErrAborted.NonHttpScheme" units="ms" + expires_after="2017-09-01"> <obsolete> Unused, so removed from Chromium as of 2017/8/31. </obsolete> @@ -67529,7 +68562,8 @@ </summary> </histogram> -<histogram name="Net.RequestTime2Success.MainFrame" units="ms"> +<histogram name="Net.RequestTime2Success.MainFrame" units="ms" + expires_after="2018-07-02"> <obsolete> Removed from Chromium as of 2018/7/2. </obsolete> @@ -67540,7 +68574,8 @@ </summary> </histogram> -<histogram name="Net.RequestTime2Success.Subresource" units="ms"> +<histogram name="Net.RequestTime2Success.Subresource" units="ms" + expires_after="2018-07-02"> <obsolete> Removed from Chromium as of 2018/7/2. </obsolete> @@ -67552,7 +68587,7 @@ </histogram> <histogram name="Net.ResourceDispatcherHost.OutstandingRequests.PerProcess" - units="requests"> + units="requests" expires_after="2018-07-09"> <obsolete> Removed from Chromium as of 2018/7. </obsolete> @@ -67565,7 +68600,7 @@ </histogram> <histogram name="Net.ResourceDispatcherHost.OutstandingRequests.Total" - units="requests"> + units="requests" expires_after="2018-07-09"> <obsolete> Removed from Chromium as of 2018/7. </obsolete> @@ -67578,7 +68613,7 @@ </histogram> <histogram name="Net.ResourceDispatcherHost.PeakOutstandingRequests" - units="requests"> + units="requests" expires_after="2018-03-28"> <obsolete> Removed from code as of 03/2018. </obsolete> @@ -67631,7 +68666,7 @@ </histogram> <histogram name="Net.ResourceLoader.ExpectedContentSizeResult" - enum="ResourceLoaderExpectedContentSizeResult"> + enum="ResourceLoaderExpectedContentSizeResult" expires_after="2017-10-11"> <obsolete> Removed 10/2017. </obsolete> @@ -67644,7 +68679,7 @@ </histogram> <histogram name="Net.ResourceLoader.InliningStatus" - enum="ResourceLoaderInliningStatus"> + enum="ResourceLoaderInliningStatus" expires_after="2017-03-22"> <obsolete> This experiment was turned down, see https://crbug.com/703188. </obsolete> @@ -67678,7 +68713,8 @@ </summary> </histogram> -<histogram name="Net.ResourceLoader.TimeToURLRequestStart" units="ms"> +<histogram name="Net.ResourceLoader.TimeToURLRequestStart" units="ms" + expires_after="2018-07-02"> <obsolete> Removed from Chromium as of 2018/7/2. </obsolete> @@ -67689,7 +68725,8 @@ </summary> </histogram> -<histogram name="Net.ResponseSizeByProcess.Browser" units="KB"> +<histogram name="Net.ResponseSizeByProcess.Browser" units="KB" + expires_after="2017-11-14"> <obsolete> The code to record this histogram was removed November 2017. </obsolete> @@ -67700,7 +68737,8 @@ </summary> </histogram> -<histogram name="Net.ResponseSizeByProcess.Renderer" units="KB"> +<histogram name="Net.ResponseSizeByProcess.Renderer" units="KB" + expires_after="2017-11-14"> <obsolete> The code to record this histogram was removed November 2017. </obsolete> @@ -67711,7 +68749,8 @@ </summary> </histogram> -<histogram name="Net.ResponseSizeByProcess.Unknown" units="KB"> +<histogram name="Net.ResponseSizeByProcess.Unknown" units="KB" + expires_after="2017-11-14"> <obsolete> The code to record this histogram was removed November 2017. </obsolete> @@ -67722,7 +68761,8 @@ </summary> </histogram> -<histogram name="Net.Socket.IdleSocketFate" enum="IdleSocketFate"> +<histogram name="Net.Socket.IdleSocketFate" enum="IdleSocketFate" + expires_after="2017-09-21"> <obsolete> Deprecated as of 9/2017. </obsolete> @@ -67734,7 +68774,8 @@ </summary> </histogram> -<histogram name="Net.Socket.IdleSocketReuseTime" units="seconds"> +<histogram name="Net.Socket.IdleSocketReuseTime" units="seconds" + expires_after="2017-07-14"> <obsolete> Deprecated as of 7/2017. </obsolete> @@ -67745,7 +68786,8 @@ </summary> </histogram> -<histogram name="Net.Socket.IdleSocketTimeSaving" units="ms"> +<histogram name="Net.Socket.IdleSocketTimeSaving" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated as of 11/2016. </obsolete> @@ -67762,7 +68804,8 @@ <summary>Number of idle sockets when one of them was reused.</summary> </histogram> -<histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"> +<histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket" + expires_after="2015-03-25"> <obsolete> Deprecated as of 03/2015. </obsolete> @@ -67770,7 +68813,8 @@ <summary>The time an already used socket sat idle before being used.</summary> </histogram> -<histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"> +<histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket" + expires_after="2015-03-25"> <obsolete> Deprecated as of 03/2015. </obsolete> @@ -67781,7 +68825,8 @@ </summary> </histogram> -<histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket"> +<histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -67792,7 +68837,8 @@ </summary> </histogram> -<histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket"> +<histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -67803,7 +68849,8 @@ </summary> </histogram> -<histogram name="Net.SocketInitErrorCodes" enum="NetErrorCodes"> +<histogram name="Net.SocketInitErrorCodes" enum="NetErrorCodes" + expires_after="2015-03-25"> <obsolete> Deprecated as of 03/2015. </obsolete> @@ -67814,7 +68861,8 @@ </summary> </histogram> -<histogram name="Net.SocketReceiveBufferUnchangeable" units="Bytes"> +<histogram name="Net.SocketReceiveBufferUnchangeable" units="Bytes" + expires_after="2014-04-09"> <obsolete> Replaced by Net.SocketUnchangeableReceiveBuffer 3/31/2014. </obsolete> @@ -67824,7 +68872,7 @@ </summary> </histogram> -<histogram name="Net.SocketRequestTime"> +<histogram name="Net.SocketRequestTime" expires_after="2015-03-25"> <obsolete> Deprecated as of 03/2015. </obsolete> @@ -67835,7 +68883,8 @@ </summary> </histogram> -<histogram name="Net.SocketStream.ConnectionEstablish" units="ms"> +<histogram name="Net.SocketStream.ConnectionEstablish" units="ms" + expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67844,7 +68893,8 @@ <summary>The time from the connection start to connection establish.</summary> </histogram> -<histogram name="Net.SocketStream.ConnectionLatency" units="ms"> +<histogram name="Net.SocketStream.ConnectionLatency" units="ms" + expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67854,7 +68904,7 @@ </histogram> <histogram name="Net.SocketStream.ConnectionType" - enum="SocketStreamConnectionType"> + enum="SocketStreamConnectionType" expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67865,7 +68915,8 @@ </summary> </histogram> -<histogram name="Net.SocketStream.Duration" units="ms"> +<histogram name="Net.SocketStream.Duration" units="ms" + expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. Replaced by Net.WebSocket.Duration. @@ -67875,7 +68926,8 @@ <summary>The time a socket stream was open.</summary> </histogram> -<histogram name="Net.SocketStream.ProtocolType" enum="SocketStreamProtocolType"> +<histogram name="Net.SocketStream.ProtocolType" enum="SocketStreamProtocolType" + expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67886,7 +68938,8 @@ </summary> </histogram> -<histogram name="Net.SocketStream.ReceivedBytes" units="bytes"> +<histogram name="Net.SocketStream.ReceivedBytes" units="bytes" + expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67895,7 +68948,7 @@ <summary>Number of bytes on a socket stream.</summary> </histogram> -<histogram name="Net.SocketStream.ReceivedCounts"> +<histogram name="Net.SocketStream.ReceivedCounts" expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67904,7 +68957,8 @@ <summary>Number of reads on a socket stream.</summary> </histogram> -<histogram name="Net.SocketStream.SentBytes" units="bytes"> +<histogram name="Net.SocketStream.SentBytes" units="bytes" + expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67913,7 +68967,7 @@ <summary>Number of bytes on a socket stream.</summary> </histogram> -<histogram name="Net.SocketStream.SentCounts"> +<histogram name="Net.SocketStream.SentCounts" expires_after="2014-11-05"> <obsolete> Deprecated 2014-10-28. No longer generated. No direct replacement. </obsolete> @@ -67922,7 +68976,8 @@ <summary>Number of Write on a socket stream.</summary> </histogram> -<histogram name="Net.SocketType" enum="HttpSocketType"> +<histogram name="Net.SocketType" enum="HttpSocketType" + expires_after="2015-03-25"> <obsolete> Deprecated as of 03/2015. </obsolete> @@ -67948,7 +69003,8 @@ </summary> </histogram> -<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_ReusedSocket"> +<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_ReusedSocket" + expires_after="2013-04-09"> <obsolete> see SocketIdleTimeBeforeNextUse_ReusedSocket_SOCK </obsolete> @@ -67958,7 +69014,8 @@ </summary> </histogram> -<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_UnusedSocket"> +<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_UnusedSocket" + expires_after="2013-04-09"> <obsolete> see SocketIdleTimeBeforeNextUse_UnusedSocket_SOCK </obsolete> @@ -67966,7 +69023,8 @@ <summary>The time an unused SOCKS socket sat idle before being used.</summary> </histogram> -<histogram name="Net.SOCKSSocketRequestTime" units="ms"> +<histogram name="Net.SOCKSSocketRequestTime" units="ms" + expires_after="2013-04-09"> <obsolete> see SocketRequestTime_SOCK </obsolete> @@ -67977,7 +69035,7 @@ </summary> </histogram> -<histogram name="Net.SocksSocketRequestTime"> +<histogram name="Net.SocksSocketRequestTime" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -67985,7 +69043,8 @@ <summary>Time it takes to request a new (unused) SOCKS proxy socket.</summary> </histogram> -<histogram name="Net.SOCKSSocketType" enum="HttpSocketType"> +<histogram name="Net.SOCKSSocketType" enum="HttpSocketType" + expires_after="2013-04-09"> <obsolete> see SocketType_SOCK </obsolete> @@ -67995,7 +69054,8 @@ </summary> </histogram> -<histogram name="Net.SpdyConnectionLatency" units="ms"> +<histogram name="Net.SpdyConnectionLatency" units="ms" + expires_after="2014-10-22"> <obsolete> Replaced by Net.SpdyConnectionLatency_2 on 2014-10-21. </obsolete> @@ -68003,7 +69063,8 @@ <summary>Time from when the Connect() starts until it completes.</summary> </histogram> -<histogram name="Net.SpdyConnectionLatency_2" units="ms"> +<histogram name="Net.SpdyConnectionLatency_2" units="ms" + expires_after="2018-02-21"> <obsolete> Removed 2018-02. </obsolete> @@ -68021,7 +69082,7 @@ </histogram> <histogram name="Net.SpdyFrameStreamFlowControlState" - enum="SpdyFrameFlowControlState"> + enum="SpdyFrameFlowControlState" expires_after="2016-01-19"> <obsolete> The last protocol which would trigger this was deprecated in 2014 November. This histogram is deprecated in 2016 January. @@ -68048,7 +69109,8 @@ </summary> </histogram> -<histogram name="Net.SpdyHpackEncodedCharacterFrequency" units="ASCII codes"> +<histogram name="Net.SpdyHpackEncodedCharacterFrequency" units="ASCII codes" + expires_after="2015-03-26"> <obsolete> Obsolete as HTTP/2 standard is finalized. </obsolete> @@ -68077,7 +69139,7 @@ <summary>The RTT for SPDY's PING.</summary> </histogram> -<histogram name="Net.SpdyPriorityCount"> +<histogram name="Net.SpdyPriorityCount" expires_after="2016-05-27"> <obsolete> Removed 2016-05-26. </obsolete> @@ -68113,7 +69175,8 @@ <summary>The number of bytes sent per stream.</summary> </histogram> -<histogram name="Net.SpdySession.BytesRead.EOF" units="bytes"> +<histogram name="Net.SpdySession.BytesRead.EOF" units="bytes" + expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68124,7 +69187,8 @@ </summary> </histogram> -<histogram name="Net.SpdySession.BytesRead.OtherErrors" units="bytes"> +<histogram name="Net.SpdySession.BytesRead.OtherErrors" units="bytes" + expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68172,7 +69236,7 @@ </histogram> <histogram name="Net.SpdySessionErrorDetails" enum="SpdyProtocolErrorDetails" - units="count"> + units="count" expires_after="2013-04-19"> <obsolete> Replaced by SpdySessionErrorDetails2 on 2013-04-19. </obsolete> @@ -68192,7 +69256,7 @@ </histogram> <histogram name="Net.SpdySessionErrorDetails_Google" - enum="SpdyProtocolErrorDetails" units="count"> + enum="SpdyProtocolErrorDetails" units="count" expires_after="2013-04-19"> <obsolete> Replaced by SpdySessionErrorDetails_Google2 on 2013-04-19. </obsolete> @@ -68231,7 +69295,7 @@ </histogram> <histogram name="Net.SpdySessions_DataReductionProxy" - enum="BooleanDataReductionProxy"> + enum="BooleanDataReductionProxy" expires_after="2014-09-22"> <obsolete> Deprecated 7/21/2014. No longer tracked. </obsolete> @@ -68245,7 +69309,7 @@ </histogram> <histogram name="Net.SpdySessionSocketNotConnectedGetLocalAddress" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68256,7 +69320,7 @@ </histogram> <histogram name="Net.SpdySessionSocketNotConnectedGetPeerAddress" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68266,7 +69330,7 @@ </summary> </histogram> -<histogram name="Net.SpdySessionsWithStalls"> +<histogram name="Net.SpdySessionsWithStalls" expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68274,7 +69338,8 @@ <summary>The count of SPDY Sessions with or without stalls.</summary> </histogram> -<histogram name="Net.SpdySettingsCwnd" units="packets"> +<histogram name="Net.SpdySettingsCwnd" units="packets" + expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68284,7 +69349,8 @@ </summary> </histogram> -<histogram name="Net.SpdySettingsCwndSent" units="packets"> +<histogram name="Net.SpdySettingsCwndSent" units="packets" + expires_after="2016-07-14"> <obsolete> Deprecated 2016 July with removal of SPDY/3.1. </obsolete> @@ -68295,7 +69361,7 @@ </histogram> <histogram name="Net.SpdySettingsReceived" enum="SpdySettingsReceived" - units="%"> + units="%" expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68305,7 +69371,8 @@ </summary> </histogram> -<histogram name="Net.SpdySettingsRetransRate" units="%"> +<histogram name="Net.SpdySettingsRetransRate" units="%" + expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68315,7 +69382,7 @@ </summary> </histogram> -<histogram name="Net.SpdySettingsRTT" units="ms"> +<histogram name="Net.SpdySettingsRTT" units="ms" expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68323,7 +69390,8 @@ <summary>The RTT received at the end of a SpdySession.</summary> </histogram> -<histogram name="Net.SpdySettingsSent" enum="SpdySettingsSent" units="%"> +<histogram name="Net.SpdySettingsSent" enum="SpdySettingsSent" units="%" + expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68363,7 +69431,7 @@ <summary>The number of push streams received over a single session.</summary> </histogram> -<histogram name="Net.SpdyStreamStallsPerSession"> +<histogram name="Net.SpdyStreamStallsPerSession" expires_after="2016-11-10"> <obsolete> Removed on 2016-10-10. </obsolete> @@ -68387,7 +69455,8 @@ </summary> </histogram> -<histogram name="Net.SpdySynStreamCompressionPercentage" units="%"> +<histogram name="Net.SpdySynStreamCompressionPercentage" units="%" + expires_after="2016-11-29"> <obsolete> Deprecated on 2016-11-28, because SPDY/3 and, accordingly, SYN_STREAM frames are no longer used. Compression values are now calculated slightly @@ -68399,7 +69468,8 @@ </summary> </histogram> -<histogram name="Net.SpdyVersion" enum="ProtocolVersion"> +<histogram name="Net.SpdyVersion" enum="ProtocolVersion" + expires_after="2014-09-16"> <obsolete> Deprecated on 2014-09-11, because the uploaded values were changing as protocols were removed, therefore statistics couldn't be combined across @@ -68411,7 +69481,8 @@ </summary> </histogram> -<histogram name="Net.SpdyVersion2" enum="SpdyProtocolVersion"> +<histogram name="Net.SpdyVersion2" enum="SpdyProtocolVersion" + expires_after="2016-02-02"> <obsolete> Deprecated on 2016-02-01, because the incorrect bucket count caused data corruption. Replaced by Net.SpdyVersion3. @@ -68423,7 +69494,8 @@ </summary> </histogram> -<histogram name="Net.SpdyVersion3" enum="SpdyProtocolVersion"> +<histogram name="Net.SpdyVersion3" enum="SpdyProtocolVersion" + expires_after="2016-07-14"> <obsolete> Deprecated 2016 July with removal of SPDY/3.1. </obsolete> @@ -68434,7 +69506,8 @@ </summary> </histogram> -<histogram name="Net.SSL_AuthRootConsistency" enum="SSLAuthRootConsistency"> +<histogram name="Net.SSL_AuthRootConsistency" enum="SSLAuthRootConsistency" + expires_after="2018-01-23"> <obsolete> Deprecated 2018-01 with the transition to a unified root list with OS fallback. @@ -68470,7 +69543,7 @@ </histogram> <histogram name="Net.SSL_Connection_Error_FastRadioPadding" - enum="NetErrorCodes"> + enum="NetErrorCodes" expires_after="2015-07-21"> <obsolete> Removed 7/21/2015. No longer tracked. </obsolete> @@ -68481,7 +69554,8 @@ </summary> </histogram> -<histogram name="Net.SSL_Connection_Error_Google" enum="NetErrorCodes"> +<histogram name="Net.SSL_Connection_Error_Google" enum="NetErrorCodes" + expires_after="2018-03-08"> <obsolete> Removed 2018-03-07. No longer tracked. </obsolete> @@ -68500,7 +69574,8 @@ </summary> </histogram> -<histogram name="Net.SSL_Connection_Latency" units="ms"> +<histogram name="Net.SSL_Connection_Latency" units="ms" + expires_after="2014-10-22"> <obsolete> Replaced by Net.SSL_Connection_Latency_2 on 2014-10-21. </obsolete> @@ -68515,7 +69590,8 @@ <summary>Time from when the Connect() starts until it completes.</summary> </histogram> -<histogram name="Net.SSL_Connection_Latency_DataReductionProxy" units="ms"> +<histogram name="Net.SSL_Connection_Latency_DataReductionProxy" units="ms" + expires_after="2014-09-22"> <obsolete> Deprecated 7/21/2014. No longer tracked. </obsolete> @@ -68534,7 +69610,8 @@ </summary> </histogram> -<histogram name="Net.SSL_Connection_Latency_Google" units="ms"> +<histogram name="Net.SSL_Connection_Latency_Google" units="ms" + expires_after="2014-10-22"> <obsolete> Replaced by Net.SSL_Connection_Latency_Google2 on 2014-10-21. </obsolete> @@ -68545,7 +69622,8 @@ </summary> </histogram> -<histogram name="Net.SSL_Connection_Latency_Google2" units="ms"> +<histogram name="Net.SSL_Connection_Latency_Google2" units="ms" + expires_after="2018-03-08"> <obsolete> Removed 2018-03-07. No longer tracked. </obsolete> @@ -68556,7 +69634,8 @@ </summary> </histogram> -<histogram name="Net.SSL_Connection_Latency_Google_Full_Handshake" units="ms"> +<histogram name="Net.SSL_Connection_Latency_Google_Full_Handshake" units="ms" + expires_after="2018-03-08"> <obsolete> Removed 2018-03-07. No longer tracked. </obsolete> @@ -68568,7 +69647,7 @@ </histogram> <histogram name="Net.SSL_Connection_Latency_Google_No_Revocation_Checking" - units="ms"> + units="ms" expires_after="2015-11-11"> <obsolete> Removed in 2011. </obsolete> @@ -68580,7 +69659,8 @@ </summary> </histogram> -<histogram name="Net.SSL_Connection_Latency_Google_Resume_Handshake" units="ms"> +<histogram name="Net.SSL_Connection_Latency_Google_Resume_Handshake" units="ms" + expires_after="2018-03-08"> <obsolete> Removed 2018-03-07. No longer tracked. </obsolete> @@ -68592,7 +69672,7 @@ </histogram> <histogram name="Net.SSL_Connection_Latency_Google_Revocation_Checking" - units="ms"> + units="ms" expires_after="2015-11-11"> <obsolete> Removed in 2011. </obsolete> @@ -68618,7 +69698,8 @@ </summary> </histogram> -<histogram name="Net.SSL_Connection_Latency_PQPadding" units="ms"> +<histogram name="Net.SSL_Connection_Latency_PQPadding" units="ms" + expires_after="2018-08-15"> <obsolete> Deprecated as of 2018-07-06. </obsolete> @@ -68646,7 +69727,7 @@ </histogram> <histogram name="Net.SSL_Connection_PostQuantum_Negotiated" - enum="BooleanSupported"> + enum="BooleanSupported" expires_after="2016-12-07"> <obsolete> Deprecated as of 2016-12-01. </obsolete> @@ -68659,7 +69740,7 @@ </histogram> <histogram name="Net.SSL_EVCertificateCTCompliance" - enum="CTRequirementCompliance"> + enum="CTRequirementCompliance" expires_after="2016-02-25"> <obsolete> Deprecated as of 01/2016. </obsolete> @@ -68678,7 +69759,8 @@ </summary> </histogram> -<histogram name="Net.SSL_EVCertificateInWhitelist" enum="Boolean"> +<histogram name="Net.SSL_EVCertificateInWhitelist" enum="Boolean" + expires_after="2017-06-14"> <obsolete> Removed 06/2017 with the deprecation of the EV certificate whitelist after all certificates expired. @@ -68692,7 +69774,8 @@ </summary> </histogram> -<histogram name="Net.SSL_EVCTCompliance" enum="EVCTCompliance"> +<histogram name="Net.SSL_EVCTCompliance" enum="EVCTCompliance" + expires_after="2017-06-14"> <obsolete> Removed 06/2017 with the deprecation of distinct EV and !EV CT policies. </obsolete> @@ -68710,7 +69793,7 @@ </histogram> <histogram name="Net.SSL_EVWhitelistValidityForNonCompliantCert" - enum="EVWhitelistStatus"> + enum="EVWhitelistStatus" expires_after="2017-06-14"> <obsolete> Removed 06/2017 with the deprecation of the EV certificate whitelist after all certificates expired. @@ -68727,7 +69810,7 @@ </summary> </histogram> -<histogram name="Net.SSL_KeyExchange.DHE"> +<histogram name="Net.SSL_KeyExchange.DHE" expires_after="2016-09-20"> <obsolete> Removed September 2016. </obsolete> @@ -68753,7 +69836,7 @@ </summary> </histogram> -<histogram name="Net.SSL_KeyExchange.RSA"> +<histogram name="Net.SSL_KeyExchange.RSA" expires_after="2016-06-02"> <obsolete> Removed May 2016. </obsolete> @@ -68767,7 +69850,7 @@ </summary> </histogram> -<histogram name="Net.SSLCertBlacklisted"> +<histogram name="Net.SSLCertBlacklisted" expires_after="2016-01-23"> <obsolete> Removed on 01/2016. Only ever measured blacklisted Comodo serials, not any of the other blacklisted certificates and keys. @@ -68791,7 +69874,8 @@ <summary>Time to complete a certificate verification (error case).</summary> </histogram> -<histogram name="Net.SSLDraftDowngradeTLS13Experiment" enum="BooleanDowngrade"> +<histogram name="Net.SSLDraftDowngradeTLS13Experiment" enum="BooleanDowngrade" + expires_after="2018-08-17"> <obsolete> Removed in 08/2017. </obsolete> @@ -68807,7 +69891,8 @@ </summary> </histogram> -<histogram name="Net.SSLFallbackErrorCode" enum="NetErrorCodes"> +<histogram name="Net.SSLFallbackErrorCode" enum="NetErrorCodes" + expires_after="2016-06-24"> <obsolete> Removed June 2016. </obsolete> @@ -68818,7 +69903,8 @@ </summary> </histogram> -<histogram name="Net.SSLFallbackFailureState" enum="SSLFailureState"> +<histogram name="Net.SSLFallbackFailureState" enum="SSLFailureState" + expires_after="2016-06-24"> <obsolete> Removed June 2016. </obsolete> @@ -68829,7 +69915,8 @@ </summary> </histogram> -<histogram name="Net.SSLHostInfoDNSLookup" units="ms"> +<histogram name="Net.SSLHostInfoDNSLookup" units="ms" + expires_after="2015-11-11"> <obsolete> Removed in 2011. </obsolete> @@ -68837,7 +69924,8 @@ <summary>Time to complete a DNS lookup for a DNS CAA record.</summary> </histogram> -<histogram name="Net.SSLHostInfoDNSLookupDelayMs" units="ms"> +<histogram name="Net.SSLHostInfoDNSLookupDelayMs" units="ms" + expires_after="2015-11-11"> <obsolete> Removed in 2011. </obsolete> @@ -68848,7 +69936,8 @@ </summary> </histogram> -<histogram name="Net.SSLHostInfoVerificationTimeMs" units="ms"> +<histogram name="Net.SSLHostInfoVerificationTimeMs" units="ms" + expires_after="2015-11-11"> <obsolete> Removed in 2012. </obsolete> @@ -68865,7 +69954,8 @@ </summary> </histogram> -<histogram name="Net.SSLProtocolErrorCipher" enum="SSLCipherSuite"> +<histogram name="Net.SSLProtocolErrorCipher" enum="SSLCipherSuite" + expires_after="2016-03-18"> <obsolete> Removed in March 2016. </obsolete> @@ -68877,7 +69967,8 @@ </summary> </histogram> -<histogram name="Net.SSLProtocolErrorReason" enum="BoringSSLReasonCode"> +<histogram name="Net.SSLProtocolErrorReason" enum="BoringSSLReasonCode" + expires_after="2016-03-18"> <obsolete> Removed in March 2016. </obsolete> @@ -68890,7 +69981,8 @@ </summary> </histogram> -<histogram name="Net.SSLProtocolNegotiation" enum="SSLProtocolNegotiation"> +<histogram name="Net.SSLProtocolNegotiation" enum="SSLProtocolNegotiation" + expires_after="2016-09-14"> <obsolete> Superseded by Net.SSLNegotiatedAlpnProtocol in 2016 August. </obsolete> @@ -68902,7 +69994,8 @@ </summary> </histogram> -<histogram name="Net.SSLRecordSizeRead" units="bytes"> +<histogram name="Net.SSLRecordSizeRead" units="bytes" + expires_after="2018-01-24"> <obsolete> Removed in January 2018. </obsolete> @@ -68938,7 +70031,8 @@ </summary> </histogram> -<histogram name="Net.SSLServerKeyExchangeHash" enum="SSLHashAlgorithm"> +<histogram name="Net.SSLServerKeyExchangeHash" enum="SSLHashAlgorithm" + expires_after="2016-07-07"> <obsolete> Replaced by Net.SSLSignatureAlgorithm. </obsolete> @@ -68949,7 +70043,8 @@ </summary> </histogram> -<histogram name="Net.SSLSessionConcurrentLookupCount"> +<histogram name="Net.SSLSessionConcurrentLookupCount" + expires_after="2017-10-05"> <obsolete> Removed on 2017-10-02. </obsolete> @@ -68961,7 +70056,8 @@ </summary> </histogram> -<histogram name="Net.SSLSessionVersionMatch" enum="BooleanMatched"> +<histogram name="Net.SSLSessionVersionMatch" enum="BooleanMatched" + expires_after="2015-11-11"> <obsolete> Removed on 2015-11-10. </obsolete> @@ -69050,7 +70146,7 @@ </histogram> <histogram name="Net.SSLv3FallbackToRenegoPatchedServer" - enum="TLSRenegotiationPatched"> + enum="TLSRenegotiationPatched" expires_after="2014-08-25"> <obsolete> Removed on 2014-08-20. </obsolete> @@ -69061,7 +70157,7 @@ </summary> </histogram> -<histogram name="Net.SSLVerificationMerged"> +<histogram name="Net.SSLVerificationMerged" expires_after="2015-11-11"> <obsolete> Removed in 2012. </obsolete> @@ -69069,7 +70165,8 @@ <summary>Was a speculative certificate verification used?</summary> </histogram> -<histogram name="Net.SSLVerificationMergedMsSaved" units="ms"> +<histogram name="Net.SSLVerificationMergedMsSaved" units="ms" + expires_after="2015-11-11"> <obsolete> Removed in 2012. </obsolete> @@ -69088,7 +70185,7 @@ </histogram> <histogram name="Net.SSLVersionInterferenceDetails_TLS13Experiment" - enum="SSLVersionInterferenceDetails"> + enum="SSLVersionInterferenceDetails" expires_after="2018-04-06"> <obsolete> Removed April 2018. </obsolete> @@ -69118,7 +70215,8 @@ </summary> </histogram> -<histogram name="Net.SuccessfulResolutionWithValidDNSName" enum="Boolean"> +<histogram name="Net.SuccessfulResolutionWithValidDNSName" enum="Boolean" + expires_after="2017-07-20"> <obsolete> Removed in 07/2017. </obsolete> @@ -69131,7 +70229,7 @@ </summary> </histogram> -<histogram name="Net.TCP_Connection_Idle_Sockets"> +<histogram name="Net.TCP_Connection_Idle_Sockets" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -69183,7 +70281,8 @@ </summary> </histogram> -<histogram name="Net.TcpFastOpenSocketConnection" enum="TcpSocketStatus"> +<histogram name="Net.TcpFastOpenSocketConnection" enum="TcpSocketStatus" + expires_after="2019-02-13"> <obsolete> Deprecated 02/2019, as fast open support has been removed. </obsolete> @@ -69194,7 +70293,8 @@ </summary> </histogram> -<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_ReusedSocket"> +<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_ReusedSocket" + expires_after="2013-04-09"> <obsolete> see SocketIdleTimeBeforeNextUse_ReusedSocket_TCPforSOCKS </obsolete> @@ -69205,7 +70305,8 @@ </summary> </histogram> -<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_UnusedSocket"> +<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_UnusedSocket" + expires_after="2013-04-09"> <obsolete> see SocketIdleTimeBeforeNextUse_UnusedSocket_TCPforSOCKS </obsolete> @@ -69216,7 +70317,8 @@ </summary> </histogram> -<histogram name="Net.TCPForSOCKSSocketRequestTime" units="ms"> +<histogram name="Net.TCPForSOCKSSocketRequestTime" units="ms" + expires_after="2013-04-09"> <obsolete> see SocketRequestTime_TCPforSOCKS </obsolete> @@ -69227,7 +70329,8 @@ </summary> </histogram> -<histogram name="Net.TCPForSOCKSSocketType" enum="HttpSocketType"> +<histogram name="Net.TCPForSOCKSSocketType" enum="HttpSocketType" + expires_after="2013-04-09"> <obsolete> see SocketType_TCPforSOCKS </obsolete> @@ -69246,7 +70349,8 @@ </summary> </histogram> -<histogram name="Net.TCPSocketType" enum="HttpSocketType"> +<histogram name="Net.TCPSocketType" enum="HttpSocketType" + expires_after="2013-04-09"> <obsolete> Was only used for HTTP[S] connections, renamed to Net.HTTPSocketType. </obsolete> @@ -69254,7 +70358,8 @@ <summary>The counts of the type of TCP socket returned.</summary> </histogram> -<histogram name="Net.ThreadHopResourceThrottleTime" units="ms"> +<histogram name="Net.ThreadHopResourceThrottleTime" units="ms" + expires_after="2016-08-26"> <obsolete> Experiment complete, code removed. </obsolete> @@ -69267,7 +70372,8 @@ </summary> </histogram> -<histogram name="Net.TokenBinding.HeaderCreationTime" units="ms"> +<histogram name="Net.TokenBinding.HeaderCreationTime" units="ms" + expires_after="2019-03-14"> <obsolete> Token Binding was removed in Q4 2018 and this histogram was removed in 3/2019. @@ -69276,7 +70382,8 @@ <summary>Time spent creating a Token-Binding header.</summary> </histogram> -<histogram name="Net.TokenBinding.KeyMatch" enum="TokenBinding.KeyMatch"> +<histogram name="Net.TokenBinding.KeyMatch" enum="TokenBinding.KeyMatch" + expires_after="2019-03-14"> <obsolete> Token Binding was removed in Q4 2018 and this histogram was removed in 3/2019. @@ -69290,7 +70397,7 @@ </histogram> <histogram name="Net.TokenBinding.StoreEphemerality" - enum="TokenBinding.StoreEphemerality"> + enum="TokenBinding.StoreEphemerality" expires_after="2019-03-14"> <obsolete> Token Binding was removed in Q4 2018 and this histogram was removed in 3/2019. @@ -69303,7 +70410,8 @@ </summary> </histogram> -<histogram name="Net.TokenBinding.Support" enum="TokenBinding.Support"> +<histogram name="Net.TokenBinding.Support" enum="TokenBinding.Support" + expires_after="2019-03-14"> <obsolete> Token Binding was removed in Q4 2018 and this histogram was removed in 3/2019. @@ -69316,7 +70424,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Bandwidth" units="KB/s"> +<histogram name="Net.Transaction_Bandwidth" units="KB/s" + expires_after="2014-11-01"> <obsolete> Discontinued as of 4/12/09 </obsolete> @@ -69328,7 +70437,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Connected" units="ms"> +<histogram name="Net.Transaction_Connected" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -69339,7 +70449,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Connected_New" units="ms"> +<histogram name="Net.Transaction_Connected_New" units="ms" + expires_after="2013-04-09"> <obsolete> Replaced by Net.Transaction_Connected_New_b. </obsolete> @@ -69351,7 +70462,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Connected_New_b" units="ms"> +<histogram name="Net.Transaction_Connected_New_b" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -69362,7 +70474,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Connected_Under_10" units="ms"> +<histogram name="Net.Transaction_Connected_Under_10" units="ms" + expires_after="2013-04-09"> <obsolete> Replaced by Net.Transaction_Connected. </obsolete> @@ -69373,7 +70486,7 @@ </summary> </histogram> -<histogram name="Net.Transaction_Latency" units="ms"> +<histogram name="Net.Transaction_Latency" units="ms" expires_after="2013-04-09"> <obsolete> Replaced by Net.Transaction_Latency_b. </obsolete> @@ -69384,7 +70497,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Latency_b" units="ms"> +<histogram name="Net.Transaction_Latency_b" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -69394,7 +70508,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Latency_Total" units="ms"> +<histogram name="Net.Transaction_Latency_Total" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -69405,7 +70520,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Latency_Total_New_Connection" units="ms"> +<histogram name="Net.Transaction_Latency_Total_New_Connection" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated as of 11/2014. </obsolete> @@ -69418,7 +70534,7 @@ </histogram> <histogram name="Net.Transaction_Latency_Total_New_Connection_Under_10" - units="ms"> + units="ms" expires_after="2013-04-09"> <obsolete> Replaced by Net.Transaction_Latency_Total_New_Connection. </obsolete> @@ -69430,7 +70546,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Latency_Total_Under_10" units="ms"> +<histogram name="Net.Transaction_Latency_Total_Under_10" units="ms" + expires_after="2013-04-09"> <obsolete> Replaced by Net.Transaction_Latency_Total. </obsolete> @@ -69441,7 +70558,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Latency_Under_10" units="ms"> +<histogram name="Net.Transaction_Latency_Under_10" units="ms" + expires_after="2013-04-09"> <obsolete> Replaced by Net.Transaction_Latency. </obsolete> @@ -69452,7 +70570,8 @@ </summary> </histogram> -<histogram name="Net.Transaction_Latency_WinHTTP" units="ms"> +<histogram name="Net.Transaction_Latency_WinHTTP" units="ms" + expires_after="2014-11-01"> <obsolete> Deprecated a long time ago. </obsolete> @@ -69463,7 +70582,8 @@ </summary> </histogram> -<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_ReusedSocket"> +<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_ReusedSocket" + expires_after="2013-04-09"> <obsolete/> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <summary> @@ -69472,7 +70592,8 @@ </summary> </histogram> -<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_UnusedSocket"> +<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_UnusedSocket" + expires_after="2013-04-09"> <obsolete/> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <summary> @@ -69481,7 +70602,8 @@ </summary> </histogram> -<histogram name="Net.TransportSocketRequestTime" units="ms"> +<histogram name="Net.TransportSocketRequestTime" units="ms" + expires_after="2013-04-09"> <obsolete/> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <summary> @@ -69490,7 +70612,8 @@ </summary> </histogram> -<histogram name="Net.TransportSocketType" enum="HttpSocketType"> +<histogram name="Net.TransportSocketType" enum="HttpSocketType" + expires_after="2013-04-09"> <obsolete/> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <summary> @@ -69499,7 +70622,8 @@ </summary> </histogram> -<histogram name="Net.UdpSocketBindErrorFromPosix" units="PosixError"> +<histogram name="Net.UdpSocketBindErrorFromPosix" units="PosixError" + expires_after="2017-10-18"> <obsolete> Deprecated as of 10/2017. </obsolete> @@ -69507,7 +70631,8 @@ <summary>Posix error code from call to bind() UDP socket.</summary> </histogram> -<histogram name="Net.UdpSocketBindErrorFromWinOS" units="WinError"> +<histogram name="Net.UdpSocketBindErrorFromWinOS" units="WinError" + expires_after="2017-10-18"> <obsolete> Deprecated as of 10/2017. </obsolete> @@ -69536,7 +70661,8 @@ </summary> </histogram> -<histogram name="Net.URLRequest_SetReferrer_IsEmptyOrValid" enum="Boolean"> +<histogram name="Net.URLRequest_SetReferrer_IsEmptyOrValid" enum="Boolean" + expires_after="2014-06-25"> <obsolete> Deprecated 6/23/2014. No longer tracked. </obsolete> @@ -69544,7 +70670,8 @@ <summary>True if a URLRequest's referrer is empty or valid when set.</summary> </histogram> -<histogram name="Net.URLRequestContext.OutstandingRequests" units="count"> +<histogram name="Net.URLRequestContext.OutstandingRequests" units="count" + expires_after="2018-01-02"> <obsolete> Deprecated 1/1/2018. No longer tracked. </obsolete> @@ -69555,7 +70682,7 @@ </histogram> <histogram name="Net.URLRequestContext.OutstandingRequests.Type" - enum="URLRequestAnnotationType"> + enum="URLRequestAnnotationType" expires_after="2018-01-02"> <obsolete> Deprecated 1/1/2018. No longer tracked. </obsolete> @@ -69566,7 +70693,7 @@ </summary> </histogram> -<histogram name="Net.ValidDNSName" enum="Boolean"> +<histogram name="Net.ValidDNSName" enum="Boolean" expires_after="2017-07-19"> <obsolete> Deprecated 07/2017, not necessary to determine deprecation for invalid DNS names. @@ -69630,7 +70757,7 @@ </histogram> <histogram name="Net.WebSocket.HandshakeResult" - enum="WebSocketNewHandshakeResult"> + enum="WebSocketNewHandshakeResult" expires_after="2018-03-13"> <obsolete> Deprecated 03/2018, replaced by Net.WebSocket.HandshakeResult2. </obsolete> @@ -69706,7 +70833,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.0.NetworkError" enum="NetErrorCodes"> +<histogram name="NetConnectivity.Pipeline.0.NetworkError" enum="NetErrorCodes" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69716,7 +70844,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.0.ResponseCode"> +<histogram name="NetConnectivity.Pipeline.0.ResponseCode" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69726,7 +70855,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.0.Status" enum="HttpPipelineStatus"> +<histogram name="NetConnectivity.Pipeline.0.Status" enum="HttpPipelineStatus" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69734,7 +70864,8 @@ <summary>The result of the first pipeline connectivity request.</summary> </histogram> -<histogram name="NetConnectivity.Pipeline.1.NetworkError" enum="NetErrorCodes"> +<histogram name="NetConnectivity.Pipeline.1.NetworkError" enum="NetErrorCodes" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69744,7 +70875,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.1.ResponseCode"> +<histogram name="NetConnectivity.Pipeline.1.ResponseCode" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69755,7 +70887,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.1.Status" enum="HttpPipelineStatus"> +<histogram name="NetConnectivity.Pipeline.1.Status" enum="HttpPipelineStatus" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69763,7 +70896,8 @@ <summary>The result of the second pipeline connectivity request.</summary> </histogram> -<histogram name="NetConnectivity.Pipeline.2.NetworkError" enum="NetErrorCodes"> +<histogram name="NetConnectivity.Pipeline.2.NetworkError" enum="NetErrorCodes" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69773,7 +70907,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.2.ResponseCode"> +<histogram name="NetConnectivity.Pipeline.2.ResponseCode" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69783,7 +70918,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.2.Status" enum="HttpPipelineStatus"> +<histogram name="NetConnectivity.Pipeline.2.Status" enum="HttpPipelineStatus" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69791,7 +70927,8 @@ <summary>The result of the third pipeline connectivity request.</summary> </histogram> -<histogram name="NetConnectivity.Pipeline.3.NetworkError" enum="NetErrorCodes"> +<histogram name="NetConnectivity.Pipeline.3.NetworkError" enum="NetErrorCodes" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69801,7 +70938,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.3.ResponseCode"> +<histogram name="NetConnectivity.Pipeline.3.ResponseCode" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69812,7 +70950,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.3.Status" enum="HttpPipelineStatus"> +<histogram name="NetConnectivity.Pipeline.3.Status" enum="HttpPipelineStatus" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69820,7 +70959,8 @@ <summary>The result of the fourth pipeline connectivity request.</summary> </histogram> -<histogram name="NetConnectivity.Pipeline.4.NetworkError" enum="NetErrorCodes"> +<histogram name="NetConnectivity.Pipeline.4.NetworkError" enum="NetErrorCodes" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69830,7 +70970,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.4.ResponseCode"> +<histogram name="NetConnectivity.Pipeline.4.ResponseCode" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69840,7 +70981,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.4.Status" enum="HttpPipelineStatus"> +<histogram name="NetConnectivity.Pipeline.4.Status" enum="HttpPipelineStatus" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69848,7 +70990,8 @@ <summary>The result of the fifth pipeline connectivity request.</summary> </histogram> -<histogram name="NetConnectivity.Pipeline.5.NetworkError" enum="NetErrorCodes"> +<histogram name="NetConnectivity.Pipeline.5.NetworkError" enum="NetErrorCodes" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69858,7 +71001,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.5.ResponseCode"> +<histogram name="NetConnectivity.Pipeline.5.ResponseCode" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69868,7 +71012,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.5.Status" enum="HttpPipelineStatus"> +<histogram name="NetConnectivity.Pipeline.5.Status" enum="HttpPipelineStatus" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69876,7 +71021,8 @@ <summary>The result of the stats pipeline connectivity request.</summary> </histogram> -<histogram name="NetConnectivity.Pipeline.AllHTTP11" enum="BooleanSuccess"> +<histogram name="NetConnectivity.Pipeline.AllHTTP11" enum="BooleanSuccess" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69886,7 +71032,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.CanarySuccess" enum="BooleanSuccess"> +<histogram name="NetConnectivity.Pipeline.CanarySuccess" enum="BooleanSuccess" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69898,7 +71045,7 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.Depth"> +<histogram name="NetConnectivity.Pipeline.Depth" expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69908,7 +71055,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Pipeline.Success" enum="BooleanSuccess"> +<histogram name="NetConnectivity.Pipeline.Success" enum="BooleanSuccess" + expires_after="2014-05-27"> <obsolete> Deprecated 05/2014, related field trial already long expired. </obsolete> @@ -69916,7 +71064,7 @@ <summary>True if the entire pipeline connectivity trial passed.</summary> </histogram> -<histogram name="NetConnectivity.Sent21"> +<histogram name="NetConnectivity.Sent21" expires_after="2013-04-19"> <obsolete> Deprecated 6/25/2012. No longer tracked. </obsolete> @@ -69931,7 +71079,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Sent21.AckReceivedForNthPacket"> +<histogram name="NetConnectivity.Sent21.AckReceivedForNthPacket" + expires_after="2013-04-19"> <obsolete> Deprecated 6/25/2012. No longer tracked. </obsolete> @@ -69945,7 +71094,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.Sent21.GotAnAck" enum="BooleanSuccess"> +<histogram name="NetConnectivity.Sent21.GotAnAck" enum="BooleanSuccess" + expires_after="2013-04-19"> <obsolete> Deprecated 6/25/2012. No longer tracked. </obsolete> @@ -69958,7 +71108,8 @@ </summary> </histogram> -<histogram name="NetConnectivity.TCP.Fail.100B.RTT" units="ms"> +<histogram name="NetConnectivity.TCP.Fail.100B.RTT" units="ms" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -69966,7 +71117,8 @@ <summary>The RTT for echoing 100 bytes of TCP data unsuccessfully.</summary> </histogram> -<histogram name="NetConnectivity.TCP.Fail.1k.RTT" units="ms"> +<histogram name="NetConnectivity.TCP.Fail.1k.RTT" units="ms" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -69975,7 +71127,7 @@ </histogram> <histogram name="NetConnectivity.TCP.Status" - enum="NetConnectivityProtocolStatus"> + enum="NetConnectivityProtocolStatus" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -69983,7 +71135,8 @@ <summary>Status for TCP protocol for echoing</summary> </histogram> -<histogram name="NetConnectivity.TCP.Status.100B" enum="NetConnectivityStatus"> +<histogram name="NetConnectivity.TCP.Status.100B" enum="NetConnectivityStatus" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -69991,7 +71144,8 @@ <summary>Status for echoing 100 bytes of TCP data.</summary> </histogram> -<histogram name="NetConnectivity.TCP.Status.1K" enum="NetConnectivityStatus"> +<histogram name="NetConnectivity.TCP.Status.1K" enum="NetConnectivityStatus" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -69999,7 +71153,8 @@ <summary>Status for echoing 1K bytes of TCP data.</summary> </histogram> -<histogram name="NetConnectivity.TCP.Success" units="ms"> +<histogram name="NetConnectivity.TCP.Success" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70007,7 +71162,8 @@ <summary>The RTT for TCP protocol for echoing</summary> </histogram> -<histogram name="NetConnectivity.TCP.Success.100B.RTT" units="ms"> +<histogram name="NetConnectivity.TCP.Success.100B.RTT" units="ms" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70015,7 +71171,8 @@ <summary>The RTT for echoing 100 bytes of TCP data successfully.</summary> </histogram> -<histogram name="NetConnectivity.TCP.Success.1K.RTT" units="ms"> +<histogram name="NetConnectivity.TCP.Success.1K.RTT" units="ms" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70023,7 +71180,8 @@ <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary> </histogram> -<histogram name="NetConnectivity.UDP.Fail.100B.RTT" units="ms"> +<histogram name="NetConnectivity.UDP.Fail.100B.RTT" units="ms" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70031,7 +71189,8 @@ <summary>The RTT for echoing 100 bytes of UDP data unsuccessfully.</summary> </histogram> -<histogram name="NetConnectivity.UDP.Fail.1k.RTT" units="ms"> +<histogram name="NetConnectivity.UDP.Fail.1k.RTT" units="ms" + expires_after="2013-04-19"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70039,7 +71198,7 @@ <summary>The RTT for echoing 1K bytes of UDP data successfully.</summary> </histogram> -<histogram name="NetConnectivity.UDP.PacketLoss"> +<histogram name="NetConnectivity.UDP.PacketLoss" expires_after="2013-04-26"> <obsolete> Deprecated 6/25/2012. No longer tracked. </obsolete> @@ -70054,7 +71213,7 @@ </summary> </histogram> -<histogram name="NetConnectivity.UDP.PacketLoss6"> +<histogram name="NetConnectivity.UDP.PacketLoss6" expires_after="2013-04-26"> <obsolete> Deprecated 6/25/2012. No longer tracked. </obsolete> @@ -70070,7 +71229,7 @@ </histogram> <histogram name="NetConnectivity.UDP.Status" - enum="NetConnectivityProtocolStatus"> + enum="NetConnectivityProtocolStatus" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70078,7 +71237,8 @@ <summary>Status for UDP protocol for echoing</summary> </histogram> -<histogram name="NetConnectivity.UDP.Status.100B" enum="NetConnectivityStatus"> +<histogram name="NetConnectivity.UDP.Status.100B" enum="NetConnectivityStatus" + expires_after="2013-04-26"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70086,7 +71246,8 @@ <summary>Status for echoing 100 bytes of UDP data.</summary> </histogram> -<histogram name="NetConnectivity.UDP.Status.1K" enum="NetConnectivityStatus"> +<histogram name="NetConnectivity.UDP.Status.1K" enum="NetConnectivityStatus" + expires_after="2013-04-26"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70094,7 +71255,8 @@ <summary>Status for echoing 1K bytes of UDP data.</summary> </histogram> -<histogram name="NetConnectivity.UDP.Success" units="ms"> +<histogram name="NetConnectivity.UDP.Success" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70102,7 +71264,8 @@ <summary>The RTT for UDP protocol for echoing</summary> </histogram> -<histogram name="NetConnectivity.UDP.Success.100B.RTT" units="ms"> +<histogram name="NetConnectivity.UDP.Success.100B.RTT" units="ms" + expires_after="2013-04-26"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70110,7 +71273,8 @@ <summary>The RTT for echoing 100 bytes of UDP data successfully.</summary> </histogram> -<histogram name="NetConnectivity.UDP.Success.1K.RTT" units="ms"> +<histogram name="NetConnectivity.UDP.Success.1K.RTT" units="ms" + expires_after="2013-04-26"> <obsolete> Deprecated 4/2012. No longer tracked. </obsolete> @@ -70118,7 +71282,7 @@ <summary>The RTT for echoing 1k bytes of UDP data successfully.</summary> </histogram> -<histogram name="NetConnectivity2.Send6.PacketsSent"> +<histogram name="NetConnectivity2.Send6.PacketsSent" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70129,7 +71293,7 @@ </summary> </histogram> -<histogram name="NetConnectivity2.Send6.SeriesAcked"> +<histogram name="NetConnectivity2.Send6.SeriesAcked" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70144,7 +71308,7 @@ </summary> </histogram> -<histogram name="NetConnectivity2.Sent21"> +<histogram name="NetConnectivity2.Sent21" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70159,7 +71323,8 @@ </summary> </histogram> -<histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket"> +<histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70172,7 +71337,8 @@ </summary> </histogram> -<histogram name="NetConnectivity2.Sent21.GotAnAck" enum="BooleanSuccess"> +<histogram name="NetConnectivity2.Sent21.GotAnAck" enum="BooleanSuccess" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70185,7 +71351,8 @@ </summary> </histogram> -<histogram name="NetConnectivity2.Sent21.PacketsSent"> +<histogram name="NetConnectivity2.Sent21.PacketsSent" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70196,7 +71363,7 @@ </summary> </histogram> -<histogram name="NetConnectivity3"> +<histogram name="NetConnectivity3" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70208,7 +71375,7 @@ </histogram> <histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.100B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70217,7 +71384,7 @@ </histogram> <histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.1200B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70226,7 +71393,7 @@ </histogram> <histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.500B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70235,7 +71402,7 @@ </histogram> <histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.100B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70244,7 +71411,7 @@ </histogram> <histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.1200B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70253,7 +71420,7 @@ </histogram> <histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.500B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70262,7 +71429,7 @@ </histogram> <histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70270,7 +71437,8 @@ <summary/> </histogram> -<histogram name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT" units="ms"> +<histogram name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70279,7 +71447,7 @@ </histogram> <histogram name="NetConnectivity3.PacedPacket.Sent21.443.100B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70288,7 +71456,7 @@ </histogram> <histogram name="NetConnectivity3.PacedPacket.Sent21.443.1200B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70297,7 +71465,7 @@ </histogram> <histogram name="NetConnectivity3.PacedPacket.Sent21.443.500B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70306,7 +71474,7 @@ </histogram> <histogram name="NetConnectivity3.PacedPacket.Sent21.6121.100B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70315,7 +71483,7 @@ </histogram> <histogram name="NetConnectivity3.PacedPacket.Sent21.6121.1200B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70324,7 +71492,7 @@ </histogram> <histogram name="NetConnectivity3.PacedPacket.Sent21.6121.500B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70333,7 +71501,7 @@ </histogram> <histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70341,7 +71509,8 @@ <summary/> </histogram> -<histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT" units="ms"> +<histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70349,7 +71518,8 @@ <summary/> </histogram> -<histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent"> +<histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent" + expires_after="2013-04-26"> <obsolete> Deprecated 9/2012. No longer tracked. </obsolete> @@ -70361,7 +71531,7 @@ </histogram> <histogram name="NetConnectivity3.StartPacket.Sent21.443.100B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70370,7 +71540,7 @@ </histogram> <histogram name="NetConnectivity3.StartPacket.Sent21.443.1200B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70379,7 +71549,7 @@ </histogram> <histogram name="NetConnectivity3.StartPacket.Sent21.443.500B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70388,7 +71558,7 @@ </histogram> <histogram name="NetConnectivity3.StartPacket.Sent21.6121.100B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70397,7 +71567,7 @@ </histogram> <histogram name="NetConnectivity3.StartPacket.Sent21.6121.1200B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70406,7 +71576,7 @@ </histogram> <histogram name="NetConnectivity3.StartPacket.Sent21.6121.500B.PacketDelay" - units="ms"> + units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70415,7 +71585,7 @@ </histogram> <histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70423,7 +71593,8 @@ <summary/> </histogram> -<histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT" units="ms"> +<histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70431,7 +71602,7 @@ <summary/> </histogram> -<histogram name="NetConnectivity4"> +<histogram name="NetConnectivity4" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70442,7 +71613,7 @@ </summary> </histogram> -<histogram name="NetConnectivity5"> +<histogram name="NetConnectivity5" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70454,7 +71625,7 @@ </histogram> <histogram name="NetConnectivity5.TestFailed.WritePending" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70509,7 +71680,8 @@ <summary>Errors experienced during Gobi device powerup.</summary> </histogram> -<histogram name="Network.Cellular.TimeOnline" units="seconds"> +<histogram name="Network.Cellular.TimeOnline" units="seconds" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70521,7 +71693,8 @@ </summary> </histogram> -<histogram name="Network.Cellular.TimeToConfig" units="ms"> +<histogram name="Network.Cellular.TimeToConfig" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70532,7 +71705,8 @@ </summary> </histogram> -<histogram name="Network.Cellular.TimeToOnline" units="ms"> +<histogram name="Network.Cellular.TimeToOnline" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70543,7 +71717,8 @@ </summary> </histogram> -<histogram name="Network.Cellular.TimeToPortal" units="ms"> +<histogram name="Network.Cellular.TimeToPortal" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70555,7 +71730,7 @@ </histogram> <histogram name="Network.Cellular.UsageRequestStatus" - enum="NetworkCellularUsageRequestStatus"> + enum="NetworkCellularUsageRequestStatus" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70563,7 +71738,8 @@ <summary>Chrome OS cellular usage API request status codes.</summary> </histogram> -<histogram name="Network.Ethernet.TimeOnline" units="seconds"> +<histogram name="Network.Ethernet.TimeOnline" units="seconds" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70575,7 +71751,8 @@ </summary> </histogram> -<histogram name="Network.Ethernet.TimeToConfig" units="ms"> +<histogram name="Network.Ethernet.TimeToConfig" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70587,7 +71764,8 @@ </summary> </histogram> -<histogram name="Network.Ethernet.TimeToOnline" units="ms"> +<histogram name="Network.Ethernet.TimeToOnline" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70598,7 +71776,8 @@ </summary> </histogram> -<histogram name="Network.Ethernet.TimeToPortal" units="ms"> +<histogram name="Network.Ethernet.TimeToPortal" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70610,7 +71789,7 @@ </histogram> <histogram name="Network.MigrationNssToPem" - enum="MigrationNssToPemNetworkTypes"> + enum="MigrationNssToPemNetworkTypes" expires_after="2015-08-11"> <obsolete> Deprecated 8/2015. </obsolete> @@ -70624,7 +71803,8 @@ </summary> </histogram> -<histogram name="Network.ServiceErrors" enum="NetworkServiceError"> +<histogram name="Network.ServiceErrors" enum="NetworkServiceError" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -70671,7 +71851,7 @@ </histogram> <histogram name="Network.Shill.Cellular.DHCPOptionFailureDetected" - enum="NetworkDHCPOptionFailure"> + enum="NetworkDHCPOptionFailure" expires_after="2014-05-17"> <obsolete> Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected. </obsolete> @@ -70703,7 +71883,7 @@ </histogram> <histogram name="Network.Shill.Cellular.ExpiredLeaseLengthSeconds" - units="seconds"> + units="seconds" expires_after="2017-10-11"> <obsolete> Deprecated since Chrome OS build 10010.0.0 and superceded by Network.Shill.Cellular.ExpiredLeaseLengthSeconds2 due to change in number of @@ -70987,7 +72167,8 @@ </summary> </histogram> -<histogram name="Network.Shill.DarkResumeActionTime" units="ms"> +<histogram name="Network.Shill.DarkResumeActionTime" units="ms" + expires_after="2015-01-27"> <obsolete> Deprecated 01/2015. Migrated to Network.Shill.DarkResumeActionsTimeTaken. </obsolete> @@ -71073,7 +72254,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.DHCPOptionFailureDetected" - enum="NetworkDHCPOptionFailure"> + enum="NetworkDHCPOptionFailure" expires_after="2014-05-17"> <obsolete> Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected. </obsolete> @@ -71096,7 +72277,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds" - units="seconds"> + units="seconds" expires_after="2017-10-11"> <obsolete> Deprecated since Chrome OS build 10010.0.0 and superceded by Network.Shill.Ethernet.ExpiredLeaseLengthSeconds2 due to change in number of @@ -71365,7 +72546,8 @@ </summary> </histogram> -<histogram name="Network.Shill.SuspendActionTime" units="ms"> +<histogram name="Network.Shill.SuspendActionTime" units="ms" + expires_after="2015-01-27"> <obsolete> Deprecated 01/2015. Migrated to Network.Shill.SuspendActionsTimeTaken. </obsolete> @@ -71387,7 +72569,8 @@ </histogram> <histogram name="Network.Shill.TerminationActionResult.OnSuspend" - enum="ShillSuspendTerminationDarkResumeActionResult"> + enum="ShillSuspendTerminationDarkResumeActionResult" + expires_after="2014-11-11"> <obsolete> Deprecated 10/2014. Migrated to Network.Shill.SuspendActionResult. </obsolete> @@ -71399,7 +72582,8 @@ </histogram> <histogram name="Network.Shill.TerminationActionResult.OnTerminate" - enum="ShillSuspendTerminationDarkResumeActionResult"> + enum="ShillSuspendTerminationDarkResumeActionResult" + expires_after="2014-11-11"> <obsolete> Deprecated 10/2014. Migrated to Network.Shill.TerminationActionResult. </obsolete> @@ -71418,7 +72602,8 @@ </summary> </histogram> -<histogram name="Network.Shill.TerminationActionTime" units="ms"> +<histogram name="Network.Shill.TerminationActionTime" units="ms" + expires_after="2015-01-27"> <obsolete> Deprecated 01/2015. Migrated to Network.Shill.TerminationActionsTimeTaken. </obsolete> @@ -71429,7 +72614,8 @@ </summary> </histogram> -<histogram name="Network.Shill.TerminationActionTime.OnSuspend" units="ms"> +<histogram name="Network.Shill.TerminationActionTime.OnSuspend" units="ms" + expires_after="2014-11-11"> <obsolete> Deprecated 10/2014. Migrated to Network.Shill.SuspendActionTime. </obsolete> @@ -71440,7 +72626,8 @@ </summary> </histogram> -<histogram name="Network.Shill.TerminationActionTime.OnTerminate" units="ms"> +<histogram name="Network.Shill.TerminationActionTime.OnTerminate" units="ms" + expires_after="2014-11-11"> <obsolete> Deprecated 10/2014. Migrated to Network.Shill.TerminationActionTime. </obsolete> @@ -71703,7 +72890,7 @@ </histogram> <histogram name="Network.Shill.Wifi.DHCPOptionFailureDetected" - enum="NetworkDHCPOptionFailure"> + enum="NetworkDHCPOptionFailure" expires_after="2014-05-17"> <obsolete> Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected. </obsolete> @@ -71743,7 +72930,8 @@ </summary> </histogram> -<histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds" units="seconds"> +<histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds" units="seconds" + expires_after="2017-10-11"> <obsolete> Deprecated since Chrome OS build 10010.0.0 and superceded by Network.Shill.Wifi.ExpiredLeaseLengthSeconds2 due to change in number of @@ -72284,7 +73472,7 @@ </histogram> <histogram name="Network.Shill.Wimax.DHCPOptionFailureDetected" - enum="NetworkDHCPOptionFailure"> + enum="NetworkDHCPOptionFailure" expires_after="2014-05-17"> <obsolete> Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected. </obsolete> @@ -72297,7 +73485,8 @@ </summary> </histogram> -<histogram name="Network.Shill.Wimax.ExpiredLeaseLengthSeconds" units="seconds"> +<histogram name="Network.Shill.Wimax.ExpiredLeaseLengthSeconds" units="seconds" + expires_after="2017-10-11"> <obsolete> Deprecated since Chrome OS build 10010.0.0 and superceded by Network.Shill.Wimax.ExpiredLeaseLengthSeconds2 due to change in number of @@ -72348,7 +73537,8 @@ </summary> </histogram> -<histogram name="Network.TimeToConfig.Cellular" units="ms"> +<histogram name="Network.TimeToConfig.Cellular" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72360,7 +73550,8 @@ </summary> </histogram> -<histogram name="Network.TimeToConfig.Ethernet" units="ms"> +<histogram name="Network.TimeToConfig.Ethernet" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72372,7 +73563,8 @@ </summary> </histogram> -<histogram name="Network.TimeToConfig.Wifi" units="ms"> +<histogram name="Network.TimeToConfig.Wifi" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72384,7 +73576,7 @@ </summary> </histogram> -<histogram name="Network.TimeToDrop" units="seconds"> +<histogram name="Network.TimeToDrop" units="seconds" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72397,7 +73589,7 @@ </summary> </histogram> -<histogram name="Network.TimeToJoin.Wifi" units="ms"> +<histogram name="Network.TimeToJoin.Wifi" units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72426,7 +73618,8 @@ </summary> </histogram> -<histogram name="Network.Wifi.AuthMode" enum="NetworkAuthModeType"> +<histogram name="Network.Wifi.AuthMode" enum="NetworkAuthModeType" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72437,7 +73630,7 @@ </summary> </histogram> -<histogram name="Network.Wifi.BitRate" units="bps"> +<histogram name="Network.Wifi.BitRate" units="bps" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72480,7 +73673,8 @@ </summary> </histogram> -<histogram name="Network.Wifi.TimeOnline" units="seconds"> +<histogram name="Network.Wifi.TimeOnline" units="seconds" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72492,7 +73686,8 @@ </summary> </histogram> -<histogram name="Network.Wifi.TimeResumeToReady" units="ms"> +<histogram name="Network.Wifi.TimeResumeToReady" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72504,7 +73699,8 @@ </summary> </histogram> -<histogram name="Network.Wifi.TimeToConfig" units="ms"> +<histogram name="Network.Wifi.TimeToConfig" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72515,7 +73711,7 @@ </summary> </histogram> -<histogram name="Network.Wifi.TimeToJoin" units="ms"> +<histogram name="Network.Wifi.TimeToJoin" units="ms" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72526,7 +73722,8 @@ </summary> </histogram> -<histogram name="Network.Wifi.TimeToOnline" units="ms"> +<histogram name="Network.Wifi.TimeToOnline" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72537,7 +73734,8 @@ </summary> </histogram> -<histogram name="Network.Wifi.TimeToPortal" units="ms"> +<histogram name="Network.Wifi.TimeToPortal" units="ms" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -72668,7 +73866,8 @@ </summary> </histogram> -<histogram name="NetworkTimeTracker.UpdateTimeFetchAttempted"> +<histogram name="NetworkTimeTracker.UpdateTimeFetchAttempted" + expires_after="2016-08-15"> <obsolete> Deprecated 08/2016 because it does not provide additional information beyond NetworkTimeTracker.UpdateTimeFetchFailed and @@ -72723,7 +73922,8 @@ </summary> </histogram> -<histogram name="NewTabPage.ActionAndroid" enum="NewTabPageActionAndroid"> +<histogram name="NewTabPage.ActionAndroid" enum="NewTabPageActionAndroid" + expires_after="2017-01-10"> <obsolete> Deprecated as of 01/2017. Replaced by NewTabPage.ActionAndroid2. </obsolete> @@ -72773,7 +73973,8 @@ </summary> </histogram> -<histogram name="NewTabPage.BackgroundService.Albums.RequestLatency" units="ms"> +<histogram name="NewTabPage.BackgroundService.Albums.RequestLatency" units="ms" + expires_after="2019-03-01"> <obsolete> Deprecated 02/2019 with the removal of the associated service integration. </obsolete> @@ -72805,7 +74006,8 @@ </summary> </histogram> -<histogram name="NewTabPage.BackgroundService.Photos.RequestLatency" units="ms"> +<histogram name="NewTabPage.BackgroundService.Photos.RequestLatency" units="ms" + expires_after="2019-03-01"> <obsolete> Deprecated 02/2019 with the removal of the associated service integration. </obsolete> @@ -72818,7 +74020,7 @@ </histogram> <histogram name="NewTabPage.BookmarkActionAndroid" - enum="NewTabPageBookmarkActionAndroid"> + enum="NewTabPageBookmarkActionAndroid" expires_after="2014-04-30"> <obsolete> Deprecated on M33 with the change to native NTP. </obsolete> @@ -72867,7 +74069,8 @@ </histogram> <histogram name="NewTabPage.ContentSuggestions.BreakingNews.MessageReceived" - enum="ContentSuggestionsBreakingNewsMessageContainsNews"> + enum="ContentSuggestionsBreakingNewsMessageContainsNews" + expires_after="2017-10-25"> <obsolete> Deprecated in October 2017 (M64) and replaced by NewTabPage.ContentSuggestions.BreakingNews.ReceivedMessageAction, when @@ -72958,7 +74161,8 @@ </summary> </histogram> -<histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpened"> +<histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpened" + expires_after="2017-07-07"> <obsolete> Deprecated in July 2017. This metric was replaced by CountOnNtpOpenedIfVisible. Initially the metric was not recorded properly if @@ -73055,7 +74259,8 @@ </summary> </histogram> -<histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore" units="score"> +<histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore" units="score" + expires_after="2017-01-18"> <obsolete> Replaced by NewTabPage.ContentSuggestions.MenuOpenedScoreNormalized. </obsolete> @@ -73207,7 +74412,8 @@ </summary> </histogram> -<histogram name="NewTabPage.ContentSuggestions.OpenedScore" units="score"> +<histogram name="NewTabPage.ContentSuggestions.OpenedScore" units="score" + expires_after="2017-01-18"> <obsolete> Replaced by NewTabPage.ContentSuggestions.OpenedScoreNormalized. </obsolete> @@ -73317,7 +74523,8 @@ </summary> </histogram> -<histogram name="NewTabPage.ContentSuggestions.ShownScore" units="score"> +<histogram name="NewTabPage.ContentSuggestions.ShownScore" units="score" + expires_after="2017-01-18"> <obsolete> Replaced by NewTabPage.ContentSuggestions.ShownScoreNormalized. </obsolete> @@ -73344,7 +74551,7 @@ </histogram> <histogram name="NewTabPage.ContentSuggestions.TimeSinceLastBackgroundFetch" - units="ms"> + units="ms" expires_after="2017-02-23"> <obsolete> Replaced by NewTabPage.ContentSuggestions.TimeSinceSuggestionFetched. </obsolete> @@ -73381,7 +74588,8 @@ </histogram> <histogram base="true" - name="NewTabPage.ContentSuggestions.TimeUntilFirstSoftTrigger" units="ms"> + name="NewTabPage.ContentSuggestions.TimeUntilFirstSoftTrigger" units="ms" + expires_after="2017-07-10"> <obsolete> Deprecated as of July 2017, in favor of NewTabPage.ContentSuggestions.TimeUntilFirstShownTrigger and @@ -73442,7 +74650,7 @@ </histogram> <histogram name="NewTabPage.ContentSuggestions.UIUpdateResult" - enum="ContentSuggestionsUIUpdateResult"> + enum="ContentSuggestionsUIUpdateResult" expires_after="2017-01-21"> <obsolete> Replaced by NewTabPage.ContentSuggestions.UIUpdateResult2 in January 2017. </obsolete> @@ -73566,7 +74774,8 @@ </summary> </histogram> -<histogram name="NewTabPage.DefaultPageType" enum="NtpPaneType"> +<histogram name="NewTabPage.DefaultPageType" enum="NtpPaneType" + expires_after="2016-02-22"> <obsolete> Deprecated 2016-02. </obsolete> @@ -73574,7 +74783,8 @@ <summary>The default pane when the NTP is first opened.</summary> </histogram> -<histogram name="NewTabPage.Feed.ImageFetchResult" enum="FeedImageFetchResult"> +<histogram name="NewTabPage.Feed.ImageFetchResult" enum="FeedImageFetchResult" + expires_after="2018-10-17"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.Image.FetchResult. </obsolete> @@ -73585,7 +74795,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Feed.ImageLoadFromCacheTime" units="ms"> +<histogram name="NewTabPage.Feed.ImageLoadFromCacheTime" units="ms" + expires_after="2018-10-17"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.Image.LoadFromCacheTime. </obsolete> @@ -73595,7 +74806,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Feed.ImageLoadFromNetworkTime" units="ms"> +<histogram name="NewTabPage.Feed.ImageLoadFromNetworkTime" units="ms" + expires_after="2018-10-17"> <obsolete> Deprecated in favor of ContentSuggestions.Feed.Image.LoadFromNetworkTime. </obsolete> @@ -73605,7 +74817,7 @@ </summary> </histogram> -<histogram name="NewTabPage.HoverTimeClicked"> +<histogram name="NewTabPage.HoverTimeClicked" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -73616,7 +74828,7 @@ </summary> </histogram> -<histogram name="NewTabPage.HoverTimeNotClicked"> +<histogram name="NewTabPage.HoverTimeNotClicked" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -73627,7 +74839,7 @@ </summary> </histogram> -<histogram name="NewTabPage.IconsColor"> +<histogram name="NewTabPage.IconsColor" expires_after="2017-04-03"> <obsolete> Deprecated 2017-04, replaced by NewTabPage.TileType and NewTabPage.SuggestionsImpression.IconsColor. @@ -73640,7 +74852,7 @@ </summary> </histogram> -<histogram name="NewTabPage.IconsGray"> +<histogram name="NewTabPage.IconsGray" expires_after="2017-04-03"> <obsolete> Deprecated 2017-04, replaced by NewTabPage.TileType and NewTabPage.SuggestionsImpression.IconsGray. @@ -73652,7 +74864,7 @@ </summary> </histogram> -<histogram name="NewTabPage.IconsReal"> +<histogram name="NewTabPage.IconsReal" expires_after="2017-04-03"> <obsolete> Deprecated 2017-04, replaced by NewTabPage.TileType and NewTabPage.SuggestionsImpression.IconsReal. @@ -73666,7 +74878,7 @@ </histogram> <histogram name="NewTabPage.Interests.ImageDownloadSuccess" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2017-05-13"> <obsolete> Deprecated 2017-05 (and not recorded for some time before that). </obsolete> @@ -73678,7 +74890,7 @@ </histogram> <histogram name="NewTabPage.Interests.InterestsFetchSuccess" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2017-05-13"> <obsolete> Deprecated 2017-05 (and not recorded for some time before that). </obsolete> @@ -73689,7 +74901,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Interests.NumInterests" units="interests"> +<histogram name="NewTabPage.Interests.NumInterests" units="interests" + expires_after="2017-05-13"> <obsolete> Deprecated 2017-05 (and not recorded for some time before that). </obsolete> @@ -73709,7 +74922,7 @@ </summary> </histogram> -<histogram name="NewTabPage.Layout" enum="NTPLayout"> +<histogram name="NewTabPage.Layout" enum="NTPLayout" expires_after="2018-05-10"> <obsolete> Deprecated 2018-04 with full launch of NTP condensed layout. </obsolete> @@ -73791,7 +75004,8 @@ </summary> </histogram> -<histogram name="NewTabPage.LogoShownTime" units="ms"> +<histogram name="NewTabPage.LogoShownTime" units="ms" + expires_after="2017-08-31"> <obsolete> Deprecated 2017-08 because it was only recorded for cached logos. Replaced by LogoShownTime2. @@ -73821,7 +75035,8 @@ </summary> </histogram> -<histogram name="NewTabPage.MobilePromo" enum="NewTabPageMobilePromo"> +<histogram name="NewTabPage.MobilePromo" enum="NewTabPageMobilePromo" + expires_after="2014-04-30"> <obsolete> Deprecated on M33 with the change to native NTP. </obsolete> @@ -73841,7 +75056,8 @@ </summary> </histogram> -<histogram name="NewTabPage.MostVisitedAction" enum="NtpFollowAction"> +<histogram name="NewTabPage.MostVisitedAction" enum="NtpFollowAction" + expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -73862,7 +75078,8 @@ </summary> </histogram> -<histogram name="NewTabPage.MostVisitedScheme" enum="NtpMostVisitedScheme"> +<histogram name="NewTabPage.MostVisitedScheme" enum="NtpMostVisitedScheme" + expires_after="2016-05-23"> <obsolete> Deprecated 2016-05. </obsolete> @@ -73873,7 +75090,7 @@ </histogram> <histogram name="NewTabPage.MostVisitedTilePlacementExperiment" - enum="NtpTileExperimentActions"> + enum="NtpTileExperimentActions" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -73895,7 +75112,7 @@ </summary> </histogram> -<histogram name="NewTabPage.NonVisibleScreenshots"> +<histogram name="NewTabPage.NonVisibleScreenshots" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -73906,7 +75123,8 @@ </summary> </histogram> -<histogram name="NewTabPage.NonVisibleSuggestedSiteRank"> +<histogram name="NewTabPage.NonVisibleSuggestedSiteRank" + expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -73918,7 +75136,8 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfExternalTileFallbacks"> +<histogram name="NewTabPage.NumberOfExternalTileFallbacks" + expires_after="2016-07-11"> <obsolete> Deprecated 2016-07. </obsolete> @@ -73932,7 +75151,7 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfExternalTiles"> +<histogram name="NewTabPage.NumberOfExternalTiles" expires_after="2016-07-11"> <obsolete> Deprecated 2016-07. </obsolete> @@ -73945,7 +75164,8 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfGrayTileFallbacks"> +<histogram name="NewTabPage.NumberOfGrayTileFallbacks" + expires_after="2016-07-11"> <obsolete> Deprecated 2016-07. </obsolete> @@ -73958,7 +75178,7 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfGrayTiles"> +<histogram name="NewTabPage.NumberOfGrayTiles" expires_after="2016-07-11"> <obsolete> Deprecated 2016-07. </obsolete> @@ -73970,7 +75190,7 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfMouseOvers"> +<histogram name="NewTabPage.NumberOfMouseOvers" expires_after="2016-07-08"> <obsolete> Deprecated 2016-07. </obsolete> @@ -73982,7 +75202,8 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfThumbnailAttempts"> +<histogram name="NewTabPage.NumberOfThumbnailAttempts" + expires_after="2014-01-17"> <obsolete> Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailTiles. </obsolete> @@ -73995,7 +75216,7 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfThumbnailErrors"> +<histogram name="NewTabPage.NumberOfThumbnailErrors" expires_after="2016-07-11"> <obsolete> Deprecated 2016-07. </obsolete> @@ -74007,7 +75228,7 @@ </summary> </histogram> -<histogram name="NewTabPage.NumberOfThumbnailTiles"> +<histogram name="NewTabPage.NumberOfThumbnailTiles" expires_after="2016-07-11"> <obsolete> Deprecated 2016-07. </obsolete> @@ -74059,7 +75280,8 @@ </summary> </histogram> -<histogram name="NewTabPage.OtherSessionsMenu" enum="OtherSessionsActions"> +<histogram name="NewTabPage.OtherSessionsMenu" enum="OtherSessionsActions" + expires_after="2015-05-18"> <obsolete> Deprecated 05/2015. Feature was removed. </obsolete> @@ -74070,7 +75292,8 @@ </summary> </histogram> -<histogram name="NewTabPage.PreviousSelectedPageType" enum="NtpPaneType"> +<histogram name="NewTabPage.PreviousSelectedPageType" enum="NtpPaneType" + expires_after="2016-02-22"> <obsolete> Deprecated 2016-02. </obsolete> @@ -74081,7 +75304,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Promo.Bubble" enum="NtpPromoAction"> +<histogram name="NewTabPage.Promo.Bubble" enum="NtpPromoAction" + expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74089,7 +75313,8 @@ <summary>Histogram for NTP bubble promo activity.</summary> </histogram> -<histogram name="NewTabPage.Promo.Notification" enum="NtpPromoAction"> +<histogram name="NewTabPage.Promo.Notification" enum="NtpPromoAction" + expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74156,7 +75381,8 @@ </summary> </histogram> -<histogram name="NewTabPage.SearchAvailableLoadTime.ColdStart" units="ms"> +<histogram name="NewTabPage.SearchAvailableLoadTime.ColdStart" units="ms" + expires_after="2017-02-06"> <obsolete> Deprecated February 2017. </obsolete> @@ -74168,7 +75394,8 @@ </summary> </histogram> -<histogram name="NewTabPage.SearchAvailableLoadTime.WarmStart" units="ms"> +<histogram name="NewTabPage.SearchAvailableLoadTime.WarmStart" units="ms" + expires_after="2017-02-06"> <obsolete> Deprecated February 2017. </obsolete> @@ -74220,7 +75447,7 @@ </summary> </histogram> -<histogram name="NewTabPage.SearchURLs.Total"> +<histogram name="NewTabPage.SearchURLs.Total" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74228,7 +75455,8 @@ <summary>TBD.</summary> </histogram> -<histogram name="NewTabPage.SelectedPageType" enum="NtpPaneType"> +<histogram name="NewTabPage.SelectedPageType" enum="NtpPaneType" + expires_after="2016-02-22"> <obsolete> Deprecated 2016-02. </obsolete> @@ -74236,7 +75464,7 @@ <summary>The pane selected when the user switches panes in the NTP.</summary> </histogram> -<histogram name="NewTabPage.SessionRestore"> +<histogram name="NewTabPage.SessionRestore" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74247,7 +75475,8 @@ </summary> </histogram> -<histogram name="NewTabPage.SingleSessionPageSwitches"> +<histogram name="NewTabPage.SingleSessionPageSwitches" + expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74258,7 +75487,7 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardClicked"> +<histogram name="NewTabPage.Snippets.CardClicked" expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.Opened. </obsolete> @@ -74273,7 +75502,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardClickedAge" units="ms"> +<histogram name="NewTabPage.Snippets.CardClickedAge" units="ms" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.OpenedAge. </obsolete> @@ -74290,7 +75520,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardClickedScore" units="score"> +<histogram name="NewTabPage.Snippets.CardClickedScore" units="score" + expires_after="2016-10-27"> <obsolete> Deprecated as of 6/2016 </obsolete> @@ -74307,7 +75538,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardClickedScoreNew" units="score"> +<histogram name="NewTabPage.Snippets.CardClickedScoreNew" units="score" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.OpenedScore. </obsolete> @@ -74325,7 +75557,7 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardExpanded"> +<histogram name="NewTabPage.Snippets.CardExpanded" expires_after="2016-10-27"> <obsolete> Deprecated as of 4/2016 </obsolete> @@ -74336,7 +75568,7 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardHidden"> +<histogram name="NewTabPage.Snippets.CardHidden" expires_after="2016-10-27"> <obsolete> Deprecated as of 4/2016 </obsolete> @@ -74347,7 +75579,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardLongPressed" units="index"> +<histogram name="NewTabPage.Snippets.CardLongPressed" units="index" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.MenuOpened. </obsolete> @@ -74358,7 +75591,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardLongPressedAge" units="ms"> +<histogram name="NewTabPage.Snippets.CardLongPressedAge" units="ms" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.MenuOpenedAge. </obsolete> @@ -74370,7 +75604,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardLongPressedScoreNew" units="score"> +<histogram name="NewTabPage.Snippets.CardLongPressedScoreNew" units="score" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.MenuOpenedScore. </obsolete> @@ -74381,7 +75616,7 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardShown"> +<histogram name="NewTabPage.Snippets.CardShown" expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.Shown. </obsolete> @@ -74401,7 +75636,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardShownAge" units="ms"> +<histogram name="NewTabPage.Snippets.CardShownAge" units="ms" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.ShownAge. </obsolete> @@ -74420,7 +75656,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardShownScore" units="score"> +<histogram name="NewTabPage.Snippets.CardShownScore" units="score" + expires_after="2016-10-27"> <obsolete> Deprecated as of 6/2016 </obsolete> @@ -74439,7 +75676,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.CardShownScoreNew" units="score"> +<histogram name="NewTabPage.Snippets.CardShownScoreNew" units="score" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.ShownScore. </obsolete> @@ -74525,7 +75763,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.Interactions" enum="SnippetsInteractions"> +<histogram name="NewTabPage.Snippets.Interactions" enum="SnippetsInteractions" + expires_after="2016-10-27"> <obsolete> Removed 2016-10. </obsolete> @@ -74553,7 +75792,7 @@ </histogram> <histogram name="NewTabPage.Snippets.NumArticlesOnScrolledBelowTheFoldOnce" - units="articles"> + units="articles" expires_after="2016-10-27"> <obsolete> Removed 2016-10. </obsolete> @@ -74582,7 +75821,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.OpenMethod" enum="SnippetOpenMethod"> +<histogram name="NewTabPage.Snippets.OpenMethod" enum="SnippetOpenMethod" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.OpenDisposition. </obsolete> @@ -74593,7 +75833,8 @@ </summary> </histogram> -<histogram name="NewTabPage.Snippets.VisitDuration" units="ms"> +<histogram name="NewTabPage.Snippets.VisitDuration" units="ms" + expires_after="2016-10-27"> <obsolete> Replaced by NewTabPage.ContentSuggestions.VisitDuration. </obsolete> @@ -74605,7 +75846,7 @@ </summary> </histogram> -<histogram name="NewTabPage.SuggestedSite"> +<histogram name="NewTabPage.SuggestedSite" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74616,7 +75857,8 @@ </summary> </histogram> -<histogram name="NewTabPage.SuggestedSitesAction" enum="NtpFollowAction"> +<histogram name="NewTabPage.SuggestedSitesAction" enum="NtpFollowAction" + expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74624,7 +75866,7 @@ <summary>Action taken by the user on the Suggested Sites NTP pane.</summary> </histogram> -<histogram name="NewTabPage.SuggestedSitesLoadTime"> +<histogram name="NewTabPage.SuggestedSitesLoadTime" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74632,7 +75874,7 @@ <summary>Time to load the Suggested Sites NTP pane, in milliseconds.</summary> </histogram> -<histogram name="NewTabPage.SuggestedSitesViewTime"> +<histogram name="NewTabPage.SuggestedSitesViewTime" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74657,7 +75899,8 @@ </summary> </histogram> -<histogram name="NewTabPage.SuggestionsType" enum="NtpSuggestionsType"> +<histogram name="NewTabPage.SuggestionsType" enum="NtpSuggestionsType" + expires_after="2016-07-11"> <obsolete> Deprecated 2016-07. </obsolete> @@ -74669,7 +75912,7 @@ </summary> </histogram> -<histogram name="NewTabPage.ThumbnailErrorRate"> +<histogram name="NewTabPage.ThumbnailErrorRate" expires_after="2014-01-17"> <obsolete> Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailAttempts and NewTabPage.NumberOfThumbnailErrors. @@ -74685,7 +75928,8 @@ </summary> </histogram> -<histogram name="NewTabPage.ThumbnailFallbackRate" units="%"> +<histogram name="NewTabPage.ThumbnailFallbackRate" units="%" + expires_after="2014-01-17"> <obsolete> Deprecated 01/2014. Replaced by NewTabPage.NumberOfGrayTileFallbacks and NewTabPage.NumberOfExternalFallbacks. @@ -74722,7 +75966,7 @@ </histogram> <histogram name="NewTabPage.TileFaviconFetchSuccess.Server" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2017-07-10"> <obsolete> Deprecated 06/2017. Replaced by NewTabPage.TileFaviconFetchStatus.Server. </obsolete> @@ -74818,7 +76062,8 @@ </summary> </histogram> -<histogram name="NewTabPage.TimeToFirstDraw" units="ms"> +<histogram name="NewTabPage.TimeToFirstDraw" units="ms" + expires_after="2019-01-22"> <obsolete> Deprecated 01/2019, replaced by NewTabPage.TimeToFirstDraw2 when a bug in how this was calculated was fixed. @@ -74885,7 +76130,7 @@ </summary> </histogram> -<histogram name="NewTabPage.VisibleScreenshots"> +<histogram name="NewTabPage.VisibleScreenshots" expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74896,7 +76141,8 @@ </summary> </histogram> -<histogram name="NewTabPage.VisibleSuggestedSiteRank"> +<histogram name="NewTabPage.VisibleSuggestedSiteRank" + expires_after="2016-02-19"> <obsolete> Deprecated 2016-02 (and not recorded for some time before that). </obsolete> @@ -74977,7 +76223,8 @@ </summary> </histogram> -<histogram name="Notifications.AuthorDataSizeKB" units="KB"> +<histogram name="Notifications.AuthorDataSizeKB" units="KB" + expires_after="2016-02-22"> <obsolete> Replaced by Notifications.AuthorDataSize in February 2016. </obsolete> @@ -75071,7 +76318,7 @@ </histogram> <histogram name="Notifications.DifferentRequestingEmbeddingOrigins" - enum="Boolean"> + enum="Boolean" expires_after="2015-07-02"> <obsolete> Deprecated July 2015. No longer tracked since M42. </obsolete> @@ -75082,7 +76329,8 @@ </summary> </histogram> -<histogram name="Notifications.Display" enum="NotifierType"> +<histogram name="Notifications.Display" enum="NotifierType" + expires_after="2017-10-31"> <obsolete> Deprecated October 2017 (fullscreen notifications feature enabled by default). @@ -75142,7 +76390,8 @@ </summary> </histogram> -<histogram name="Notifications.Icon.FileSize" units="bytes"> +<histogram name="Notifications.Icon.FileSize" units="bytes" + expires_after="2016-12-01"> <obsolete> Deprecated Nov 2016 in favor of Notifications.LoadFileSize.* </obsolete> @@ -75150,7 +76399,8 @@ <summary>The number of bytes loaded for a Web Notification icon.</summary> </histogram> -<histogram name="Notifications.Icon.LoadFailTime" units="ms"> +<histogram name="Notifications.Icon.LoadFailTime" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated Nov 2016 in favor of Notifications.LoadFailTime.* </obsolete> @@ -75161,7 +76411,8 @@ </summary> </histogram> -<histogram name="Notifications.Icon.LoadFinishTime" units="ms"> +<histogram name="Notifications.Icon.LoadFinishTime" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated Nov 2016 in favor of Notifications.LoadFinishTime.* </obsolete> @@ -75172,7 +76423,8 @@ </summary> </histogram> -<histogram name="Notifications.Icon.ScaleDownTime" units="ms"> +<histogram name="Notifications.Icon.ScaleDownTime" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated Nov 2016 in favor of Notifications.LoadScaleDownTime.* </obsolete> @@ -75263,7 +76515,8 @@ </histogram> <histogram name="Notifications.NotificationHelper.NotificationActivatorStatus" - enum="NotificationHelperNotificationActivatorStatus"> + enum="NotificationHelperNotificationActivatorStatus" + expires_after="2018-06-02"> <obsolete> Deprecated 06/2018. Replaced by NotificationActivatorPrimaryStatus and NotificationActivatorSecondaryStatus. @@ -75316,7 +76569,7 @@ </histogram> <histogram name="Notifications.PersistentNotificationDataDeleted" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-02-05"> <obsolete> Deprecated 01/2016, no longer used. </obsolete> @@ -75487,7 +76740,8 @@ </summary> </histogram> -<histogram name="Notifications.Windows.ImageRetainerDestructionTime" units="ms"> +<histogram name="Notifications.Windows.ImageRetainerDestructionTime" units="ms" + expires_after="2018-10-23"> <obsolete> Obsolete 10/2018 as we no long record this metric. </obsolete> @@ -75501,7 +76755,7 @@ </histogram> <histogram name="Notifications.Windows.ImageRetainerInitializationTime" - units="ms"> + units="ms" expires_after="2018-10-23"> <obsolete> Obsolete 10/2018 as we no long record this metric. </obsolete> @@ -75544,7 +76798,7 @@ </histogram> <histogram name="Notifications.Windows.SetReadyCallbackStatus" - enum="WindowsNotificationSetReadyCallbackStatus"> + enum="WindowsNotificationSetReadyCallbackStatus" expires_after="2018-06-01"> <obsolete> Replaced with Notifications.Windows.SetReadyCallbackStatus2 which is not skewed. @@ -75591,7 +76845,7 @@ </histogram> <histogram name="Notifications.Windows.StartMenuShortStatus" - enum="WindowsNotificationStartMenuShortStatus"> + enum="WindowsNotificationStartMenuShortStatus" expires_after="2018-06-11"> <obsolete> Deprecated 06/2018. Replaced with Notifications.Windows.StartMenuShortcutStatus where typo is fixed. @@ -75621,7 +76875,8 @@ </histogram> <histogram name="Notifications.Windows.UserManagerShowupStatus" - enum="WindowsNotificationUserManagerShowupStatus"> + enum="WindowsNotificationUserManagerShowupStatus" + expires_after="2018-05-23"> <obsolete> Deprecated 05/2018 as this is no longer needed. </obsolete> @@ -75646,7 +76901,7 @@ </histogram> <histogram name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff" - units="kbps"> + units="kbps" expires_after="2019-01-09"> <obsolete> Obsoleted in Jan 2019 </obsolete> @@ -75663,7 +76918,7 @@ </histogram> <histogram name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff" - units="Effective connection type"> + units="Effective connection type" expires_after="2019-01-09"> <obsolete> Obsoleted in Jan 2019 </obsolete> @@ -75678,7 +76933,8 @@ </summary> </histogram> -<histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff" units="ms"> +<histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff" units="ms" + expires_after="2019-01-09"> <obsolete> Obsoleted in Jan 2019 </obsolete> @@ -75692,7 +76948,8 @@ </summary> </histogram> -<histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff" units="ms"> +<histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff" units="ms" + expires_after="2019-01-09"> <obsolete> Obsoleted in Jan 2019 </obsolete> @@ -75706,7 +76963,8 @@ </summary> </histogram> -<histogram name="NQE.BDPComputationKbps.OnECTComputation" units="Kbps"> +<histogram name="NQE.BDPComputationKbps.OnECTComputation" units="Kbps" + expires_after="2018-10-17"> <obsolete> Obsoleted in October 2018 </obsolete> @@ -75719,7 +76977,8 @@ </summary> </histogram> -<histogram name="NQE.BDPComputationTransportRTT.OnECTComputation" units="ms"> +<histogram name="NQE.BDPComputationTransportRTT.OnECTComputation" units="ms" + expires_after="2018-10-17"> <obsolete> Obsoleted in October 2018 </obsolete> @@ -75732,7 +76991,8 @@ </summary> </histogram> -<histogram name="NQE.BDPKbits.OnECTComputation" units="kbits"> +<histogram name="NQE.BDPKbits.OnECTComputation" units="kbits" + expires_after="2018-10-17"> <obsolete> Obsoleted in October 2018 </obsolete> @@ -75799,7 +77059,8 @@ </summary> </histogram> -<histogram name="NQE.CellularSignalStrengthAvailable" enum="BooleanAvailable"> +<histogram name="NQE.CellularSignalStrengthAvailable" enum="BooleanAvailable" + expires_after="2017-06-28"> <obsolete> Replaced by NQE.CellularSignalStrength.LevelAvailable in June 2017. </obsolete> @@ -75812,7 +77073,8 @@ </summary> </histogram> -<histogram name="NQE.CellularSignalStrengthDifference" units="dBm"> +<histogram name="NQE.CellularSignalStrengthDifference" units="dBm" + expires_after="2017-06-28"> <obsolete> Replaced by NQE.CellularSignalStrength.LevelDifference in June 2017. </obsolete> @@ -75838,7 +77100,8 @@ </summary> </histogram> -<histogram name="NQE.Correlation.ResourceLoadTime.0Kb_128Kb"> +<histogram name="NQE.Correlation.ResourceLoadTime.0Kb_128Kb" + expires_after="2017-12-19"> <obsolete> Obsoleted in December 2017. </obsolete> @@ -75855,7 +77118,8 @@ </summary> </histogram> -<histogram name="NQE.DifferenceRTTActualAndEstimated" units="ms"> +<histogram name="NQE.DifferenceRTTActualAndEstimated" units="ms" + expires_after="2016-06-08"> <obsolete> Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics. </obsolete> @@ -75868,7 +77132,8 @@ </summary> </histogram> -<histogram name="NQE.DifferenceRTTEstimatedAndActual" units="ms"> +<histogram name="NQE.DifferenceRTTEstimatedAndActual" units="ms" + expires_after="2016-06-08"> <obsolete> Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics. </obsolete> @@ -75909,7 +77174,8 @@ </summary> </histogram> -<histogram name="NQE.ExternalEstimateProvider.DownlinkBandwidth" units="Kbps"> +<histogram name="NQE.ExternalEstimateProvider.DownlinkBandwidth" units="Kbps" + expires_after="2018-02-16"> <obsolete> Obsoleted in February 2018. </obsolete> @@ -75923,7 +77189,8 @@ </summary> </histogram> -<histogram name="NQE.ExternalEstimateProvider.RTT" units="ms"> +<histogram name="NQE.ExternalEstimateProvider.RTT" units="ms" + expires_after="2018-02-16"> <obsolete> Obsoleted in February 2018. </obsolete> @@ -75954,7 +77221,7 @@ </histogram> <histogram name="NQE.ExternalEstimateProviderStatus" - enum="NQEExternalEstimateProviderStatus"> + enum="NQEExternalEstimateProviderStatus" expires_after="2018-02-16"> <obsolete> Obsoleted in February 2018. </obsolete> @@ -75968,7 +77235,7 @@ </summary> </histogram> -<histogram name="NQE.FastestRTT" units="ms"> +<histogram name="NQE.FastestRTT" units="ms" expires_after="2017-08-29"> <obsolete> Obsoleted in August 2017 </obsolete> @@ -76068,7 +77335,7 @@ </summary> </histogram> -<histogram name="NQE.PeakKbps" units="Kbps"> +<histogram name="NQE.PeakKbps" units="Kbps" expires_after="2017-08-29"> <obsolete> Obsoleted in August 2017 </obsolete> @@ -76111,7 +77378,8 @@ </summary> </histogram> -<histogram name="NQE.RatioEstimatedToActualRTT" units="100 times"> +<histogram name="NQE.RatioEstimatedToActualRTT" units="100 times" + expires_after="2016-06-08"> <obsolete> Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics. </obsolete> @@ -76135,7 +77403,7 @@ </summary> </histogram> -<histogram name="NQE.RTT" units="ms"> +<histogram name="NQE.RTT" units="ms" expires_after="2018-05-15"> <obsolete> Deprecated 01/2018. </obsolete> @@ -76153,7 +77421,7 @@ </summary> </histogram> -<histogram name="NQE.RTT.HangingRequest" units="ms"> +<histogram name="NQE.RTT.HangingRequest" units="ms" expires_after="2019-03-06"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -76164,7 +77432,8 @@ </summary> </histogram> -<histogram name="NQE.RTT.NotAHangingRequest.EndToEndRTT" units="ms"> +<histogram name="NQE.RTT.NotAHangingRequest.EndToEndRTT" units="ms" + expires_after="2019-03-06"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -76176,7 +77445,8 @@ </summary> </histogram> -<histogram name="NQE.RTT.NotAHangingRequest.HttpRTT" units="ms"> +<histogram name="NQE.RTT.NotAHangingRequest.HttpRTT" units="ms" + expires_after="2019-03-06"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -76188,7 +77458,8 @@ </summary> </histogram> -<histogram name="NQE.RTT.NotAHangingRequest.MinHttpBound" units="ms"> +<histogram name="NQE.RTT.NotAHangingRequest.MinHttpBound" units="ms" + expires_after="2019-03-06"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -76201,7 +77472,8 @@ </summary> </histogram> -<histogram name="NQE.RTT.NotAHangingRequest.TransportRTT" units="ms"> +<histogram name="NQE.RTT.NotAHangingRequest.TransportRTT" units="ms" + expires_after="2019-03-06"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -76242,7 +77514,7 @@ </summary> </histogram> -<histogram name="NQE.RTTObservations" units="ms"> +<histogram name="NQE.RTTObservations" units="ms" expires_after="2016-06-08"> <obsolete> Replaced in May 2016 by NQE.MainFrame.RTT.* metrics. </obsolete> @@ -76254,7 +77526,8 @@ </summary> </histogram> -<histogram name="NQE.ThroughputAnalyzer.HangingRequests.Erased" units="count"> +<histogram name="NQE.ThroughputAnalyzer.HangingRequests.Erased" units="count" + expires_after="2019-03-06"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -76267,7 +77540,7 @@ </histogram> <histogram name="NQE.ThroughputAnalyzer.HangingRequests.NotErased" - units="count"> + units="count" expires_after="2019-03-06"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -76296,7 +77569,7 @@ </summary> </histogram> -<histogram name="NQE.TransportRTT" units="ms"> +<histogram name="NQE.TransportRTT" units="ms" expires_after="2018-05-15"> <obsolete> Deprecated 01/2018. </obsolete> @@ -76325,7 +77598,7 @@ </histogram> <histogram name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff" - units="ms"> + units="ms" expires_after="2017-08-22"> <obsolete> Obsoleted in August 2017. </obsolete> @@ -76341,7 +77614,8 @@ </summary> </histogram> -<histogram name="NQE.UnweightedAverage.MainFrame.RTT" units="ms"> +<histogram name="NQE.UnweightedAverage.MainFrame.RTT" units="ms" + expires_after="2017-08-22"> <obsolete> Obsoleted in August 2017. </obsolete> @@ -76357,7 +77631,7 @@ </histogram> <histogram name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff" - units="ms"> + units="ms" expires_after="2017-08-22"> <obsolete> Obsoleted in August 2017. </obsolete> @@ -76372,7 +77646,8 @@ </summary> </histogram> -<histogram name="NQE.WeightedAverage.MainFrame.RTT" units="ms"> +<histogram name="NQE.WeightedAverage.MainFrame.RTT" units="ms" + expires_after="2017-08-22"> <obsolete> Obsoleted in August 2017. </obsolete> @@ -76386,7 +77661,7 @@ </summary> </histogram> -<histogram name="ntp.searchurls.total"> +<histogram name="ntp.searchurls.total" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -76394,7 +77669,8 @@ <summary>TBD</summary> </histogram> -<histogram name="NtpHandler.AttachShownPageType" enum="NtpPaneType"> +<histogram name="NtpHandler.AttachShownPageType" enum="NtpPaneType" + expires_after="2013-06-01"> <obsolete> Deprecated 10/2011. No longer tracked, replaced with NewTabPage.DefaultPageType @@ -76403,7 +77679,8 @@ <summary>The default pane when the NTP is first opened.</summary> </histogram> -<histogram name="NtpHandler.SelectedShownPageType" enum="NtpPaneType"> +<histogram name="NtpHandler.SelectedShownPageType" enum="NtpPaneType" + expires_after="2013-06-01"> <obsolete> Deprecated 10/2011. No longer tracked, replaced with NewTabPage.SelectedPageType @@ -76412,7 +77689,8 @@ <summary>The pane selected when the user switches panes in the NTP.</summary> </histogram> -<histogram name="OAuth2Login.AccountRevoked.IsEmailId" enum="Boolean"> +<histogram name="OAuth2Login.AccountRevoked.IsEmailId" enum="Boolean" + expires_after="2019-02-14"> <obsolete> Long removed. </obsolete> @@ -76424,7 +77702,7 @@ </histogram> <histogram name="OAuth2Login.AccountRevoked.MigrationState" - enum="OAuth2LoginAccountRevokedMigrationState"> + enum="OAuth2LoginAccountRevokedMigrationState" expires_after="2019-02-14"> <obsolete> Long removed. </obsolete> @@ -76453,7 +77731,8 @@ </summary> </histogram> -<histogram name="OAuth2Login.ListAccountsFailure" enum="GoogleServiceAuthError"> +<histogram name="OAuth2Login.ListAccountsFailure" enum="GoogleServiceAuthError" + expires_after="2015-05-27"> <obsolete> Deprecated 2015-05-22. Replaced by Signin.ListAccountsFailure. </obsolete> @@ -76464,7 +77743,8 @@ </summary> </histogram> -<histogram name="OAuth2Login.ListAccountsRetry" enum="GoogleServiceAuthError"> +<histogram name="OAuth2Login.ListAccountsRetry" enum="GoogleServiceAuthError" + expires_after="2015-05-27"> <obsolete> Deprecated 2015-05-22. Replaced by Signin.ListAccountsRetry. </obsolete> @@ -76512,7 +77792,7 @@ </histogram> <histogram name="OAuth2Login.OAuthLoginUberTokenFailure" - enum="GoogleServiceAuthError"> + enum="GoogleServiceAuthError" expires_after="2015-05-27"> <obsolete> Deprecated 2015-05-22 </obsolete> @@ -76524,7 +77804,7 @@ </histogram> <histogram name="OAuth2Login.OAuthLoginUberTokenRetry" - enum="GoogleServiceAuthError"> + enum="GoogleServiceAuthError" expires_after="2015-05-27"> <obsolete> Deprecated 2015-05-22 </obsolete> @@ -76555,7 +77835,8 @@ </summary> </histogram> -<histogram name="OAuth2Login.SeedState" enum="OAuth2LoginSeedState"> +<histogram name="OAuth2Login.SeedState" enum="OAuth2LoginSeedState" + expires_after="2019-02-14"> <obsolete> Long removed. </obsolete> @@ -76634,7 +77915,7 @@ </histogram> <histogram name="OfflinePages.AggregatedRequestResult" - enum="OfflinePagesAggregatedRequestResult"> + enum="OfflinePagesAggregatedRequestResult" expires_after="2016-10-26"> <obsolete> Deprecated 2016-10, and replaced by OfflinePages.AggregatedRequestResult2. </obsolete> @@ -76652,7 +77933,7 @@ <histogram base="true" name="OfflinePages.ArchiveManager.ArchiveDirsCreationResult" - enum="PlatformFileError"> + enum="PlatformFileError" expires_after="2017-10-03"> <obsolete> Deprecated 2017-10, and replaced by OfflinePages.ArchiveManager.ArchiveDirsCreationResult2 with suffixes for @@ -76980,7 +78261,7 @@ </summary> </histogram> -<histogram name="OfflinePages.BatchDelete.Count"> +<histogram name="OfflinePages.BatchDelete.Count" expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used. </obsolete> @@ -77011,7 +78292,8 @@ <summary>Number of thumbnails removed by the thumbnail cleanup task.</summary> </histogram> -<histogram name="OfflinePages.ClearAllStatus" enum="OfflinePagesClearAllStatus"> +<histogram name="OfflinePages.ClearAllStatus" enum="OfflinePagesClearAllStatus" + expires_after="2016-03-03"> <obsolete> Deprecated 3/2016, and replaced by OfflinePages.ClearAllStatus2. </obsolete> @@ -77025,7 +78307,8 @@ <summary>Status code of wiping out the offline page data.</summary> </histogram> -<histogram name="OfflinePages.ClearStorageBatchSize" units="pages"> +<histogram name="OfflinePages.ClearStorageBatchSize" units="pages" + expires_after="2018-01-08"> <obsolete> Deprecated as of Jan 2018, replaced by OfflinePages.ClearTemporaryPages.BatchSize. @@ -77036,7 +78319,8 @@ </summary> </histogram> -<histogram name="OfflinePages.ClearStoragePreRunUsage" units="bytes"> +<histogram name="OfflinePages.ClearStoragePreRunUsage" units="bytes" + expires_after="2017-10-19"> <obsolete> Deprecated in Oct 2017 and replaced by OfflinePages.ClearStoragePreRunUsage2 as it was reporting data in bytes instead of the expected MiB. @@ -77057,7 +78341,7 @@ </histogram> <histogram name="OfflinePages.ClearStorageResult" - enum="OfflinePagesClearStorageResult"> + enum="OfflinePagesClearStorageResult" expires_after="2018-01-08"> <obsolete> Deprecated as of Jan 2018, replaced by OfflinePages.ClearTemporaryPages.Result. @@ -77094,7 +78378,7 @@ </histogram> <histogram name="OfflinePages.Consistency.DeleteOrphanedArchivesResult" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2017-12-08"> <obsolete> Deprecated 12/2017, replaced by OfflinePages.ConsistencyCheck.Temporary.Result and @@ -77107,7 +78391,7 @@ </histogram> <histogram name="OfflinePages.Consistency.DeletePagesMissingArchiveFileResult" - enum="OfflinePagesDeletePageResult"> + enum="OfflinePagesDeletePageResult" expires_after="2017-12-08"> <obsolete> Deprecated 12/2017, replaced by OfflinePages.ConsistencyCheck.Temporary.Result and @@ -77120,7 +78404,7 @@ </histogram> <histogram name="OfflinePages.Consistency.ExpirePagesMissingArchiveFileResult" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-11-30"> <obsolete> Deprecated 11/2016, replaced by OfflinePages.Consistency.DeletePagesMissingArchiveFileResult. @@ -77131,7 +78415,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Consistency.OrphanedArchivesCount"> +<histogram name="OfflinePages.Consistency.OrphanedArchivesCount" + expires_after="2017-12-08"> <obsolete> Deprecated 12/2017, replaced by OfflinePages.ConsistencyCheck.Temporary.PagesMissingDbEntryCount and @@ -77143,7 +78428,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Consistency.PagesMissingArchiveFileCount"> +<histogram name="OfflinePages.Consistency.PagesMissingArchiveFileCount" + expires_after="2017-12-08"> <obsolete> Deprecated 12/2017, replaced by OfflinePages.ConsistencyCheck.Temporary.PagesMissingArchiveFileCount and @@ -77251,7 +78537,8 @@ <summary>Result of temporary page consistency check.</summary> </histogram> -<histogram name="OfflinePages.DeletePage.AccessCount"> +<histogram name="OfflinePages.DeletePage.AccessCount" + expires_after="2017-12-21"> <obsolete> Deprecated as of 12/2017. Replaced by OfflinePages.AccessCount. </obsolete> @@ -77262,7 +78549,8 @@ </summary> </histogram> -<histogram name="OfflinePages.DeletePage.FreeSpaceMB" units="MB"> +<histogram name="OfflinePages.DeletePage.FreeSpaceMB" units="MB" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used, duplicate of OfflinePages.SavePage.FreeSpaceMB. @@ -77276,7 +78564,8 @@ </summary> </histogram> -<histogram name="OfflinePages.DeletePage.FreeSpacePercentage" units="%"> +<histogram name="OfflinePages.DeletePage.FreeSpacePercentage" units="%" + expires_after="2016-05-18"> <obsolete> Deprecated as of 5/2016. Marginal applicability. </obsolete> @@ -77287,7 +78576,8 @@ </summary> </histogram> -<histogram name="OfflinePages.DeletePage.LastOpenToCreated" units="minutes"> +<histogram name="OfflinePages.DeletePage.LastOpenToCreated" units="minutes" + expires_after="2018-01-08"> <obsolete> Deprecated as of 01/2018. Replaced by OfflinePages.PageAccessInterval. </obsolete> @@ -77298,7 +78588,8 @@ </summary> </histogram> -<histogram name="OfflinePages.DeletePage.PageSize" units="KB"> +<histogram name="OfflinePages.DeletePage.PageSize" units="KB" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used, duplicate of OfflinePages.PageSize. </obsolete> @@ -77306,7 +78597,8 @@ <summary>Size of the offline page, in kilobytes, that was deleted.</summary> </histogram> -<histogram name="OfflinePages.DeletePage.TimeSinceLastOpen" units="minutes"> +<histogram name="OfflinePages.DeletePage.TimeSinceLastOpen" units="minutes" + expires_after="2018-01-08"> <obsolete> Deprecated as of 01/2018. Replaced by OfflinePages.PageAccessInterval. </obsolete> @@ -77317,7 +78609,7 @@ </histogram> <histogram name="OfflinePages.DeletePage.TotalPageSizeAsPercentageOfFreeSpace" - units="%"> + units="%" expires_after="2018-03-30"> <obsolete> Deprecated as of 03/2018. Replaced by similar metric OfflinePages.StorageInfo.InternalUsagePercentage and @@ -77354,7 +78646,8 @@ <summary>Result of removing an offline copy for a page.</summary> </histogram> -<histogram name="OfflinePages.DownloadDeletedPageDuplicateCount" units="pages"> +<histogram name="OfflinePages.DownloadDeletedPageDuplicateCount" units="pages" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used. </obsolete> @@ -77388,7 +78681,8 @@ </summary> </histogram> -<histogram name="OfflinePages.DownloadSavedPageDuplicateCount" units="pages"> +<histogram name="OfflinePages.DownloadSavedPageDuplicateCount" units="pages" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used. </obsolete> @@ -77401,7 +78695,7 @@ </histogram> <histogram name="OfflinePages.DownloadSavedPageTimeSinceDuplicateSaved" - units="seconds"> + units="seconds" expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used. </obsolete> @@ -77424,7 +78718,7 @@ </histogram> <histogram name="OfflinePages.Edit.BookmarkUrlChangedForOfflinePage" - enum="BooleanMatched"> + enum="BooleanMatched" expires_after="2016-05-17"> <obsolete> Deprecated 5/2016. Offline pages no longer depend on bookmarks UI. </obsolete> @@ -77434,7 +78728,7 @@ </summary> </histogram> -<histogram name="OfflinePages.ExpirePage.BatchSize"> +<histogram name="OfflinePages.ExpirePage.BatchSize" expires_after="2016-11-30"> <obsolete> Deprecated 11/2016. Offline pages no longer use two-step expiration. </obsolete> @@ -77442,7 +78736,8 @@ <summary>Number of pages that are expired in a batch.</summary> </histogram> -<histogram name="OfflinePages.ExpirePage.PageLifetime" units="minutes"> +<histogram name="OfflinePages.ExpirePage.PageLifetime" units="minutes" + expires_after="2016-11-30"> <obsolete> Deprecated 11/2016. Offline pages no longer use two-step expiration. </obsolete> @@ -77453,7 +78748,7 @@ </histogram> <histogram name="OfflinePages.ExpirePage.StoreUpdateResult" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2016-11-30"> <obsolete> Deprecated 11/2016. Offline pages no longer use two-step expiration. </obsolete> @@ -77461,7 +78756,8 @@ <summary>Result of updating expired page in store.</summary> </histogram> -<histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess" units="minutes"> +<histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess" units="minutes" + expires_after="2016-11-30"> <obsolete> Deprecated 11/2016. Offline pages no longer use two-step expiration. </obsolete> @@ -77471,7 +78767,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Filter.OnlineWhenEntering" enum="Boolean"> +<histogram name="OfflinePages.Filter.OnlineWhenEntering" enum="Boolean" + expires_after="2016-05-17"> <obsolete> Deprecated 5/2016. Offline pages no longer depend on bookmarks UI. </obsolete> @@ -77483,7 +78780,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Filter.OnlineWhenLeaving" enum="Boolean"> +<histogram name="OfflinePages.Filter.OnlineWhenLeaving" enum="Boolean" + expires_after="2016-05-17"> <obsolete> Deprecated 5/2016. Offline pages no longer depend on bookmarks UI. </obsolete> @@ -77494,7 +78792,8 @@ </summary> </histogram> -<histogram name="OfflinePages.FirstOpenSinceCreated" units="minutes"> +<histogram name="OfflinePages.FirstOpenSinceCreated" units="minutes" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. Merged to OfflinePages.PageAccessInterval. </obsolete> @@ -77505,7 +78804,8 @@ </summary> </histogram> -<histogram name="OfflinePages.IncognitoSave" enum="Boolean"> +<histogram name="OfflinePages.IncognitoSave" enum="Boolean" + expires_after="2016-05-17"> <obsolete> Deprecated 5/2016. Not longer needed. </obsolete> @@ -77527,7 +78827,8 @@ </summary> </histogram> -<histogram name="OfflinePages.LaunchLocation" enum="StarsLaunchLocation"> +<histogram name="OfflinePages.LaunchLocation" enum="StarsLaunchLocation" + expires_after="2016-05-17"> <obsolete> Deprecated 5/2016. Offline pages no longer depend on bookmarks UI. </obsolete> @@ -77543,7 +78844,8 @@ </summary> </histogram> -<histogram name="OfflinePages.LoadSuccess" enum="BooleanSuccess"> +<histogram name="OfflinePages.LoadSuccess" enum="BooleanSuccess" + expires_after="2015-10-27"> <obsolete> Deprecated 10/2015, and replaced by OfflinePages.LoadStatus. </obsolete> @@ -77575,7 +78877,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Model.ArchiveDirCreationTime" units="ms"> +<histogram name="OfflinePages.Model.ArchiveDirCreationTime" units="ms" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used. </obsolete> @@ -77595,7 +78898,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Model.FinalLoadSuccessful" enum="Boolean"> +<histogram name="OfflinePages.Model.FinalLoadSuccessful" enum="Boolean" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used. </obsolete> @@ -77606,7 +78910,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Model.InitAttemptsSpent" units="attempts"> +<histogram name="OfflinePages.Model.InitAttemptsSpent" units="attempts" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. No longer used. </obsolete> @@ -77618,7 +78923,7 @@ </summary> </histogram> -<histogram name="OfflinePages.OfflinePageCount"> +<histogram name="OfflinePages.OfflinePageCount" expires_after="2016-05-17"> <obsolete> Deprecated 5/2016. This was the dup of OfflinePages.SavedPageCount. </obsolete> @@ -77655,7 +78960,8 @@ </summary> </histogram> -<histogram name="OfflinePages.OnlineOnOpen" enum="Boolean"> +<histogram name="OfflinePages.OnlineOnOpen" enum="Boolean" + expires_after="2016-05-17"> <obsolete> Deprecated 5/2016. Offline pages no longer depend on bookmarks UI. </obsolete> @@ -77665,7 +78971,8 @@ </summary> </histogram> -<histogram name="OfflinePages.OpenSinceLastOpen" units="minutes"> +<histogram name="OfflinePages.OpenSinceLastOpen" units="minutes" + expires_after="2018-02-05"> <obsolete> Deprecated 2/2018. Merged to OfflinePages.PageAccessInterval. </obsolete> @@ -77730,7 +79037,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Prefetching.ActionRetryAttempts" units="attempts"> +<histogram name="OfflinePages.Prefetching.ActionRetryAttempts" units="attempts" + expires_after="2017-09-15"> <obsolete> Deprecated 9/2017. Replaced by OfflinePages.Prefetching.ActionAttempts </obsolete> @@ -77742,7 +79050,8 @@ </histogram> <histogram name="OfflinePages.Prefetching.DownloadedArchiveSizeVsExpected" - enum="OfflinePrefetchArchiveActualSizeVsExpected"> + enum="OfflinePrefetchArchiveActualSizeVsExpected" + expires_after="2018-08-20"> <obsolete> Deprecated 8/2018. </obsolete> @@ -77811,7 +79120,8 @@ </summary> </histogram> -<histogram name="OfflinePages.Prefetching.FetchThumbnail.Start" enum="Boolean"> +<histogram name="OfflinePages.Prefetching.FetchThumbnail.Start" enum="Boolean" + expires_after="2019-03-04"> <obsolete> Deprecated as of 2/2019. </obsolete> @@ -77973,7 +79283,8 @@ </summary> </histogram> -<histogram name="OfflinePages.RedirectResult" enum="OfflinePagesRedirectResult"> +<histogram name="OfflinePages.RedirectResult" enum="OfflinePagesRedirectResult" + expires_after="2016-08-25"> <obsolete> Deprecated 8/2016. Use OfflinePages.RequestResult instead. </obsolete> @@ -77985,7 +79296,8 @@ </summary> </histogram> -<histogram name="OfflinePages.RedirectToOfflineCount" units="count"> +<histogram name="OfflinePages.RedirectToOfflineCount" units="count" + expires_after="2016-06-30"> <obsolete> Deprecated 6/2016. Refactored into OfflinePages.RedirectResult. </obsolete> @@ -77997,7 +79309,8 @@ </summary> </histogram> -<histogram name="OfflinePages.RedirectToOnlineCount" units="count"> +<histogram name="OfflinePages.RedirectToOnlineCount" units="count" + expires_after="2016-06-30"> <obsolete> Deprecated 6/2016. Refactored into OfflinePages.RedirectResult. </obsolete> @@ -78056,7 +79369,8 @@ </summary> </histogram> -<histogram name="OfflinePages.SavedPageCount" units="pages"> +<histogram name="OfflinePages.SavedPageCount" units="pages" + expires_after="2018-02-08"> <obsolete> Deprecated as of 2/2018. Replaced by OfflinePages.SavedPageCountUponQuery. </obsolete> @@ -78107,7 +79421,8 @@ </summary> </histogram> -<histogram name="OfflinePages.SavePage.FreeSpaceMB" units="MB"> +<histogram name="OfflinePages.SavePage.FreeSpaceMB" units="MB" + expires_after="2018-03-30"> <obsolete> Deprecated as of 03/2018. Replaced by similar metric OfflinePages.StorageInfo.InternalFreeSpaceMB. @@ -78121,7 +79436,8 @@ </summary> </histogram> -<histogram name="OfflinePages.SavePage.FreeSpacePercentage" units="%"> +<histogram name="OfflinePages.SavePage.FreeSpacePercentage" units="%" + expires_after="2016-05-18"> <obsolete> Deprecated as of 5/2016. Marginal applicability. </obsolete> @@ -78190,7 +79506,8 @@ </summary> </histogram> -<histogram name="OfflinePages.ShowOfflinePageOnBadNetwork" enum="Boolean"> +<histogram name="OfflinePages.ShowOfflinePageOnBadNetwork" enum="Boolean" + expires_after="2016-06-30"> <obsolete> Deprecated 6/2016. Refactored into OfflinePages.RedirectResult. </obsolete> @@ -78202,7 +79519,7 @@ </histogram> <histogram name="OfflinePages.SQLStorage.CreateDirectoryResult" - enum="PlatformFileError"> + enum="PlatformFileError" expires_after="2019-03-07"> <obsolete> Removed 3/2019. </obsolete> @@ -78303,7 +79620,8 @@ </summary> </histogram> -<histogram name="OfflinePages.TotalPageSize" units="MB"> +<histogram name="OfflinePages.TotalPageSize" units="MB" + expires_after="2018-03-30"> <obsolete> Deprecated as of 03/2018. Replaced by similar metric OfflinePages.StorageInfo.TotalArchiveSize. @@ -78319,7 +79637,8 @@ </summary> </histogram> -<histogram name="OfflinePages.TotalPageSizePercentage" units="%"> +<histogram name="OfflinePages.TotalPageSizePercentage" units="%" + expires_after="2016-05-18"> <obsolete> Deprecated as of 5/2016. Marginal applicability. </obsolete> @@ -78401,7 +79720,8 @@ </summary> </histogram> -<histogram name="OfflinePolicy.SuccessfulResourceLoadPercentage" units="%"> +<histogram name="OfflinePolicy.SuccessfulResourceLoadPercentage" units="%" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -78413,7 +79733,8 @@ </histogram> <histogram name="Omnibox.AggressiveHistoryURLProviderFieldTrialBeacon" - enum="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon"> + enum="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon" + expires_after="2013-04-16"> <obsolete> Aggressive HistoryURL provider field trial deleted in spring 2012. </obsolete> @@ -78510,7 +79831,8 @@ </summary> </histogram> -<histogram name="Omnibox.CharTypedToRepaintLatency.Composited" units="ms"> +<histogram name="Omnibox.CharTypedToRepaintLatency.Composited" units="ms" + expires_after="2017-08-21"> <obsolete> This became the new implementation of Omnibox.CharTypedToRepaintLatency as of 08/2017. @@ -78654,7 +79976,8 @@ </summary> </histogram> -<histogram name="Omnibox.EnteredKeywordMode" enum="OmniboxEnteredKeywordMode"> +<histogram name="Omnibox.EnteredKeywordMode" enum="OmniboxEnteredKeywordMode" + expires_after="2018-10-31"> <obsolete> Deprecated 10/2018 and replaced with "Omnibox.EnteredKeywordMode2". @@ -78686,7 +80009,7 @@ </summary> </histogram> -<histogram name="Omnibox.FocusToOpenTime" units="ms"> +<histogram name="Omnibox.FocusToOpenTime" units="ms" expires_after="2014-05-01"> <obsolete> Replaced with Omnibox.FocusToOpenTimeAnyPopupState in April 2014. </obsolete> @@ -78697,7 +80020,8 @@ </summary> </histogram> -<histogram name="Omnibox.FocusToOpenTimeAnyPopupState" units="ms"> +<histogram name="Omnibox.FocusToOpenTimeAnyPopupState" units="ms" + expires_after="2016-08-12"> <obsolete> Replaced with Omnibox.FocusToOpenTimeAnyPopupState2 in August, 2016. </obsolete> @@ -78709,7 +80033,8 @@ </summary> </histogram> -<histogram name="Omnibox.FocusToOpenTimeAnyPopupState2" units="ms"> +<histogram name="Omnibox.FocusToOpenTimeAnyPopupState2" units="ms" + expires_after="2017-01-20"> <obsolete> Replaced with Omnibox.FocusToOpenTimeAnyPopupState3 in January, 2017, which only differs in the bucketing and range. @@ -78753,7 +80078,8 @@ </summary> </histogram> -<histogram name="Omnibox.HasLegalDefaultMatchWithoutCompletion" enum="Boolean"> +<histogram name="Omnibox.HasLegalDefaultMatchWithoutCompletion" enum="Boolean" + expires_after="2015-01-27"> <obsolete> Deprecated 2015-01-27 </obsolete> @@ -78915,7 +80241,7 @@ </histogram> <histogram name="Omnibox.PhysicalWebProvider.SuggestionUsedWithoutOmniboxFocus" - enum="Boolean"> + enum="Boolean" expires_after="2018-04-17"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -78931,7 +80257,7 @@ </summary> </histogram> -<histogram name="Omnibox.PhysicalWebProviderMatches"> +<histogram name="Omnibox.PhysicalWebProviderMatches" expires_after="2018-04-17"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -78946,7 +80272,7 @@ </histogram> <histogram name="Omnibox.ProgressBarBreakPointUpdateCount" - units="break point updates"> + units="break point updates" expires_after="2017-05-23"> <obsolete> Obsolete 05/16/2017. Data is unused (crbug.com/719801). </obsolete> @@ -78957,7 +80283,8 @@ </summary> </histogram> -<histogram name="Omnibox.ProgressBarUpdateCount" units="frame updates"> +<histogram name="Omnibox.ProgressBarUpdateCount" units="frame updates" + expires_after="2017-05-23"> <obsolete> Obsolete 05/16/2017. Data is unused (crbug.com/719801). </obsolete> @@ -78971,7 +80298,7 @@ </summary> </histogram> -<histogram name="Omnibox.ProviderTime" units="ms"> +<histogram name="Omnibox.ProviderTime" units="ms" expires_after="2015-06-17"> <obsolete> Deprecated 2015-06-12. Replaced by Omnibox.ProviderTime2. </obsolete> @@ -78989,7 +80316,7 @@ </summary> </histogram> -<histogram name="Omnibox.QueryBookmarksTime"> +<histogram name="Omnibox.QueryBookmarksTime" expires_after="2013-04-16"> <obsolete> Deprecated 2012-11-14. Replaced by Omnibox.ProviderTime. </obsolete> @@ -79032,7 +80359,7 @@ </summary> </histogram> -<histogram name="Omnibox.QueryTime" units="ms"> +<histogram name="Omnibox.QueryTime" units="ms" expires_after="2015-06-17"> <obsolete> Deprecated 2015-06-12. Replaced by Omnibox.QueryTime2. </obsolete> @@ -79063,7 +80390,8 @@ </summary> </histogram> -<histogram name="Omnibox.SearchEngine" enum="OmniboxSearchEngine"> +<histogram name="Omnibox.SearchEngine" enum="OmniboxSearchEngine" + expires_after="2014-02-28"> <obsolete> Made obsolete around Chrome 32. Use Omnibox.SearchEngineType instead. </obsolete> @@ -79092,7 +80420,8 @@ </summary> </histogram> -<histogram name="Omnibox.SearchProvider.ConvertResultsTime" units="ms"> +<histogram name="Omnibox.SearchProvider.ConvertResultsTime" units="ms" + expires_after="2018-08-09"> <obsolete> Deleted in August 2018 in M-70. </obsolete> @@ -79156,7 +80485,8 @@ </summary> </histogram> -<histogram name="Omnibox.SuggestionUsed.NearbyURLCount" units="URLs"> +<histogram name="Omnibox.SuggestionUsed.NearbyURLCount" units="URLs" + expires_after="2017-02-23"> <obsolete> Deprecated in M58, replaced with Omnibox.SuggestionUsed.NearbyURLCount.AtFocus and @@ -79176,7 +80506,8 @@ </summary> </histogram> -<histogram name="Omnibox.SuggestionUsed.NearbyURLCount.AtFocus" units="URLs"> +<histogram name="Omnibox.SuggestionUsed.NearbyURLCount.AtFocus" units="URLs" + expires_after="2018-04-17"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -79196,7 +80527,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.NearbyURLCount.AtMatchCreation" - units="URLs"> + units="URLs" expires_after="2018-04-17"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -79836,7 +81167,7 @@ </summary> </histogram> -<histogram name="OriginChip.Pressed"> +<histogram name="OriginChip.Pressed" expires_after="2015-02-12"> <obsolete> Deprecated with CL 731423002. OriginChip has been removed. </obsolete> @@ -79844,7 +81175,8 @@ <summary>The number of clicks on the origin chip.</summary> </histogram> -<histogram name="OriginTrials.FeatureEnabled" enum="OriginTrialEnableResult"> +<histogram name="OriginTrials.FeatureEnabled" enum="OriginTrialEnableResult" + expires_after="2016-07-21"> <obsolete> Obsolete as of Chrome 54. Sort of replaced by OriginTrials.ValidationResult. </obsolete> @@ -79858,7 +81190,7 @@ </histogram> <histogram name="OriginTrials.FeatureEnabled.MessageGenerated" - enum="OriginTrialMessageGeneratedResult"> + enum="OriginTrialMessageGeneratedResult" expires_after="2016-07-21"> <obsolete> Obsolete as of Chrome 54. </obsolete> @@ -79890,7 +81222,8 @@ </summary> </histogram> -<histogram name="OSCrypt.EncryptionKeyOverwritingPreventions"> +<histogram name="OSCrypt.EncryptionKeyOverwritingPreventions" + expires_after="2018-11-22"> <obsolete> Obsolete as of Chrome 72. </obsolete> @@ -79932,7 +81265,8 @@ </summary> </histogram> -<histogram name="OSX.CatSixtyFour" enum="CatSixtyFour"> +<histogram name="OSX.CatSixtyFour" enum="CatSixtyFour" + expires_after="2015-03-25"> <obsolete> Obsolete as of Chrome 43. See OmahaProxy for more relevant statistics. </obsolete> @@ -79953,7 +81287,8 @@ <summary>Records the Fast User Switching events that occur.</summary> </histogram> -<histogram name="OSX.Fullscreen.Enter" enum="OSXFullscreenParameters"> +<histogram name="OSX.Fullscreen.Enter" enum="OSXFullscreenParameters" + expires_after="2014-10-27"> <obsolete> Deprecated as of Chrome 40. See OSX.Fullscreen.Enter.Style, OSX.Fullscreen.Enter.WindowLocation and @@ -79999,7 +81334,8 @@ </summary> </histogram> -<histogram name="OSX.Fullscreen.ToolbarStyle" enum="OSXFullscreenToolbarStyle"> +<histogram name="OSX.Fullscreen.ToolbarStyle" enum="OSXFullscreenToolbarStyle" + expires_after="2018-11-19"> <obsolete> Deprecated as of 11/2018. </obsolete> @@ -80081,7 +81417,8 @@ </summary> </histogram> -<histogram name="OSX.RendererHost.SurfaceWaitTime" units="ms"> +<histogram name="OSX.RendererHost.SurfaceWaitTime" units="ms" + expires_after="2015-11-24"> <obsolete> Deprecated as of 11/2015. </obsolete> @@ -80102,7 +81439,8 @@ </summary> </histogram> -<histogram name="OSX.SharedMemory.Mechanism" enum="OSXSharedMemoryMechanism"> +<histogram name="OSX.SharedMemory.Mechanism" enum="OSXSharedMemoryMechanism" + expires_after="2016-03-24"> <obsolete> Deprecated as of Chrome 51 since Mach has become the default mechanism. </obsolete> @@ -80114,7 +81452,8 @@ </summary> </histogram> -<histogram name="OSX.StagingDirectoryLocation" enum="OSXStagingDirectoryStep"> +<histogram name="OSX.StagingDirectoryLocation" enum="OSXStagingDirectoryStep" + expires_after="2019-02-16"> <obsolete> Deprecated as of 02/2019 in favor of StagingDirectoryLocation2. </obsolete> @@ -80207,7 +81546,8 @@ </summary> </histogram> -<histogram name="Overscroll.Cancelled" enum="NavigationDirection"> +<histogram name="Overscroll.Cancelled" enum="NavigationDirection" + expires_after="2017-03-02"> <obsolete> Deprecated as of Chrome 59 in favour of Overscroll.Cancelled3. </obsolete> @@ -80225,7 +81565,8 @@ </summary> </histogram> -<histogram name="Overscroll.Completed" enum="OverscrollMode"> +<histogram name="Overscroll.Completed" enum="OverscrollMode" + expires_after="2015-04-14"> <obsolete> Deprecated as of Chrome 44 in favour of Overscroll.Cancelled and Overscroll.Navigated2. @@ -80241,7 +81582,8 @@ </details> </histogram> -<histogram name="Overscroll.Navigated" enum="OverscrollMode"> +<histogram name="Overscroll.Navigated" enum="OverscrollMode" + expires_after="2015-04-14"> <obsolete> Deprecated as of Chrome 44 to switch to NavigationDirection enum. </obsolete> @@ -80253,7 +81595,8 @@ </summary> </histogram> -<histogram name="Overscroll.Navigated2" enum="NavigationDirection"> +<histogram name="Overscroll.Navigated2" enum="NavigationDirection" + expires_after="2017-03-02"> <obsolete> Deprecated as of Chrome 59 in favour of Overscroll.Navigated3. </obsolete> @@ -80273,7 +81616,8 @@ </summary> </histogram> -<histogram name="Overscroll.Started" enum="OverscrollMode"> +<histogram name="Overscroll.Started" enum="OverscrollMode" + expires_after="2015-04-14"> <obsolete> Deprecated as of Chrome 44 to switch to NavigationDirection enum. </obsolete> @@ -80286,7 +81630,8 @@ </summary> </histogram> -<histogram name="Overscroll.Started2" enum="NavigationDirection"> +<histogram name="Overscroll.Started2" enum="NavigationDirection" + expires_after="2017-03-02"> <obsolete> Deprecated as of Chrome 59 in favour of Overscroll.Started3. </obsolete> @@ -80504,7 +81849,8 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.AbortTiming.Background" units="ms"> +<histogram base="true" name="PageLoad.AbortTiming.Background" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80517,7 +81863,8 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.AbortTiming.ClientRedirect" units="ms"> +<histogram base="true" name="PageLoad.AbortTiming.ClientRedirect" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80529,7 +81876,8 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.AbortTiming.Close" units="ms"> +<histogram base="true" name="PageLoad.AbortTiming.Close" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80542,7 +81890,7 @@ </histogram> <histogram base="true" name="PageLoad.AbortTiming.ForwardBackNavigation" - units="ms"> + units="ms" expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80554,7 +81902,8 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.AbortTiming.NewNavigation" units="ms"> +<histogram base="true" name="PageLoad.AbortTiming.NewNavigation" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80566,7 +81915,8 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.AbortTiming.Other" units="ms"> +<histogram base="true" name="PageLoad.AbortTiming.Other" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80578,7 +81928,8 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.AbortTiming.Reload" units="ms"> +<histogram base="true" name="PageLoad.AbortTiming.Reload" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80590,7 +81941,8 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.AbortTiming.Stop" units="ms"> +<histogram base="true" name="PageLoad.AbortTiming.Stop" units="ms" + expires_after="2016-12-01"> <obsolete> Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent. </obsolete> @@ -80602,7 +81954,8 @@ </summary> </histogram> -<histogram name="PageLoad.AbortTiming.UnknownNavigation" units="ms"> +<histogram name="PageLoad.AbortTiming.UnknownNavigation" units="ms" + expires_after="2016-08-02"> <obsolete> We now have sufficient infrastructure to always characterize aborts that resulted in new navigations. @@ -80628,7 +81981,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.AdFrames.Aggregate.Network" units="KB"> +<histogram name="PageLoad.Bytes.AdFrames.Aggregate.Network" units="KB" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.AdFrames.Aggregate.Network. @@ -80646,7 +82000,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.AdFrames.Aggregate.PercentNetwork" units="%"> +<histogram name="PageLoad.Bytes.AdFrames.Aggregate.PercentNetwork" units="%" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.AdFrames.Aggregate.PercentNetwork. @@ -80664,7 +82019,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.AdFrames.Aggregate.Total" units="KB"> +<histogram name="PageLoad.Bytes.AdFrames.Aggregate.Total" units="KB" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.AdFrames.Aggregate.Total. @@ -80682,7 +82038,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.AdFrames.PerFrame.Network" units="KB"> +<histogram name="PageLoad.Bytes.AdFrames.PerFrame.Network" units="KB" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.AdFrames.PerFrame.Network. @@ -80699,7 +82056,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.AdFrames.PerFrame.PercentNetwork" units="%"> +<histogram name="PageLoad.Bytes.AdFrames.PerFrame.PercentNetwork" units="%" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.AdFrames.PerFrame.PercentNetwork. @@ -80717,7 +82075,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.AdFrames.PerFrame.Total" units="KB"> +<histogram name="PageLoad.Bytes.AdFrames.PerFrame.Total" units="KB" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.AdFrames.PerFrame.Total. @@ -80734,7 +82093,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.FullPage.Network" units="KB"> +<histogram name="PageLoad.Bytes.FullPage.Network" units="KB" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.FullPage.Network. </obsolete> @@ -80749,7 +82109,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.FullPage.Network.PercentAds" units="%"> +<histogram name="PageLoad.Bytes.FullPage.Network.PercentAds" units="%" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.FullPage.Network.PercentAds. @@ -80767,7 +82128,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.FullPage.Total" units="KB"> +<histogram name="PageLoad.Bytes.FullPage.Total" units="KB" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.FullPage.Total. </obsolete> @@ -80781,7 +82143,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.FullPage.Total.PercentAds" units="%"> +<histogram name="PageLoad.Bytes.FullPage.Total.PercentAds" units="%" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.FullPage.Total.PercentAds. @@ -80799,7 +82162,8 @@ </summary> </histogram> -<histogram name="PageLoad.Bytes.NonAdFrames.Aggregate.Total" units="KB"> +<histogram name="PageLoad.Bytes.NonAdFrames.Aggregate.Total" units="KB" + expires_after="2019-01-17"> <obsolete> Deprecated 01/19. Replaced with PageLoad.Cients.Ads.Bytes.NonAdFrames.Aggregate.Total. @@ -80818,7 +82182,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.All.Navigations.AdFrameRenavigatedToAd" - enum="DidNavigateToAd"> + enum="DidNavigateToAd" expires_after="2018-07-13"> <obsolete> Deprecated In July 2018, metric was buggy for subresource filter ads. </obsolete> @@ -80854,7 +82218,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.All.ParentExistsForSubFrame" - enum="ParentFrameKnown"> + enum="ParentFrameKnown" expires_after="2018-09-21"> <obsolete> Deprecated in September 2018. At deprecation, 98.12% of parent frames were known. @@ -80867,7 +82231,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.All.ResourceTypeWhenNoFrameFound" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-09-20"> <obsolete> Deprecated in September 2018. At time of deprecation: Subframe 80%, Script 6.5%, Images 10%, and XHR was 3%. @@ -80980,7 +82344,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.Google.ParentExistsForSubFrame" - enum="ParentFrameKnown"> + enum="ParentFrameKnown" expires_after="2017-07-14"> <obsolete> Deprecated In July 2017. Use PageLoad.Clients.Ads.All.ParentExistsForSubFrame instead. @@ -80993,7 +82357,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2017-07-14"> <obsolete> Deprecated In July 2017. Use PageLoad.Clients.Ads.All.ResourceTypeWhenNoFrameFound instead. @@ -81485,7 +82849,8 @@ </summary> </histogram> -<histogram name="PageLoad.Clients.DelayNavigation.Delay.Actual" units="ms"> +<histogram name="PageLoad.Clients.DelayNavigation.Delay.Actual" units="ms" + expires_after="2018-03-08"> <obsolete> Deprecated March 2018 </obsolete> @@ -81497,7 +82862,8 @@ </summary> </histogram> -<histogram name="PageLoad.Clients.DelayNavigation.Delay.Delta" units="ms"> +<histogram name="PageLoad.Clients.DelayNavigation.Delay.Delta" units="ms" + expires_after="2018-03-08"> <obsolete> Deprecated March 2018 </obsolete> @@ -81509,7 +82875,8 @@ </summary> </histogram> -<histogram name="PageLoad.Clients.DelayNavigation.Delay.Specified" units="ms"> +<histogram name="PageLoad.Clients.DelayNavigation.Delay.Specified" units="ms" + expires_after="2018-03-08"> <obsolete> Deprecated March 2018 </obsolete> @@ -81552,7 +82919,7 @@ </histogram> <histogram name="PageLoad.Clients.GoogleCaptcha.Events" - enum="GoogleCaptchaEvent"> + enum="GoogleCaptchaEvent" expires_after="2018-05-02"> <obsolete> Deprecated May 2018 </obsolete> @@ -81617,7 +82984,7 @@ </histogram> <histogram name="PageLoad.Clients.ServiceWorker.PageTransition" - enum="CorePageTransition"> + enum="CorePageTransition" expires_after="2018-06-26"> <obsolete> Deprecated June 2018 (M69) in favor of PageLoad.Clients.ServiceWorker2.PageTransition. @@ -81662,7 +83029,7 @@ </histogram> <histogram name="PageLoad.Clients.SubresourceFilter.ActivationDecision" - enum="SubresourceFilterActivationDecision"> + enum="SubresourceFilterActivationDecision" expires_after="2018-05-18"> <obsolete> Deprecated May 2018 (M68) in favor of SubresourceFilter.PageLoad.ActivationDecision @@ -81678,7 +83045,8 @@ </summary> </histogram> -<histogram name="PageLoad.Clients.SubresourceFilter.Count" enum="Boolean"> +<histogram name="PageLoad.Clients.SubresourceFilter.Count" enum="Boolean" + expires_after="2018-05-18"> <obsolete> Deprecated May 2018 (M68) in favor of SubresourceFilter.PageLoad.NumSubresourceLoads.MatchedRules (e.g. by looking @@ -81708,7 +83076,7 @@ </histogram> <histogram name="PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint" - units="ms"> + units="ms" expires_after="2018-05-30"> <obsolete> Deprecated in May 2018 (M69). </obsolete> @@ -81720,7 +83088,7 @@ </histogram> <histogram name="PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint" - units="ms"> + units="ms" expires_after="2018-05-30"> <obsolete> Deprecated in May 2018 (M69). </obsolete> @@ -81731,7 +83099,7 @@ </histogram> <histogram name="PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint" - units="ms"> + units="ms" expires_after="2018-05-30"> <obsolete> Deprecated in May 2018 (M69). </obsolete> @@ -81770,7 +83138,8 @@ </summary> </histogram> -<histogram name="PageLoad.EventCounts" enum="PageLoadEvent"> +<histogram name="PageLoad.EventCounts" enum="PageLoadEvent" + expires_after="2015-10-19"> <obsolete> deprecated in favor of PageLoad.Events.* </obsolete> @@ -81783,7 +83152,8 @@ </summary> </histogram> -<histogram name="PageLoad.Events.Committed" enum="CommittedLoadEvent"> +<histogram name="PageLoad.Events.Committed" enum="CommittedLoadEvent" + expires_after="2015-12-24"> <obsolete> Deprecated in favor of PageLoad.Timing2.NavigationToCommit and PageLoad.AbortTiming. @@ -81802,7 +83172,8 @@ </summary> </histogram> -<histogram name="PageLoad.Events.InternalError" enum="InternalErrorLoadEvent"> +<histogram name="PageLoad.Events.InternalError" enum="InternalErrorLoadEvent" + expires_after="2016-07-27"> <obsolete> Deprecated in favor of PageLoad.Internal.ErrorCode. </obsolete> @@ -81813,7 +83184,8 @@ </summary> </histogram> -<histogram name="PageLoad.Events.Provisional" enum="ProvisionalLoadEvent"> +<histogram name="PageLoad.Events.Provisional" enum="ProvisionalLoadEvent" + expires_after="2016-02-08"> <obsolete> Deprecated Feb 2016 in favor of PageLoad.AbortTiming and PageLoad.Timing2.NavigationToFailedProvisionalLoad. Note that the @@ -81840,7 +83212,7 @@ </histogram> <histogram base="true" name="PageLoad.Experimental.AbortTiming.ClientRedirect" - units="ms"> + units="ms" expires_after="2017-02-22"> <obsolete> Deprecated in favor of PageLoad.Internal.ClientRedirect.*. </obsolete> @@ -81964,7 +83336,7 @@ </histogram> <histogram name="PageLoad.Experimental.Cache.RequestPercent.ParseStop" - units="%"> + units="%" expires_after="2018-01-17"> <obsolete> Removed Jan 2018 </obsolete> @@ -81976,7 +83348,7 @@ </histogram> <histogram name="PageLoad.Experimental.Cache.TotalRequests.ParseStop" - units="requests"> + units="requests" expires_after="2018-01-17"> <obsolete> Removed Jan 2018 </obsolete> @@ -82082,7 +83454,7 @@ </histogram> <histogram name="PageLoad.Experimental.PageTiming.FirstPaintToFirstBackground" - units="ms"> + units="ms" expires_after="2017-02-28"> <obsolete> Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.AfterPaint. </obsolete> @@ -82095,7 +83467,7 @@ </histogram> <histogram name="PageLoad.Experimental.PageTiming.FirstPaintToPageEnd" - units="ms"> + units="ms" expires_after="2017-02-28"> <obsolete> Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.AfterPaint. </obsolete> @@ -82107,7 +83479,7 @@ </histogram> <histogram name="PageLoad.Experimental.PageTiming.NavigationToFirstBackground" - units="ms"> + units="ms" expires_after="2017-02-28"> <obsolete> Deprecated in favor of PageLoad.PageTiming.ForegroundDuration. </obsolete> @@ -82119,7 +83491,7 @@ </histogram> <histogram name="PageLoad.Experimental.PageTiming.NavigationToPageEnd" - units="ms"> + units="ms" expires_after="2017-02-28"> <obsolete> Deprecated in favor of PageLoad.PageTiming.ForegroundDuration. </obsolete> @@ -82377,7 +83749,7 @@ </histogram> <histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.0-50" - units="ms"> + units="ms" expires_after="2018-01-17"> <obsolete> Removed Jan 2018 </obsolete> @@ -82389,7 +83761,7 @@ </histogram> <histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.51-100" - units="ms"> + units="ms" expires_after="2018-01-17"> <obsolete> Removed Jan 2018 </obsolete> @@ -82444,7 +83816,7 @@ </histogram> <histogram name="PageLoad.Experimental.TotalRequests.ParseStop" - units="requests"> + units="requests" expires_after="2018-01-17"> <obsolete> Removed Jan 2018 </obsolete> @@ -82455,7 +83827,7 @@ </histogram> <histogram name="PageLoad.FrameCounts.AdFrames.PerFrame.CrossOrigin" - enum="CrossOriginAd"> + enum="CrossOriginAd" expires_after="2018-04-30"> <obsolete> Removed April 2018, replaced by OriginStatus. </obsolete> @@ -82588,7 +83960,8 @@ </summary> </histogram> -<histogram name="PageLoad.InteractiveTiming.FirstInputDelay" units="ms"> +<histogram name="PageLoad.InteractiveTiming.FirstInputDelay" units="ms" + expires_after="2019-01-23"> <obsolete> Removed on January 2019 in favor of PageLoad.InteractiveTiming.FirstInputDelay2 which correctly excludes some @@ -82642,7 +84015,8 @@ </summary> </histogram> -<histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp" units="ms"> +<histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp" units="ms" + expires_after="2019-01-23"> <obsolete> Removed on January 2019 in favor of PageLoad.InteractiveTiming.FirstInputTimestamp2 which correctly excludes @@ -82683,7 +84057,8 @@ </summary> </histogram> -<histogram name="PageLoad.InteractiveTiming.InputDelay" units="ms"> +<histogram name="PageLoad.InteractiveTiming.InputDelay" units="ms" + expires_after="2019-01-23"> <obsolete> Removed on January 2019 in favor of PageLoad.InteractiveTiming.InputDelay2 which correctly excludes some scrolling cases that were previously not @@ -82730,7 +84105,8 @@ </summary> </histogram> -<histogram name="PageLoad.InteractiveTiming.InputTimestamp" units="ms"> +<histogram name="PageLoad.InteractiveTiming.InputTimestamp" units="ms" + expires_after="2019-01-23"> <obsolete> Removed on January 2019 in favor of PageLoad.InteractiveTiming.InputTimestamp2 which correctly excludes some @@ -82768,7 +84144,8 @@ </summary> </histogram> -<histogram name="PageLoad.InteractiveTiming.LongestInputDelay" units="ms"> +<histogram name="PageLoad.InteractiveTiming.LongestInputDelay" units="ms" + expires_after="2019-01-23"> <obsolete> Removed on January 2019 in favor of PageLoad.InteractiveTiming.LongestInputDelay2 which correctly excludes some @@ -82809,7 +84186,8 @@ </summary> </histogram> -<histogram name="PageLoad.InteractiveTiming.LongestInputTimestamp" units="ms"> +<histogram name="PageLoad.InteractiveTiming.LongestInputTimestamp" units="ms" + expires_after="2019-01-23"> <obsolete> Removed on January 2019 in favor of PageLoad.InteractiveTiming.LongestInputTimestamp2 which correctly excludes @@ -82873,7 +84251,8 @@ </summary> </histogram> -<histogram name="PageLoad.Internal.ClientRedirectDelayAfterPaint" units="ms"> +<histogram name="PageLoad.Internal.ClientRedirectDelayAfterPaint" units="ms" + expires_after="2016-07-18"> <obsolete> Deprecated in favor of PageLoad.Internal.ClientRedirect.FirstPaintToNavigation and @@ -82889,7 +84268,8 @@ </summary> </histogram> -<histogram name="PageLoad.Internal.CommitToComplete.NoTimingIPCs" units="ms"> +<histogram name="PageLoad.Internal.CommitToComplete.NoTimingIPCs" units="ms" + expires_after="2016-10-17"> <obsolete> Deprecated on 10/14/2016. No longer needed. </obsolete> @@ -83083,7 +84463,7 @@ </histogram> <histogram name="PageLoad.Internal.Renderer.PaintTiming.SwapTimeDelta" - units="ms"> + units="ms" expires_after="2018-05-18"> <obsolete> deprecated May 2018: The swap-timestamp comes from a different process, and comparing that with the paint-time (which is from the local process) does @@ -83247,7 +84627,8 @@ </summary> </histogram> -<histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint" units="ms"> +<histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint" units="ms" + expires_after="2018-12-05"> <obsolete> Discontinued Nov 2018 because data is no longer being used. </obsolete> @@ -83332,7 +84713,7 @@ </histogram> <histogram name="PageLoad.Timing.NavigationToDOMContentLoadedEventFired" - units="ms"> + units="ms" expires_after="2015-09-30"> <obsolete> deprecated in favor of PageLoad.Timing2.* </obsolete> @@ -83344,7 +84725,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing.NavigationToFirstLayout" units="ms"> +<histogram name="PageLoad.Timing.NavigationToFirstLayout" units="ms" + expires_after="2015-09-30"> <obsolete> deprecated in favor of PageLoad.Timing2.* </obsolete> @@ -83356,7 +84738,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing.NavigationToLoadEventFired" units="ms"> +<histogram name="PageLoad.Timing.NavigationToLoadEventFired" units="ms" + expires_after="2015-09-30"> <obsolete> deprecated in favor of PageLoad.Timing2.* </obsolete> @@ -83369,7 +84752,7 @@ </histogram> <histogram name="PageLoad.Timing2.DOMLoadingToDOMContentLoadedEventFired" - units="ms"> + units="ms" expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.DocumentTiming.ParseDuration </obsolete> @@ -83383,7 +84766,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.DOMLoadingToFirstContentfulPaint" units="ms"> +<histogram name="PageLoad.Timing2.DOMLoadingToFirstContentfulPaint" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint </obsolete> @@ -83395,7 +84779,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.ForegroundToFirstPaint" units="ms"> +<histogram name="PageLoad.Timing2.ForegroundToFirstPaint" units="ms" + expires_after="2016-07-27"> <obsolete> deprecated in favor of PageLoad.PaintTiming.ForegroundToFirstPaint </obsolete> @@ -83406,7 +84791,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToCommit" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToCommit" units="ms" + expires_after="2016-10-17"> <obsolete> Deprecated in favor of PageLoad.ParseTiming.NavigationToParseStart </obsolete> @@ -83419,7 +84805,7 @@ </histogram> <histogram name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired" - units="ms"> + units="ms" expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired @@ -83434,7 +84820,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFailedProvisionalLoad" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFailedProvisionalLoad" units="ms" + expires_after="2017-02-22"> <obsolete> deprecated in favor of PageLoad.PageTiming.NavigationToFailedProvisionalLoad </obsolete> @@ -83447,7 +84834,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFirstBackground" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFirstBackground" units="ms" + expires_after="2016-10-14"> <obsolete> deprecated in favor of PageLoad.AbortTiming.Background.* </obsolete> @@ -83460,7 +84848,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.PaintTiming.NavigationToFirstContentfulPaint </obsolete> @@ -83472,7 +84861,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFirstForeground" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFirstForeground" units="ms" + expires_after="2017-02-22"> <obsolete> deprecated in favor of PageLoad.PageTiming.NavigationToFirstForeground </obsolete> @@ -83485,7 +84875,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFirstImagePaint" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFirstImagePaint" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.PaintTiming.NavigationToFirstImagePaint </obsolete> @@ -83499,7 +84890,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFirstLayout" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFirstLayout" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.DocumentTiming.NavigationToFirstLayout </obsolete> @@ -83513,7 +84905,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFirstPaint" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFirstPaint" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.PaintTiming.NavigationToFirstPaint </obsolete> @@ -83526,7 +84919,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToFirstTextPaint" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToFirstTextPaint" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.PaintTiming.NavigationToFirstTextPaint </obsolete> @@ -83539,7 +84933,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.NavigationToLoadEventFired" units="ms"> +<histogram name="PageLoad.Timing2.NavigationToLoadEventFired" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.DocumentTiming.NavigationToLoadEventFired </obsolete> @@ -83553,7 +84948,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad" units="ms"> +<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad </obsolete> @@ -83566,7 +84962,7 @@ </histogram> <histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete" - units="ms"> + units="ms" expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad </obsolete> @@ -83581,7 +84977,7 @@ </histogram> <histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite" - units="ms"> + units="ms" expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite @@ -83611,7 +85007,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.ParseDuration" units="ms"> +<histogram name="PageLoad.Timing2.ParseDuration" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.ParseTiming.ParseDuration </obsolete> @@ -83624,7 +85021,8 @@ </summary> </histogram> -<histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint" units="ms"> +<histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint" units="ms" + expires_after="2016-09-26"> <obsolete> deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint </obsolete> @@ -83852,7 +85250,7 @@ </summary> </histogram> -<histogram name="Parser.AppendBytesDelay" units="ms"> +<histogram name="Parser.AppendBytesDelay" units="ms" expires_after="2017-08-12"> <obsolete> Deprecated Aug 2017 </obsolete> @@ -83864,7 +85262,7 @@ </summary> </histogram> -<histogram name="Parser.ChunkEnqueueTime" units="ms"> +<histogram name="Parser.ChunkEnqueueTime" units="ms" expires_after="2017-05-03"> <obsolete> Deprecated May 2017 </obsolete> @@ -83883,7 +85281,8 @@ </summary> </histogram> -<histogram name="Parser.PeakPendingChunkCount" units="chunks"> +<histogram name="Parser.PeakPendingChunkCount" units="chunks" + expires_after="2017-08-12"> <obsolete> Deprecated Aug 2017 </obsolete> @@ -83894,7 +85293,8 @@ </summary> </histogram> -<histogram name="Parser.PeakPendingTokenCount" units="tokens"> +<histogram name="Parser.PeakPendingTokenCount" units="tokens" + expires_after="2017-08-12"> <obsolete> Deprecated Aug 2017 </obsolete> @@ -83905,7 +85305,8 @@ </summary> </histogram> -<histogram name="Parser.PreloadTokenizeDelay" units="ms"> +<histogram name="Parser.PreloadTokenizeDelay" units="ms" + expires_after="2017-05-03"> <obsolete> Deprecated May 2017 </obsolete> @@ -83925,7 +85326,8 @@ </summary> </histogram> -<histogram name="PartnerBookmark.Count" units="bookmarks"> +<histogram name="PartnerBookmark.Count" units="bookmarks" + expires_after="2017-12-15"> <obsolete> Deprecated 2017-12 by PartnerBookmark.Count2. </obsolete> @@ -83966,7 +85368,8 @@ </summary> </histogram> -<histogram name="PartnerBookmark.Null" enum="BooleanNull"> +<histogram name="PartnerBookmark.Null" enum="BooleanNull" + expires_after="2018-04-13"> <obsolete> No longer recorded as of Apr 2018 </obsolete> @@ -83979,7 +85382,8 @@ </summary> </histogram> -<histogram name="PartnerBookmark.Skipped" enum="BooleanSkipped"> +<histogram name="PartnerBookmark.Skipped" enum="BooleanSkipped" + expires_after="2018-04-13"> <obsolete> No longer recorded as of Apr 2018 </obsolete> @@ -83990,7 +85394,8 @@ </summary> </histogram> -<histogram name="PartnerBookmark.TimeSinceLastEmptyRead" units="ms"> +<histogram name="PartnerBookmark.TimeSinceLastEmptyRead" units="ms" + expires_after="2017-12-19"> <obsolete> Deprecated 2017-12. Use PartnerBookmark.TimeSinceLastEmptyRead2. </obsolete> @@ -84002,7 +85407,8 @@ </summary> </histogram> -<histogram name="PartnerBookmark.TimeSinceLastEmptyRead2" units="seconds"> +<histogram name="PartnerBookmark.TimeSinceLastEmptyRead2" units="seconds" + expires_after="2018-04-13"> <obsolete> No longer recorded as of Apr 2018 </obsolete> @@ -84113,7 +85519,7 @@ </histogram> <histogram name="PasswordGeneration.UserEvent" - enum="PasswordGenerationUserEvent"> + enum="PasswordGenerationUserEvent" expires_after="2018-10-19"> <obsolete> Deprecated 10/2018 in favor of PasswordGeneration.UserDecision. </obsolete> @@ -84173,7 +85579,7 @@ </histogram> <histogram name="PasswordManager.AccountChooserDialog" - enum="AccountChooserDismissalReason"> + enum="AccountChooserDismissalReason" expires_after="2016-11-15"> <obsolete> Deprecated as of Chrome 56. See the histograms for one and more accounts. </obsolete> @@ -84252,7 +85658,7 @@ </histogram> <histogram name="PasswordManager.ActionsTaken" - enum="PasswordManagerActionsTaken"> + enum="PasswordManagerActionsTaken" expires_after="2013-10-04"> <obsolete> Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl </obsolete> @@ -84282,7 +85688,7 @@ </histogram> <histogram name="PasswordManager.ActionsTakenWithPsl" - enum="PasswordManagerActionsTakenWithPsl"> + enum="PasswordManagerActionsTakenWithPsl" expires_after="2014-03-24"> <obsolete> Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3. </obsolete> @@ -84370,7 +85776,8 @@ </histogram> <histogram name="PasswordManager.AllowToCollectURLBubble.UIDismissalReason" - enum="PasswordManagerAllowToCollectURLBubble.UIDismissalReason"> + enum="PasswordManagerAllowToCollectURLBubble.UIDismissalReason" + expires_after="2015-02-27"> <obsolete> The bubble isn't shown anymore. Become obsolete in Feb. 2015. </obsolete> @@ -84458,7 +85865,7 @@ </histogram> <histogram name="PasswordManager.AutocompletePopupSuppressedByGeneration" - enum="BooleanSuppressed"> + enum="BooleanSuppressed" expires_after="2019-02-14"> <obsolete> Removed February 2019. </obsolete> @@ -84513,7 +85920,7 @@ </histogram> <histogram name="PasswordManager.BlacklistedSites.NeedToBeCleaned" - enum="BooleanNeedsClearing"> + enum="BooleanNeedsClearing" expires_after="2018-08-21"> <obsolete> Deprecated August 2018. </obsolete> @@ -84654,7 +86061,8 @@ </summary> </histogram> -<histogram name="PasswordManager.EmptyUsernames.PasswordFieldCount"> +<histogram name="PasswordManager.EmptyUsernames.PasswordFieldCount" + expires_after="2018-09-06"> <obsolete> Deprecated as of 09/2018. The investigation this metric was supporting has been concluded in 2016. @@ -84669,7 +86077,8 @@ </summary> </histogram> -<histogram name="PasswordManager.EmptyUsernames.TextAndPasswordFieldCount"> +<histogram name="PasswordManager.EmptyUsernames.TextAndPasswordFieldCount" + expires_after="2018-09-06"> <obsolete> Deprecated as of 09/2018. The investigation this metric was supporting has been concluded in 2016. @@ -84812,7 +86221,8 @@ </summary> </histogram> -<histogram name="PasswordManager.GetMediated" enum="CredentialManagerGetResult"> +<histogram name="PasswordManager.GetMediated" enum="CredentialManagerGetResult" + expires_after="2017-05-22"> <obsolete> Deprecated as of 05/2017. This metric has been replaced by PasswordManager.MediationOptional. @@ -84825,7 +86235,7 @@ </histogram> <histogram name="PasswordManager.GetUnmediated" - enum="CredentialManagerGetResult"> + enum="CredentialManagerGetResult" expires_after="2017-05-22"> <obsolete> Deprecated as of 05/2017. This metric has been replaced by PasswordManager.MediationSilent. @@ -84944,7 +86354,8 @@ </summary> </histogram> -<histogram name="PasswordManager.IE7LookupResult" enum="IE7LookupResultStatus"> +<histogram name="PasswordManager.IE7LookupResult" enum="IE7LookupResultStatus" + expires_after="2018-07-20"> <obsolete> Deprecated as of 07/2018. This metric was deleted at https://chromium-review.googlesource.com/c/chromium/src/+/1131495. @@ -84977,7 +86388,8 @@ </summary> </histogram> -<histogram name="PasswordManager.InfoBarResponse" enum="InfoBarResponse"> +<histogram name="PasswordManager.InfoBarResponse" enum="InfoBarResponse" + expires_after="2016-03-10"> <obsolete> Deprecated as of 03/2016. This metric has been replaced by PasswordManager.UIDismissalReason. @@ -85190,7 +86602,7 @@ </histogram> <histogram name="PasswordManager.MultiAccountPasswordUpdateAction" - enum="MultiAccountUpdateBubbleUserAction"> + enum="MultiAccountUpdateBubbleUserAction" expires_after="2018-03-29"> <obsolete> Deprecated 03/2018 in favor of PasswordManager.UpdateUIDismissalReason. </obsolete> @@ -85227,7 +86639,8 @@ </summary> </histogram> -<histogram name="PasswordManager.NumPasswordsDeletedWhenBlacklisting"> +<histogram name="PasswordManager.NumPasswordsDeletedWhenBlacklisting" + expires_after="2015-08-19"> <obsolete> Deprecated as of 08/2015. </obsolete> @@ -85282,7 +86695,7 @@ </histogram> <histogram name="PasswordManager.PasswordReuse.MainFrameMatchCsdWhitelist" - enum="Boolean"> + enum="Boolean" expires_after="2017-05-18"> <obsolete> Deprecated as of May 17 2017. Replaced by PasswordProtection.RequestOutcome.ProtectedPasswordEntry. @@ -85395,7 +86808,7 @@ </histogram> <histogram name="PasswordManager.PasswordUpdatedWithManualFallback" - enum="BooleanPasswordSavedWithFallback"> + enum="BooleanPasswordSavedWithFallback" expires_after="2018-05-24"> <obsolete> Deprecated as of 05/2018. </obsolete> @@ -85442,7 +86855,7 @@ </histogram> <histogram name="PasswordManager.QueryingSuppressedAccountsFinished" - enum="Boolean"> + enum="Boolean" expires_after="2019-04-02"> <obsolete> Deprecated 03/2019. </obsolete> @@ -85539,7 +86952,7 @@ </histogram> <histogram name="PasswordManager.SavePasswordPromptDisappearedQuickly" - enum="Boolean"> + enum="Boolean" expires_after="2016-03-10"> <obsolete> Deprecated as of 03/2016. </obsolete> @@ -85551,7 +86964,8 @@ </summary> </histogram> -<histogram name="PasswordManager.SavePasswordPromptDisplayed" enum="Boolean"> +<histogram name="PasswordManager.SavePasswordPromptDisplayed" enum="Boolean" + expires_after="2016-03-10"> <obsolete> Deprecated as of 03/2016. </obsolete> @@ -85559,7 +86973,7 @@ </histogram> <histogram name="PasswordManager.SavePasswordPromptResponse" - enum="SavePasswordPromptResponseType"> + enum="SavePasswordPromptResponseType" expires_after="2016-03-10"> <obsolete> Deprecated as of 03/2016. </obsolete> @@ -85588,7 +87002,8 @@ </histogram> <histogram name="PasswordManager.SettingsReconciliation.InitialAndFinalValues" - enum="PasswordManagerPreferencesInitialAndFinalValues"> + enum="PasswordManagerPreferencesInitialAndFinalValues" + expires_after="2017-06-20"> <obsolete> Deprecated 06/2017 </obsolete> @@ -85604,7 +87019,7 @@ </histogram> <histogram name="PasswordManager.SettingsReconciliation.InitialValues" - enum="PasswordManagerPreferencesInitialValues"> + enum="PasswordManagerPreferencesInitialValues" expires_after="2017-06-20"> <obsolete> Deprecated 06/2017 </obsolete> @@ -85677,7 +87092,7 @@ </histogram> <histogram name="PasswordManager.ShowedFormNotSecureWarningOnCurrentNavigation" - enum="BooleanShown"> + enum="BooleanShown" expires_after="2018-05-04"> <obsolete> Deprecated 05/2018 because the feature never launched. </obsolete> @@ -85697,7 +87112,8 @@ </summary> </histogram> -<histogram name="PasswordManager.SignInPromoCountTilClick"> +<histogram name="PasswordManager.SignInPromoCountTilClick" + expires_after="2016-12-16"> <obsolete> Deprecated as of 12/16/16. New statistic is PasswordManager.SignInPromoCountTil*. @@ -85734,7 +87150,7 @@ </histogram> <histogram name="PasswordManager.StorePasswordImportedFromCSVResult" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2017-09-20"> <obsolete> Deprecated as of 14 September 2017, due to being no longer useful. </obsolete> @@ -85795,7 +87211,8 @@ </summary> </histogram> -<histogram name="PasswordManager.StoreReadyWhenWiping" enum="Boolean"> +<histogram name="PasswordManager.StoreReadyWhenWiping" enum="Boolean" + expires_after="2018-08-28"> <obsolete> Deprecated since August 28, 2018, due to removing the corresponding feature. </obsolete> @@ -85886,7 +87303,8 @@ </histogram> <histogram name="PasswordManager.SuppressedAccount" - enum="PasswordManagerSuppressedAccountCrossActionsTaken"> + enum="PasswordManagerSuppressedAccountCrossActionsTaken" + expires_after="2019-04-02"> <obsolete> Deprecated 03/2019. </obsolete> @@ -85903,7 +87321,7 @@ </histogram> <histogram name="PasswordManager.SyncCredentialFiltered" - enum="CredentialFilteredType"> + enum="CredentialFilteredType" expires_after="2019-02-25"> <obsolete> Password manager no longer supports this behavior and the code that could generate values in this histogram is gone as of M74. @@ -85960,7 +87378,8 @@ </summary> </histogram> -<histogram name="PasswordManager.TimesGeneratedPasswordUsed"> +<histogram name="PasswordManager.TimesGeneratedPasswordUsed" + expires_after="2014-11-18"> <obsolete> Deprecated as of 11/11/14. New statistic is PasswordManager.TimesPasswordUsed.AutoGenerated. @@ -86015,7 +87434,7 @@ </histogram> <histogram name="PasswordManager.UpdatePasswordSubmissionEvent" - enum="UpdatePasswordSubmissionEvent"> + enum="UpdatePasswordSubmissionEvent" expires_after="2018-03-29"> <obsolete> Deprecated 03/2018 in favor of PasswordManager.UpdateUIDismissalReason. </obsolete> @@ -86066,7 +87485,7 @@ </histogram> <histogram name="PasswordManager.UserStoredPasswordWithInvalidSSLCert" - enum="Boolean"> + enum="Boolean" expires_after="2016-07-14"> <obsolete> Deprecated 07/2016 because this information is no longer stored in PasswordForm. See also http://crbug.com/413020. @@ -86113,7 +87532,7 @@ </histogram> <histogram name="PasswordProtection.InterstitialActionByUserNavigation" - enum="PasswordProtectionWarningAction"> + enum="PasswordProtectionWarningAction" expires_after="2019-01-04"> <obsolete> Removed 2019-01 due to lack of usage. https://crbug.com/915894 </obsolete> @@ -86145,7 +87564,8 @@ </histogram> <histogram base="true" - name="PasswordProtection.NumberOfCachedVerdictBeforeShutdown" units="count"> + name="PasswordProtection.NumberOfCachedVerdictBeforeShutdown" units="count" + expires_after="2018-07-26"> <obsolete> Deprecated since 07/2018 due to lack of usage. </obsolete> @@ -86209,7 +87629,7 @@ </histogram> <histogram name="PasswordProtection.PasswordReuseEventVerdict" - enum="PasswordProtectionVerdict"> + enum="PasswordProtectionVerdict" expires_after="2017-05-16"> <obsolete> Deprecated since May 12 2017. Replaced by PasswordProtection.Verdict.ProtectedPasswordEntry. @@ -86262,7 +87682,7 @@ </histogram> <histogram name="PasswordProtection.UnfamiliarLoginPageVerdict" - enum="PasswordProtectionVerdict"> + enum="PasswordProtectionVerdict" expires_after="2017-05-16"> <obsolete> Deprecated since May 12 2017. Replaced by PasswordProtection.Verdict.PasswordFieldOnFocus. @@ -86274,7 +87694,7 @@ </histogram> <histogram name="PasswordProtection.UserClickedThroughSafeBrowsingInterstitial" - enum="BooleanClickedThroughSBInterstitial"> + enum="BooleanClickedThroughSBInterstitial" expires_after="2018-07-26"> <obsolete> Deprecated since 07/2018 due to lack of usage. </obsolete> @@ -86318,7 +87738,7 @@ </histogram> <histogram name="PaymentRequest.CanMakePayment.Usage" - enum="CanMakePaymentUsage"> + enum="CanMakePaymentUsage" expires_after="2017-08-10"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86330,7 +87750,7 @@ </histogram> <histogram name="PaymentRequest.CanMakePayment.Used.EffectOnShow" - enum="PaymentRequestCanMakePaymentEffectOnShow"> + enum="PaymentRequestCanMakePaymentEffectOnShow" expires_after="2017-08-10"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86372,7 +87792,8 @@ <summary>The reason that lead to an abort of the Payment Request.</summary> </histogram> -<histogram name="PaymentRequest.CheckoutFunnel.Completed" enum="BooleanHit"> +<histogram name="PaymentRequest.CheckoutFunnel.Completed" enum="BooleanHit" + expires_after="2017-08-09"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86380,7 +87801,8 @@ <summary>When the merchant has processed the user's Payment Request.</summary> </histogram> -<histogram name="PaymentRequest.CheckoutFunnel.Initiated" enum="BooleanHit"> +<histogram name="PaymentRequest.CheckoutFunnel.Initiated" enum="BooleanHit" + expires_after="2017-08-09"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86396,7 +87818,8 @@ </summary> </histogram> -<histogram name="PaymentRequest.CheckoutFunnel.PayClicked" enum="BooleanHit"> +<histogram name="PaymentRequest.CheckoutFunnel.PayClicked" enum="BooleanHit" + expires_after="2017-08-09"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86407,7 +87830,7 @@ </histogram> <histogram name="PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails" - enum="BooleanHit"> + enum="BooleanHit" expires_after="2017-08-09"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86418,7 +87841,8 @@ </summary> </histogram> -<histogram name="PaymentRequest.CheckoutFunnel.Shown" enum="BooleanHit"> +<histogram name="PaymentRequest.CheckoutFunnel.Shown" enum="BooleanHit" + expires_after="2017-08-09"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86429,7 +87853,7 @@ </histogram> <histogram name="PaymentRequest.CheckoutFunnel.SkippedShow" - enum="BooleanSkipped"> + enum="BooleanSkipped" expires_after="2017-08-09"> <obsolete> M62+ Part of PaymentRequest.Events </obsolete> @@ -86476,7 +87900,7 @@ </histogram> <histogram name="PaymentRequest.RequestedInformation" - enum="PaymentRequestRequestedInformation"> + enum="PaymentRequestRequestedInformation" expires_after="2017-08-08"> <obsolete> M62+ Included in PaymentRequest.Events </obsolete> @@ -86488,7 +87912,7 @@ </histogram> <histogram name="PaymentRequest.SelectedPaymentMethod" - enum="PaymentRequestPaymentMethods"> + enum="PaymentRequestPaymentMethods" expires_after="2017-08-15"> <obsolete> M62+ Included in PaymentRequest.Events </obsolete> @@ -86553,7 +87977,7 @@ </histogram> <histogram name="PaymentRequest.UserHadInitialFormOfPayment.EffectOnCompletion" - enum="PaymentRequestFlowCompletionStatus"> + enum="PaymentRequestFlowCompletionStatus" expires_after="2017-07-19"> <obsolete> Replaced by PaymentRequest.NumberOfSuggestionsShown.PaymentMethod on July 19th 2017. @@ -86708,7 +88132,8 @@ </summary> </histogram> -<histogram name="Pepper.SecureOrigin.MediaStreamRequest" enum="BooleanSecure"> +<histogram name="Pepper.SecureOrigin.MediaStreamRequest" enum="BooleanSecure" + expires_after="2017-08-03"> <obsolete> Deprecated as of 8/2017. </obsolete> @@ -86877,7 +88302,7 @@ </histogram> <histogram name="Permissions.AutoBlocker.SafeBrowsingResponse" - enum="SafeBrowsingResponse"> + enum="SafeBrowsingResponse" expires_after="2018-03-15"> <obsolete> Permission blacklisting was removed in M67. </obsolete> @@ -86891,7 +88316,8 @@ </summary> </histogram> -<histogram name="Permissions.AutoBlocker.SafeBrowsingResponseTime" units="ms"> +<histogram name="Permissions.AutoBlocker.SafeBrowsingResponseTime" units="ms" + expires_after="2018-03-15"> <obsolete> Permission blacklisting was removed in M67. </obsolete> @@ -86991,7 +88417,8 @@ </summary> </histogram> -<histogram name="Permissions.Prompt.Accepted.Persisted" enum="BooleanPersisted"> +<histogram name="Permissions.Prompt.Accepted.Persisted" enum="BooleanPersisted" + expires_after="2017-11-27"> <obsolete> Persist toggle experiments ran from M56 to M59. </obsolete> @@ -87036,7 +88463,8 @@ </summary> </histogram> -<histogram name="Permissions.Prompt.Denied.Persisted" enum="BooleanPersisted"> +<histogram name="Permissions.Prompt.Denied.Persisted" enum="BooleanPersisted" + expires_after="2017-11-27"> <obsolete> Persist toggle experiments ran from M56 to M59. </obsolete> @@ -87071,7 +88499,7 @@ </summary> </histogram> -<histogram name="Permissions.Prompt.DismissCount"> +<histogram name="Permissions.Prompt.DismissCount" expires_after="2016-08-23"> <obsolete> Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016. </obsolete> @@ -87109,7 +88537,7 @@ </summary> </histogram> -<histogram name="Permissions.Prompt.IgnoreCount"> +<histogram name="Permissions.Prompt.IgnoreCount" expires_after="2016-08-23"> <obsolete> Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016. </obsolete> @@ -87148,7 +88576,7 @@ </histogram> <histogram name="Permissions.Prompt.MergedBubbleAccepted" - enum="PermissionRequestType"> + enum="PermissionRequestType" expires_after="2017-11-08"> <obsolete> Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same counts are available in Permissions.Prompt.Accepted. @@ -87162,7 +88590,7 @@ </histogram> <histogram name="Permissions.Prompt.MergedBubbleDenied" - enum="PermissionRequestType"> + enum="PermissionRequestType" expires_after="2017-11-08"> <obsolete> Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same counts are available in Permissions.Prompt.Denied. @@ -87176,7 +88604,7 @@ </histogram> <histogram name="Permissions.Prompt.MergedBubbleTypes" - enum="PermissionRequestType"> + enum="PermissionRequestType" expires_after="2017-11-08"> <obsolete> Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same counts are available in Permissions.Prompt.Shown. @@ -87189,7 +88617,8 @@ </summary> </histogram> -<histogram name="Permissions.Prompt.RequestsPerPrompt"> +<histogram name="Permissions.Prompt.RequestsPerPrompt" + expires_after="2017-11-08"> <obsolete> Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same counts are available in Permissions.Prompt.Shown. @@ -87210,7 +88639,8 @@ </summary> </histogram> -<histogram name="Permissions.Requested.CrossOrigin" enum="PermissionStatus"> +<histogram name="Permissions.Requested.CrossOrigin" enum="PermissionStatus" + expires_after="2017-02-23"> <obsolete> Deprecated 02/2017, no longer used </obsolete> @@ -87237,7 +88667,8 @@ </summary> </histogram> -<histogram name="Permissions.Requested.SameOrigin" enum="PermissionType"> +<histogram name="Permissions.Requested.SameOrigin" enum="PermissionType" + expires_after="2017-02-23"> <obsolete> Deprecated 02/2017, no longer used </obsolete> @@ -87264,7 +88695,7 @@ </histogram> <histogram name="PhysicalWeb.ActivityReferral" - enum="PhysicalWebActivityReferer"> + enum="PhysicalWebActivityReferer" expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87277,7 +88708,7 @@ </histogram> <histogram name="PhysicalWeb.InitialState.IosChrome" - enum="PhysicalWebInitialStateIosChrome"> + enum="PhysicalWebInitialStateIosChrome" expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87287,7 +88718,8 @@ <summary>Initial state of the Physical Web in Chrome for iOS.</summary> </histogram> -<histogram name="PhysicalWeb.ReferralDelay.OptInNotification" units="ms"> +<histogram name="PhysicalWeb.ReferralDelay.OptInNotification" units="ms" + expires_after="2017-01-24"> <obsolete> Deprecated 01/2017, no longer used </obsolete> @@ -87300,7 +88732,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.ReferralDelay.StandardNotification" units="ms"> +<histogram name="PhysicalWeb.ReferralDelay.StandardNotification" units="ms" + expires_after="2017-01-24"> <obsolete> Deprecated 01/2017, no longer used </obsolete> @@ -87313,7 +88746,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.ResolveTime.Background" units="ms"> +<histogram name="PhysicalWeb.ResolveTime.Background" units="ms" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87326,7 +88760,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.ResolveTime.Foreground" units="ms"> +<histogram name="PhysicalWeb.ResolveTime.Foreground" units="ms" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87340,7 +88775,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.ResolveTime.Refresh" units="ms"> +<histogram name="PhysicalWeb.ResolveTime.Refresh" units="ms" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87354,7 +88790,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.RoundTripTimeMilliseconds" units="ms"> +<histogram name="PhysicalWeb.RoundTripTimeMilliseconds" units="ms" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87362,7 +88799,8 @@ <summary>Round trip time to the metadata server for Physical web.</summary> </histogram> -<histogram name="PhysicalWeb.State.Bluetooth" enum="BluetoothStatus"> +<histogram name="PhysicalWeb.State.Bluetooth" enum="BluetoothStatus" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87372,7 +88810,8 @@ <summary>Whether bluetooth is on, off, or unknown.</summary> </histogram> -<histogram name="PhysicalWeb.State.DataConnectionActive" enum="BooleanActive"> +<histogram name="PhysicalWeb.State.DataConnectionActive" enum="BooleanActive" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87382,7 +88821,8 @@ <summary>Whether the data connection is active.</summary> </histogram> -<histogram name="PhysicalWeb.State.LocationPermission" enum="BooleanAccepted"> +<histogram name="PhysicalWeb.State.LocationPermission" enum="BooleanAccepted" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87392,7 +88832,8 @@ <summary>Whether location permission has been accepted.</summary> </histogram> -<histogram name="PhysicalWeb.State.LocationServices" enum="BooleanEnabled"> +<histogram name="PhysicalWeb.State.LocationServices" enum="BooleanEnabled" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87403,7 +88844,7 @@ </histogram> <histogram name="PhysicalWeb.State.Preference" - enum="PhysicalWebPreferenceStatus"> + enum="PhysicalWebPreferenceStatus" expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87416,7 +88857,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.TotalUrls.OnInitialDisplay" units="urls"> +<histogram name="PhysicalWeb.TotalUrls.OnInitialDisplay" units="urls" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87429,7 +88871,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.TotalUrls.OnRefresh" units="urls"> +<histogram name="PhysicalWeb.TotalUrls.OnRefresh" units="urls" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87442,7 +88885,8 @@ </summary> </histogram> -<histogram name="PhysicalWeb.WebUI.ListViewUrlPosition" units="selections"> +<histogram name="PhysicalWeb.WebUI.ListViewUrlPosition" units="selections" + expires_after="2018-05-16"> <obsolete> Obsolete 4/2018, Physical Web is disabled (crbug.com/826540). </obsolete> @@ -87557,7 +89001,7 @@ </summary> </histogram> -<histogram name="Platform.Cast.MeminfoMemAvailable"> +<histogram name="Platform.Cast.MeminfoMemAvailable" expires_after="2018-12-05"> <obsolete> Removed 11/2018 in favor of Platform.Cast.MeminfoMemAvailable2 with a larger range. @@ -87578,7 +89022,8 @@ </summary> </histogram> -<histogram name="Platform.Cast.MeminfoMemFreeDerived"> +<histogram name="Platform.Cast.MeminfoMemFreeDerived" + expires_after="2018-12-05"> <obsolete> Removed 11/2018 in favor of Platform.Cast.MeminfoMemFreeDerived2 with a larger range. @@ -87764,7 +89209,8 @@ <summary>Result of a detachable base RW firmware update.</summary> </histogram> -<histogram name="Platform.DiskUsage.Cache_Avg" units="KB"> +<histogram name="Platform.DiskUsage.Cache_Avg" units="KB" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -87775,7 +89221,8 @@ </summary> </histogram> -<histogram name="Platform.DiskUsage.Cache_Max" units="KB"> +<histogram name="Platform.DiskUsage.Cache_Max" units="KB" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -87786,7 +89233,8 @@ </summary> </histogram> -<histogram name="Platform.DiskUsage.Downloads_Avg" units="KB"> +<histogram name="Platform.DiskUsage.Downloads_Avg" units="KB" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -87797,7 +89245,8 @@ </summary> </histogram> -<histogram name="Platform.DiskUsage.Downloads_Max" units="KB"> +<histogram name="Platform.DiskUsage.Downloads_Max" units="KB" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -87808,7 +89257,8 @@ </summary> </histogram> -<histogram name="Platform.DiskUsage.GCache_Avg" units="KB"> +<histogram name="Platform.DiskUsage.GCache_Avg" units="KB" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -87819,7 +89269,8 @@ </summary> </histogram> -<histogram name="Platform.DiskUsage.GCache_Max" units="KB"> +<histogram name="Platform.DiskUsage.GCache_Max" units="KB" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -87830,7 +89281,8 @@ </summary> </histogram> -<histogram name="Platform.DiskUsage.LeastUsedAccountDays" units="days"> +<histogram name="Platform.DiskUsage.LeastUsedAccountDays" units="days" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -88255,7 +89707,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time1" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88266,7 +89719,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time2" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88277,7 +89731,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time3" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88288,7 +89743,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time4" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88299,7 +89755,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time1" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88310,7 +89767,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time2" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88321,7 +89779,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time3" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88332,7 +89791,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time4" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88343,7 +89803,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time1" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88354,7 +89815,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time2" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88365,7 +89827,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time3" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88376,7 +89839,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time4" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88387,7 +89851,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time1" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88398,7 +89863,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time2" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88409,7 +89875,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time3" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88420,7 +89887,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time4" units="%"> +<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88432,7 +89900,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88444,7 +89912,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88456,7 +89924,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88468,7 +89936,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88480,7 +89948,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88492,7 +89960,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88504,7 +89972,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88516,7 +89984,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88528,7 +89996,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88540,7 +90008,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88552,7 +90020,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -88564,7 +90032,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88576,7 +90044,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88588,7 +90056,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88600,7 +90068,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88612,7 +90080,7 @@ </histogram> <histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88623,7 +90091,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time1" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88634,7 +90103,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time2" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88645,7 +90115,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time3" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88656,7 +90127,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time4" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88667,7 +90139,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time1" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88678,7 +90151,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time2" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88689,7 +90163,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time3" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88700,7 +90175,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time4" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88711,7 +90187,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time1" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88722,7 +90199,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time2" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88733,7 +90211,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time3" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88744,7 +90223,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time4" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88755,7 +90235,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time1" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time1" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88766,7 +90247,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time2" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time2" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88777,7 +90259,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time3" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time3" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88788,7 +90271,8 @@ </summary> </histogram> -<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time4" units="%"> +<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time4" units="%" + expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88800,7 +90284,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88812,7 +90296,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88824,7 +90308,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88836,7 +90320,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88848,7 +90332,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88860,7 +90344,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88872,7 +90356,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88884,7 +90368,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88896,7 +90380,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88908,7 +90392,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88920,7 +90404,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88932,7 +90416,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88944,7 +90428,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time1" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88956,7 +90440,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time2" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88968,7 +90452,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time3" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -88980,7 +90464,7 @@ </histogram> <histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time4" - units="page faults/second"> + units="page faults/second" expires_after="2013-10-01"> <obsolete> Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended. </obsolete> @@ -89294,7 +90778,7 @@ </summary> </histogram> -<histogram name="Platform.Tps65090Retries"> +<histogram name="Platform.Tps65090Retries" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -89468,7 +90952,7 @@ </summary> </histogram> -<histogram name="PlatformFile.FlushTime" units="ms"> +<histogram name="PlatformFile.FlushTime" units="ms" expires_after="2016-07-22"> <obsolete> Deprecated as of 2016-07 because the histogram's purpose of adding colour to the description of File::Flush() has been fulfilled. @@ -89477,7 +90961,8 @@ <summary>The time it takes to run File::Flush().</summary> </histogram> -<histogram name="PlatformFile.UnknownCreateFileErrors" units="code"> +<histogram name="PlatformFile.UnknownCreateFileErrors" units="code" + expires_after="2013-05-15"> <obsolete> Deprecated as of 2013-05, replaced by PlatformFile.UnknownCreateFileErrorsWin in chrome 29. @@ -89506,7 +90991,7 @@ </summary> </histogram> -<histogram name="PLT.Abandoned" enum="Abandoned"> +<histogram name="PLT.Abandoned" enum="Abandoned" expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89518,7 +91003,8 @@ </summary> </histogram> -<histogram name="PLT.Abandoned.NoProxy.http" enum="Abandoned"> +<histogram name="PLT.Abandoned.NoProxy.http" enum="Abandoned" + expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89526,7 +91012,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned.NoProxy.https" enum="Abandoned"> +<histogram name="PLT.Abandoned.NoProxy.https" enum="Abandoned" + expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89534,7 +91021,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned.Proxy.http" enum="Abandoned"> +<histogram name="PLT.Abandoned.Proxy.http" enum="Abandoned" + expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89542,7 +91030,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned.Proxy.https" enum="Abandoned"> +<histogram name="PLT.Abandoned.Proxy.https" enum="Abandoned" + expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89550,7 +91039,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned_ExtensionAdblock" enum="Abandoned"> +<histogram name="PLT.Abandoned_ExtensionAdblock" enum="Abandoned" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest. </obsolete> @@ -89558,7 +91048,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned_ExtensionAdblockPlus" enum="Abandoned"> +<histogram name="PLT.Abandoned_ExtensionAdblockPlus" enum="Abandoned" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest. </obsolete> @@ -89566,7 +91057,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned_ExtensionWebRequest" enum="Abandoned"> +<histogram name="PLT.Abandoned_ExtensionWebRequest" enum="Abandoned" + expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89575,7 +91067,8 @@ </summary> </histogram> -<histogram name="PLT.Abandoned_ExtensionWebRequestAdblock" enum="Abandoned"> +<histogram name="PLT.Abandoned_ExtensionWebRequestAdblock" enum="Abandoned" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest. </obsolete> @@ -89583,7 +91076,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned_ExtensionWebRequestAdblockPlus" enum="Abandoned"> +<histogram name="PLT.Abandoned_ExtensionWebRequestAdblockPlus" enum="Abandoned" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest. </obsolete> @@ -89591,7 +91085,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned_ExtensionWebRequestOther" enum="Abandoned"> +<histogram name="PLT.Abandoned_ExtensionWebRequestOther" enum="Abandoned" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest. </obsolete> @@ -89599,7 +91094,8 @@ <summary/> </histogram> -<histogram name="PLT.Abandoned_SpdyProxy" enum="Abandoned"> +<histogram name="PLT.Abandoned_SpdyProxy" enum="Abandoned" + expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89607,7 +91103,7 @@ <summary/> </histogram> -<histogram name="PLT.AbandonType" enum="AbandonType"> +<histogram name="PLT.AbandonType" enum="AbandonType" expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -89615,7 +91111,7 @@ <summary>Diagnose why a page load was considered abandoned.</summary> </histogram> -<histogram name="PLT.BeginToCommit" units="ms"> +<histogram name="PLT.BeginToCommit" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.Timing2.NavigationToCommit instead. </obsolete> @@ -89630,7 +91126,7 @@ </summary> </histogram> -<histogram name="PLT.BeginToFinish" units="ms"> +<histogram name="PLT.BeginToFinish" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -89638,7 +91134,8 @@ <summary>TBD</summary> </histogram> -<histogram name="PLT.BeginToFinish_AfterPreconnectRequest" units="ms"> +<histogram name="PLT.BeginToFinish_AfterPreconnectRequest" units="ms" + expires_after="2014-07-18"> <obsolete> Deprecated as of http://crrev.com/392823002 </obsolete> @@ -89649,7 +91146,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFinish_ContentPrefetcher" units="ms"> +<histogram name="PLT.BeginToFinish_ContentPrefetcher" units="ms" + expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89659,7 +91157,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer" units="ms"> +<histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer" units="ms" + expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89670,7 +91169,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblock" units="ms"> +<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblock" units="ms" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadNormal_ExtensionWebRequest. @@ -89680,7 +91180,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblockPlus" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadNormal_ExtensionWebRequest. @@ -89690,7 +91190,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequest" - units="ms"> + units="ms" expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89701,7 +91201,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblock" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadNormal_ExtensionWebRequest. @@ -89722,7 +91222,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestOther" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadNormal_ExtensionWebRequest. @@ -89731,7 +91231,8 @@ <summary/> </histogram> -<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblock" units="ms"> +<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblock" units="ms" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadReload_ExtensionWebRequest. @@ -89741,7 +91242,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblockPlus" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadReload_ExtensionWebRequest. @@ -89751,7 +91252,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequest" - units="ms"> + units="ms" expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89762,7 +91263,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblock" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadReload_ExtensionWebRequest. @@ -89783,7 +91284,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestOther" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadReload_ExtensionWebRequest. @@ -89792,7 +91293,8 @@ <summary/> </histogram> -<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblock" units="ms"> +<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblock" units="ms" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest. @@ -89802,7 +91304,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblockPlus" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest. @@ -89812,7 +91314,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest" - units="ms"> + units="ms" expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89823,7 +91325,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblock" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest. @@ -89844,7 +91346,7 @@ </histogram> <histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestOther" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest. @@ -89853,7 +91355,8 @@ <summary/> </histogram> -<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblock" units="ms"> +<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblock" units="ms" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest. </obsolete> @@ -89861,7 +91364,8 @@ <summary/> </histogram> -<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblockPlus" units="ms"> +<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblockPlus" units="ms" + expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest. </obsolete> @@ -89869,7 +91373,8 @@ <summary/> </histogram> -<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequest" units="ms"> +<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequest" units="ms" + expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89880,7 +91385,7 @@ </histogram> <histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblock" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest. </obsolete> @@ -89889,7 +91394,7 @@ </histogram> <histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblockPlus" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest. </obsolete> @@ -89898,7 +91403,7 @@ </histogram> <histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestOther" - units="ms"> + units="ms" expires_after="2014-06-23"> <obsolete> Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest. </obsolete> @@ -89906,7 +91411,8 @@ <summary/> </histogram> -<histogram name="PLT.BeginToFinish_SpdyProxy" units="ms"> +<histogram name="PLT.BeginToFinish_SpdyProxy" units="ms" + expires_after="2016-08-03"> <obsolete> Use PLT.PT_BeginToFinish_DataReductionProxy instead. </obsolete> @@ -89914,7 +91420,7 @@ <summary>PLT.BeginToFinish, but for pages fetched over a SPDY proxy.</summary> </histogram> -<histogram name="PLT.BeginToFinishDoc"> +<histogram name="PLT.BeginToFinishDoc" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead. </obsolete> @@ -89922,7 +91428,8 @@ <summary>TBD</summary> </histogram> -<histogram name="PLT.BeginToFinishDoc_AfterPreconnectRequest" units="ms"> +<histogram name="PLT.BeginToFinishDoc_AfterPreconnectRequest" units="ms" + expires_after="2014-07-18"> <obsolete> Deprecated as of http://crrev.com/392823002 </obsolete> @@ -89933,7 +91440,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFinishDoc_ContentPrefetcher" units="ms"> +<histogram name="PLT.BeginToFinishDoc_ContentPrefetcher" units="ms" + expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89943,7 +91451,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer" units="ms"> +<histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer" units="ms" + expires_after="2016-08-03"> <obsolete> No longer needed. </obsolete> @@ -89954,7 +91463,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFinishDoc_SpdyProxy" units="ms"> +<histogram name="PLT.BeginToFinishDoc_SpdyProxy" units="ms" + expires_after="2016-08-03"> <obsolete> Use PLT.PT_BeginToFinishDoc_DataReductionProxy instead. </obsolete> @@ -89964,7 +91474,7 @@ </summary> </histogram> -<histogram name="PLT.BeginToFirstPaint" units="ms"> +<histogram name="PLT.BeginToFirstPaint" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead. </obsolete> @@ -89979,7 +91489,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFirstPaint_Negative" units="ms"> +<histogram name="PLT.BeginToFirstPaint_Negative" units="ms" + expires_after="2016-08-02"> <obsolete> No longer needed. </obsolete> @@ -89991,7 +91502,8 @@ </summary> </histogram> -<histogram name="PLT.BeginToFirstPaintAfterLoad" units="ms"> +<histogram name="PLT.BeginToFirstPaintAfterLoad" units="ms" + expires_after="2016-08-02"> <obsolete> The first paint after load is not useful for most documents. Consider using PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead. @@ -90007,7 +91519,7 @@ </summary> </histogram> -<histogram name="PLT.CommitToFinish" units="ms"> +<histogram name="PLT.CommitToFinish" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90019,7 +91531,7 @@ </summary> </histogram> -<histogram name="PLT.CommitToFinishDoc" units="ms"> +<histogram name="PLT.CommitToFinishDoc" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.ParseTiming.ParseDuration instead. </obsolete> @@ -90032,7 +91544,7 @@ </summary> </histogram> -<histogram name="PLT.CommitToFirstPaint" units="ms"> +<histogram name="PLT.CommitToFirstPaint" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead. </obsolete> @@ -90044,7 +91556,8 @@ </summary> </histogram> -<histogram name="PLT.CommitToFirstPaintAfterLoad" units="ms"> +<histogram name="PLT.CommitToFirstPaintAfterLoad" units="ms" + expires_after="2016-08-02"> <obsolete> The first paint after load is not useful for most documents. Consider using PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead. @@ -90058,7 +91571,7 @@ </summary> </histogram> -<histogram name="PLT.FinishDocToFinish" units="ms"> +<histogram name="PLT.FinishDocToFinish" units="ms" expires_after="2016-08-02"> <obsolete> No longer needed. </obsolete> @@ -90070,7 +91583,8 @@ </summary> </histogram> -<histogram name="PLT.FinishToFirstPaintAfterLoad" units="ms"> +<histogram name="PLT.FinishToFirstPaintAfterLoad" units="ms" + expires_after="2016-08-02"> <obsolete> The first paint after load is not useful for most documents. Consider using PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead. @@ -90084,7 +91598,7 @@ </summary> </histogram> -<histogram name="PLT.LoadType" enum="LoadType"> +<histogram name="PLT.LoadType" enum="LoadType" expires_after="2016-08-02"> <obsolete> Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.* instead. @@ -90095,7 +91609,8 @@ </summary> </histogram> -<histogram name="PLT.MissingStart" enum="MissingStartType"> +<histogram name="PLT.MissingStart" enum="MissingStartType" + expires_after="2014-06-30"> <obsolete> Deprecated as of 2014-06. </obsolete> @@ -90106,7 +91621,7 @@ </summary> </histogram> -<histogram name="PLT.NavStartToLoadEnd" units="ms"> +<histogram name="PLT.NavStartToLoadEnd" units="ms" expires_after="2014-06-23"> <obsolete> deprecated 2012-01-19 in favour of PLT.PT_* </obsolete> @@ -90117,7 +91632,7 @@ </summary> </histogram> -<histogram name="PLT.NavStartToLoadStart" units="ms"> +<histogram name="PLT.NavStartToLoadStart" units="ms" expires_after="2014-06-23"> <obsolete> deprecated 2012-01-19 in favour of PLT.PT_* </obsolete> @@ -90128,7 +91643,7 @@ </summary> </histogram> -<histogram name="PLT.NT_Connect" units="ms"> +<histogram name="PLT.NT_Connect" units="ms" expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90138,7 +91653,8 @@ </summary> </histogram> -<histogram name="PLT.NT_DelayBeforeConnect" units="ms"> +<histogram name="PLT.NT_DelayBeforeConnect" units="ms" + expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. </obsolete> @@ -90148,7 +91664,8 @@ </summary> </histogram> -<histogram name="PLT.NT_DelayBeforeDomainLookup" units="ms"> +<histogram name="PLT.NT_DelayBeforeDomainLookup" units="ms" + expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. </obsolete> @@ -90158,7 +91675,8 @@ </summary> </histogram> -<histogram name="PLT.NT_DelayBeforeDomLoading" units="ms"> +<histogram name="PLT.NT_DelayBeforeDomLoading" units="ms" + expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. Replaced by PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired. @@ -90169,7 +91687,7 @@ </summary> </histogram> -<histogram name="PLT.NT_DelayBeforeFetch" units="ms"> +<histogram name="PLT.NT_DelayBeforeFetch" units="ms" expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. </obsolete> @@ -90180,7 +91698,8 @@ </summary> </histogram> -<histogram name="PLT.NT_DelayBeforeFetchRedirect" units="ms"> +<histogram name="PLT.NT_DelayBeforeFetchRedirect" units="ms" + expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. </obsolete> @@ -90191,7 +91710,8 @@ </summary> </histogram> -<histogram name="PLT.NT_DelayBeforeLoadEvent" units="ms"> +<histogram name="PLT.NT_DelayBeforeLoadEvent" units="ms" + expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. Replaced by PageLoad.DocumentTiming.NavigationToLoadEventFired. @@ -90203,7 +91723,8 @@ </summary> </histogram> -<histogram name="PLT.NT_DelayBeforeRequest" units="ms"> +<histogram name="PLT.NT_DelayBeforeRequest" units="ms" + expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. </obsolete> @@ -90213,7 +91734,7 @@ </summary> </histogram> -<histogram name="PLT.NT_DomainLookup" units="ms"> +<histogram name="PLT.NT_DomainLookup" units="ms" expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90223,7 +91744,7 @@ </summary> </histogram> -<histogram name="PLT.NT_DomContentLoaded" units="ms"> +<histogram name="PLT.NT_DomContentLoaded" units="ms" expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToDOMContentLoadedEventFired @@ -90236,7 +91757,7 @@ </summary> </histogram> -<histogram name="PLT.NT_DomInteractive" units="ms"> +<histogram name="PLT.NT_DomInteractive" units="ms" expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90247,7 +91768,7 @@ </summary> </histogram> -<histogram name="PLT.NT_DomLoading" units="ms"> +<histogram name="PLT.NT_DomLoading" units="ms" expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90257,7 +91778,7 @@ </summary> </histogram> -<histogram name="PLT.NT_LoadEvent" units="ms"> +<histogram name="PLT.NT_LoadEvent" units="ms" expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired @@ -90269,7 +91790,7 @@ </summary> </histogram> -<histogram name="PLT.NT_Redirect" units="ms"> +<histogram name="PLT.NT_Redirect" units="ms" expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. </obsolete> @@ -90280,7 +91801,7 @@ </summary> </histogram> -<histogram name="PLT.NT_Request" units="ms"> +<histogram name="PLT.NT_Request" units="ms" expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. Replaced by PageLoad.ParseTiming.NavigationToParseStart. @@ -90291,7 +91812,7 @@ </summary> </histogram> -<histogram name="PLT.NT_Response" units="ms"> +<histogram name="PLT.NT_Response" units="ms" expires_after="2016-07-21"> <obsolete> Deprecated as of 7/19/2016. Replaced by PageLoad.ParseTiming.ParseDuration. </obsolete> @@ -90301,7 +91822,8 @@ </summary> </histogram> -<histogram name="PLT.PageUsed_PrerenderLoad" enum="PageUsed"> +<histogram name="PLT.PageUsed_PrerenderLoad" enum="PageUsed" + expires_after="2014-06-23"> <obsolete> Deprecated as of 5/02/2011. </obsolete> @@ -90309,7 +91831,7 @@ <summary>Distribution of discarded and displayed prerendered pages.</summary> </histogram> -<histogram name="PLT.PerceivedLoadTime" units="ms"> +<histogram name="PLT.PerceivedLoadTime" units="ms" expires_after="2013-04-11"> <obsolete> Deprecated as of 5/02/2011, replaced by Prerender.RendererPLT. </obsolete> @@ -90324,7 +91846,8 @@ </summary> </histogram> -<histogram name="PLT.PerceivedLoadTime_PrerenderLoad" units="ms"> +<histogram name="PLT.PerceivedLoadTime_PrerenderLoad" units="ms" + expires_after="2013-04-11"> <obsolete> Deprecated as of 5/02/2011, replaced by Prerender.RendererPerceivedPLTMatched. @@ -90339,7 +91862,8 @@ </summary> </histogram> -<histogram name="PLT.Prerender_TimeUntilDisplay" units="ms"> +<histogram name="PLT.Prerender_TimeUntilDisplay" units="ms" + expires_after="2014-06-23"> <obsolete> Deprecated as of 5/02/2011, replaced by Prerender.RendererTimeUntilDisplay. </obsolete> @@ -90351,7 +91875,7 @@ </summary> </histogram> -<histogram name="PLT.PrerenderIdleTime" units="ms"> +<histogram name="PLT.PrerenderIdleTime" units="ms" expires_after="2014-06-23"> <obsolete> Deprecated as of 5/02/2011, replaced by Prerender.RendererIdleTime. </obsolete> @@ -90363,7 +91887,8 @@ </summary> </histogram> -<histogram name="PLT.PT.NavigationStartToFirstLayout" units="ms"> +<histogram name="PLT.PT.NavigationStartToFirstLayout" units="ms" + expires_after="2016-03-10"> <obsolete> Deprecated. Use PageLoad.Timing2.* instead. </obsolete> @@ -90374,7 +91899,8 @@ </summary> </histogram> -<histogram name="PLT.PT.ResponseStartToFirstLayout" units="ms"> +<histogram name="PLT.PT.ResponseStartToFirstLayout" units="ms" + expires_after="2016-03-10"> <obsolete> Deprecated. Use PageLoad.Timing2.* instead. </obsolete> @@ -90385,7 +91911,7 @@ </summary> </histogram> -<histogram name="PLT.PT_BeginToCommit" units="ms"> +<histogram name="PLT.PT_BeginToCommit" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.Timing2.NavigationToCommit instead. </obsolete> @@ -90397,7 +91923,8 @@ </summary> </histogram> -<histogram name="PLT.PT_BeginToCommit_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_BeginToCommit_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 9/2016. Use Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToCommit @@ -90414,7 +91941,7 @@ </summary> </histogram> -<histogram name="PLT.PT_BeginToFinish" units="ms"> +<histogram name="PLT.PT_BeginToFinish" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90426,7 +91953,8 @@ </summary> </histogram> -<histogram name="PLT.PT_BeginToFinish_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_BeginToFinish_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 9/2016. Use Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired @@ -90443,7 +91971,7 @@ </summary> </histogram> -<histogram name="PLT.PT_BeginToFinishDoc" units="ms"> +<histogram name="PLT.PT_BeginToFinishDoc" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90455,7 +91983,8 @@ </summary> </histogram> -<histogram name="PLT.PT_BeginToFinishDoc_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_BeginToFinishDoc_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired @@ -90472,7 +92001,7 @@ </summary> </histogram> -<histogram name="PLT.PT_CommitToFinish" units="ms"> +<histogram name="PLT.PT_CommitToFinish" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90483,7 +92012,8 @@ </summary> </histogram> -<histogram name="PLT.PT_CommitToFinish_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_CommitToFinish_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired @@ -90499,7 +92029,8 @@ </summary> </histogram> -<histogram name="PLT.PT_CommitToFinishDoc" units="ms"> +<histogram name="PLT.PT_CommitToFinishDoc" units="ms" + expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90511,7 +92042,8 @@ </summary> </histogram> -<histogram name="PLT.PT_CommitToFinishDoc_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_CommitToFinishDoc_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired @@ -90528,7 +92060,8 @@ </summary> </histogram> -<histogram name="PLT.PT_FinishDocToFinish" units="ms"> +<histogram name="PLT.PT_FinishDocToFinish" units="ms" + expires_after="2016-08-02"> <obsolete> No longer needed. </obsolete> @@ -90540,7 +92073,8 @@ </summary> </histogram> -<histogram name="PLT.PT_FinishDocToFinish_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_FinishDocToFinish_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90554,7 +92088,7 @@ </summary> </histogram> -<histogram name="PLT.PT_RequestToCommit" units="ms"> +<histogram name="PLT.PT_RequestToCommit" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.Timing2.NavigationToCommit instead. </obsolete> @@ -90566,7 +92100,8 @@ </summary> </histogram> -<histogram name="PLT.PT_RequestToDomContentLoaded" units="ms"> +<histogram name="PLT.PT_RequestToDomContentLoaded" units="ms" + expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead. </obsolete> @@ -90578,7 +92113,7 @@ </summary> </histogram> -<histogram name="PLT.PT_RequestToFinish" units="ms"> +<histogram name="PLT.PT_RequestToFinish" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90590,7 +92125,8 @@ </summary> </histogram> -<histogram name="PLT.PT_RequestToFinish_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_RequestToFinish_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. Use PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired @@ -90607,7 +92143,8 @@ </summary> </histogram> -<histogram name="PLT.PT_RequestToFinishDoc" units="ms"> +<histogram name="PLT.PT_RequestToFinishDoc" units="ms" + expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90628,7 +92165,8 @@ </summary> </histogram> -<histogram name="PLT.PT_RequestToStart_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_RequestToStart_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90650,7 +92188,8 @@ </summary> </histogram> -<histogram name="PLT.PT_StartToCommit_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_StartToCommit_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90671,7 +92210,8 @@ </summary> </histogram> -<histogram name="PLT.PT_StartToFinish_DataReductionProxy" units="ms"> +<histogram name="PLT.PT_StartToFinish_DataReductionProxy" units="ms" + expires_after="2016-09-08"> <obsolete> Deprecated 09/2016. </obsolete> @@ -90684,7 +92224,7 @@ </summary> </histogram> -<histogram name="PLT.RequestToFinish" units="ms"> +<histogram name="PLT.RequestToFinish" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90705,7 +92245,7 @@ </summary> </histogram> -<histogram name="PLT.StartToCommit" units="ms"> +<histogram name="PLT.StartToCommit" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.Timing2.NavigationToCommit instead. </obsolete> @@ -90717,7 +92257,7 @@ </summary> </histogram> -<histogram name="PLT.StartToFinish" units="ms"> +<histogram name="PLT.StartToFinish" units="ms" expires_after="2016-08-02"> <obsolete> Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead. </obsolete> @@ -90729,7 +92269,7 @@ </summary> </histogram> -<histogram name="PLT.StartToFinish.NoProxy.http"> +<histogram name="PLT.StartToFinish.NoProxy.http" expires_after="2014-07-08"> <obsolete> Deprecated as of 07/2014. </obsolete> @@ -90737,7 +92277,7 @@ <summary>StartToFinish times when using http and no proxy.</summary> </histogram> -<histogram name="PLT.StartToFinish.NoProxy.https"> +<histogram name="PLT.StartToFinish.NoProxy.https" expires_after="2014-07-08"> <obsolete> Deprecated as of 07/2014. </obsolete> @@ -90745,7 +92285,7 @@ <summary>StartToFinish times when using https and no proxy.</summary> </histogram> -<histogram name="PLT.StartToFinish.Proxy.http"> +<histogram name="PLT.StartToFinish.Proxy.http" expires_after="2014-07-08"> <obsolete> Deprecated as of 07/2014. </obsolete> @@ -90753,7 +92293,7 @@ <summary>StartToFinish times when using http over a proxy.</summary> </histogram> -<histogram name="PLT.StartToFinish.Proxy.https"> +<histogram name="PLT.StartToFinish.Proxy.https" expires_after="2014-07-08"> <obsolete> Deprecated as of 07/2014. </obsolete> @@ -90761,7 +92301,7 @@ <summary>StartToFinish times when using https over a proxy.</summary> </histogram> -<histogram name="PLT.UserTiming_Mark" units="ms"> +<histogram name="PLT.UserTiming_Mark" units="ms" expires_after="2016-09-15"> <obsolete> Deprecated as of 09/2016. </obsolete> @@ -90773,7 +92313,8 @@ </summary> </histogram> -<histogram name="PLT.UserTiming_MeasureDuration" units="ms"> +<histogram name="PLT.UserTiming_MeasureDuration" units="ms" + expires_after="2016-09-15"> <obsolete> Deprecated as of 09/2016. </obsolete> @@ -90786,7 +92327,7 @@ </histogram> <histogram name="Plugin.AvailabilityStatus.WidevineCdm" - enum="PluginAvailabilityStatus"> + enum="PluginAvailabilityStatus" expires_after="2018-01-11"> <obsolete> Deprecated as of 01/2017 (M65). </obsolete> @@ -90827,7 +92368,7 @@ <summary>Width of Flash plugins users click at least once.</summary> </histogram> -<histogram name="Plugin.Flash.Engagement"> +<histogram name="Plugin.Flash.Engagement" expires_after="2017-12-13"> <obsolete> Deprecated 12/2017 in Issue 781644 as we no longer use Site Engagement Index as a signal for Flash display. @@ -90870,7 +92411,7 @@ </histogram> <histogram name="Plugin.NpapiRemovalInfobar.Removed.PluginGroup" - enum="PluginGroup"> + enum="PluginGroup" expires_after="2016-04-11"> <obsolete> Deprecated due to NPAPI removal. </obsolete> @@ -90883,7 +92424,7 @@ </histogram> <histogram name="Plugin.NpapiRemovalInfobar.RemovedSoon.PluginGroup" - enum="PluginGroup"> + enum="PluginGroup" expires_after="2016-04-11"> <obsolete> Deprecated due to NPAPI removal. </obsolete> @@ -90895,7 +92436,8 @@ </summary> </histogram> -<histogram name="Plugin.NPAPIStatus" enum="NPAPIPluginStatus"> +<histogram name="Plugin.NPAPIStatus" enum="NPAPIPluginStatus" + expires_after="2016-04-11"> <obsolete> Deprecated due to NPAPI removal. </obsolete> @@ -90907,7 +92449,8 @@ </histogram> <histogram name="Plugin.PowerSaver.PeripheralHeuristic" - enum="PluginPowerSaverPeripheralHeuristicDecision"> + enum="PluginPowerSaverPeripheralHeuristicDecision" + expires_after="2016-08-10"> <obsolete> Deprecated in favor of Plugin.PowerSaver.PeripheralHeuristicInitialDecision. </obsolete> @@ -90993,7 +92536,7 @@ <summary>Result of HTMLPluginElement::requestObject in Blink.</summary> </histogram> -<histogram name="Plugin.SyncMessageTime" units="ms"> +<histogram name="Plugin.SyncMessageTime" units="ms" expires_after="2016-04-11"> <obsolete> Deprecated due to NPAPI removal. </obsolete> @@ -91038,7 +92581,8 @@ </summary> </histogram> -<histogram name="Power.BatteryDischargePercentPerHour" units="%"> +<histogram name="Power.BatteryDischargePercentPerHour" units="%" + expires_after="2017-03-10"> <obsolete> Deprecated 02/2017 in favor of power benchmarks that have less variability than data from users' machines. @@ -91068,7 +92612,8 @@ </summary> </histogram> -<histogram name="Power.BatteryDischargeRate_15" units="%"> +<histogram name="Power.BatteryDischargeRate_15" units="%" + expires_after="2017-03-10"> <obsolete> Deprecated 02/2017 in favor of power benchmarks that have less variability than data from users' machines. @@ -91086,7 +92631,8 @@ </summary> </histogram> -<histogram name="Power.BatteryDischargeRate_30" units="%"> +<histogram name="Power.BatteryDischargeRate_30" units="%" + expires_after="2017-03-10"> <obsolete> Deprecated 02/2017 in favor of power benchmarks that have less variability than data from users' machines. @@ -91104,7 +92650,8 @@ </summary> </histogram> -<histogram name="Power.BatteryDischargeRate_5" units="%"> +<histogram name="Power.BatteryDischargeRate_5" units="%" + expires_after="2017-03-10"> <obsolete> Deprecated 02/2017 in favor of power benchmarks that have less variability than data from users' machines. @@ -91173,7 +92720,8 @@ </summary> </histogram> -<histogram name="Power.BatteryRemainingCharge" units="%"> +<histogram name="Power.BatteryRemainingCharge" units="%" + expires_after="2013-05-01"> <obsolete> Deprecated as of 03/2012, no longer being generated by powerd. </obsolete> @@ -91192,7 +92740,8 @@ </summary> </histogram> -<histogram name="Power.BatteryTimeToEmpty" units="minutes"> +<histogram name="Power.BatteryTimeToEmpty" units="minutes" + expires_after="2013-05-01"> <obsolete> Deprecated as of 03/2012, no longer being generated by powerd. </obsolete> @@ -91223,7 +92772,8 @@ </summary> </histogram> -<histogram name="Power.BrightnessAdjustOnAC" enum="PowerBrightnessAdjust"> +<histogram name="Power.BrightnessAdjustOnAC" enum="PowerBrightnessAdjust" + expires_after="2013-05-25"> <obsolete> Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and Accel_BrightnessUp_F7 user actions instead. @@ -91235,7 +92785,8 @@ </summary> </histogram> -<histogram name="Power.BrightnessAdjustOnBattery" enum="PowerBrightnessAdjust"> +<histogram name="Power.BrightnessAdjustOnBattery" enum="PowerBrightnessAdjust" + expires_after="2013-05-25"> <obsolete> Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and Accel_BrightnessUp_F7 user actions instead. @@ -91247,7 +92798,8 @@ </summary> </histogram> -<histogram name="Power.ChargerType" enum="PowerChargerType"> +<histogram name="Power.ChargerType" enum="PowerChargerType" + expires_after="2014-11-20"> <obsolete> Deprecated 11/2014 in issue 427057. </obsolete> @@ -91574,7 +93126,8 @@ </summary> </histogram> -<histogram name="Power.MilliConsumptionPerHourIosOnActive"> +<histogram name="Power.MilliConsumptionPerHourIosOnActive" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -91589,7 +93142,8 @@ </summary> </histogram> -<histogram name="Power.MilliConsumptionPerHourOthers"> +<histogram name="Power.MilliConsumptionPerHourOthers" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -91604,7 +93158,7 @@ </summary> </histogram> -<histogram name="Power.MilliConsumptionPerHourP2P"> +<histogram name="Power.MilliConsumptionPerHourP2P" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -91619,7 +93173,8 @@ </summary> </histogram> -<histogram name="Power.MilliConsumptionPerHourServer"> +<histogram name="Power.MilliConsumptionPerHourServer" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -91727,7 +93282,7 @@ </summary> </histogram> -<histogram name="Power.RetrySuspendCount"> +<histogram name="Power.RetrySuspendCount" expires_after="2014-02-13"> <obsolete> Deprecated Feb 2014 by Power.SuspendAttemptsBeforeCancel and Power.SuspendAttemptsBeforeSuccess. @@ -91786,7 +93341,8 @@ </summary> </histogram> -<histogram name="Power.SuspendStatus" enum="SuspendStatus"> +<histogram name="Power.SuspendStatus" enum="SuspendStatus" + expires_after="2014-01-28"> <obsolete> Deprecated Jan 2014 by Power.SuspendAttempt and Power.SuspendResult. </obsolete> @@ -91794,7 +93350,8 @@ <summary>Chrome OS suspend status.</summary> </histogram> -<histogram name="Power.ThermalAbortedFanTurnOn" units="%"> +<histogram name="Power.ThermalAbortedFanTurnOn" units="%" + expires_after="2014-08-12"> <obsolete> No longer sent. </obsolete> @@ -91806,7 +93363,8 @@ </summary> </histogram> -<histogram name="Power.ThermalMultipleFanTurnOn" units="%"> +<histogram name="Power.ThermalMultipleFanTurnOn" units="%" + expires_after="2014-08-12"> <obsolete> No longer sent. </obsolete> @@ -91938,7 +93496,8 @@ </summary> </histogram> -<histogram name="Precache.BatteryPercentage.Start" units="%"> +<histogram name="Precache.BatteryPercentage.Start" units="%" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -91949,7 +93508,8 @@ </summary> </histogram> -<histogram name="Precache.BatteryPercentageDiff.End" units="%"> +<histogram name="Precache.BatteryPercentageDiff.End" units="%" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -91964,7 +93524,8 @@ </summary> </histogram> -<histogram name="Precache.CacheSize.AllEntries" units="KB"> +<histogram name="Precache.CacheSize.AllEntries" units="KB" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -91976,7 +93537,8 @@ </summary> </histogram> -<histogram name="Precache.CacheStatus.NonPrefetch" enum="HttpCachePattern"> +<histogram name="Precache.CacheStatus.NonPrefetch" enum="HttpCachePattern" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -91989,7 +93551,7 @@ </histogram> <histogram name="Precache.CacheStatus.NonPrefetch.FromPrecache" - enum="HttpCachePattern"> + enum="HttpCachePattern" expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92003,7 +93565,7 @@ </histogram> <histogram name="Precache.CacheStatus.NonPrefetch.NonTopHosts" - enum="HttpCachePattern"> + enum="HttpCachePattern" expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92017,7 +93579,7 @@ </histogram> <histogram name="Precache.CacheStatus.NonPrefetch.TopHosts" - enum="HttpCachePattern"> + enum="HttpCachePattern" expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92030,7 +93592,8 @@ </summary> </histogram> -<histogram name="Precache.CacheStatus.Prefetch" enum="HttpCachePattern"> +<histogram name="Precache.CacheStatus.Prefetch" enum="HttpCachePattern" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92042,7 +93605,8 @@ </summary> </histogram> -<histogram name="Precache.DownloadedNonPrecache" units="bytes"> +<histogram name="Precache.DownloadedNonPrecache" units="bytes" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92053,7 +93617,8 @@ </summary> </histogram> -<histogram name="Precache.DownloadedPrecacheMotivated" units="bytes"> +<histogram name="Precache.DownloadedPrecacheMotivated" units="bytes" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92064,7 +93629,8 @@ </summary> </histogram> -<histogram name="Precache.Events" enum="PrecacheEvents"> +<histogram name="Precache.Events" enum="PrecacheEvents" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92077,7 +93643,7 @@ </summary> </histogram> -<histogram name="Precache.Fetch.FailureReasons"> +<histogram name="Precache.Fetch.FailureReasons" expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92089,7 +93655,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.MinWeight" units="thousandths"> +<histogram name="Precache.Fetch.MinWeight" units="thousandths" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92102,7 +93669,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.PercentCompleted" units="%"> +<histogram name="Precache.Fetch.PercentCompleted" units="%" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92114,7 +93682,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.ResponseBytes" units="bytes"> +<histogram name="Precache.Fetch.ResponseBytes" units="bytes" + expires_after="2015-08-04"> <obsolete> Deprecated July 29 2015. </obsolete> @@ -92126,7 +93695,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.ResponseBytes.Daily" units="bytes"> +<histogram name="Precache.Fetch.ResponseBytes.Daily" units="bytes" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92138,7 +93708,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.ResponseBytes.Network" units="bytes"> +<histogram name="Precache.Fetch.ResponseBytes.Network" units="bytes" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92151,7 +93722,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.ResponseBytes.NetworkWasted" units="bytes"> +<histogram name="Precache.Fetch.ResponseBytes.NetworkWasted" units="bytes" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92165,7 +93737,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.ResponseBytes.Total" units="bytes"> +<histogram name="Precache.Fetch.ResponseBytes.Total" units="bytes" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92177,7 +93750,8 @@ </summary> </histogram> -<histogram name="Precache.Fetch.TimeToComplete" units="ms"> +<histogram name="Precache.Fetch.TimeToComplete" units="ms" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92189,7 +93763,8 @@ </summary> </histogram> -<histogram name="Precache.Freshness.Prefetch" units="seconds"> +<histogram name="Precache.Freshness.Prefetch" units="seconds" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92202,7 +93777,8 @@ </summary> </histogram> -<histogram name="Precache.Latency.NonPrefetch" units="ms"> +<histogram name="Precache.Latency.NonPrefetch" units="ms" + expires_after="2017-03-09"> <obsolete> Deprecated March 7 2017. </obsolete> @@ -92214,7 +93790,8 @@ </summary> </histogram> -<histogram name="Precache.Latency.NonPrefetch.NonTopHosts" units="ms"> +<histogram name="Precache.Latency.NonPrefetch.NonTopHosts" units="ms" + expires_after="2017-03-09"> <obsolete> Deprecated March 7 2017. </obsolete> @@ -92227,7 +93804,8 @@ </summary> </histogram> -<histogram name="Precache.Latency.NonPrefetch.TopHosts" units="ms"> +<histogram name="Precache.Latency.NonPrefetch.TopHosts" units="ms" + expires_after="2017-03-09"> <obsolete> Deprecated March 7 2017. </obsolete> @@ -92240,7 +93818,8 @@ </summary> </histogram> -<histogram name="Precache.Latency.Prefetch" units="ms"> +<histogram name="Precache.Latency.Prefetch" units="ms" + expires_after="2017-03-09"> <obsolete> Deprecated March 7 2017. </obsolete> @@ -92252,7 +93831,8 @@ </summary> </histogram> -<histogram name="Precache.PeriodicTaskInterval" units="minutes"> +<histogram name="Precache.PeriodicTaskInterval" units="minutes" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92265,7 +93845,7 @@ </summary> </histogram> -<histogram name="Precache.Saved" units="bytes"> +<histogram name="Precache.Saved" units="bytes" expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92277,7 +93857,8 @@ </summary> </histogram> -<histogram name="Precache.Saved.Freshness" units="seconds"> +<histogram name="Precache.Saved.Freshness" units="seconds" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92292,7 +93873,8 @@ </summary> </histogram> -<histogram name="Precache.TimeSinceLastPrecache" units="seconds"> +<histogram name="Precache.TimeSinceLastPrecache" units="seconds" + expires_after="2017-07-12"> <obsolete> Deprecated July 11 2017. </obsolete> @@ -92330,7 +93912,8 @@ </summary> </histogram> -<histogram name="PreloadScanner.Counts" units="preloads"> +<histogram name="PreloadScanner.Counts" units="preloads" + expires_after="2016-05-25"> <obsolete> Deprecated 5/25/2016 in favor of PreloadScanner.Counts2 </obsolete> @@ -92338,7 +93921,8 @@ <summary>The number of preloads generated by the preload scanner.</summary> </histogram> -<histogram name="PreloadScanner.Counts.Miss" units="preloads"> +<histogram name="PreloadScanner.Counts.Miss" units="preloads" + expires_after="2016-05-25"> <obsolete> Deprecated 5/25/2016 in favor of PreloadScanner.Counts2.Miss </obsolete> @@ -92351,7 +93935,8 @@ </summary> </histogram> -<histogram name="PreloadScanner.Counts2" units="preloads"> +<histogram name="PreloadScanner.Counts2" units="preloads" + expires_after="2018-02-06"> <obsolete> Removed Feb 2018, no longer useful. </obsolete> @@ -92359,7 +93944,8 @@ <summary>The number of preloads generated by the preload scanner.</summary> </histogram> -<histogram name="PreloadScanner.Counts2.Miss" units="preloads"> +<histogram name="PreloadScanner.Counts2.Miss" units="preloads" + expires_after="2018-02-06"> <obsolete> Removed Feb 2018, no longer useful. </obsolete> @@ -92371,7 +93957,8 @@ </summary> </histogram> -<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Failure" units="ms"> +<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Failure" units="ms" + expires_after="2017-07-27"> <obsolete> DocumentWriteEvaluator was removed in 07/2017 </obsolete> @@ -92383,7 +93970,8 @@ </summary> </histogram> -<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Success" units="ms"> +<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Success" units="ms" + expires_after="2017-07-27"> <obsolete> DocumentWriteEvaluator was removed in 07/2017 </obsolete> @@ -92396,7 +93984,7 @@ </histogram> <histogram name="PreloadScanner.DocumentWrite.GatedEvaluation" - enum="DocumentWriteGatedEvaluation"> + enum="DocumentWriteGatedEvaluation" expires_after="2017-07-27"> <obsolete> DocumentWriteEvaluator was removed in 07/2017 </obsolete> @@ -92406,7 +93994,8 @@ </summary> </histogram> -<histogram name="PreloadScanner.DocumentWrite.InitializationTime" units="ms"> +<histogram name="PreloadScanner.DocumentWrite.InitializationTime" units="ms" + expires_after="2017-07-27"> <obsolete> DocumentWriteEvaluator was removed in 07/2017 </obsolete> @@ -92417,7 +94006,8 @@ </summary> </histogram> -<histogram name="PreloadScanner.DocumentWrite.ScriptLength" units="characters"> +<histogram name="PreloadScanner.DocumentWrite.ScriptLength" units="characters" + expires_after="2016-12-07"> <obsolete> No longer needed </obsolete> @@ -92457,7 +94047,8 @@ </summary> </histogram> -<histogram name="PreloadScanner.ReferenceTime" units="ms"> +<histogram name="PreloadScanner.ReferenceTime" units="ms" + expires_after="2018-05-15"> <obsolete> Deprecated May 2018 </obsolete> @@ -92471,7 +94062,7 @@ </summary> </histogram> -<histogram name="PreloadScanner.TTFB" units="ms"> +<histogram name="PreloadScanner.TTFB" units="ms" expires_after="2018-05-15"> <obsolete> Deprecated May 2018 </obsolete> @@ -92482,7 +94073,8 @@ </summary> </histogram> -<histogram name="Prerender.AbandonTimeUntilUsed" units="ms"> +<histogram name="Prerender.AbandonTimeUntilUsed" units="ms" + expires_after="2017-09-06"> <obsolete> Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in'). </obsolete> @@ -92495,7 +94087,8 @@ </summary> </histogram> -<histogram name="Prerender.CookieSendType" enum="PrerenderCookieSendType"> +<histogram name="Prerender.CookieSendType" enum="PrerenderCookieSendType" + expires_after="2015-03-13"> <obsolete> Deprecated March 13 2015. </obsolete> @@ -92505,7 +94098,8 @@ </summary> </histogram> -<histogram name="Prerender.CookieStatus" enum="PrerenderCookieStatus"> +<histogram name="Prerender.CookieStatus" enum="PrerenderCookieStatus" + expires_after="2015-03-13"> <obsolete> Deprecated March 13 2015. </obsolete> @@ -92513,7 +94107,8 @@ <summary>Enumeration of what cookie actions a prerender caused.</summary> </histogram> -<histogram name="Prerender.Event" enum="PrerenderEvent"> +<histogram name="Prerender.Event" enum="PrerenderEvent" + expires_after="2015-01-14"> <obsolete> Deprecated Dec 12 2014. </obsolete> @@ -92522,7 +94117,8 @@ </summary> </histogram> -<histogram name="Prerender.Events" enum="PrerenderHoverEvent"> +<histogram name="Prerender.Events" enum="PrerenderHoverEvent" + expires_after="2013-05-15"> <obsolete> deprecated May 10 2012 </obsolete> @@ -92538,7 +94134,7 @@ </histogram> <histogram name="Prerender.FinalStatusMatchComplete" - enum="PrerenderFinalStatus"> + enum="PrerenderFinalStatus" expires_after="2016-05-12"> <obsolete> deprecated 2016-05-12 </obsolete> @@ -92549,7 +94145,8 @@ </summary> </histogram> -<histogram name="Prerender.FractionPixelsFinalAtSwapin"> +<histogram name="Prerender.FractionPixelsFinalAtSwapin" + expires_after="2014-01-15"> <obsolete> Deprecated Jan 14 2014. </obsolete> @@ -92560,7 +94157,8 @@ </summary> </histogram> -<histogram name="Prerender.HoverStats_TimeUntilClicked" units="ms"> +<histogram name="Prerender.HoverStats_TimeUntilClicked" units="ms" + expires_after="2013-05-15"> <obsolete> deprecated May 10 2012 </obsolete> @@ -92572,7 +94170,8 @@ </summary> </histogram> -<histogram name="Prerender.HoverStats_TimeUntilDiscarded" units="ms"> +<histogram name="Prerender.HoverStats_TimeUntilDiscarded" units="ms" + expires_after="2013-05-15"> <obsolete> deprecated May 10 2012 </obsolete> @@ -92586,7 +94185,7 @@ </histogram> <histogram name="Prerender.LocalPredictorEvent" - enum="PrerenderLocalPredictorEvents"> + enum="PrerenderLocalPredictorEvents" expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -92596,7 +94195,8 @@ </summary> </histogram> -<histogram name="Prerender.LocalPredictorLoggedInLookupTime" units="ms"> +<histogram name="Prerender.LocalPredictorLoggedInLookupTime" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -92608,7 +94208,8 @@ </summary> </histogram> -<histogram name="Prerender.LocalPredictorPrefetchMatchPLT" units="ms"> +<histogram name="Prerender.LocalPredictorPrefetchMatchPLT" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -92623,7 +94224,8 @@ </summary> </histogram> -<histogram name="Prerender.LocalPredictorServiceLookupTime" units="ms"> +<histogram name="Prerender.LocalPredictorServiceLookupTime" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -92635,7 +94237,8 @@ </summary> </histogram> -<histogram name="Prerender.LocalPredictorTimeUntilUsed" units="ms"> +<histogram name="Prerender.LocalPredictorTimeUntilUsed" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -92647,7 +94250,8 @@ </summary> </histogram> -<histogram name="Prerender.LocalPredictorURLLookupTime" units="ms"> +<histogram name="Prerender.LocalPredictorURLLookupTime" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -92659,7 +94263,8 @@ </summary> </histogram> -<histogram name="Prerender.LocalVisitCoreTransition" enum="CorePageTransition"> +<histogram name="Prerender.LocalVisitCoreTransition" enum="CorePageTransition" + expires_after="2013-05-15"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -92670,7 +94275,7 @@ </summary> </histogram> -<histogram name="Prerender.LocalVisitDatabaseSize"> +<histogram name="Prerender.LocalVisitDatabaseSize" expires_after="2013-05-15"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -92678,7 +94283,8 @@ <summary>Size of the local visits database (number of entries).</summary> </histogram> -<histogram name="Prerender.LocalVisitEvents" enum="PrerenderLocalVisitEvents"> +<histogram name="Prerender.LocalVisitEvents" enum="PrerenderLocalVisitEvents" + expires_after="2013-05-15"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -92688,7 +94294,7 @@ </summary> </histogram> -<histogram name="Prerender.ModPagespeedHeader"> +<histogram name="Prerender.ModPagespeedHeader" expires_after="2013-10-21"> <obsolete> Deprecated as of 10/2013. </obsolete> @@ -92698,7 +94304,8 @@ </summary> </histogram> -<histogram name="Prerender.NetworkBytes.TotalForProfile" units="bytes"> +<histogram name="Prerender.NetworkBytes.TotalForProfile" units="bytes" + expires_after="2014-05-15"> <obsolete> Deprecated May 13th 2014, use Prerender.NetworkBytesTotalForProfile instead. </obsolete> @@ -92715,7 +94322,8 @@ </summary> </histogram> -<histogram name="Prerender.NetworkBytes.Used" units="bytes"> +<histogram name="Prerender.NetworkBytes.Used" units="bytes" + expires_after="2014-05-15"> <obsolete> Deprecated May 13th 2014, use Prerender.NetworkBytes.Used instead. </obsolete> @@ -92729,7 +94337,8 @@ </summary> </histogram> -<histogram name="Prerender.NetworkBytes.Wasted" units="bytes"> +<histogram name="Prerender.NetworkBytes.Wasted" units="bytes" + expires_after="2014-05-15"> <obsolete> Deprecated May 13th 2014, use Prerender.NetworkBytes.Wasted instead. </obsolete> @@ -92757,7 +94366,8 @@ </summary> </histogram> -<histogram name="Prerender.NetworkBytesUsed" units="bytes"> +<histogram name="Prerender.NetworkBytesUsed" units="bytes" + expires_after="2017-09-06"> <obsolete> Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in'). </obsolete> @@ -92784,7 +94394,8 @@ </summary> </histogram> -<histogram name="Prerender.NoStatePrefetchAge" units="ms"> +<histogram name="Prerender.NoStatePrefetchAge" units="ms" + expires_after="2017-01-02"> <obsolete> Deprecated December 28, 2016, use Prerender.PrefetchAge instead. </obsolete> @@ -92857,7 +94468,8 @@ </summary> </histogram> -<histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount"> +<histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount" + expires_after="2017-09-06"> <obsolete> Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in'). </obsolete> @@ -92870,7 +94482,7 @@ </summary> </histogram> -<histogram name="Prerender.OmniboxPrerenderCount"> +<histogram name="Prerender.OmniboxPrerenderCount" expires_after="2017-09-06"> <obsolete> Deprecated 2017-09. </obsolete> @@ -92885,7 +94497,7 @@ </histogram> <histogram name="Prerender.PagespeedHeader.ServerCounts" - enum="PagespeedHeaderServerType"> + enum="PagespeedHeaderServerType" expires_after="2018-04-25"> <obsolete> Deprecated April 2018 </obsolete> @@ -92906,7 +94518,7 @@ </histogram> <histogram name="Prerender.PagespeedHeader.VersionCounts" - enum="PagespeedVersion"> + enum="PagespeedVersion" expires_after="2018-04-25"> <obsolete> Deprecated April 2018 </obsolete> @@ -92922,7 +94534,8 @@ </summary> </histogram> -<histogram name="Prerender.PageviewEvents" enum="PrerenderPageviewEvents"> +<histogram name="Prerender.PageviewEvents" enum="PrerenderPageviewEvents" + expires_after="2013-05-15"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -92930,7 +94543,8 @@ <summary>Types of pages rendered.</summary> </histogram> -<histogram name="Prerender.PageVisitedStatus" enum="Boolean"> +<histogram name="Prerender.PageVisitedStatus" enum="Boolean" + expires_after="2015-03-30"> <obsolete> deprecated March 30, 2015 </obsolete> @@ -92941,7 +94555,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPageLoadTime_Control" units="ms"> +<histogram name="Prerender.PerceivedPageLoadTime_Control" units="ms" + expires_after="2013-05-15"> <obsolete> Deprecated 03/24/11. Replaced by Prerender.PerceivedPLT_ContentPrefetchPrerenderControl. @@ -92958,7 +94573,7 @@ </histogram> <histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchControl" - units="ms"> + units="ms" expires_after="2013-05-15"> <obsolete> Deprecated 03/24/11. Replaced by Prerender.PerceivedPLTMatched_ContentPrefetchPrerenderControl. @@ -92975,7 +94590,7 @@ </histogram> <histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchTreatment" - units="ms"> + units="ms" expires_after="2013-05-15"> <obsolete> Deprecated 03/24/11. Replaced by Prerender.PerceivedPLTMatched_ContentPrefetchPrerender. @@ -92991,7 +94606,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPageLoadTime_Treatment" units="ms"> +<histogram name="Prerender.PerceivedPageLoadTime_Treatment" units="ms" + expires_after="2013-05-15"> <obsolete> Deprecated 03/24/11. Replaced by Prerender.PerceivedPLT_ContentPrefetchPrerender. @@ -93007,7 +94623,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPageLoadTime_WindowControl" units="ms"> +<histogram name="Prerender.PerceivedPageLoadTime_WindowControl" units="ms" + expires_after="2013-05-15"> <obsolete> Deprecated 03/24/11. Replaced by Prerender.PerceivedPLTWindowed_ContentPrefetchPrerenderControl. @@ -93023,7 +94640,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPageLoadTime_WindowTreatment" units="ms"> +<histogram name="Prerender.PerceivedPageLoadTime_WindowTreatment" units="ms" + expires_after="2013-05-15"> <obsolete> Deprecated 03/24/11. Replaced by Prerender.PerceivedPLTWindowed_ContentPrefetchPrerender. @@ -93039,7 +94657,7 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLT" units="ms"> +<histogram name="Prerender.PerceivedPLT" units="ms" expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93053,7 +94671,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTFirstAfterMiss" units="ms"> +<histogram name="Prerender.PerceivedPLTFirstAfterMiss" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93068,7 +94687,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly" units="ms"> +<histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93085,7 +94705,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTFirstAfterMissBoth" units="ms"> +<histogram name="Prerender.PerceivedPLTFirstAfterMissBoth" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93102,7 +94723,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping" units="ms"> +<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93119,7 +94741,7 @@ </histogram> <histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly" - units="ms"> + units="ms" expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93136,7 +94758,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTMatched" units="ms"> +<histogram name="Prerender.PerceivedPLTMatched" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93151,7 +94774,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTMatchedComplete" units="ms"> +<histogram name="Prerender.PerceivedPLTMatchedComplete" units="ms" + expires_after="2016-12-22"> <obsolete> Deprecated August 2016 </obsolete> @@ -93170,7 +94794,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTWindowed" units="ms"> +<histogram name="Prerender.PerceivedPLTWindowed" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93185,7 +94810,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedPLTWindowNotMatched" units="ms"> +<histogram name="Prerender.PerceivedPLTWindowNotMatched" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93200,7 +94826,8 @@ </summary> </histogram> -<histogram name="Prerender.PerceivedTTFCPRecorded" enum="BooleanRecorded"> +<histogram name="Prerender.PerceivedTTFCPRecorded" enum="BooleanRecorded" + expires_after="2019-03-05"> <obsolete> Obsoleted in Feb 2019. </obsolete> @@ -93217,7 +94844,7 @@ </summary> </histogram> -<histogram name="Prerender.PercentLoadDoneAtSwapin"> +<histogram name="Prerender.PercentLoadDoneAtSwapin" expires_after="2017-09-06"> <obsolete> Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in'). </obsolete> @@ -93273,7 +94900,7 @@ </summary> </histogram> -<histogram name="Prerender.PrerenderCountOf3Max"> +<histogram name="Prerender.PrerenderCountOf3Max" expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93299,7 +94926,8 @@ </summary> </histogram> -<histogram name="Prerender.PrerenderNotSwappedInPLT" units="ms"> +<histogram name="Prerender.PrerenderNotSwappedInPLT" units="ms" + expires_after="2017-03-31"> <obsolete> Deprecated 2017-03. </obsolete> @@ -93346,7 +94974,8 @@ </summary> </histogram> -<histogram name="Prerender.RendererIdleTime" units="ms"> +<histogram name="Prerender.RendererIdleTime" units="ms" + expires_after="2013-04-25"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -93358,7 +94987,8 @@ </summary> </histogram> -<histogram name="Prerender.RendererPerceivedPLT" units="ms"> +<histogram name="Prerender.RendererPerceivedPLT" units="ms" + expires_after="2013-04-25"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -93373,7 +95003,8 @@ </summary> </histogram> -<histogram name="Prerender.RendererPerceivedPLTMatched" units="ms"> +<histogram name="Prerender.RendererPerceivedPLTMatched" units="ms" + expires_after="2013-04-25"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -93387,7 +95018,8 @@ </summary> </histogram> -<histogram name="Prerender.RendererTimeUntilDisplay" units="ms"> +<histogram name="Prerender.RendererTimeUntilDisplay" units="ms" + expires_after="2013-04-25"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -93408,7 +95040,8 @@ </summary> </histogram> -<histogram name="Prerender.Sessions" enum="PrerenderMode"> +<histogram name="Prerender.Sessions" enum="PrerenderMode" + expires_after="2013-05-15"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -93416,7 +95049,8 @@ <summary>Enumeration of how prerender was used per session.</summary> </histogram> -<histogram name="Prerender.SessionStorageNamespaceMergeTime" units="ms"> +<histogram name="Prerender.SessionStorageNamespaceMergeTime" units="ms" + expires_after="2015-01-14"> <obsolete> Deprecated Dec 12 2014. </obsolete> @@ -93424,7 +95058,8 @@ <summary>Time to perform the session storage namespace merge.</summary> </histogram> -<histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT" units="ms"> +<histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -93435,7 +95070,8 @@ </summary> </histogram> -<histogram name="Prerender.SimulatedLocalBrowsingPLT" units="ms"> +<histogram name="Prerender.SimulatedLocalBrowsingPLT" units="ms" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -93464,7 +95100,8 @@ </summary> </histogram> -<histogram name="Prerender.TabHelperEvent" enum="PrerenderTabHelperEvents"> +<histogram name="Prerender.TabHelperEvent" enum="PrerenderTabHelperEvents" + expires_after="2015-04-17"> <obsolete> Deprecated April 2015 </obsolete> @@ -93474,7 +95111,8 @@ </summary> </histogram> -<histogram name="Prerender.TimeBetweenPrerenderRequests" units="ms"> +<histogram name="Prerender.TimeBetweenPrerenderRequests" units="ms" + expires_after="2017-09-06"> <obsolete> Deprecated 2017-09. </obsolete> @@ -93482,7 +95120,8 @@ <summary>Time between subsequent prerender requests.</summary> </histogram> -<histogram name="Prerender.TimeSinceLastRecentVisit" units="ms"> +<histogram name="Prerender.TimeSinceLastRecentVisit" units="ms" + expires_after="2017-09-06"> <obsolete> Deprecated 2017-09. </obsolete> @@ -93494,7 +95133,7 @@ </summary> </histogram> -<histogram name="Prerender.TimeToClick" units="ms"> +<histogram name="Prerender.TimeToClick" units="ms" expires_after="2013-05-15"> <obsolete> deprecated Nov 16 2012 </obsolete> @@ -93502,7 +95141,7 @@ <summary>Duration that a user hovers a link before clicking on it.</summary> </histogram> -<histogram name="Prerender.TimeUntilUsed" units="ms"> +<histogram name="Prerender.TimeUntilUsed" units="ms" expires_after="2013-05-15"> <obsolete> deprecated Nov 16 2012. See Prerender.TimeUntilUsed2, which has a larger range. @@ -93515,7 +95154,8 @@ </summary> </histogram> -<histogram name="Prerender.TimeUntilUsed2" units="ms"> +<histogram name="Prerender.TimeUntilUsed2" units="ms" + expires_after="2017-09-06"> <obsolete> Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in'). </obsolete> @@ -93666,7 +95306,8 @@ </summary> </histogram> -<histogram name="Previews.InfoBarTimestamp" enum="PreviewsInfoBarTimestamp"> +<histogram name="Previews.InfoBarTimestamp" enum="PreviewsInfoBarTimestamp" + expires_after="2018-09-27"> <obsolete> Replaced by Previews.StalePreviewTimestampShown as of 09/2018. </obsolete> @@ -93760,7 +95401,8 @@ </summary> </histogram> -<histogram name="Previews.OptOut.DBRowCount" units="rows"> +<histogram name="Previews.OptOut.DBRowCount" units="rows" + expires_after="2018-06-14"> <obsolete> No longer used as of 06/2018. </obsolete> @@ -93770,7 +95412,8 @@ </summary> </histogram> -<histogram name="Previews.OptOut.SQLiteLoadError" enum="SqliteErrorCode"> +<histogram name="Previews.OptOut.SQLiteLoadError" enum="SqliteErrorCode" + expires_after="2018-06-14"> <obsolete> No longer used as of 06/2018. </obsolete> @@ -93829,7 +95472,8 @@ </summary> </histogram> -<histogram name="Previews.ServerLitePage.HttpOnlyFallbackPenalty" units="ms"> +<histogram name="Previews.ServerLitePage.HttpOnlyFallbackPenalty" units="ms" + expires_after="2019-01-25"> <obsolete> Replaced January 2019 by Previews.ServerLitePage.Penalty.* </obsolete> @@ -93852,7 +95496,7 @@ </histogram> <histogram name="Previews.ServerLitePage.NotReportedNavigationRestartPenalty" - units="ms"> + units="ms" expires_after="2019-01-25"> <obsolete> Removed November 2018 when PLM support was reverted. </obsolete> @@ -93885,7 +95529,7 @@ </histogram> <histogram name="Previews.ServerLitePage.ReportedNavigationRestartPenalty" - units="ms"> + units="ms" expires_after="2019-01-25"> <obsolete> Removed November 2018 when PLM support was reverted. </obsolete> @@ -93938,7 +95582,7 @@ </histogram> <histogram name="Previews.Triggered.EffectiveConnectionType" - enum="NQEEffectiveConnectionType"> + enum="NQEEffectiveConnectionType" expires_after="2019-01-09"> <obsolete> Replaced by Previews.Triggered.EffectiveConnectionType2 as of 01/2019. </obsolete> @@ -94134,7 +95778,8 @@ </summary> </histogram> -<histogram name="PrintPreview.GcpPromo" enum="PrintPreviewGcpPromoBuckets"> +<histogram name="PrintPreview.GcpPromo" enum="PrintPreviewGcpPromoBuckets" + expires_after="2017-09-12"> <obsolete> No longer used as of 09/2017. </obsolete> @@ -94220,7 +95865,8 @@ </summary> </histogram> -<histogram name="PrintPreview.PageCount.PrintToCloudPrintWebDialog"> +<histogram name="PrintPreview.PageCount.PrintToCloudPrintWebDialog" + expires_after="2016-01-14"> <obsolete> No longer used as of 01/2016. </obsolete> @@ -94448,7 +96094,8 @@ </summary> </histogram> -<histogram name="Privacy.ConsentAuditor.UserEventServiceReady" enum="Boolean"> +<histogram name="Privacy.ConsentAuditor.UserEventServiceReady" enum="Boolean" + expires_after="2018-04-04"> <obsolete> Deprecated as of 4/2018. </obsolete> @@ -94615,7 +96262,7 @@ <summary>Result (final status) when creating a new profile.</summary> </histogram> -<histogram name="Profile.CreateTime" units="ms"> +<histogram name="Profile.CreateTime" units="ms" expires_after="2013-09-11"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -94626,7 +96273,8 @@ </summary> </histogram> -<histogram name="Profile.CreateTimeCanceled" units="ms"> +<histogram name="Profile.CreateTimeCanceled" units="ms" + expires_after="2013-09-11"> <obsolete> Deprecated as of 8/2013. </obsolete> @@ -94713,7 +96361,7 @@ <summary>Size of the favicons database.</summary> </histogram> -<histogram name="Profile.GetProfile" units="ms"> +<histogram name="Profile.GetProfile" units="ms" expires_after="2015-02-19"> <obsolete> Deprecated 02/2015. Profile.CreateAndInitializeProfile is more useful. </obsolete> @@ -94776,7 +96424,7 @@ </histogram> <histogram name="Profile.NewAvatarMenu.NotYou" - enum="ProfileNewAvatarMenuNotYou"> + enum="ProfileNewAvatarMenuNotYou" expires_after="2017-10-17"> <obsolete> Deprecated 2017-10-16. No longer tracked. Feature removed. </obsolete> @@ -94788,7 +96436,7 @@ </histogram> <histogram name="Profile.NewAvatarMenu.Signin" - enum="ProfileNewAvatarMenuSignin"> + enum="ProfileNewAvatarMenuSignin" expires_after="2017-10-19"> <obsolete> Deprecated 2017-10-19. No longer tracked. Feature removed. </obsolete> @@ -94801,7 +96449,7 @@ </histogram> <histogram name="Profile.NewAvatarMenu.Upgrade" - enum="ProfileNewAvatarMenuUpgrade"> + enum="ProfileNewAvatarMenuUpgrade" expires_after="2017-10-17"> <obsolete> Deprecated 2017-10-16. No longer tracked. Feature removed. </obsolete> @@ -94865,7 +96513,8 @@ </summary> </histogram> -<histogram name="Profile.NumberOfProfilesAfterAddOrDelete"> +<histogram name="Profile.NumberOfProfilesAfterAddOrDelete" + expires_after="2014-01-29"> <obsolete> Deprecated 2013-04-09. No longer tracked. See Profile.NumberOfProfiles. </obsolete> @@ -94876,7 +96525,7 @@ </summary> </histogram> -<histogram name="Profile.NumberOfProfilesOnStartup"> +<histogram name="Profile.NumberOfProfilesOnStartup" expires_after="2014-01-29"> <obsolete> Deprecated; replaced by Profile.NumberOfProfiles on 2013-04-09. Data are suspect, especially after 2012-02-24: see https://crbug.com/189213. @@ -94909,7 +96558,8 @@ </summary> </histogram> -<histogram name="Profile.NumberOfSignedInProfilesOnStartup"> +<histogram name="Profile.NumberOfSignedInProfilesOnStartup" + expires_after="2014-01-29"> <obsolete> Deprecated; replaced by Profile.NumberOfSignedInProfiles on 2013-04-09. </obsolete> @@ -94959,7 +96609,8 @@ </summary> </histogram> -<histogram name="Profile.OnPrefsLoadedTime" units="ms"> +<histogram name="Profile.OnPrefsLoadedTime" units="ms" + expires_after="2015-05-12"> <obsolete> Deprecated 04/2015, and replaced by Profile.OnLocaleReadyTime. </obsolete> @@ -94969,7 +96620,7 @@ </summary> </histogram> -<histogram name="Profile.Opening" enum="ProfileOpen"> +<histogram name="Profile.Opening" enum="ProfileOpen" expires_after="2014-01-29"> <obsolete> Deprecated because it did not present the information clearly. </obsolete> @@ -95023,7 +96674,7 @@ </histogram> <histogram name="Profile.SupervisedProfileCreateError" - enum="GoogleServiceAuthError"> + enum="GoogleServiceAuthError" expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -95035,7 +96686,7 @@ </histogram> <histogram name="Profile.SupervisedProfileImportError" - enum="GoogleServiceAuthError"> + enum="GoogleServiceAuthError" expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -95046,7 +96697,8 @@ </summary> </histogram> -<histogram name="Profile.SupervisedProfileTotalCreateTime" units="ms"> +<histogram name="Profile.SupervisedProfileTotalCreateTime" units="ms" + expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -95059,7 +96711,8 @@ </summary> </histogram> -<histogram name="Profile.SupervisedProfileTotalImportTime" units="ms"> +<histogram name="Profile.SupervisedProfileTotalImportTime" units="ms" + expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -95081,7 +96734,7 @@ </summary> </histogram> -<histogram name="Profile.Sync" enum="ProfileSync"> +<histogram name="Profile.Sync" enum="ProfileSync" expires_after="2014-01-29"> <obsolete> Deprecated because it did not present the information clearly. </obsolete> @@ -95099,7 +96752,8 @@ </summary> </histogram> -<histogram name="Profile.SyncSignIn" enum="ProfileType"> +<histogram name="Profile.SyncSignIn" enum="ProfileType" + expires_after="2019-01-15"> <obsolete> Deprecated 11/2018 as this histogram is not of sufficient value anymore. It only records events made through the advanced settings dialog which are very @@ -95112,7 +96766,7 @@ </summary> </histogram> -<histogram name="Profile.ThumbnailsSize" units="MB"> +<histogram name="Profile.ThumbnailsSize" units="MB" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -95160,7 +96814,8 @@ <summary>Times a profile name and/or avatar was updated.</summary> </histogram> -<histogram name="Profile.UpgradeEnrollment" enum="ProfileUpgradeEnrollment"> +<histogram name="Profile.UpgradeEnrollment" enum="ProfileUpgradeEnrollment" + expires_after="2014-08-12"> <obsolete> Deprecated 8/2014. Upgrade Promotional UI removed. </obsolete> @@ -95235,7 +96890,8 @@ </summary> </histogram> -<histogram name="Protector.DefaultSearchProvider" enum="ProtectorError"> +<histogram name="Protector.DefaultSearchProvider" enum="ProtectorError" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -95246,7 +96902,8 @@ </summary> </histogram> -<histogram name="Protector.Preferences" enum="ProtectorError"> +<histogram name="Protector.Preferences" enum="ProtectorError" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -95257,7 +96914,8 @@ </summary> </histogram> -<histogram name="Protector.SearchProvider" enum="SearchEngine"> +<histogram name="Protector.SearchProvider" enum="SearchEngine" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -95268,7 +96926,8 @@ </summary> </histogram> -<histogram name="Protector.StartupSettings" enum="SessionStartupType"> +<histogram name="Protector.StartupSettings" enum="SessionStartupType" + expires_after="2013-08-03"> <obsolete> Deprecated 8/2013. No longer tracked. </obsolete> @@ -95388,7 +97047,8 @@ </summary> </histogram> -<histogram name="ProxyOverriddenBubble.ExtensionCount" units="Extensions"> +<histogram name="ProxyOverriddenBubble.ExtensionCount" units="Extensions" + expires_after="2016-09-09"> <obsolete> Deprecated 9/2016. Never added to histograms.xml and value is always 1. </obsolete> @@ -95439,7 +97099,8 @@ </summary> </histogram> -<histogram name="PurgeAndSuspend.Memory.BlinkGCKB" units="KB"> +<histogram name="PurgeAndSuspend.Memory.BlinkGCKB" units="KB" + expires_after="2017-04-25"> <obsolete> Deprecated April 2017. </obsolete> @@ -95450,7 +97111,8 @@ </summary> </histogram> -<histogram name="PurgeAndSuspend.Memory.DiscardableKB" units="KB"> +<histogram name="PurgeAndSuspend.Memory.DiscardableKB" units="KB" + expires_after="2017-04-25"> <obsolete> Deprecated April 2017. </obsolete> @@ -95461,7 +97123,8 @@ </summary> </histogram> -<histogram name="PurgeAndSuspend.Memory.MallocMB" units="MB"> +<histogram name="PurgeAndSuspend.Memory.MallocMB" units="MB" + expires_after="2017-04-25"> <obsolete> Deprecated April 2017. </obsolete> @@ -95472,7 +97135,8 @@ </summary> </histogram> -<histogram name="PurgeAndSuspend.Memory.PartitionAllocKB" units="KB"> +<histogram name="PurgeAndSuspend.Memory.PartitionAllocKB" units="KB" + expires_after="2017-04-25"> <obsolete> Deprecated April 2017. </obsolete> @@ -95483,7 +97147,8 @@ </summary> </histogram> -<histogram name="PurgeAndSuspend.Memory.TotalAllocatedMB" units="MB"> +<histogram name="PurgeAndSuspend.Memory.TotalAllocatedMB" units="MB" + expires_after="2017-04-25"> <obsolete> Deprecated April 2017. </obsolete> @@ -95495,7 +97160,8 @@ </summary> </histogram> -<histogram name="PurgeAndSuspend.Memory.V8MainThreadIsolateMB" units="MB"> +<histogram name="PurgeAndSuspend.Memory.V8MainThreadIsolateMB" units="MB" + expires_after="2017-04-25"> <obsolete> Deprecated April 2017. </obsolete> @@ -95506,7 +97172,7 @@ </summary> </histogram> -<histogram name="PurgeAndSuspend.PendingTaskCount"> +<histogram name="PurgeAndSuspend.PendingTaskCount" expires_after="2017-10-11"> <obsolete> Deprecated Oct 2017. </obsolete> @@ -95919,7 +97585,8 @@ </summary> </histogram> -<histogram name="Quota.ErrorsOnEvictingOriginPerHour"> +<histogram name="Quota.ErrorsOnEvictingOriginPerHour" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -95930,7 +97597,8 @@ </summary> </histogram> -<histogram name="Quota.ErrorsOnGettingUsageAndQuotaPerHour"> +<histogram name="Quota.ErrorsOnGettingUsageAndQuotaPerHour" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -95969,7 +97637,7 @@ <summary>Number of evicted origins in an hour.</summary> </histogram> -<histogram name="Quota.EvictedOriginTimeSinceAccess"> +<histogram name="Quota.EvictedOriginTimeSinceAccess" expires_after="2017-02-06"> <obsolete/> <owner>calamity@chromium.org</owner> <summary> @@ -95983,7 +97651,8 @@ <summary>Number of eviction rounds in an hour.</summary> </histogram> -<histogram name="Quota.FreeDiskSpaceForProfile" units="MB"> +<histogram name="Quota.FreeDiskSpaceForProfile" units="MB" + expires_after="2015-12-16"> <obsolete/> <owner>jarrydg@chromium.org</owner> <summary>Amount of free disk space for profile directory.</summary> @@ -96007,13 +97676,15 @@ <summary>Global usage of temporary storage.</summary> </histogram> -<histogram name="Quota.InitialTemporaryGlobalStorageQuota" units="MB"> +<histogram name="Quota.InitialTemporaryGlobalStorageQuota" units="MB" + expires_after="2015-12-16"> <obsolete/> <owner>jarrydg@chromium.org</owner> <summary>Initial quota for global temporary storage.</summary> </histogram> -<histogram name="Quota.LRUOriginTypes" enum="QuotaOriginTypes"> +<histogram name="Quota.LRUOriginTypes" enum="QuotaOriginTypes" + expires_after="2018-07-30"> <obsolete> Removed July 2018 </obsolete> @@ -96029,7 +97700,8 @@ <summary>Number of evicted origins per round.</summary> </histogram> -<histogram name="Quota.NumberOfPersistentStorageOrigins"> +<histogram name="Quota.NumberOfPersistentStorageOrigins" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -96037,7 +97709,8 @@ <summary>Number of origins using persistent storage.</summary> </histogram> -<histogram name="Quota.NumberOfProtectedPersistentStorageOrigins"> +<histogram name="Quota.NumberOfProtectedPersistentStorageOrigins" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -96045,7 +97718,8 @@ <summary>Number of protected origins using persistent storage.</summary> </histogram> -<histogram name="Quota.NumberOfProtectedTemporaryStorageOrigins"> +<histogram name="Quota.NumberOfProtectedTemporaryStorageOrigins" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -96053,7 +97727,8 @@ <summary>Number of protected origins using temporary storage.</summary> </histogram> -<histogram name="Quota.NumberOfTemporaryStorageOrigins"> +<histogram name="Quota.NumberOfTemporaryStorageOrigins" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -96061,7 +97736,8 @@ <summary>Number of origins using temporary storage.</summary> </histogram> -<histogram name="Quota.NumberOfUnlimitedPersistentStorageOrigins"> +<histogram name="Quota.NumberOfUnlimitedPersistentStorageOrigins" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -96069,7 +97745,8 @@ <summary>Number of unlimited origins using persistent storage.</summary> </histogram> -<histogram name="Quota.NumberOfUnlimitedTemporaryStorageOrigins"> +<histogram name="Quota.NumberOfUnlimitedTemporaryStorageOrigins" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M74. </obsolete> @@ -96136,7 +97813,8 @@ <summary>Number of skipped eviction rounds in an hour.</summary> </histogram> -<histogram name="Quota.TimeBetweenRepeatedOriginEvictions"> +<histogram name="Quota.TimeBetweenRepeatedOriginEvictions" + expires_after="2017-02-06"> <obsolete/> <owner>calamity@chromium.org</owner> <summary> @@ -96163,7 +97841,8 @@ </summary> </histogram> -<histogram name="Quota.TimeToInitializeGlobalQuota" units="ms"> +<histogram name="Quota.TimeToInitializeGlobalQuota" units="ms" + expires_after="2017-02-06"> <obsolete> Removed November 2016 </obsolete> @@ -96188,7 +97867,8 @@ </summary> </histogram> -<histogram name="Quota.UsageOverageOfTemporaryGlobalStorage" units="MB"> +<histogram name="Quota.UsageOverageOfTemporaryGlobalStorage" units="MB" + expires_after="2019-03-07"> <obsolete> Expired on 2018-08-30. Removed in M75. </obsolete> @@ -96218,7 +97898,8 @@ <summary>Net error codes for failed Rappor uploads.</summary> </histogram> -<histogram name="rappor.last_daily_sample" enum="DailyEventIntervalType"> +<histogram name="rappor.last_daily_sample" enum="DailyEventIntervalType" + expires_after="2015-05-05"> <obsolete> Removed 2015/05/05. </obsolete> @@ -96330,7 +98011,8 @@ </summary> </histogram> -<histogram name="Render.Workers.MaxWorkerCountInRendererProcess"> +<histogram name="Render.Workers.MaxWorkerCountInRendererProcess" + expires_after="2016-12-29"> <obsolete> Deprecated Dec 2016. This metric did not report the number of shared workers correctly, since it used the RenderProcessHostImpl ref counts, which in the @@ -96347,7 +98029,7 @@ </histogram> <histogram name="Renderer.AcceleratedFixedRootBackground" - enum="AcceleratedFixedRootBackground"> + enum="AcceleratedFixedRootBackground" expires_after="2018-05-21"> <obsolete> Deprecated May 2018. There are no longer accelerated fixed root backgrounds. </obsolete> @@ -96370,7 +98052,7 @@ </summary> </histogram> -<histogram name="Renderer.DrawDuration" units="ms"> +<histogram name="Renderer.DrawDuration" units="ms" expires_after="2016-06-10"> <obsolete> Replaced by Scheduling.Renderer.DrawDuration. This metric did not differentiate between processes. @@ -96379,7 +98061,8 @@ <summary>The time it takes for the compositor to draw a frame.</summary> </histogram> -<histogram name="Renderer.DrawDurationOverestimate" units="ms"> +<histogram name="Renderer.DrawDurationOverestimate" units="ms" + expires_after="2016-06-10"> <obsolete> Measurement no longer taken. </obsolete> @@ -96391,7 +98074,8 @@ </summary> </histogram> -<histogram name="Renderer.DrawDurationUnderestimate" units="ms"> +<histogram name="Renderer.DrawDurationUnderestimate" units="ms" + expires_after="2016-06-10"> <obsolete> Measurement no longer taken. </obsolete> @@ -96403,7 +98087,7 @@ </summary> </histogram> -<histogram name="Renderer.GpuLatency" units="ms"> +<histogram name="Renderer.GpuLatency" units="ms" expires_after="2015-07-20"> <obsolete> Measurement no longer taken. </obsolete> @@ -96414,7 +98098,8 @@ </summary> </histogram> -<histogram name="Renderer.GpuLatencyOverestimate" units="ms"> +<histogram name="Renderer.GpuLatencyOverestimate" units="ms" + expires_after="2015-07-20"> <obsolete> Measurement no longer taken. </obsolete> @@ -96425,7 +98110,8 @@ </summary> </histogram> -<histogram name="Renderer.GpuLatencyUnderestimate" units="ms"> +<histogram name="Renderer.GpuLatencyUnderestimate" units="ms" + expires_after="2015-07-20"> <obsolete> Measurement no longer taken. </obsolete> @@ -96459,7 +98145,7 @@ </summary> </histogram> -<histogram name="Renderer.LayoutMs" units="ms"> +<histogram name="Renderer.LayoutMs" units="ms" expires_after="2015-04-24"> <obsolete> Deprecated as of 3/2015. </obsolete> @@ -96470,7 +98156,7 @@ </summary> </histogram> -<histogram name="Renderer.LineLayoutMs" units="ms"> +<histogram name="Renderer.LineLayoutMs" units="ms" expires_after="2015-04-24"> <obsolete> Deprecated as of 3/2015. </obsolete> @@ -96480,7 +98166,8 @@ </summary> </histogram> -<histogram name="Renderer.PixelIncreaseFromTransitions"> +<histogram name="Renderer.PixelIncreaseFromTransitions" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96491,7 +98178,8 @@ </summary> </histogram> -<histogram name="Renderer.unloadEventsDurationMS" units="ms"> +<histogram name="Renderer.unloadEventsDurationMS" units="ms" + expires_after="2013-10-29"> <obsolete> Deprecated as of 10/2013. </obsolete> @@ -96523,7 +98211,7 @@ </summary> </histogram> -<histogram name="Renderer2.FinishDocToFinish"> +<histogram name="Renderer2.FinishDocToFinish" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96534,7 +98222,7 @@ </summary> </histogram> -<histogram name="Renderer2.RequestToFinish"> +<histogram name="Renderer2.RequestToFinish" expires_after="2013-04-25"> <obsolete> Deprecated 6/15/09. Replaced by Renderer2.RequestToFinish_L </obsolete> @@ -96545,7 +98233,7 @@ </summary> </histogram> -<histogram name="Renderer2.RequestToFinish_L"> +<histogram name="Renderer2.RequestToFinish_L" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96556,7 +98244,7 @@ </summary> </histogram> -<histogram name="Renderer2.RequestToFirstLayout"> +<histogram name="Renderer2.RequestToFirstLayout" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96566,7 +98254,7 @@ </summary> </histogram> -<histogram name="Renderer2.RequestToStart"> +<histogram name="Renderer2.RequestToStart" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96576,7 +98264,7 @@ </summary> </histogram> -<histogram name="Renderer2.StartToFinish"> +<histogram name="Renderer2.StartToFinish" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96586,7 +98274,7 @@ </summary> </histogram> -<histogram name="Renderer2.StartToFinishDoc"> +<histogram name="Renderer2.StartToFinishDoc" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96597,7 +98285,7 @@ </summary> </histogram> -<histogram name="Renderer2.StartToFirstLayout"> +<histogram name="Renderer2.StartToFirstLayout" expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -96607,7 +98295,8 @@ </summary> </histogram> -<histogram name="Renderer4.Abandoned" enum="Abandoned"> +<histogram name="Renderer4.Abandoned" enum="Abandoned" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96619,7 +98308,8 @@ </summary> </histogram> -<histogram name="Renderer4.AccelContentPaintDurationMS"> +<histogram name="Renderer4.AccelContentPaintDurationMS" + expires_after="2014-05-13"> <obsolete> Deprecated 2014-05 because of impl-side painting. </obsolete> @@ -96630,7 +98320,8 @@ </summary> </histogram> -<histogram name="Renderer4.AccelContentPaintMegapixPerSecond"> +<histogram name="Renderer4.AccelContentPaintMegapixPerSecond" + expires_after="2014-05-13"> <obsolete> Deprecated 2014-05 because of impl-side painting. </obsolete> @@ -96641,7 +98332,8 @@ </summary> </histogram> -<histogram name="Renderer4.AccelDoDeferredUpdateDelay"> +<histogram name="Renderer4.AccelDoDeferredUpdateDelay" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96649,7 +98341,7 @@ <summary>Time between frames when GPU acceleration is active.</summary> </histogram> -<histogram name="Renderer4.AccelRootPaintDurationMS"> +<histogram name="Renderer4.AccelRootPaintDurationMS" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96660,7 +98352,8 @@ </summary> </histogram> -<histogram name="Renderer4.AccelRootPaintMegapixPerSecond"> +<histogram name="Renderer4.AccelRootPaintMegapixPerSecond" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96671,7 +98364,8 @@ </summary> </histogram> -<histogram name="Renderer4.AnimationCallbackDelayTime" units="ms"> +<histogram name="Renderer4.AnimationCallbackDelayTime" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96681,7 +98375,7 @@ </summary> </histogram> -<histogram name="Renderer4.BeginToCommit" units="ms"> +<histogram name="Renderer4.BeginToCommit" units="ms" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96696,7 +98390,7 @@ </summary> </histogram> -<histogram name="Renderer4.BeginToFinish"> +<histogram name="Renderer4.BeginToFinish" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96704,7 +98398,7 @@ <summary>TBD</summary> </histogram> -<histogram name="Renderer4.BeginToFinishDoc"> +<histogram name="Renderer4.BeginToFinishDoc" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96712,7 +98406,8 @@ <summary>TBD</summary> </histogram> -<histogram name="Renderer4.BeginToFirstPaint" units="ms"> +<histogram name="Renderer4.BeginToFirstPaint" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96727,7 +98422,8 @@ </summary> </histogram> -<histogram name="Renderer4.BeginToFirstPaintAfterLoad" units="ms"> +<histogram name="Renderer4.BeginToFirstPaintAfterLoad" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96762,7 +98458,8 @@ </summary> </histogram> -<histogram name="Renderer4.CommitToFinish" units="ms"> +<histogram name="Renderer4.CommitToFinish" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96774,7 +98471,8 @@ </summary> </histogram> -<histogram name="Renderer4.CommitToFinishDoc" units="ms"> +<histogram name="Renderer4.CommitToFinishDoc" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96787,7 +98485,8 @@ </summary> </histogram> -<histogram name="Renderer4.CommitToFirstPaint" units="ms"> +<histogram name="Renderer4.CommitToFirstPaint" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96799,7 +98498,8 @@ </summary> </histogram> -<histogram name="Renderer4.CommitToFirstPaintAfterLoad" units="ms"> +<histogram name="Renderer4.CommitToFirstPaintAfterLoad" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96813,7 +98513,7 @@ </histogram> <histogram name="Renderer4.CompositorScrollHitTestResult" - enum="CompositorScrollResult"> + enum="CompositorScrollResult" expires_after="2017-12-06"> <obsolete> Deprecated in 12/2017. Renderer4.MainThreadGestureScrollReason and Renderer4.MainThreadWheelScrollReason could track more detailed reasons of @@ -96828,7 +98528,8 @@ </summary> </histogram> -<histogram name="Renderer4.CompositorThreadImplDrawDelay" units="ms"> +<histogram name="Renderer4.CompositorThreadImplDrawDelay" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated in 06/2018, M69. Renderer4.CompositorThreadImplDrawDelay is no longer needed due to issue 851784. @@ -96854,7 +98555,8 @@ </summary> </histogram> -<histogram name="Renderer4.drawPixelCountCulled" units="NormalizedPixels"> +<histogram name="Renderer4.drawPixelCountCulled" units="NormalizedPixels" + expires_after="2013-05-24"> <obsolete> Renamed to Renderer4.pixelCountCulled_Draw. </obsolete> @@ -96866,7 +98568,8 @@ </summary> </histogram> -<histogram name="Renderer4.drawPixelCountOpaque" units="NormalizedPixels"> +<histogram name="Renderer4.drawPixelCountOpaque" units="NormalizedPixels" + expires_after="2013-05-24"> <obsolete> Renamed to Renderer4.pixelCountOpaque_Draw. </obsolete> @@ -96878,7 +98581,8 @@ </summary> </histogram> -<histogram name="Renderer4.drawPixelCountTranslucent" units="NormalizedPixels"> +<histogram name="Renderer4.drawPixelCountTranslucent" units="NormalizedPixels" + expires_after="2013-05-24"> <obsolete> Renamed to Renderer4.pixelCountTranslucent_Draw. </obsolete> @@ -96890,7 +98594,8 @@ </summary> </histogram> -<histogram name="Renderer4.FinishDocToFinish" units="ms"> +<histogram name="Renderer4.FinishDocToFinish" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96902,7 +98607,8 @@ </summary> </histogram> -<histogram name="Renderer4.FinishToFirstPaintAfterLoad" units="ms"> +<histogram name="Renderer4.FinishToFirstPaintAfterLoad" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -96916,7 +98622,7 @@ </histogram> <histogram name="Renderer4.GestureScrollingThreadStatus" - enum="ScrollingThreadStatus"> + enum="ScrollingThreadStatus" expires_after="2018-09-25"> <obsolete> Deprecated 9/2018 and merged into Renderer4.MainThreadGestureScrollReason. </obsolete> @@ -96966,7 +98672,7 @@ </histogram> <histogram name="Renderer4.GpuImageUploadState.FirstRefWasted" - enum="BooleanWasted"> + enum="BooleanWasted" expires_after="2017-10-18"> <obsolete> Deprecated as of 06/2017. No longer generated. </obsolete> @@ -96978,7 +98684,8 @@ </summary> </histogram> -<histogram name="Renderer4.GpuImageUploadState.Used" enum="BooleanUsage"> +<histogram name="Renderer4.GpuImageUploadState.Used" enum="BooleanUsage" + expires_after="2017-10-18"> <obsolete> Deprecated as of 06/2017. No longer generated. </obsolete> @@ -97031,7 +98738,8 @@ </summary> </histogram> -<histogram name="Renderer4.GpuRasterizationUsed" enum="BooleanEnabled"> +<histogram name="Renderer4.GpuRasterizationUsed" enum="BooleanEnabled" + expires_after="2019-02-13"> <obsolete> Deprecated 02/2019. Due to changes in the code, this is synonymous with Renderer4.GpuRasterizationEnabled. @@ -97043,7 +98751,7 @@ </summary> </histogram> -<histogram name="Renderer4.IdealContentsScale"> +<histogram name="Renderer4.IdealContentsScale" expires_after="2018-02-10"> <obsolete> Deprecated 02/2018. The ideal content scale closely matches the default device scale factor. @@ -97127,7 +98835,8 @@ </summary> </histogram> -<histogram name="Renderer4.LanguageDetection" units="ms"> +<histogram name="Renderer4.LanguageDetection" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated in 06/2018, M69. Renderer4.LanguageDetection is no longer needed due to issue 851784. @@ -97139,7 +98848,8 @@ </summary> </histogram> -<histogram name="Renderer4.LCDText.PercentageOfAALayers" units="%"> +<histogram name="Renderer4.LCDText.PercentageOfAALayers" units="%" + expires_after="2015-02-18"> <obsolete> Deprecated as of 02/2015. No longer generated. </obsolete> @@ -97152,7 +98862,8 @@ </summary> </histogram> -<histogram name="Renderer4.LCDText.PercentageOfCandidateLayers" units="%"> +<histogram name="Renderer4.LCDText.PercentageOfCandidateLayers" units="%" + expires_after="2015-02-18"> <obsolete> Deprecated as of 02/2015. No longer generated. </obsolete> @@ -97165,7 +98876,7 @@ </summary> </histogram> -<histogram name="Renderer4.LoadType" enum="LoadType"> +<histogram name="Renderer4.LoadType" enum="LoadType" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97217,7 +98928,8 @@ </summary> </histogram> -<histogram name="Renderer4.pixelCountOpaque" units="NormalizedPixels"> +<histogram name="Renderer4.pixelCountOpaque" units="NormalizedPixels" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97228,7 +98940,8 @@ </summary> </histogram> -<histogram name="Renderer4.pixelCountPainted" units="NormalizedPixels"> +<histogram name="Renderer4.pixelCountPainted" units="NormalizedPixels" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97240,7 +98953,8 @@ </summary> </histogram> -<histogram name="Renderer4.pixelCountTranslucent" units="NormalizedPixels"> +<histogram name="Renderer4.pixelCountTranslucent" units="NormalizedPixels" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97259,7 +98973,8 @@ </summary> </histogram> -<histogram name="Renderer4.ReadyToDrawTileDrawStatus" enum="UsedInDraw"> +<histogram name="Renderer4.ReadyToDrawTileDrawStatus" enum="UsedInDraw" + expires_after="2017-02-09"> <obsolete> Deprecated 02/2017 in Issue 675840. </obsolete> @@ -97301,7 +99016,8 @@ </summary> </histogram> -<histogram name="Renderer4.RequestToFinish" units="ms"> +<histogram name="Renderer4.RequestToFinish" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97313,7 +99029,8 @@ </summary> </histogram> -<histogram name="Renderer4.RequestToStart" units="ms"> +<histogram name="Renderer4.RequestToStart" units="ms" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97342,7 +99059,7 @@ </summary> </histogram> -<histogram name="Renderer4.Snapshot"> +<histogram name="Renderer4.Snapshot" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97350,7 +99067,8 @@ <summary>Time to capture a renderer snapshot.</summary> </histogram> -<histogram name="Renderer4.SoftwareCompositorThreadImplDrawDelay" units="ms"> +<histogram name="Renderer4.SoftwareCompositorThreadImplDrawDelay" units="ms" + expires_after="2018-07-03"> <obsolete> Deprecated in 06/2018, M69. Renderer4.SoftwareCompositorThreadImplDrawDelay is no longer needed due to issue 851784. @@ -97363,7 +99081,8 @@ </summary> </histogram> -<histogram name="Renderer4.SoftwareDoDeferredUpdateDelay"> +<histogram name="Renderer4.SoftwareDoDeferredUpdateDelay" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97390,7 +99109,7 @@ </summary> </histogram> -<histogram name="Renderer4.SoftwarePaintDurationMS"> +<histogram name="Renderer4.SoftwarePaintDurationMS" expires_after="2017-08-21"> <obsolete> Deprecated in issue 755432 as no longer being needed. </obsolete> @@ -97401,7 +99120,8 @@ </summary> </histogram> -<histogram name="Renderer4.SoftwarePaintMegapixPerSecond"> +<histogram name="Renderer4.SoftwarePaintMegapixPerSecond" + expires_after="2017-08-21"> <obsolete> Deprecated in issue 755432 as no longer being needed. </obsolete> @@ -97412,7 +99132,7 @@ </summary> </histogram> -<histogram name="Renderer4.StartToCommit" units="ms"> +<histogram name="Renderer4.StartToCommit" units="ms" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97424,7 +99144,7 @@ </summary> </histogram> -<histogram name="Renderer4.StartToFinish" units="ms"> +<histogram name="Renderer4.StartToFinish" units="ms" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97450,7 +99170,7 @@ </summary> </histogram> -<histogram name="Renderer4.TextureGpuUploadTimeUS"> +<histogram name="Renderer4.TextureGpuUploadTimeUS" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97461,7 +99181,7 @@ </summary> </histogram> -<histogram name="Renderer4.Thumbnail"> +<histogram name="Renderer4.Thumbnail" expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97469,7 +99189,8 @@ <summary>Time to capture a renderer thumbnail.</summary> </histogram> -<histogram name="Renderer4.tileCountCulled_Upload" units="NormalizedTiles"> +<histogram name="Renderer4.tileCountCulled_Upload" units="NormalizedTiles" + expires_after="2019-02-14"> <obsolete> Deprecated at an unknown time. No longer used in code. </obsolete> @@ -97482,7 +99203,8 @@ </summary> </histogram> -<histogram name="Renderer4.uploadPixelCountCulled" units="NormalizedPixels"> +<histogram name="Renderer4.uploadPixelCountCulled" units="NormalizedPixels" + expires_after="2013-05-24"> <obsolete> Deprecated as of 04/2012, replaced with Renderer4.tileCountCulled_Upload. </obsolete> @@ -97494,7 +99216,8 @@ </summary> </histogram> -<histogram name="Renderer4.uploadPixelCountOpaque" units="NormalizedPixels"> +<histogram name="Renderer4.uploadPixelCountOpaque" units="NormalizedPixels" + expires_after="2013-05-24"> <obsolete> Renamed to Renderer4.pixelCountOpaque_Upload. </obsolete> @@ -97507,7 +99230,7 @@ </histogram> <histogram name="Renderer4.uploadPixelCountTranslucent" - units="NormalizedPixels"> + units="NormalizedPixels" expires_after="2013-05-24"> <obsolete> Renamed to Renderer4.pixelCountTranslucent_Upload. </obsolete> @@ -97520,7 +99243,7 @@ </histogram> <histogram name="Renderer4.WheelScrollingThreadStatus" - enum="ScrollingThreadStatus"> + enum="ScrollingThreadStatus" expires_after="2018-09-25"> <obsolete> Deprecated 9/2018 and merged into Renderer4.MainThreadWheelScrollReason. </obsolete> @@ -97534,7 +99257,7 @@ </histogram> <histogram name="RendererScheduler.BackgroundedRendererTransition" - enum="BackgroundedRendererTransition"> + enum="BackgroundedRendererTransition" expires_after="2018-06-13"> <obsolete> Deprecated 6/2018 and replaced with PageScheduler.PageLifecycleStateTransition. @@ -97548,7 +99271,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad" units="%"> +<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad" units="%" + expires_after="2017-05-23"> <obsolete> Replaced with RendererScheduler.BackgroundRendererMainThreadLoad2 as of May 2017. @@ -97564,7 +99288,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad2" units="%"> +<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad2" units="%" + expires_after="2017-07-13"> <obsolete> Replaced with RendererScheduler.RendererMainThreadLoad3.Background.AfterFirstMinute as of @@ -97586,7 +99311,7 @@ <histogram base="true" name="RendererScheduler.ExpectedQueueingTimeByFrameStatus" - units="microseconds"> + units="microseconds" expires_after="2018-01-31"> <obsolete> Replaced with RendererScheduler.ExpectedQueueingTimeByFrameStatus2 as of Feb 2018. Buckets were changed. @@ -97603,7 +99328,7 @@ <histogram base="true" name="RendererScheduler.ExpectedQueueingTimeByFrameStatus2" - units="microseconds"> + units="microseconds" expires_after="2019-03-18"> <obsolete> Removed March 2019. </obsolete> @@ -97618,7 +99343,7 @@ </histogram> <histogram base="true" name="RendererScheduler.ExpectedQueueingTimeByFrameType" - units="ms"> + units="ms" expires_after="2017-12-12"> <obsolete> Replaced with RendererScheduler.ExpectedQueueingTimeByFrameStatus as of December 2017. @@ -97633,7 +99358,7 @@ </histogram> <histogram base="true" name="RendererScheduler.ExpectedQueueingTimeByTaskQueue" - units="microseconds"> + units="microseconds" expires_after="2018-01-31"> <obsolete> Replaced with RendererScheduler.ExpectedQueueingTimeByTaskQueue2 as of Feb 2018. Buckets were changed. @@ -97650,7 +99375,7 @@ <histogram base="true" name="RendererScheduler.ExpectedQueueingTimeByTaskQueue2" - units="microseconds"> + units="microseconds" expires_after="2019-02-05"> <obsolete> Removed February 2019. </obsolete> @@ -97665,7 +99390,8 @@ </histogram> <histogram base="true" - name="RendererScheduler.ExpectedQueueingTimeByTaskQueueType" units="ms"> + name="RendererScheduler.ExpectedQueueingTimeByTaskQueueType" units="ms" + expires_after="2017-12-12"> <obsolete> Replaced with RendererScheduler.ExpectedQueueingTimeByTaskQueue as of December 2017. @@ -97680,7 +99406,7 @@ </histogram> <histogram name="RendererScheduler.ExpectedQueueingTimeWhenQueueingTime" - units="ms"> + units="ms" expires_after="2018-04-29"> <obsolete> Deprecated 04/2018. </obsolete> @@ -97704,7 +99430,7 @@ </histogram> <histogram name="RendererScheduler.ExpectedTaskQueueingDuration2" - units="microseconds"> + units="microseconds" expires_after="2018-01-31"> <obsolete> Replaced with RendererScheduler.ExpectedTaskQueueingDuration3 as of Feb 2018. Buckets were changed. @@ -97761,7 +99487,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad" units="%"> +<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad" units="%" + expires_after="2017-05-23"> <obsolete> Replaced with RendererScheduler.ForegroundRendererMainThreadLoad2 as of May 2017. @@ -97777,7 +99504,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad2" units="%"> +<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad2" units="%" + expires_after="2017-07-13"> <obsolete> Replaced with RendererScheduler.RendererMainThreadLoad3.Foreground.AfterFirstMinute as of @@ -97826,7 +99554,7 @@ </histogram> <histogram name="RendererScheduler.NumberOfTasksPerQueueType" - enum="RendererSchedulerTaskQueueType"> + enum="RendererSchedulerTaskQueueType" expires_after="2017-05-23"> <obsolete> Replaced with RendererScheduler.NumberOfTasksPerQueueType2 as of May 2017. </obsolete> @@ -97840,7 +99568,7 @@ </histogram> <histogram name="RendererScheduler.NumberOfTasksPerQueueType2" - enum="RendererSchedulerTaskQueueType"> + enum="RendererSchedulerTaskQueueType" expires_after="2017-07-25"> <obsolete> Replaced with RendererScheduler.TaskCountPerQueueType as of July 2017. </obsolete> @@ -97857,7 +99585,7 @@ </histogram> <histogram name="RendererScheduler.QueueingDurationWhenExpectedQueueingTime" - units="ms"> + units="ms" expires_after="2017-08-03"> <obsolete> Deprecated as of 08/2017. Replaced with RendererScheduler.ExpectedQueueingTimeWhenQueueingTime. @@ -97872,7 +99600,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.RendererMainThreadLoad3" units="%"> +<histogram name="RendererScheduler.RendererMainThreadLoad3" units="%" + expires_after="2017-08-02"> <obsolete> This metric still used 1-minute reporting chunks. Replaced with RendererMainThreadLoad4 as of July 2017. @@ -97890,7 +99619,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.RendererMainThreadLoad4" units="%"> +<histogram name="RendererScheduler.RendererMainThreadLoad4" units="%" + expires_after="2017-08-10"> <obsolete> Replaced with RendererMainThreadLoad5 as of August 2017. </obsolete> @@ -97967,7 +99697,7 @@ </histogram> <histogram name="RendererScheduler.TaskCPUDurationPerTaskType.DedicatedWorker" - enum="RendererSchedulerTaskType" units="ms"> + enum="RendererSchedulerTaskType" units="ms" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskCPUDurationPerTaskType2.DedicatedWorker as of June 2018 due to overflows (crbug.com/809668). Some metrics are @@ -98002,7 +99732,7 @@ </histogram> <histogram name="RendererScheduler.TaskCPUDurationPerThreadType" - enum="RendererSchedulerThreadType" units="ms"> + enum="RendererSchedulerThreadType" units="ms" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskCPUDurationPerThreadType2 as of June 2018 due to overflows (crbug.com/809668). Some metrics are incremented with @@ -98045,7 +99775,7 @@ </histogram> <histogram base="true" name="RendererScheduler.TaskDurationPerFrameOriginType" - enum="RendererSchedulerFrameOriginType"> + enum="RendererSchedulerFrameOriginType" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskDurationPerFrameOriginType2 as of June 2018 due to overflows (crbug.com/809668). Some metrics are incremented with @@ -98078,7 +99808,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerFrameType" - enum="RendererSchedulerFrameType" units="ms"> + enum="RendererSchedulerFrameType" units="ms" expires_after="2017-11-02"> <obsolete> Replaced with RendererScheduler.TaskDurationPerFrameType2 due to the introduction of new types of frames as of 11/2017. @@ -98095,7 +99825,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerFrameType2" - enum="RendererSchedulerFrameType2" units="ms"> + enum="RendererSchedulerFrameType2" units="ms" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskDurationPerFrameType3 as of June 2018 due to overflows (crbug.com/809668). Some metrics are incremented with large @@ -98131,7 +99861,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerQueueType" - enum="RendererSchedulerTaskQueueType" units="ms"> + enum="RendererSchedulerTaskQueueType" units="ms" expires_after="2017-05-23"> <obsolete> Replaced with RendererScheduler.TaskDurationPerQueueType2 as of May 2017. </obsolete> @@ -98148,7 +99878,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerQueueType2" - enum="RendererSchedulerTaskQueueType" units="ms"> + enum="RendererSchedulerTaskQueueType" units="ms" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskDurationPerQueueType3 as of June 2018 due to overflows (crbug.com/809668). Some metrics are incremented with large @@ -98189,7 +99919,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerTaskType" - enum="RendererSchedulerTaskType" units="ms"> + enum="RendererSchedulerTaskType" units="ms" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskDurationPerTaskType2 as of June 2018 due to overflows (crbug.com/809668). Some metrics are incremented with large @@ -98209,7 +99939,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerTaskType.DedicatedWorker" - enum="RendererSchedulerTaskType" units="ms"> + enum="RendererSchedulerTaskType" units="ms" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskDurationPerTaskType2.DedicatedWorker as of June 2018 due to due to overflows (crbug.com/809668). Some metrics are @@ -98262,7 +99992,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerThreadType" - enum="RendererSchedulerThreadType" units="ms"> + enum="RendererSchedulerThreadType" units="ms" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskDurationPerThreadType2 as of June 2018 due to overflows (crbug.com/809668). Some metrics are incremented with large @@ -98300,7 +100030,7 @@ </histogram> <histogram name="RendererScheduler.TaskDurationPerUseCase" - enum="RendererSchedulerTaskUseCase"> + enum="RendererSchedulerTaskUseCase" expires_after="2018-06-12"> <obsolete> Replaced with RendererScheduler.TaskDurationPerUseCase2 as of June 2018 due to overflows (crbug.com/809668). Some metrics are incremented with large @@ -98335,7 +100065,7 @@ </histogram> <histogram name="RendererScheduler.TaskQueueManager.DelayedTaskLateness" - units="ms"> + units="ms" expires_after="2017-08-30"> <obsolete> Removed from code 2017-08. </obsolete> @@ -98361,7 +100091,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.TaskTime" units="microseconds"> +<histogram name="RendererScheduler.TaskTime" units="microseconds" + expires_after="2017-05-23"> <obsolete> Replaced with RendererScheduler.TaskTime2 as of May 2017. </obsolete> @@ -98401,7 +100132,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.UserModel.GestureDuration" units="ms"> +<histogram name="RendererScheduler.UserModel.GestureDuration" units="ms" + expires_after="2017-08-30"> <obsolete> Removed from code 2017-08. </obsolete> @@ -98410,7 +100142,7 @@ </histogram> <histogram name="RendererScheduler.UserModel.GesturePredictedCorrectly" - units="GesturePredictionResult"> + units="GesturePredictionResult" expires_after="2017-08-30"> <obsolete> Removed from code 2017-08. </obsolete> @@ -98419,7 +100151,7 @@ </histogram> <histogram name="RendererScheduler.UserModel.GestureStartTimeSinceModelReset" - units="ms"> + units="ms" expires_after="2017-08-30"> <obsolete> Removed from code 2017-08. </obsolete> @@ -98430,7 +100162,8 @@ </summary> </histogram> -<histogram name="RendererScheduler.UserModel.TimeBetweenGestures" units="ms"> +<histogram name="RendererScheduler.UserModel.TimeBetweenGestures" units="ms" + expires_after="2017-08-30"> <obsolete> Removed from code 2017-08. </obsolete> @@ -98514,7 +100247,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidChangeScrollOffset" units="ms"> +<histogram name="RenderFrameObservers.DidChangeScrollOffset" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98525,7 +100259,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidClearWindowObject" units="ms"> +<histogram name="RenderFrameObservers.DidClearWindowObject" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98536,7 +100271,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidCommitProvisionalLoad" units="ms"> +<histogram name="RenderFrameObservers.DidCommitProvisionalLoad" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98547,7 +100283,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidCreateScriptContext" units="ms"> +<histogram name="RenderFrameObservers.DidCreateScriptContext" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98558,7 +100295,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidFailProvisionalLoad" units="ms"> +<histogram name="RenderFrameObservers.DidFailProvisionalLoad" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98569,7 +100307,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidFinishDocumentLoad" units="ms"> +<histogram name="RenderFrameObservers.DidFinishDocumentLoad" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98580,7 +100319,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidFinishLoad" units="ms"> +<histogram name="RenderFrameObservers.DidFinishLoad" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98591,7 +100331,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidMeaningfulLayout" units="ms"> +<histogram name="RenderFrameObservers.DidMeaningfulLayout" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98602,7 +100343,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.DidStartProvisionalLoad" units="ms"> +<histogram name="RenderFrameObservers.DidStartProvisionalLoad" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98613,7 +100355,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.FocusedNodeChanged" units="ms"> +<histogram name="RenderFrameObservers.FocusedNodeChanged" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98624,7 +100367,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.OnMessageReceived" units="ms"> +<histogram name="RenderFrameObservers.OnMessageReceived" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98635,7 +100379,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.ScriptedPrint" units="ms"> +<histogram name="RenderFrameObservers.ScriptedPrint" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98646,7 +100391,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.WillCommitProvisionalLoad" units="ms"> +<histogram name="RenderFrameObservers.WillCommitProvisionalLoad" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98657,7 +100403,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.WillSendSubmitEvent" units="ms"> +<histogram name="RenderFrameObservers.WillSendSubmitEvent" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98668,7 +100415,8 @@ </summary> </histogram> -<histogram name="RenderFrameObservers.WillSubmitForm" units="ms"> +<histogram name="RenderFrameObservers.WillSubmitForm" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -98738,7 +100486,7 @@ </histogram> <histogram name="Reporting.HeaderEndpointGroupOutcome" - enum="ReportingHeaderEndpointGroupOutcome"> + enum="ReportingHeaderEndpointGroupOutcome" expires_after="2018-03-16"> <obsolete> Moved to Net.Reporting.HeaderEndpointGroupOutcome. </obsolete> @@ -98750,7 +100498,7 @@ </histogram> <histogram name="Reporting.HeaderEndpointOutcome" - enum="ReportingHeaderEndpointOutcome"> + enum="ReportingHeaderEndpointOutcome" expires_after="2018-03-16"> <obsolete> Moved to Net.Reporting.HeaderEndpointOutcome. </obsolete> @@ -98761,7 +100509,8 @@ </summary> </histogram> -<histogram name="Reporting.HeaderOutcome" enum="ReportingHeaderOutcome"> +<histogram name="Reporting.HeaderOutcome" enum="ReportingHeaderOutcome" + expires_after="2018-03-16"> <obsolete> Moved to Net.Reporting.HeaderOutcome. </obsolete> @@ -98773,7 +100522,8 @@ </summary> </histogram> -<histogram name="Reporting.ReportDeliveredAttempts" units="attempts"> +<histogram name="Reporting.ReportDeliveredAttempts" units="attempts" + expires_after="2018-03-16"> <obsolete> Moved to Net.Reporting.ReportDeliveredAttempts. </obsolete> @@ -98784,7 +100534,8 @@ </summary> </histogram> -<histogram name="Reporting.ReportDeliveredLatency" units="ms"> +<histogram name="Reporting.ReportDeliveredLatency" units="ms" + expires_after="2018-03-16"> <obsolete> Moved to Net.Reporting.ReportDeliveredLatency. </obsolete> @@ -98796,7 +100547,8 @@ </summary> </histogram> -<histogram name="Reporting.ReportOutcome" enum="ReportingReportOutcome"> +<histogram name="Reporting.ReportOutcome" enum="ReportingReportOutcome" + expires_after="2018-03-16"> <obsolete> Moved to Net.Reporting.ReportOutcome. </obsolete> @@ -98808,7 +100560,7 @@ </histogram> <histogram name="RequestAutocomplete.DismissalState" - enum="AutofillDialogDismissalState"> + enum="AutofillDialogDismissalState" expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98819,7 +100571,7 @@ </histogram> <histogram name="RequestAutocomplete.InitialUserState" - enum="AutofillDialogInitialUserState"> + enum="AutofillDialogInitialUserState" expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98831,7 +100583,7 @@ </histogram> <histogram name="RequestAutocomplete.PopupInDialog" - enum="AutofillDialogPopupEvent"> + enum="AutofillDialogPopupEvent" expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98842,7 +100594,8 @@ </summary> </histogram> -<histogram name="RequestAutocomplete.Security" enum="AutofillDialogSecurity"> +<histogram name="RequestAutocomplete.Security" enum="AutofillDialogSecurity" + expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98853,7 +100606,8 @@ </summary> </histogram> -<histogram name="RequestAutocomplete.UiDuration" units="ms"> +<histogram name="RequestAutocomplete.UiDuration" units="ms" + expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98863,7 +100617,8 @@ </summary> </histogram> -<histogram name="RequestAutocomplete.UiDuration.Cancel" units="ms"> +<histogram name="RequestAutocomplete.UiDuration.Cancel" units="ms" + expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98874,7 +100629,8 @@ </summary> </histogram> -<histogram name="RequestAutocomplete.UiDuration.Submit" units="ms"> +<histogram name="RequestAutocomplete.UiDuration.Submit" units="ms" + expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98885,7 +100641,8 @@ </summary> </histogram> -<histogram name="RequestAutocomplete.UiEvents" enum="AutofillDialogUiEvents"> +<histogram name="RequestAutocomplete.UiEvents" enum="AutofillDialogUiEvents" + expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98895,7 +100652,8 @@ </summary> </histogram> -<histogram name="RequestAutocomplete.UiLatencyToShow" units="ms"> +<histogram name="RequestAutocomplete.UiLatencyToShow" units="ms" + expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98906,7 +100664,8 @@ </summary> </histogram> -<histogram name="RequestAutocomplete.WalletErrors" enum="WalletErrors"> +<histogram name="RequestAutocomplete.WalletErrors" enum="WalletErrors" + expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98918,7 +100677,7 @@ </histogram> <histogram name="RequestAutocomplete.WalletRequiredActions" - enum="WalletRequiredActions"> + enum="WalletRequiredActions" expires_after="2016-05-05"> <obsolete> Deprecated as of 5/5/2016. </obsolete> @@ -98938,7 +100697,8 @@ </summary> </histogram> -<histogram name="ResourceCoordinator.IPCPerMinute.Frame" units="count/m"> +<histogram name="ResourceCoordinator.IPCPerMinute.Frame" units="count/m" + expires_after="2019-01-21"> <obsolete> Removed as of 18/1/2019. </obsolete> @@ -98948,7 +100708,8 @@ </summary> </histogram> -<histogram name="ResourceCoordinator.IPCPerMinute.Page" units="count/m"> +<histogram name="ResourceCoordinator.IPCPerMinute.Page" units="count/m" + expires_after="2019-01-21"> <obsolete> Removed as of 18/1/2019. </obsolete> @@ -98958,7 +100719,8 @@ </summary> </histogram> -<histogram name="ResourceCoordinator.IPCPerMinute.Process" units="count/m"> +<histogram name="ResourceCoordinator.IPCPerMinute.Process" units="count/m" + expires_after="2019-01-21"> <obsolete> Removed as of 18/1/2019. </obsolete> @@ -99092,7 +100854,7 @@ </histogram> <histogram name="ResourceLoadingHints.PageHints.ProcessedCount" - units="pattern count"> + units="pattern count" expires_after="2019-03-12"> <obsolete> Deprecated 03/2019 as it was never a useful metric. </obsolete> @@ -99105,7 +100867,7 @@ </histogram> <histogram name="ResourceLoadingHints.PageHints.TotalReceived" - units="total page hints count"> + units="total page hints count" expires_after="2019-03-12"> <obsolete> Deprecated 03/2019 as it was never a useful metric. </obsolete> @@ -99120,7 +100882,7 @@ </histogram> <histogram name="ResourceLoadingHints.ResourceHints.TotalReceived" - units="total resource loading hints count"> + units="total resource loading hints count" expires_after="2019-03-12"> <obsolete> Deprecated 03/2019 as it was never a useful metric. </obsolete> @@ -99191,7 +100953,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.CachePattern" - enum="HttpCachePattern"> + enum="HttpCachePattern" expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99202,7 +100964,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.DatabaseReadiness" units="%"> +<histogram name="ResourcePrefetchPredictor.DatabaseReadiness" units="%" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99217,7 +100980,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.DbStringTooLong"> +<histogram name="ResourcePrefetchPredictor.DbStringTooLong" + expires_after="2016-10-05"> <obsolete> Deprecated October 2016. No longer recorded. </obsolete> @@ -99229,7 +100993,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.HavePredictionsForUrl"> +<histogram name="ResourcePrefetchPredictor.HavePredictionsForUrl" + expires_after="2014-10-30"> <obsolete> Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent. </obsolete> @@ -99241,7 +101006,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.HavePrefetchResults"> +<histogram name="ResourcePrefetchPredictor.HavePrefetchResults" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99254,7 +101020,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.HistoryVisitCountForUrl"> +<histogram name="ResourcePrefetchPredictor.HistoryVisitCountForUrl" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99266,7 +101033,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount"> +<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99281,7 +101049,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache"> +<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99297,7 +101066,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork"> +<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99330,7 +101100,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses"> +<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99346,7 +101117,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Host.PrefetchCancelled" units="%"> +<histogram name="ResourcePrefetchPredictor.Host.PrefetchCancelled" units="%" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99358,7 +101130,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Host.PrefetchFailed" units="%"> +<histogram name="ResourcePrefetchPredictor.Host.PrefetchFailed" units="%" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99371,7 +101144,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheNotUsed" - units="%"> + units="%" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99385,7 +101158,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheUsedFromCache" - units="%"> + units="%" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99414,7 +101187,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkNotUsed" - units="%"> + units="%" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99457,7 +101230,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Host.PrefetchNotStarted" units="%"> +<histogram name="ResourcePrefetchPredictor.Host.PrefetchNotStarted" units="%" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99469,7 +101243,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.HostTableHostCount"> +<histogram name="ResourcePrefetchPredictor.HostTableHostCount" + expires_after="2017-01-27"> <obsolete> Deprecated January 2017. This is effectively the same as ResourcePrefetchPredictor.HostTableRowCount2 after refactoring of the @@ -99484,7 +101259,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.HostTableRowCount"> +<histogram name="ResourcePrefetchPredictor.HostTableRowCount" + expires_after="2017-01-27"> <obsolete> Deprecated January 2017. Replaced by ResourcePrefetchPredictor.HostTableRowCount2. @@ -99497,7 +101273,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.HostTableRowCount2" units="hosts"> +<histogram name="ResourcePrefetchPredictor.HostTableRowCount2" units="hosts" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99509,7 +101286,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.LearningCount" units="urls"> +<histogram name="ResourcePrefetchPredictor.LearningCount" units="urls" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99520,7 +101298,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.LearningPrecision" units="%"> +<histogram name="ResourcePrefetchPredictor.LearningPrecision" units="%" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99532,7 +101311,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.LearningRecall" units="%"> +<histogram name="ResourcePrefetchPredictor.LearningRecall" units="%" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99557,7 +101337,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.NavigationEvent" - enum="ResourcePrefetchPredictorNavigationEvent"> + enum="ResourcePrefetchPredictorNavigationEvent" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99571,7 +101351,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.NavigationStatus" - enum="ResourcePrefetchPredictorNavigationStatus"> + enum="ResourcePrefetchPredictorNavigationStatus" expires_after="2014-10-30"> <obsolete> Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent. </obsolete> @@ -99585,7 +101365,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.NetworkType" - enum="ResourcePrefetchPredictorNetworkType"> + enum="ResourcePrefetchPredictorNetworkType" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99595,7 +101375,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PLT" units="ms"> +<histogram name="ResourcePrefetchPredictor.PLT" units="ms" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99608,7 +101389,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PredictedPrefetchCount"> +<histogram name="ResourcePrefetchPredictor.PredictedPrefetchCount" + expires_after="2014-10-30"> <obsolete> Deprecated 01/2013. Replaced with specific ones for Url and Host. </obsolete> @@ -99620,7 +101402,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromCache"> +<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromCache" + expires_after="2014-10-30"> <obsolete> Deprecated 01/2013. Replaced with specific ones for Url and Host. </obsolete> @@ -99633,7 +101416,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromNetwork"> +<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromNetwork" + expires_after="2014-10-30"> <obsolete> Deprecated 01/2013. Replaced with specific ones for Url and Host. </obsolete> @@ -99659,7 +101443,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PredictedPrefetchMisses"> +<histogram name="ResourcePrefetchPredictor.PredictedPrefetchMisses" + expires_after="2014-10-30"> <obsolete> Deprecated 01/2013. Replaced with specific ones for Url and Host. </obsolete> @@ -99672,7 +101457,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PrefetchedCount" units="count"> +<histogram name="ResourcePrefetchPredictor.PrefetchedCount" units="count" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99684,7 +101470,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PrefetchedSizeKB" units="KB"> +<histogram name="ResourcePrefetchPredictor.PrefetchedSizeKB" units="KB" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99697,7 +101484,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.PrefetchHitsCount.Cached" - units="count"> + units="count" expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99709,7 +101496,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.PrefetchHitsCount.NotCached" - units="count"> + units="count" expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99720,7 +101507,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PrefetchHitsSizeKB" units="KB"> +<histogram name="ResourcePrefetchPredictor.PrefetchHitsSizeKB" units="KB" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99733,7 +101521,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PrefetchingDuration" units="ms"> +<histogram name="ResourcePrefetchPredictor.PrefetchingDuration" units="ms" + expires_after="2018-11-21"> <obsolete> Deprecated at M72. No longer recorded. </obsolete> @@ -99746,7 +101535,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.PrefetchMissesCount.Cached" - units="count"> + units="count" expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99758,7 +101547,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.PrefetchMissesCount.NotCached" - units="count"> + units="count" expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99770,7 +101559,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.PrefetchMissesSizeKB" units="KB"> +<histogram name="ResourcePrefetchPredictor.PrefetchMissesSizeKB" units="KB" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99784,7 +101574,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.RedirectStatus" - enum="ResourcePrefetchPredictorRedirectStatus"> + enum="ResourcePrefetchPredictorRedirectStatus" expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -99797,7 +101587,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.ReportingEvent" - enum="ResourcePrefetchPredictorReportingEvent"> + enum="ResourcePrefetchPredictorReportingEvent" expires_after="2018-11-21"> <obsolete> Deprecated at M72. No longer recorded. </obsolete> @@ -99821,7 +101611,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.ResourceStatus" - enum="ResourcePrefetchPredictorResourceStatus"> + enum="ResourcePrefetchPredictorResourceStatus" expires_after="2016-08-09"> <obsolete> Deprecated 08/2016 with the removal of the recording code. </obsolete> @@ -99834,7 +101624,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount"> +<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99849,7 +101640,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache"> +<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99865,7 +101657,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork"> +<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99898,7 +101691,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses"> +<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99914,7 +101708,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Url.PrefetchCancelled" units="%"> +<histogram name="ResourcePrefetchPredictor.Url.PrefetchCancelled" units="%" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99926,7 +101721,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Url.PrefetchFailed" units="%"> +<histogram name="ResourcePrefetchPredictor.Url.PrefetchFailed" units="%" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99939,7 +101735,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheNotUsed" - units="%"> + units="%" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99953,7 +101749,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheUsedFromCache" - units="%"> + units="%" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -99982,7 +101778,7 @@ </histogram> <histogram name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkNotUsed" - units="%"> + units="%" expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -100025,7 +101821,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.Url.PrefetchNotStarted" units="%"> +<histogram name="ResourcePrefetchPredictor.Url.PrefetchNotStarted" units="%" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. No longer recorded. </obsolete> @@ -100037,7 +101834,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.UrlTableMainFrameUrlCount"> +<histogram name="ResourcePrefetchPredictor.UrlTableMainFrameUrlCount" + expires_after="2016-09-02"> <obsolete> Deprecated September 2016. This is effectively the same as ResourcePrefetchPredictor.UrlTableRowCount2 after refactoring of the @@ -100078,7 +101876,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.UrlTableRowCount"> +<histogram name="ResourcePrefetchPredictor.UrlTableRowCount" + expires_after="2017-01-27"> <obsolete> Deprecated January 2017. Replaced by ResourcePrefetchPredictor.UrlTableRowCount2. @@ -100091,7 +101890,8 @@ </summary> </histogram> -<histogram name="ResourcePrefetchPredictor.UrlTableRowCount2" units="urls"> +<histogram name="ResourcePrefetchPredictor.UrlTableRowCount2" units="urls" + expires_after="2018-02-28"> <obsolete> Deprecated at M66. No longer recorded. </obsolete> @@ -100147,7 +101947,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.ClientLoadedTime.Active"> +<histogram name="ResourceScheduler.ClientLoadedTime.Active" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100161,7 +101962,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.ClientLoadedTime.Background"> +<histogram name="ResourceScheduler.ClientLoadedTime.Background" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100175,7 +101977,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.ClientLoadedTime.Other"> +<histogram name="ResourceScheduler.ClientLoadedTime.Other" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100189,7 +101992,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive"> +<histogram name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100298,7 +102102,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.RequestTimeDeferred.Active"> +<histogram name="ResourceScheduler.RequestTimeDeferred.Active" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100310,7 +102115,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.RequestTimeDeferred.Background"> +<histogram name="ResourceScheduler.RequestTimeDeferred.Background" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100322,7 +102128,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.RequestTimeDeferred.Other"> +<histogram name="ResourceScheduler.RequestTimeDeferred.Other" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100337,7 +102144,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.RequestTimeThrottled.Active"> +<histogram name="ResourceScheduler.RequestTimeThrottled.Active" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100349,7 +102157,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.RequestTimeThrottled.Background"> +<histogram name="ResourceScheduler.RequestTimeThrottled.Background" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100361,7 +102170,8 @@ </summary> </histogram> -<histogram name="ResourceScheduler.RequestTimeThrottled.Other"> +<histogram name="ResourceScheduler.RequestTimeThrottled.Other" + expires_after="2016-01-29"> <obsolete> Deprecated 1/2016 </obsolete> @@ -100441,7 +102251,7 @@ </summary> </histogram> -<histogram name="SadTab.Created" enum="SadTabKind"> +<histogram name="SadTab.Created" enum="SadTabKind" expires_after="2015-06-02"> <obsolete> Replaced with Tabs.SadTab.* in R20. </obsolete> @@ -100452,7 +102262,7 @@ </summary> </histogram> -<histogram name="SadTab.Displayed" enum="SadTabKind"> +<histogram name="SadTab.Displayed" enum="SadTabKind" expires_after="2015-06-02"> <obsolete> Replaced with Tabs.SadTab.* in R20. </obsolete> @@ -100523,7 +102333,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.EnabledSettingChanged" enum="BooleanEnabled"> +<histogram name="SafeBrowsing.EnabledSettingChanged" enum="BooleanEnabled" + expires_after="2015-10-16"> <obsolete> Not in the code anymore (10/2015). </obsolete> @@ -100632,7 +102443,7 @@ </histogram> <histogram name="SafeBrowsing.GetV4HashHttpResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4GetHash.Network.Result. </obsolete> @@ -100644,7 +102455,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.GetV4HashNetwork" units="ms"> +<histogram name="SafeBrowsing.GetV4HashNetwork" units="ms" + expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4GetHash.Network.Time. </obsolete> @@ -100656,7 +102468,7 @@ </histogram> <histogram name="SafeBrowsing.GetV4HashResult" - enum="SafeBrowsingV4OperationResult"> + enum="SafeBrowsingV4OperationResult" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4GetHash.Result. </obsolete> @@ -100684,7 +102496,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.NavigationObserver.IPAddressCleanUpCount"> +<histogram name="SafeBrowsing.NavigationObserver.IPAddressCleanUpCount" + expires_after="2018-09-21"> <obsolete> Deprecated in M71+. </obsolete> @@ -100715,7 +102528,7 @@ </histogram> <histogram name="SafeBrowsing.ParseV4HashResult" - enum="SafeBrowsingParseV4HashResult"> + enum="SafeBrowsingParseV4HashResult" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4GetHash.Parse.Result. </obsolete> @@ -100726,7 +102539,7 @@ </histogram> <histogram name="SafeBrowsing.ParseV4UpdateResult" - enum="SafeBrowsingParseV4UpdateResult"> + enum="SafeBrowsingParseV4UpdateResult" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4Update.Parse.Result. </obsolete> @@ -100934,7 +102747,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4AddUnlumpedHashes.Time" units="ms"> +<histogram name="SafeBrowsing.V4AddUnlumpedHashes.Time" units="ms" + expires_after="2018-04-25"> <obsolete> Deprecated 04/25/2018 since it was not being used actively or monitored. </obsolete> @@ -100946,7 +102760,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4AddUnlumpedHashesTime" units="ms"> +<histogram name="SafeBrowsing.V4AddUnlumpedHashesTime" units="ms" + expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4AddUnlumpedHashes.Time. </obsolete> @@ -100959,7 +102774,7 @@ </histogram> <histogram name="SafeBrowsing.V4ApplyUpdateResult" - enum="SafeBrowsingV4ApplyUpdateResult"> + enum="SafeBrowsingV4ApplyUpdateResult" expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4*.ApplyUpdate.Result. </obsolete> @@ -100971,7 +102786,7 @@ </histogram> <histogram name="SafeBrowsing.V4ApplyUpdateResultWhenReadingFromDisk" - enum="SafeBrowsingV4ApplyUpdateResult"> + enum="SafeBrowsingV4ApplyUpdateResult" expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result. </obsolete> @@ -101000,7 +102815,7 @@ </histogram> <histogram name="SafeBrowsing.V4DecodeAdditionsResult" - enum="SafeBrowsingV4DecodeResult"> + enum="SafeBrowsingV4DecodeResult" expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4*.DecodeAdditions.Result. </obsolete> @@ -101012,7 +102827,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4DecodeAdditionsTime" units="ms"> +<histogram name="SafeBrowsing.V4DecodeAdditionsTime" units="ms" + expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4*.DecodeAdditions.Time. </obsolete> @@ -101024,7 +102840,7 @@ </histogram> <histogram name="SafeBrowsing.V4DecodeRemovalsResult" - enum="SafeBrowsingV4DecodeResult"> + enum="SafeBrowsingV4DecodeResult" expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result. </obsolete> @@ -101036,7 +102852,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4DecodeRemovalsTime" units="ms"> +<histogram name="SafeBrowsing.V4DecodeRemovalsTime" units="ms" + expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time. </obsolete> @@ -101048,7 +102865,7 @@ </histogram> <histogram name="SafeBrowsing.V4FullHashCacheResult" - enum="SafeBrowsingV4FullHashCacheResult"> + enum="SafeBrowsingV4FullHashCacheResult" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4GetHash.CacheHit.Result. </obsolete> @@ -101111,7 +102928,7 @@ </histogram> <histogram name="SafeBrowsing.V4GetHashCheckResult" - enum="SafeBrowsingV4GetHashCheckResult"> + enum="SafeBrowsingV4GetHashCheckResult" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4GetHash.Check.Result. </obsolete> @@ -101120,7 +102937,8 @@ <summary>Track get hash response hits for V4 full hash requests.</summary> </histogram> -<histogram name="SafeBrowsing.V4GetHashNetwork.Time" units="ms"> +<histogram name="SafeBrowsing.V4GetHashNetwork.Time" units="ms" + expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4GetHash.Network.Time. </obsolete> @@ -101131,7 +102949,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4GetPrefixMatches.Time" units="ms"> +<histogram name="SafeBrowsing.V4GetPrefixMatches.Time" units="ms" + expires_after="2018-03-14"> <obsolete> Deprecated in favor of the TimeUs variant </obsolete> @@ -101142,7 +102961,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4GetPrefixMatches.TimeUs" units="microseconds"> +<histogram name="SafeBrowsing.V4GetPrefixMatches.TimeUs" units="microseconds" + expires_after="2019-01-09"> <obsolete> Deprecated 01/2019 due to lack of use (Histogram Eraser). </obsolete> @@ -101171,7 +102991,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4MergeUpdateTime" units="ms"> +<histogram name="SafeBrowsing.V4MergeUpdateTime" units="ms" + expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4*.MergeUpdate.Time. </obsolete> @@ -101224,7 +103045,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time" units="ms"> +<histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time" units="ms" + expires_after="2018-04-25"> <obsolete> Deprecated 04/25/2018 since it was not being used actively or monitored. </obsolete> @@ -101235,7 +103057,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4ProcessFullUpdateTime" units="ms"> +<histogram name="SafeBrowsing.V4ProcessFullUpdateTime" units="ms" + expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time. </obsolete> @@ -101311,7 +103134,7 @@ </histogram> <histogram name="SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time" - units="ms"> + units="ms" expires_after="2018-04-25"> <obsolete> Deprecated 04/25/2018 since it was not being used actively or monitored. </obsolete> @@ -101322,7 +103145,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4ProcessPartialUpdateTime" units="ms"> +<histogram name="SafeBrowsing.V4ProcessPartialUpdateTime" units="ms" + expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time. </obsolete> @@ -101377,7 +103201,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time" units="ms"> +<histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time" units="ms" + expires_after="2018-04-25"> <obsolete> Deprecated 04/25/2018 since it was not being used actively or monitored. </obsolete> @@ -101388,7 +103213,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4ReadFromDiskTime" units="ms"> +<histogram name="SafeBrowsing.V4ReadFromDiskTime" units="ms" + expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time. </obsolete> @@ -101431,7 +103257,7 @@ </histogram> <histogram name="SafeBrowsing.V4StoreReadResult" - enum="SafeBrowsingV4StoreReadResult"> + enum="SafeBrowsingV4StoreReadResult" expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4StoreRead.Result. </obsolete> @@ -101461,7 +103287,7 @@ </histogram> <histogram name="SafeBrowsing.V4StoreWriteResult" - enum="SafeBrowsingV4StoreWriteResult"> + enum="SafeBrowsingV4StoreWriteResult" expires_after="2016-10-12"> <obsolete> Replaced by SafeBrowsing.V4StoreWrite.Result. </obsolete> @@ -101480,7 +103306,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4UnusedStoreFileExists.V3" enum="BooleanExists"> +<histogram name="SafeBrowsing.V4UnusedStoreFileExists.V3" enum="BooleanExists" + expires_after="2019-01-03"> <obsolete> Removed in M73. See https://crbug.com/916192 </obsolete> @@ -101531,7 +103358,7 @@ </histogram> <histogram name="SafeBrowsing.V4UpdateHttpResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4Update.Network.Result. </obsolete> @@ -101542,7 +103369,8 @@ </summary> </histogram> -<histogram name="SafeBrowsing.V4UpdateResponseSizeKB" units="KB"> +<histogram name="SafeBrowsing.V4UpdateResponseSizeKB" units="KB" + expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4Update.ResponseSizeKB. </obsolete> @@ -101553,7 +103381,7 @@ </histogram> <histogram name="SafeBrowsing.V4UpdateResult" - enum="SafeBrowsingV4OperationResult"> + enum="SafeBrowsingV4OperationResult" expires_after="2016-11-04"> <obsolete> Replaced by SafeBrowsing.V4Update.Result. </obsolete> @@ -101625,7 +103453,7 @@ </summary> </histogram> -<histogram name="SB.BloomFilter" units="ms"> +<histogram name="SB.BloomFilter" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101636,7 +103464,7 @@ </summary> </histogram> -<histogram name="SB.BuildBloom"> +<histogram name="SB.BuildBloom" expires_after="2013-04-25"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -101644,7 +103472,7 @@ <summary>TBD.</summary> </histogram> -<histogram name="SB.Database" units="ms"> +<histogram name="SB.Database" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101655,7 +103483,7 @@ </summary> </histogram> -<histogram name="SB.DBCheck" units="ms"> +<histogram name="SB.DBCheck" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101667,7 +103495,7 @@ </summary> </histogram> -<histogram name="SB.Delay" units="ms"> +<histogram name="SB.Delay" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101680,7 +103508,7 @@ </summary> </histogram> -<histogram name="SB.FilterCheck" units="ms"> +<histogram name="SB.FilterCheck" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101691,7 +103519,7 @@ </summary> </histogram> -<histogram name="SB.Network" units="ms"> +<histogram name="SB.Network" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101702,7 +103530,7 @@ </summary> </histogram> -<histogram name="SB.NetworkCheck" units="ms"> +<histogram name="SB.NetworkCheck" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101714,7 +103542,7 @@ </summary> </histogram> -<histogram name="SB.PauseSafe" units="ms"> +<histogram name="SB.PauseSafe" units="ms" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101727,7 +103555,7 @@ </summary> </histogram> -<histogram name="SB.Update"> +<histogram name="SB.Update" expires_after="2014-07-09"> <obsolete> Has not been generated for years (7/8/14). </obsolete> @@ -101735,7 +103563,7 @@ <summary>TBD.</summary> </histogram> -<histogram name="SB2.AddPrefixes"> +<histogram name="SB2.AddPrefixes" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101745,7 +103573,8 @@ </summary> </histogram> -<histogram name="SB2.BloomFailure" enum="SB2BloomFailure"> +<histogram name="SB2.BloomFailure" enum="SB2BloomFailure" + expires_after="2014-07-09"> <obsolete> Bloom filter support deleted in October 2012. </obsolete> @@ -101756,7 +103585,7 @@ </histogram> <histogram name="SB2.BloomFilterFalsePositives" - enum="SB2BloomFilterFalsePositives"> + enum="SB2BloomFilterFalsePositives" expires_after="2013-11-13"> <obsolete> This became misleading around M-22 (September 2012), deleted in M-32 (November 2013). @@ -101768,7 +103597,7 @@ </summary> </histogram> -<histogram name="SB2.BloomFilterLoad" units="ms"> +<histogram name="SB2.BloomFilterLoad" units="ms" expires_after="2014-07-09"> <obsolete> Bloom filter support deleted in October 2012. </obsolete> @@ -101776,7 +103605,8 @@ <summary>Time to load the BloomFilter file.</summary> </histogram> -<histogram name="SB2.BrowseDatabaseKilobytes" units="KB"> +<histogram name="SB2.BrowseDatabaseKilobytes" units="KB" + expires_after="2015-01-05"> <obsolete> Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Browse. </obsolete> @@ -101787,7 +103617,7 @@ </summary> </histogram> -<histogram name="SB2.BuildFilter" units="ms"> +<histogram name="SB2.BuildFilter" units="ms" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101798,7 +103628,7 @@ </summary> </histogram> -<histogram name="SB2.BuildReadBytes" units="bytes"> +<histogram name="SB2.BuildReadBytes" units="bytes" expires_after="2013-04-25"> <obsolete> Deprecated because it was exceeding the range. Replaced by SB2.BuildReadKilobytes. @@ -101810,7 +103640,7 @@ </summary> </histogram> -<histogram name="SB2.BuildReadKilobytes" units="KB"> +<histogram name="SB2.BuildReadKilobytes" units="KB" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101821,7 +103651,7 @@ </summary> </histogram> -<histogram name="SB2.BuildReadOperations"> +<histogram name="SB2.BuildReadOperations" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101832,7 +103662,7 @@ </summary> </histogram> -<histogram name="SB2.BuildWriteBytes" units="bytes"> +<histogram name="SB2.BuildWriteBytes" units="bytes" expires_after="2013-04-25"> <obsolete> Deprecated because it was exceeding the range. Replaced by SB2.BuildWriteKilobytes. @@ -101844,7 +103674,7 @@ </summary> </histogram> -<histogram name="SB2.BuildWriteKilobytes" units="KB"> +<histogram name="SB2.BuildWriteKilobytes" units="KB" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101855,7 +103685,7 @@ </summary> </histogram> -<histogram name="SB2.BuildWriteOperations"> +<histogram name="SB2.BuildWriteOperations" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101866,7 +103696,7 @@ </summary> </histogram> -<histogram name="SB2.ChunkInsert" units="ms"> +<histogram name="SB2.ChunkInsert" units="ms" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101877,7 +103707,7 @@ </summary> </histogram> -<histogram name="SB2.ChunkRequest" units="ms"> +<histogram name="SB2.ChunkRequest" units="ms" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101887,7 +103717,7 @@ </summary> </histogram> -<histogram name="SB2.ChunkSize" units="bytes"> +<histogram name="SB2.ChunkSize" units="bytes" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101895,7 +103725,7 @@ <summary>The size of one chunk URL.</summary> </histogram> -<histogram name="SB2.DatabaseBytes" units="bytes"> +<histogram name="SB2.DatabaseBytes" units="bytes" expires_after="2013-04-25"> <obsolete> Deprecated because it was exceeding the range. Replaced by SB2.DatabaseKilobytes. @@ -101904,7 +103734,8 @@ <summary>The size of the SafeBrowsing database file on disk.</summary> </histogram> -<histogram name="SB2.DatabaseFailure" enum="SB2DatabaseFailure"> +<histogram name="SB2.DatabaseFailure" enum="SB2DatabaseFailure" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101912,7 +103743,7 @@ <summary>Track failures when updating the safe-browsing database.</summary> </histogram> -<histogram name="SB2.DatabaseKilobytes" units="KB"> +<histogram name="SB2.DatabaseKilobytes" units="KB" expires_after="2015-01-05"> <obsolete> Replaced by SB2.BrowseDatabaseKilobytes. </obsolete> @@ -101922,7 +103753,7 @@ </summary> </histogram> -<histogram name="SB2.DatabaseOpen" units="ms"> +<histogram name="SB2.DatabaseOpen" units="ms" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101933,7 +103764,8 @@ </summary> </histogram> -<histogram name="SB2.DatabaseSizeKilobytes" units="KB"> +<histogram name="SB2.DatabaseSizeKilobytes" units="KB" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101945,7 +103777,8 @@ </summary> </histogram> -<histogram name="SB2.DatabaseUpdateKilobytes" units="KB"> +<histogram name="SB2.DatabaseUpdateKilobytes" units="KB" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -101987,7 +103820,7 @@ </summary> </histogram> -<histogram name="SB2.DownloadBinhashAddsDeleted"> +<histogram name="SB2.DownloadBinhashAddsDeleted" expires_after="2014-02-20"> <obsolete> Deleted in M-34 (February 2014). </obsolete> @@ -101995,7 +103828,7 @@ <summary>Obsolete download BINHASH add chunks deleted.</summary> </histogram> -<histogram name="SB2.DownloadBinhashSubsDeleted"> +<histogram name="SB2.DownloadBinhashSubsDeleted" expires_after="2014-02-20"> <obsolete> Deleted in M-34 (February 2014). </obsolete> @@ -102012,7 +103845,8 @@ </summary> </histogram> -<histogram name="SB2.DownloadDatabaseKilobytes" units="KB"> +<histogram name="SB2.DownloadDatabaseKilobytes" units="KB" + expires_after="2015-01-05"> <obsolete> Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Download. </obsolete> @@ -102023,7 +103857,7 @@ </summary> </histogram> -<histogram name="SB2.DownloadDuration" units="ms"> +<histogram name="SB2.DownloadDuration" units="ms" expires_after="2017-01-05"> <obsolete> Deprecated 01/2017. Was measuring the lifetime of a network request corresponding to a download, which may or may not correspond to the total @@ -102033,7 +103867,8 @@ <summary>The time it takes for a download to finish.</summary> </histogram> -<histogram name="SB2.DownloadHashCheckDuration" units="ms"> +<histogram name="SB2.DownloadHashCheckDuration" units="ms" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102048,7 +103883,8 @@ <summary>The time it takes for SafeBrowsing to check a download url.</summary> </histogram> -<histogram name="SB2.DownloadUrlChecks" enum="SB2DownloadChecks"> +<histogram name="SB2.DownloadUrlChecks" enum="SB2DownloadChecks" + expires_after="2013-04-25"> <obsolete> Deprecated 3/11/11, and replaced by SB2.DownloadChecks. </obsolete> @@ -102056,7 +103892,8 @@ <summary>Records results of SafeBrowsing download url check.</summary> </histogram> -<histogram name="SB2.ExtendedReportingIsEnabled" enum="BooleanEnabled"> +<histogram name="SB2.ExtendedReportingIsEnabled" enum="BooleanEnabled" + expires_after="2015-03-25"> <obsolete> Deprecated 03/2015. Replaced by SecurityInterstitialInteraction::EXTENDED_REPORTING_IS_ENABLED. @@ -102069,7 +103906,7 @@ </summary> </histogram> -<histogram name="SB2.FailedUpdate"> +<histogram name="SB2.FailedUpdate" expires_after="2013-04-25"> <obsolete> Deprecated, replaced by SB2.DatabaseFailure BROWSE_DB_UPDATE_FINISH. </obsolete> @@ -102080,7 +103917,7 @@ </summary> </histogram> -<histogram name="SB2.FilterCheck" units="ms"> +<histogram name="SB2.FilterCheck" units="ms" expires_after="2018-03-14"> <obsolete> Deprecated in favor of SafeBrowsing.V4GetPrefixMatches.TimeUs </obsolete> @@ -102090,7 +103927,7 @@ </summary> </histogram> -<histogram name="SB2.FilterKilobytes" units="KB"> +<histogram name="SB2.FilterKilobytes" units="KB" expires_after="2013-04-25"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -102098,7 +103935,8 @@ <summary>The size of the current bloom filter in kilobytes.</summary> </histogram> -<histogram name="SB2.FilterLoad" enum="SB2FilterLoad"> +<histogram name="SB2.FilterLoad" enum="SB2FilterLoad" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102106,7 +103944,7 @@ <summary>Which filter file the database loaded from disk.</summary> </histogram> -<histogram name="SB2.FilterMissing"> +<histogram name="SB2.FilterMissing" expires_after="2013-04-25"> <obsolete> Deprecated, replaced by SB2.DatabaseFailure FILTER_MISSING. </obsolete> @@ -102117,7 +103955,7 @@ </summary> </histogram> -<histogram name="SB2.FilterReadFail"> +<histogram name="SB2.FilterReadFail" expires_after="2013-04-25"> <obsolete> Deprecated, replaced by SB2.DatabaseFailure FILTER_READ. </obsolete> @@ -102128,7 +103966,7 @@ </summary> </histogram> -<histogram name="SB2.FilterSize" units="bytes"> +<histogram name="SB2.FilterSize" units="bytes" expires_after="2013-04-25"> <obsolete> Deprecated because it was exceeding the range. Replaced by SB2.FilterKilobytes. @@ -102137,7 +103975,7 @@ <summary>The size of the current bloom filter.</summary> </histogram> -<histogram name="SB2.FilterWriteFail"> +<histogram name="SB2.FilterWriteFail" expires_after="2013-04-25"> <obsolete> Deprecated, replaced by SB2.DatabaseFailure FILTER_WRITE. </obsolete> @@ -102148,7 +103986,8 @@ </summary> </histogram> -<histogram name="SB2.FormatEvent" enum="SB2FormatEvent"> +<histogram name="SB2.FormatEvent" enum="SB2FormatEvent" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102160,7 +103999,7 @@ </histogram> <histogram name="SB2.GetChunkResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102172,7 +104011,7 @@ </summary> </histogram> -<histogram name="SB2.GetHash200"> +<histogram name="SB2.GetHash200" expires_after="2013-04-25"> <obsolete> Deprecated in favor of SB2.GetHashResult STATUS_200. </obsolete> @@ -102182,7 +104021,7 @@ </summary> </histogram> -<histogram name="SB2.GetHash204"> +<histogram name="SB2.GetHash204" expires_after="2013-04-25"> <obsolete> Deprecated in favor of SB2.GetHashResult STATUS_204. </obsolete> @@ -102202,7 +104041,8 @@ </summary> </histogram> -<histogram name="SB2.GetHashResult" enum="SB2GetHashResult"> +<histogram name="SB2.GetHashResult" enum="SB2GetHashResult" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102219,7 +104059,8 @@ </summary> </histogram> -<histogram name="SB2.GetHashResultDownload" enum="SB2GetHashResult"> +<histogram name="SB2.GetHashResultDownload" enum="SB2GetHashResult" + expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102236,7 +104077,7 @@ </summary> </histogram> -<histogram name="SB2.GetHashServerMiss"> +<histogram name="SB2.GetHashServerMiss" expires_after="2013-04-25"> <obsolete> Deprecated in favor of SB2.GetHashResult FULL_HASH_* and SB2.BloomFilterFalsePositives. It is unclear if this histogram ever reported @@ -102249,7 +104090,7 @@ </summary> </histogram> -<histogram name="SB2.HandleCorrupt"> +<histogram name="SB2.HandleCorrupt" expires_after="2013-04-25"> <obsolete> Deprecated, replaced by SB2.DatabaseFailure CORRUPT. </obsolete> @@ -102259,7 +104100,8 @@ </summary> </histogram> -<histogram name="SB2.InterstitialAction" enum="SB2InterstitialAction"> +<histogram name="SB2.InterstitialAction" enum="SB2InterstitialAction" + expires_after="2014-09-17"> <obsolete> Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*. </obsolete> @@ -102271,7 +104113,7 @@ </histogram> <histogram name="SB2.InterstitialActionDetails" - enum="SB2InterstitialActionDetails"> + enum="SB2InterstitialActionDetails" expires_after="2014-09-17"> <obsolete> Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*. </obsolete> @@ -102281,7 +104123,8 @@ </summary> </histogram> -<histogram name="SB2.MalwareInterstitialTimeClosed" units="ms"> +<histogram name="SB2.MalwareInterstitialTimeClosed" units="ms" + expires_after="2014-09-16"> <obsolete> Deprecated 9/2014. </obsolete> @@ -102293,7 +104136,8 @@ </summary> </histogram> -<histogram name="SB2.MalwareInterstitialTimeDiagnostic" units="ms"> +<histogram name="SB2.MalwareInterstitialTimeDiagnostic" units="ms" + expires_after="2014-09-16"> <obsolete> Deprecated 9/2014. </obsolete> @@ -102304,7 +104148,8 @@ </summary> </histogram> -<histogram name="SB2.MalwareInterstitialTimeExpandedSeeMore" units="ms"> +<histogram name="SB2.MalwareInterstitialTimeExpandedSeeMore" units="ms" + expires_after="2014-09-16"> <obsolete> Deprecated 9/2014. </obsolete> @@ -102316,7 +104161,8 @@ </summary> </histogram> -<histogram name="SB2.MalwareInterstitialTimeLearnMore" units="ms"> +<histogram name="SB2.MalwareInterstitialTimeLearnMore" units="ms" + expires_after="2014-09-16"> <obsolete> Deprecated 9/2014. </obsolete> @@ -102327,7 +104173,8 @@ </summary> </histogram> -<histogram name="SB2.MalwareInterstitialTimePrivacyPolicy" units="ms"> +<histogram name="SB2.MalwareInterstitialTimePrivacyPolicy" units="ms" + expires_after="2014-09-16"> <obsolete> Deprecated 9/2014. </obsolete> @@ -102338,7 +104185,8 @@ </summary> </histogram> -<histogram name="SB2.MalwareInterstitialTimeProceed" units="ms"> +<histogram name="SB2.MalwareInterstitialTimeProceed" units="ms" + expires_after="2014-09-16"> <obsolete> Deprecated 9/2014. </obsolete> @@ -102349,7 +104197,8 @@ </summary> </histogram> -<histogram name="SB2.MalwareInterstitialTimeTakeMeBack" units="ms"> +<histogram name="SB2.MalwareInterstitialTimeTakeMeBack" units="ms" + expires_after="2014-09-16"> <obsolete> Deprecated 9/2014. </obsolete> @@ -102380,7 +104229,8 @@ </summary> </histogram> -<histogram name="SB2.OldDatabaseKilobytes" units="KB"> +<histogram name="SB2.OldDatabaseKilobytes" units="KB" + expires_after="2014-07-24"> <obsolete> Deprecated 7/2014. No longer generated. </obsolete> @@ -102388,7 +104238,7 @@ <summary>Size of v1 database deleted from client profile.</summary> </histogram> -<histogram name="SB2.OutShardShifts"> +<histogram name="SB2.OutShardShifts" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102449,7 +104299,8 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetBitsPerPrefix" units="bits"> +<histogram name="SB2.PrefixSetBitsPerPrefix" units="bits" + expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102460,7 +104311,8 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetEvent" enum="SB2PrefixSetEvent"> +<histogram name="SB2.PrefixSetEvent" enum="SB2PrefixSetEvent" + expires_after="2013-04-25"> <obsolete> Deprecated 9/2012. No longer generated, BloomFilter being removed. </obsolete> @@ -102471,7 +104323,7 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetKilobytes" units="KB"> +<histogram name="SB2.PrefixSetKilobytes" units="KB" expires_after="2015-01-07"> <obsolete> Deprecated 01/2014. Replaced by suffixed SB2.PrefixSetSizeKilobytes. </obsolete> @@ -102479,7 +104331,7 @@ <summary>The size of one of the PrefixSet files in kilobytes.</summary> </histogram> -<histogram name="SB2.PrefixSetLoad" units="ms"> +<histogram name="SB2.PrefixSetLoad" units="ms" expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102487,7 +104339,7 @@ <summary>Time to load one of the PrefixSet files.</summary> </histogram> -<histogram name="SB2.PrefixSetRestoredExcess"> +<histogram name="SB2.PrefixSetRestoredExcess" expires_after="2013-04-25"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -102497,7 +104349,7 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetRestoredShortfall"> +<histogram name="SB2.PrefixSetRestoredShortfall" expires_after="2013-04-25"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -102507,7 +104359,8 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetSizeKilobytes" units="KB"> +<histogram name="SB2.PrefixSetSizeKilobytes" units="KB" + expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102519,7 +104372,7 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetUnsortedDelta"> +<histogram name="SB2.PrefixSetUnsortedDelta" expires_after="2013-04-11"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -102529,7 +104382,7 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetUnsortedDifference"> +<histogram name="SB2.PrefixSetUnsortedDifference" expires_after="2013-04-11"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -102540,7 +104393,8 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetUnsortedPercent" units="%"> +<histogram name="SB2.PrefixSetUnsortedPercent" units="%" + expires_after="2013-04-11"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -102551,7 +104405,7 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetUnsortedSize"> +<histogram name="SB2.PrefixSetUnsortedSize" expires_after="2013-04-11"> <obsolete> Deprecated 9/2012. No longer generated. </obsolete> @@ -102562,7 +104416,7 @@ </summary> </histogram> -<histogram name="SB2.PrefixSetVersionRead"> +<histogram name="SB2.PrefixSetVersionRead" expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102570,7 +104424,7 @@ <summary>Version read from one of the PrefixSet files.</summary> </histogram> -<histogram name="SB2.PrefixSetWrite" units="ms"> +<histogram name="SB2.PrefixSetWrite" units="ms" expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102613,7 +104467,8 @@ </summary> </histogram> -<histogram name="SB2.RemoteCall.CheckDispatchTime" units="microseconds"> +<histogram name="SB2.RemoteCall.CheckDispatchTime" units="microseconds" + expires_after="2018-10-31"> <obsolete> Deprecated Oct 2018 </obsolete> @@ -102632,7 +104487,8 @@ </summary> </histogram> -<histogram name="SB2.RemoteCall.ChecksPending" units="calls"> +<histogram name="SB2.RemoteCall.ChecksPending" units="calls" + expires_after="2017-11-16"> <obsolete> Deprecated in M64 (Nov 2017). No longer generated. </obsolete> @@ -102655,7 +104511,8 @@ </summary> </histogram> -<histogram name="SB2.RemoteCall.InternalErrorStatusCode"> +<histogram name="SB2.RemoteCall.InternalErrorStatusCode" + expires_after="2018-06-19"> <obsolete> No longer generated. Replaced by SB2.RemoteCall.InternalErrorStatusCode2 </obsolete> @@ -102743,7 +104600,8 @@ </summary> </histogram> -<histogram name="SB2.ReportingIsEnabled" enum="BooleanEnabled"> +<histogram name="SB2.ReportingIsEnabled" enum="BooleanEnabled" + expires_after="2014-06-16"> <obsolete> Deprecated 06/2014. Replaced by SB2.ExtendedReportingIsEnabled. </obsolete> @@ -102755,7 +104613,8 @@ </summary> </histogram> -<histogram name="SB2.ResourceTypes" enum="ContentResourceType"> +<histogram name="SB2.ResourceTypes" enum="ContentResourceType" + expires_after="2015-12-22"> <obsolete> Superseded by SB2.ResourceTypes2 in December 2015. </obsolete> @@ -102774,7 +104633,8 @@ </summary> </histogram> -<histogram name="SB2.SetExtendedReportingEnabled" enum="BooleanEnabled"> +<histogram name="SB2.SetExtendedReportingEnabled" enum="BooleanEnabled" + expires_after="2015-03-25"> <obsolete> Deprecated 03/2015. Replaced by SecurityInterstitialInteraction::SET_EXTENDED_REPORTING_ENABLED. @@ -102786,7 +104646,8 @@ </summary> </histogram> -<histogram name="SB2.SetReportingEnabled" enum="BooleanEnabled"> +<histogram name="SB2.SetReportingEnabled" enum="BooleanEnabled" + expires_after="2014-06-16"> <obsolete> Deprecated 06/2014. Replaced by SB2.SetExtendedReportingEnabled. </obsolete> @@ -102797,7 +104658,8 @@ </summary> </histogram> -<histogram name="SB2.SideEffectFreePrefixSetWrite" units="ms"> +<histogram name="SB2.SideEffectFreePrefixSetWrite" units="ms" + expires_after="2014-12-23"> <obsolete> Deprecated 12/2014. Merged into SB2.PrefixSetWrite. </obsolete> @@ -102810,7 +104672,8 @@ </summary> </histogram> -<histogram name="SB2.SideEffectFreeWhitelistDatabaseKilobytes" units="KB"> +<histogram name="SB2.SideEffectFreeWhitelistDatabaseKilobytes" units="KB" + expires_after="2014-12-23"> <obsolete> Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.SideEffectFreeWhitelist. @@ -102822,7 +104685,8 @@ </summary> </histogram> -<histogram name="SB2.SideEffectFreeWhitelistPrefixSetKilobytes" units="KB"> +<histogram name="SB2.SideEffectFreeWhitelistPrefixSetKilobytes" units="KB" + expires_after="2014-12-23"> <obsolete> Deprecated 12/2014. Moved to SB2.PrefixSetSizeKilobytes.SideEffectFreeWhitelist. @@ -102834,7 +104698,8 @@ </summary> </histogram> -<histogram name="SB2.SideEffectFreeWhitelistPrefixSetLoad" units="ms"> +<histogram name="SB2.SideEffectFreeWhitelistPrefixSetLoad" units="ms" + expires_after="2014-12-23"> <obsolete> Deprecated 12/2014. Merged into SB2.PrefixSetLoad. </obsolete> @@ -102843,7 +104708,7 @@ </histogram> <histogram name="SB2.SideEffectFreeWhitelistStatus" - enum="SB2SideEffectFreeWhitelistStatus"> + enum="SB2SideEffectFreeWhitelistStatus" expires_after="2015-04-17"> <obsolete> Deprecated 4/2015. </obsolete> @@ -102851,7 +104716,7 @@ <summary>The instantiation status of the SideEffectFreeWhitelist.</summary> </histogram> -<histogram name="SB2.StoreVersionRead"> +<histogram name="SB2.StoreVersionRead" expires_after="2018-09-21"> <obsolete> Deprecated after the launch of PVer4 in M57. </obsolete> @@ -102859,7 +104724,7 @@ <summary>Version read from the store file.</summary> </histogram> -<histogram name="SB2.SubPrefixes"> +<histogram name="SB2.SubPrefixes" expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102869,7 +104734,7 @@ </summary> </histogram> -<histogram name="SB2.Update" units="ms"> +<histogram name="SB2.Update" units="ms" expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102880,7 +104745,8 @@ </summary> </histogram> -<histogram name="SB2.UpdateRequestSize" units="bytes"> +<histogram name="SB2.UpdateRequestSize" units="bytes" + expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102888,7 +104754,8 @@ <summary>The payload size of update requests to the server.</summary> </histogram> -<histogram name="SB2.UpdateResult" enum="SB2UpdateResult"> +<histogram name="SB2.UpdateResult" enum="SB2UpdateResult" + expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102896,7 +104763,7 @@ <summary>Result from trying to update the SafeBrowsing data.</summary> </histogram> -<histogram name="SB2.UpdateSize" units="bytes"> +<histogram name="SB2.UpdateSize" units="bytes" expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102904,7 +104771,8 @@ <summary>The size of all the chunk URLs in an update response.</summary> </histogram> -<histogram name="SB2.UpdateSizeBackground" units="bytes"> +<histogram name="SB2.UpdateSizeBackground" units="bytes" + expires_after="2015-10-16"> <obsolete> Was used for an experiment in late 2014. </obsolete> @@ -102915,7 +104783,8 @@ </summary> </histogram> -<histogram name="SB2.UpdateSizeForeground" units="bytes"> +<histogram name="SB2.UpdateSizeForeground" units="bytes" + expires_after="2015-10-16"> <obsolete> Was used for an experiment in late 2014. </obsolete> @@ -102926,7 +104795,7 @@ </summary> </histogram> -<histogram name="SB2.UpdateUrls"> +<histogram name="SB2.UpdateUrls" expires_after="2018-09-10"> <obsolete> Deprecated in M58 (Aug 2017). No longer generated. </obsolete> @@ -102934,7 +104803,7 @@ <summary>The number of chunk URLs in an update response.</summary> </histogram> -<histogram name="SB2.VolunteerPrefixesRemoved"> +<histogram name="SB2.VolunteerPrefixesRemoved" expires_after="2014-08-26"> <obsolete> The operation this is tracking has been deleted as of 09/2014. </obsolete> @@ -103005,7 +104874,8 @@ </summary> </histogram> -<histogram name="SBClientDownload.DmgFileHasExecutable" enum="Boolean"> +<histogram name="SBClientDownload.DmgFileHasExecutable" enum="Boolean" + expires_after="2016-03-25"> <obsolete> Replaced by SBClientDownload.DmgFileHas[No]ExecutableByType in M51. </obsolete> @@ -103034,7 +104904,8 @@ </summary> </histogram> -<histogram name="SBClientDownload.DmgFileSuccess" enum="BooleanSuccess"> +<histogram name="SBClientDownload.DmgFileSuccess" enum="BooleanSuccess" + expires_after="2016-03-25"> <obsolete> Replaced by SBClientDownload.DmgFile{Success,Failure}ByType in M51. </obsolete> @@ -103236,7 +105107,7 @@ </histogram> <histogram name="SBClientDownload.PPAPIDownloadRequest.RequestDuration" - units="ms"> + units="ms" expires_after="2018-08-08"> <obsolete> Removed in 08/2018. </obsolete> @@ -103245,7 +105116,8 @@ </histogram> <histogram name="SBClientDownload.PPAPIDownloadRequest.RequestOutcome" - enum="SBClientDownloadPPAPIDownloadRequestOutcome"> + enum="SBClientDownloadPPAPIDownloadRequestOutcome" + expires_after="2018-08-08"> <obsolete> Removed in 08/2018. </obsolete> @@ -103260,7 +105132,7 @@ </histogram> <histogram name="SBClientDownload.PPAPIDownloadRequest.Result" - enum="SBClientDownloadCheckResult"> + enum="SBClientDownloadCheckResult" expires_after="2018-08-08"> <obsolete> Removed in 08/2018. </obsolete> @@ -103343,7 +105215,8 @@ </summary> </histogram> -<histogram name="SBClientDownload.SignedOrWhitelistedDownload"> +<histogram name="SBClientDownload.SignedOrWhitelistedDownload" + expires_after="2016-03-21"> <obsolete> Deprecated in Chrome 50. Replaced by SBClientDownload.CheckWhitelistResult.*. @@ -103373,7 +105246,8 @@ </summary> </histogram> -<histogram name="SBClientDownload.ZipFileContainsAppDirectory" enum="Boolean"> +<histogram name="SBClientDownload.ZipFileContainsAppDirectory" enum="Boolean" + expires_after="2018-12-06"> <obsolete> Removed in 12/2018 during a refactoring. The data was not being actively used. @@ -103521,7 +105395,8 @@ <summary>The counts for malware verdicts given by server side model.</summary> </histogram> -<histogram name="SBClientMalware.UnexpectedPageId" enum="BooleanHit"> +<histogram name="SBClientMalware.UnexpectedPageId" enum="BooleanHit" + expires_after="2014-03-31"> <obsolete> Deprecated 03/2014. That part of the code got deleted. </obsolete> @@ -103541,7 +105416,8 @@ </summary> </histogram> -<histogram name="SBClientPhishing.CheckNoPendingClassificationFailed"> +<histogram name="SBClientPhishing.CheckNoPendingClassificationFailed" + expires_after="2015-09-15"> <obsolete> Removed in M47. </obsolete> @@ -103641,7 +105517,8 @@ </summary> </histogram> -<histogram name="SBClientPhishing.GrabPhishingThumbnail" units="ms"> +<histogram name="SBClientPhishing.GrabPhishingThumbnail" units="ms" + expires_after="2015-09-15"> <obsolete> Removed in M47 </obsolete> @@ -103657,7 +105534,8 @@ </summary> </histogram> -<histogram name="SBClientPhishing.InitPrivateNetworksFailed"> +<histogram name="SBClientPhishing.InitPrivateNetworksFailed" + expires_after="2014-05-30"> <obsolete> Deprecated in Chrome 37, which now uses //net's internal matching. </obsolete> @@ -103669,7 +105547,8 @@ </summary> </histogram> -<histogram name="SBClientPhishing.InvalidWhitelistExpression"> +<histogram name="SBClientPhishing.InvalidWhitelistExpression" + expires_after="2013-04-25"> <obsolete> Deprecated 12/2011. Whitelist entries are no longer part of ClientPhishingResponse. @@ -103831,7 +105710,8 @@ </summary> </histogram> -<histogram name="SBDownloadFeedback.Shown" enum="DownloadItem.DangerType"> +<histogram name="SBDownloadFeedback.Shown" enum="DownloadItem.DangerType" + expires_after="2013-11-02"> <obsolete> Starting with M32, replaced by SBDownloadFeedback.Eligible. </obsolete> @@ -103889,7 +105769,7 @@ </summary> </histogram> -<histogram name="SBIRS.BLAHashTime" units="ms"> +<histogram name="SBIRS.BLAHashTime" units="ms" expires_after="2017-09-27"> <obsolete> Blacklist Load analysis was removed in M63. </obsolete> @@ -103899,7 +105779,7 @@ </summary> </histogram> -<histogram name="SBIRS.BLASignatureTime" units="ms"> +<histogram name="SBIRS.BLASignatureTime" units="ms" expires_after="2017-09-27"> <obsolete> Blacklist Load analysis was removed in M63. </obsolete> @@ -104002,7 +105882,7 @@ </summary> </histogram> -<histogram name="SBIRS.PruneRatio" units="%"> +<histogram name="SBIRS.PruneRatio" units="%" expires_after="2015-08-26"> <obsolete> Deprecated 08/2015. </obsolete> @@ -104054,7 +105934,8 @@ </summary> </histogram> -<histogram name="SBIRS.SuspiciousModuleDetectionTime" units="ms"> +<histogram name="SBIRS.SuspiciousModuleDetectionTime" units="ms" + expires_after="2017-09-20"> <obsolete> Suspicious Module detection was removed in M63. </obsolete> @@ -104064,7 +105945,8 @@ </summary> </histogram> -<histogram name="SBIRS.SuspiciousModuleReportCount" units="modules"> +<histogram name="SBIRS.SuspiciousModuleReportCount" units="modules" + expires_after="2017-09-20"> <obsolete> Suspicious Module detection reporting removed in M63. </obsolete> @@ -104072,7 +105954,8 @@ <summary>The number of suspicious modules found.</summary> </histogram> -<histogram name="SBIRS.SuspiciousModuleReportingTime" units="ms"> +<histogram name="SBIRS.SuspiciousModuleReportingTime" units="ms" + expires_after="2017-09-20"> <obsolete> Suspicious Module detection reporting removed in M63. </obsolete> @@ -104122,7 +106005,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion.Abort" enum="ContentResourceType"> +<histogram name="SBOffDomainInclusion.Abort" enum="ContentResourceType" + expires_after="2015-12-22"> <obsolete> Superseded by SBOffDomainInclusion2.Abort in December 2015. </obsolete> @@ -104134,7 +106018,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion.Detected" enum="ContentResourceType"> +<histogram name="SBOffDomainInclusion.Detected" enum="ContentResourceType" + expires_after="2015-01-10"> <obsolete> Deprecated 01/2015. </obsolete> @@ -104146,7 +106031,7 @@ </histogram> <histogram name="SBOffDomainInclusion.EmptyMainFrameURL" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-01-29"> <obsolete> Deprecated 01/2015. Moved to SBOffDomainInclusion.Abort.EmptyMainFrameURL. </obsolete> @@ -104157,7 +106042,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion.InHistory" enum="ContentResourceType"> +<histogram name="SBOffDomainInclusion.InHistory" enum="ContentResourceType" + expires_after="2015-12-22"> <obsolete> Superseded by SBOffDomainInclusion2.InHistory in December 2015. </obsolete> @@ -104170,7 +106056,7 @@ </histogram> <histogram name="SBOffDomainInclusion.InvalidMainFrameURL" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-01-29"> <obsolete> Deprecated 01/2015 (was never reported, confirming experiment that handling it is irrelevant). @@ -104183,7 +106069,7 @@ </histogram> <histogram name="SBOffDomainInclusion.RequestAnalyzed" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SBOffDomainInclusion2.RequestAnalyzed in December 2015. </obsolete> @@ -104194,7 +106080,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion.Suspicious" enum="ContentResourceType"> +<histogram name="SBOffDomainInclusion.Suspicious" enum="ContentResourceType" + expires_after="2015-12-22"> <obsolete> Superseded by SBOffDomainInclusion2.Suspicious in December 2015. </obsolete> @@ -104206,7 +106093,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion.Whitelisted" enum="ContentResourceType"> +<histogram name="SBOffDomainInclusion.Whitelisted" enum="ContentResourceType" + expires_after="2015-12-22"> <obsolete> Superseded by SBOffDomainInclusion2.Suspicious in December 2015. </obsolete> @@ -104217,7 +106105,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion2.Abort" enum="ContentResourceType2"> +<histogram name="SBOffDomainInclusion2.Abort" enum="ContentResourceType2" + expires_after="2016-05-16"> <obsolete> Deprecated 2016-05 as the OffDomainInclusionDetector was removed. </obsolete> @@ -104229,7 +106118,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion2.InHistory" enum="ContentResourceType2"> +<histogram name="SBOffDomainInclusion2.InHistory" enum="ContentResourceType2" + expires_after="2016-05-16"> <obsolete> Deprecated 2016-05 as the OffDomainInclusionDetector was removed. </obsolete> @@ -104242,7 +106132,7 @@ </histogram> <histogram name="SBOffDomainInclusion2.RequestAnalyzed" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2016-05-16"> <obsolete> Deprecated 2016-05 as the OffDomainInclusionDetector was removed. </obsolete> @@ -104253,7 +106143,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion2.Suspicious" enum="ContentResourceType2"> +<histogram name="SBOffDomainInclusion2.Suspicious" enum="ContentResourceType2" + expires_after="2016-05-16"> <obsolete> Deprecated 2016-05 as the OffDomainInclusionDetector was removed. </obsolete> @@ -104265,7 +106156,8 @@ </summary> </histogram> -<histogram name="SBOffDomainInclusion2.Whitelisted" enum="ContentResourceType2"> +<histogram name="SBOffDomainInclusion2.Whitelisted" enum="ContentResourceType2" + expires_after="2016-05-16"> <obsolete> Deprecated 2016-05 as the OffDomainInclusionDetector was removed. </obsolete> @@ -104343,7 +106235,8 @@ </summary> </histogram> -<histogram name="Scheduling.ActivateDuration" units="microseconds"> +<histogram name="Scheduling.ActivateDuration" units="microseconds" + expires_after="2016-06-23"> <obsolete> Replaced by ActivateDuration2, due to inefficient bucketing scheme. </obsolete> @@ -104369,7 +106262,7 @@ </histogram> <histogram name="Scheduling.BeginMainFrameIntervalCritical" - units="microseconds"> + units="microseconds" expires_after="2016-06-23"> <obsolete> Replaced by BeginMainFrameIntervalCritical2, due to inefficient bucketing scheme. @@ -104387,7 +106280,7 @@ </histogram> <histogram name="Scheduling.BeginMainFrameIntervalNotCritical" - units="microseconds"> + units="microseconds" expires_after="2016-06-23"> <obsolete> Replaced by BeginMainFrameIntervalNotCritical2, due to inefficient bucketing scheme. @@ -104405,7 +106298,7 @@ </histogram> <histogram name="Scheduling.BeginMainFrameQueueDurationCritical" - units="microseconds"> + units="microseconds" expires_after="2016-06-23"> <obsolete> Replaced by BeginMainFrameQueueDurationCritical2, due to inefficient bucketing scheme. @@ -104436,7 +106329,7 @@ </histogram> <histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical" - units="microseconds"> + units="microseconds" expires_after="2016-06-23"> <obsolete> Replaced by BeginMainFrameQueueDurationNotCritical2, due to inefficient bucketing scheme. @@ -104450,7 +106343,7 @@ </histogram> <histogram name="Scheduling.BeginMainFrameStartToCommitDuration" - units="microseconds"> + units="microseconds" expires_after="2016-06-23"> <obsolete> Replaced by BeginMainFrameStartToCommitDuration2, due to inefficient bucketing scheme. @@ -104479,7 +106372,7 @@ </histogram> <histogram name="Scheduling.BeginMainFrameToCommitDuration" - units="microseconds"> + units="microseconds" expires_after="2016-06-23"> <obsolete> Replaced by BeginMainFrameQueueDurationCritical, BeginMainFrameQueueDurationNotCritical, and @@ -104492,7 +106385,8 @@ </summary> </histogram> -<histogram name="Scheduling.Browser.ActivateDuration2" units="microseconds"> +<histogram name="Scheduling.Browser.ActivateDuration2" units="microseconds" + expires_after="2018-08-28"> <obsolete> Deprecated in 08/2018, M69. Since there is no impl thread on Browser side, there is no activation state for Browser. @@ -104511,7 +106405,7 @@ </histogram> <histogram name="Scheduling.Browser.BeginMainFrameIntervalCritical2" - units="microseconds"> + units="microseconds" expires_after="2018-07-04"> <obsolete> Deprecated in 06/2018, M69, due to too much noise in the collected data. </obsolete> @@ -104534,7 +106428,7 @@ </histogram> <histogram name="Scheduling.Browser.BeginMainFrameIntervalNotCritical2" - units="microseconds"> + units="microseconds" expires_after="2018-07-11"> <obsolete> Deprecated in 07/2018, M69. All begin frames are in critical path for browser, no data is reported. @@ -104558,7 +106452,7 @@ </histogram> <histogram name="Scheduling.Browser.BeginMainFrameQueueDurationNotCritical2" - units="microseconds"> + units="microseconds" expires_after="2018-07-11"> <obsolete> Deprecated in 07/2018, M69. All begin frames are in critical path for browser, no data is reported. @@ -104578,7 +106472,7 @@ </histogram> <histogram name="Scheduling.Browser.BeginMainFrameStartToCommit" - units="microseconds"> + units="microseconds" expires_after="2016-06-29"> <obsolete> Replaced by BeginMainFrameStartToCommitDuration. This was recorded as a result of a typo in the code that didn't include "Duration". @@ -104591,7 +106485,7 @@ </histogram> <histogram name="Scheduling.Browser.BeginMainFrameStartToCommit2" - units="microseconds"> + units="microseconds" expires_after="2016-06-29"> <obsolete> Replaced by BeginMainFrameStartToCommitDuration2. This was recorded as a result of a typo in the code that didn't include "Duration". @@ -104603,7 +106497,8 @@ </summary> </histogram> -<histogram name="Scheduling.Browser.CommitInterval2" units="microseconds"> +<histogram name="Scheduling.Browser.CommitInterval2" units="microseconds" + expires_after="2018-07-04"> <obsolete> Deprecated in 06/2018, M69, due to too much noise in the collected data. </obsolete> @@ -104624,7 +106519,8 @@ </summary> </histogram> -<histogram name="Scheduling.Browser.DrawInterval2" units="microseconds"> +<histogram name="Scheduling.Browser.DrawInterval2" units="microseconds" + expires_after="2016-06-23"> <obsolete> Deprecated in 06/2018, M69, due to too much noise in the collected data. </obsolete> @@ -104644,7 +106540,7 @@ </histogram> <histogram name="Scheduling.Browser.DrawIntervalWithCompositedAnimations2" - units="microseconds"> + units="microseconds" expires_after="2018-07-13"> <obsolete> Deprecated in 07/2018, M69, due to too much noise in the data. </obsolete> @@ -104665,7 +106561,7 @@ </histogram> <histogram name="Scheduling.Browser.DrawIntervalWithMainThreadAnimations2" - units="microseconds"> + units="microseconds" expires_after="2018-07-13"> <obsolete> Deprecated in 07/2018, M69, due to too much noise in the data. </obsolete> @@ -104686,7 +106582,7 @@ </histogram> <histogram name="Scheduling.Browser.MainAndImplFrameTimeDelta2" - units="microseconds"> + units="microseconds" expires_after="2018-08-28"> <obsolete> Deprecated in 08/2018, M69, since there is no impl thread in Browser side, this metric does not record any meaningful data. @@ -104708,7 +106604,8 @@ </summary> </histogram> -<histogram name="Scheduling.Browser.PendingTreeDuration" units="microseconds"> +<histogram name="Scheduling.Browser.PendingTreeDuration" units="microseconds" + expires_after="2018-07-13"> <obsolete> Deprecated in 07/2018, M69. Since there is no pending tree in Browser, no data is ever reported. @@ -104730,7 +106627,7 @@ </histogram> <histogram name="Scheduling.Browser.PendingTreeRasterDuration" - units="microseconds"> + units="microseconds" expires_after="2018-07-13"> <obsolete> Deprecated in 07/2018, M69. Since there is no pending tree in Browser, no data is ever reported. @@ -104755,7 +106652,7 @@ </histogram> <histogram name="Scheduling.Browser.ReadyToActivateToActivationDuration2.Impl" - units="microseconds"> + units="microseconds" expires_after="2018-07-13"> <obsolete> Deprecated in 07/2018, M69. No data reported because there is no pending tree on impl thread for browser side. @@ -104789,7 +106686,8 @@ </summary> </histogram> -<histogram name="Scheduling.CommitInterval" units="microseconds"> +<histogram name="Scheduling.CommitInterval" units="microseconds" + expires_after="2018-07-04"> <obsolete> Replaced by CommitInterval2, due to inefficient bucketing scheme. </obsolete> @@ -104805,7 +106703,7 @@ </histogram> <histogram name="Scheduling.CommitToReadyToActivateDuration" - units="microseconds"> + units="microseconds" expires_after="2016-06-23"> <obsolete> Replaced by CommitToReadyToActivateDuration2, due to inefficient bucketing scheme. @@ -104833,7 +106731,8 @@ </summary> </histogram> -<histogram name="Scheduling.DrawDuration" units="microseconds"> +<histogram name="Scheduling.DrawDuration" units="microseconds" + expires_after="2016-06-23"> <obsolete> Replaced by DrawDuration2, due to inefficient bucketing scheme. </obsolete> @@ -104855,7 +106754,8 @@ </summary> </histogram> -<histogram name="Scheduling.DrawInterval" units="microseconds"> +<histogram name="Scheduling.DrawInterval" units="microseconds" + expires_after="2016-06-23"> <obsolete> Replaced by DrawInterval2, due to inefficient bucketing scheme. </obsolete> @@ -104869,7 +106769,7 @@ </histogram> <histogram name="Scheduling.DrawIntervalWithMainThreadCompositableAnimations2" - units="microseconds"> + units="microseconds" expires_after="2018-05-02"> <obsolete> Deprecated 05/2018 because the experiment described in Issue 754471 is completed. @@ -104886,7 +106786,7 @@ </histogram> <histogram name="Scheduling.ImageInvalidationUpdateDuration" - units="microseconds"> + units="microseconds" expires_after="2018-04-10"> <obsolete> Deprecated 03/28/2018 </obsolete> @@ -104915,7 +106815,8 @@ </summary> </histogram> -<histogram name="Scheduling.MainAndImplFrameTimeDelta" units="microseconds"> +<histogram name="Scheduling.MainAndImplFrameTimeDelta" units="microseconds" + expires_after="2016-06-23"> <obsolete> Replaced by MainAndImplFrameTimeDelta2, due to inefficient bucketing scheme. </obsolete> @@ -104930,7 +106831,8 @@ </summary> </histogram> -<histogram name="Scheduling.PrepareTilesDuration" units="microseconds"> +<histogram name="Scheduling.PrepareTilesDuration" units="microseconds" + expires_after="2016-06-23"> <obsolete> Replaced by PrepareTIlesDuration2, due to inefficient bucketing scheme. </obsolete> @@ -104957,7 +106859,7 @@ </histogram> <histogram name="Scheduling.ReadyToActivateToActivationDuration" - units="microseconds"> + units="microseconds" expires_after="2018-07-13"> <obsolete> Replaced by ReadyToActivateToActivationDuration2, due to inefficient bucketing scheme. @@ -105202,7 +107104,8 @@ </summary> </histogram> -<histogram name="Scheduling.SwapAckWasFast" enum="BooleanWasFast"> +<histogram name="Scheduling.SwapAckWasFast" enum="BooleanWasFast" + expires_after="2018-07-15"> <obsolete> Deprecated in 07/2018, M69. The swap ack is always received within 8 seconds. @@ -105215,7 +107118,8 @@ </summary> </histogram> -<histogram name="Scheduling.SwapToAckLatency" units="microseconds"> +<histogram name="Scheduling.SwapToAckLatency" units="microseconds" + expires_after="2016-06-23"> <obsolete> Replaced by SwapToAckLatency2, due to inefficient bucketing scheme. </obsolete> @@ -105270,7 +107174,8 @@ <summary>The time spent before the screen locker is ready.</summary> </histogram> -<histogram name="Sdch3.AdvertisedWithSecureScheme" enum="BooleanHttps"> +<histogram name="Sdch3.AdvertisedWithSecureScheme" enum="BooleanHttps" + expires_after="2015-08-27"> <obsolete> Experiment complete, histogram gathering code removed. </obsolete> @@ -105281,7 +107186,7 @@ </summary> </histogram> -<histogram name="Sdch3.Advertisement_Count"> +<histogram name="Sdch3.Advertisement_Count" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105291,7 +107196,8 @@ </summary> </histogram> -<histogram name="Sdch3.BlacklistReason" enum="SdchProblemCode"> +<histogram name="Sdch3.BlacklistReason" enum="SdchProblemCode" + expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105301,7 +107207,8 @@ </summary> </histogram> -<histogram name="Sdch3.Dictionary size loaded" units="bytes"> +<histogram name="Sdch3.Dictionary size loaded" units="bytes" + expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105313,7 +107220,8 @@ </summary> </histogram> -<histogram name="Sdch3.DictionaryFate" enum="SdchDictionaryFate"> +<histogram name="Sdch3.DictionaryFate" enum="SdchDictionaryFate" + expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105324,7 +107232,7 @@ </summary> </histogram> -<histogram name="Sdch3.DictionaryUseCount"> +<histogram name="Sdch3.DictionaryUseCount" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105334,7 +107242,7 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment2_Decode"> +<histogram name="Sdch3.Experiment2_Decode" expires_after="2014-07-30"> <obsolete> Replaced by Sdch3.Experiment3_Holdback. </obsolete> @@ -105346,7 +107254,7 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment2_Holdback"> +<histogram name="Sdch3.Experiment2_Holdback" expires_after="2014-07-30"> <obsolete> Replaced by Sdch3.Experiment3_Holdback. </obsolete> @@ -105358,7 +107266,7 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment3_Decode"> +<histogram name="Sdch3.Experiment3_Decode" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105370,7 +107278,7 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment3_Holdback"> +<histogram name="Sdch3.Experiment3_Holdback" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105382,7 +107290,7 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment_Decode"> +<histogram name="Sdch3.Experiment_Decode" expires_after="2014-06-25"> <obsolete> Replaced by Sdch3.Experiment2_Decode. </obsolete> @@ -105394,7 +107302,7 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment_Holdback"> +<histogram name="Sdch3.Experiment_Holdback" expires_after="2014-06-25"> <obsolete> Replaced by Sdch3.Experiment2_Holdback. </obsolete> @@ -105406,7 +107314,8 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment_Holdback_1st_To_2nd_c" units="ms"> +<histogram name="Sdch3.Experiment_Holdback_1st_To_2nd_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105423,7 +107332,8 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment_Holdback_1st_To_Last_a" units="ms"> +<histogram name="Sdch3.Experiment_Holdback_1st_To_Last_a" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105434,7 +107344,8 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment_Holdback_2nd_To_3rd_c" units="ms"> +<histogram name="Sdch3.Experiment_Holdback_2nd_To_3rd_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105451,7 +107362,8 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment_Holdback_3rd_To_4th_c" units="ms"> +<histogram name="Sdch3.Experiment_Holdback_3rd_To_4th_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105468,7 +107380,8 @@ </summary> </histogram> -<histogram name="Sdch3.Experiment_Holdback_4th_To_5th_c" units="ms"> +<histogram name="Sdch3.Experiment_Holdback_4th_To_5th_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105485,7 +107398,7 @@ </summary> </histogram> -<histogram name="Sdch3.FilterUseBeforeDisabling"> +<histogram name="Sdch3.FilterUseBeforeDisabling" expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105501,7 +107414,7 @@ </summary> </histogram> -<histogram name="Sdch3.FirstUseInterval" units="ms"> +<histogram name="Sdch3.FirstUseInterval" units="ms" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105511,7 +107424,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_1st_To_2nd_c" units="ms"> +<histogram name="Sdch3.Network_Decode_1st_To_2nd_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105525,7 +107439,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_1st_To_Last_a" units="ms"> +<histogram name="Sdch3.Network_Decode_1st_To_Last_a" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105535,7 +107450,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_2nd_To_3rd_c" units="ms"> +<histogram name="Sdch3.Network_Decode_2nd_To_3rd_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105549,7 +107465,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_3rd_To_4th_c" units="ms"> +<histogram name="Sdch3.Network_Decode_3rd_To_4th_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105563,7 +107480,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_4th_To_5th_c" units="ms"> +<histogram name="Sdch3.Network_Decode_4th_To_5th_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105577,7 +107495,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_Bytes_Processed_a" units="bytes"> +<histogram name="Sdch3.Network_Decode_Bytes_Processed_a" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105588,7 +107507,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_Bytes_Processed_b" units="bytes"> +<histogram name="Sdch3.Network_Decode_Bytes_Processed_b" units="bytes" + expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105598,7 +107518,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_Bytes_VcdiffOut_a" units="bytes"> +<histogram name="Sdch3.Network_Decode_Bytes_VcdiffOut_a" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105607,7 +107528,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_Latency_F_a" units="ms"> +<histogram name="Sdch3.Network_Decode_Latency_F_a" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105620,7 +107542,7 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_Packets_b"> +<histogram name="Sdch3.Network_Decode_Packets_b" expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105633,7 +107555,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Decode_Ratio_a" units="bytes"> +<histogram name="Sdch3.Network_Decode_Ratio_a" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105645,7 +107568,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Pass-through_1st_To_2nd_c" units="ms"> +<histogram name="Sdch3.Network_Pass-through_1st_To_2nd_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105659,7 +107583,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Pass-through_1st_To_Last_a" units="ms"> +<histogram name="Sdch3.Network_Pass-through_1st_To_Last_a" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105669,7 +107594,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Pass-through_2nd_To_3rd_c" units="ms"> +<histogram name="Sdch3.Network_Pass-through_2nd_To_3rd_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105683,7 +107609,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Pass-through_3rd_To_4th_c" units="ms"> +<histogram name="Sdch3.Network_Pass-through_3rd_To_4th_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105697,7 +107624,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Pass-through_4th_To_5th_c" units="ms"> +<histogram name="Sdch3.Network_Pass-through_4th_To_5th_c" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105711,7 +107639,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Pass-through_Latency_F_a" units="ms"> +<histogram name="Sdch3.Network_Pass-through_Latency_F_a" units="ms" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105725,7 +107654,8 @@ </summary> </histogram> -<histogram name="Sdch3.Network_Pass-through_Packets_b"> +<histogram name="Sdch3.Network_Pass-through_Packets_b" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105738,7 +107668,8 @@ </summary> </histogram> -<histogram name="Sdch3.NetworkBytesSavedByCompression" units="bytes"> +<histogram name="Sdch3.NetworkBytesSavedByCompression" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105749,7 +107680,8 @@ </summary> </histogram> -<histogram name="Sdch3.NetworkBytesSpent" units="bytes"> +<histogram name="Sdch3.NetworkBytesSpent" units="bytes" + expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105760,7 +107692,7 @@ </summary> </histogram> -<histogram name="Sdch3.PartialBytesIn" units="bytes"> +<histogram name="Sdch3.PartialBytesIn" units="bytes" expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105773,7 +107705,8 @@ </summary> </histogram> -<histogram name="Sdch3.PartialVcdiffIn" units="bytes"> +<histogram name="Sdch3.PartialVcdiffIn" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105785,7 +107718,8 @@ </summary> </histogram> -<histogram name="Sdch3.PartialVcdiffOut" units="bytes"> +<histogram name="Sdch3.PartialVcdiffOut" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105798,7 +107732,7 @@ </histogram> <histogram name="Sdch3.PersistenceFailureReason" - enum="SdchPersistenceFailureReason"> + enum="SdchPersistenceFailureReason" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105808,21 +107742,24 @@ </summary> </histogram> -<histogram name="Sdch3.ProblemCodes_3" enum="SdchProblemCode"> +<histogram name="Sdch3.ProblemCodes_3" enum="SdchProblemCode" + expires_after="2014-11-13"> <obsolete> Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead. </obsolete> <summary>Each sample is the report of a distinct problem code.</summary> </histogram> -<histogram name="Sdch3.ProblemCodes_4" enum="SdchProblemCode"> +<histogram name="Sdch3.ProblemCodes_4" enum="SdchProblemCode" + expires_after="2014-11-13"> <obsolete> Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead. </obsolete> <summary>Each sample is the report of a distinct problem code.</summary> </histogram> -<histogram name="Sdch3.ProblemCodes_5" enum="SdchProblemCode"> +<histogram name="Sdch3.ProblemCodes_5" enum="SdchProblemCode" + expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105830,7 +107767,7 @@ </histogram> <histogram name="Sdch3.ResponseCorruptionDetection.Cached" - enum="SdchResponseCorruptionDetectionCauses"> + enum="SdchResponseCorruptionDetectionCauses" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105843,7 +107780,7 @@ </histogram> <histogram name="Sdch3.ResponseCorruptionDetection.Uncached" - enum="SdchResponseCorruptionDetectionCauses"> + enum="SdchResponseCorruptionDetectionCauses" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105855,7 +107792,8 @@ </summary> </histogram> -<histogram name="Sdch3.TimeWeightedMemoryUse" units="bytes"> +<histogram name="Sdch3.TimeWeightedMemoryUse" units="bytes" + expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105867,7 +107805,8 @@ </summary> </histogram> -<histogram name="Sdch3.UnflushedBufferSize" units="bytes"> +<histogram name="Sdch3.UnflushedBufferSize" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105878,7 +107817,8 @@ </summary> </histogram> -<histogram name="Sdch3.UnflushedBytesIn" units="bytes"> +<histogram name="Sdch3.UnflushedBytesIn" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105891,7 +107831,8 @@ </summary> </histogram> -<histogram name="Sdch3.UnflushedVcdiffIn" units="bytes"> +<histogram name="Sdch3.UnflushedVcdiffIn" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105903,7 +107844,8 @@ </summary> </histogram> -<histogram name="Sdch3.UnflushedVcdiffOut" units="bytes"> +<histogram name="Sdch3.UnflushedVcdiffOut" units="bytes" + expires_after="2016-11-10"> <obsolete> Deprecated 2016-11. </obsolete> @@ -105915,7 +107857,7 @@ </summary> </histogram> -<histogram name="Sdch3.UsageInterval" units="ms"> +<histogram name="Sdch3.UsageInterval" units="ms" expires_after="2015-12-14"> <obsolete> Use Sdch3.UsageInterval2 instead. </obsolete> @@ -105925,7 +107867,7 @@ </summary> </histogram> -<histogram name="Sdch3.UsageInterval2" units="ms"> +<histogram name="Sdch3.UsageInterval2" units="ms" expires_after="2017-09-14"> <obsolete> Deprecated 2017-9. </obsolete> @@ -105936,7 +107878,8 @@ </summary> </histogram> -<histogram name="Search.AddSearchProvider" enum="AddSearchProvider"> +<histogram name="Search.AddSearchProvider" enum="AddSearchProvider" + expires_after="2015-11-30"> <obsolete> Replaced by Search.AddSearchProvider2, which is also now obsolete. </obsolete> @@ -105947,7 +107890,8 @@ </summary> </histogram> -<histogram name="Search.AddSearchProvider2" enum="AddSearchProvider"> +<histogram name="Search.AddSearchProvider2" enum="AddSearchProvider" + expires_after="2016-05-10"> <obsolete> AddSearchProvider was removed 05/2016. </obsolete> @@ -106160,7 +108104,7 @@ </histogram> <histogram name="Search.ContextualSearchAllCapsResultsSeen" - enum="ContextualSearchResultsSeen"> + enum="ContextualSearchResultsSeen" expires_after="2017-05-08"> <obsolete> Deprecated 05/2017 because it's no longer ever used. </obsolete> @@ -106226,7 +108170,7 @@ </histogram> <histogram name="Search.ContextualSearchBlacklistSeen" - enum="ContextualSearchBlacklistSeen"> + enum="ContextualSearchBlacklistSeen" expires_after="2017-05-11"> <obsolete> Discontinued on 5/2017 due to experiment being completed. </obsolete> @@ -106284,7 +108228,8 @@ </summary> </histogram> -<histogram name="Search.ContextualSearchDurationNonPrefetched" units="ms"> +<histogram name="Search.ContextualSearchDurationNonPrefetched" units="ms" + expires_after="2017-03-23"> <obsolete> Discontinued on 2/2017 Due to data being buggy and not useful. </obsolete> @@ -106296,7 +108241,8 @@ </summary> </histogram> -<histogram name="Search.ContextualSearchDurationPrefetched" units="ms"> +<histogram name="Search.ContextualSearchDurationPrefetched" units="ms" + expires_after="2017-03-23"> <obsolete> Discontinued on 2/2017 Due to data being buggy and not useful. </obsolete> @@ -106463,7 +108409,7 @@ </histogram> <histogram name="Search.ContextualSearchIconSpriteAnimated" - enum="ContextualSearchIconSpriteAnimated"> + enum="ContextualSearchIconSpriteAnimated" expires_after="2017-04-07"> <obsolete> Contextual Search icon sprite removed 04/2017. </obsolete> @@ -106552,7 +108498,8 @@ </summary> </histogram> -<histogram name="Search.ContextualSearchPeekPromoCount" units="count"> +<histogram name="Search.ContextualSearchPeekPromoCount" units="count" + expires_after="2017-11-08"> <obsolete> Removed because the feature no longer exists. </obsolete> @@ -106569,7 +108516,7 @@ </histogram> <histogram name="Search.ContextualSearchPeekPromoCountUntilOpened" - units="count"> + units="count" expires_after="2017-11-08"> <obsolete> Removed because the feature no longer exists. </obsolete> @@ -106585,7 +108532,7 @@ </histogram> <histogram name="Search.ContextualSearchPeekPromoOutcome" - enum="ContextualSearchPeekPromoOutcome"> + enum="ContextualSearchPeekPromoOutcome" expires_after="2017-11-08"> <obsolete> Removed because the feature no longer exists. </obsolete> @@ -106624,7 +108571,7 @@ </histogram> <histogram name="Search.ContextualSearchPrefetchSummary" - enum="ContextualSearchPrefetchSummary"> + enum="ContextualSearchPrefetchSummary" expires_after="2017-03-23"> <obsolete> Discontinued on 2/2017 Due to data not being useful. </obsolete> @@ -106801,7 +108748,8 @@ </summary> </histogram> -<histogram name="Search.ContextualSearchRecentScrollNotSeen" units="ms"> +<histogram name="Search.ContextualSearchRecentScrollNotSeen" units="ms" + expires_after="2017-02-28"> <obsolete> Deprecated 02/2017. </obsolete> @@ -106813,7 +108761,8 @@ </summary> </histogram> -<histogram name="Search.ContextualSearchRecentScrollSeen" units="ms"> +<histogram name="Search.ContextualSearchRecentScrollSeen" units="ms" + expires_after="2017-02-28"> <obsolete> Deprecated 02/2017. </obsolete> @@ -106887,7 +108836,7 @@ </histogram> <histogram name="Search.ContextualSearchResultsSeenSelectionWasUrl" - enum="ContextualSearchSeenByGesture"> + enum="ContextualSearchSeenByGesture" expires_after="2017-05-08"> <obsolete> Deprecated 05/2017 because it's no longer ever used. </obsolete> @@ -106923,7 +108872,7 @@ </histogram> <histogram name="Search.ContextualSearchSecondTapSeen" - enum="ContextualSearchResultsSeen"> + enum="ContextualSearchResultsSeen" expires_after="2017-12-01"> <obsolete> Removed 11/2017 because the data is no longer valuable. </obsolete> @@ -106977,7 +108926,7 @@ </histogram> <histogram name="Search.ContextualSearchSerpLoadedOnClose" - enum="ContextualSearchLoaded"> + enum="ContextualSearchLoaded" expires_after="2017-03-23"> <obsolete> Removed 02/2017 because the data is no longer valuable. </obsolete> @@ -107003,7 +108952,7 @@ </histogram> <histogram name="Search.ContextualSearchStartedWithCapitalResultsSeen" - enum="ContextualSearchResultsSeen"> + enum="ContextualSearchResultsSeen" expires_after="2017-05-11"> <obsolete> Removed 05/2017 because the data is no longer needed. </obsolete> @@ -107122,7 +109071,7 @@ </histogram> <histogram name="Search.ContextualSearchTapSuppressionSeen" - enum="ContextualSearchResultsSeen"> + enum="ContextualSearchResultsSeen" expires_after="2017-12-01"> <obsolete> Removed 11/2017 because the data is no longer valuable. </obsolete> @@ -107193,7 +109142,8 @@ </summary> </histogram> -<histogram name="Search.DefaultSearchProvider" enum="OmniboxSearchEngine"> +<histogram name="Search.DefaultSearchProvider" enum="OmniboxSearchEngine" + expires_after="2014-02-28"> <obsolete> Made obsolete around Chrome 32. Use Search.DefaultSearchProviderType instead. @@ -107218,7 +109168,8 @@ </histogram> <histogram name="Search.DesktopSearch.RedirectionInfobarCloseAction" - enum="DesktopSearchRedirectionInfobarCloseAction"> + enum="DesktopSearchRedirectionInfobarCloseAction" + expires_after="2016-05-24"> <obsolete> Deprecated 05/2016 because desktop searches are no longer opened in the default browser. @@ -107230,7 +109181,8 @@ </summary> </histogram> -<histogram name="Search.DesktopSearch.URLAction" enum="DesktopSearchURLAction"> +<histogram name="Search.DesktopSearch.URLAction" enum="DesktopSearchURLAction" + expires_after="2016-05-24"> <obsolete> Deprecated 05/2016 because desktop searches are no longer opened in the default browser. @@ -107262,7 +109214,8 @@ </summary> </histogram> -<histogram name="Search.GsaProcessMemoryPss" units="KB"> +<histogram name="Search.GsaProcessMemoryPss" units="KB" + expires_after="2017-06-20"> <obsolete> Deprecated 06/2017, no longer recorded. </obsolete> @@ -107324,7 +109277,8 @@ </summary> </histogram> -<histogram name="Search.MigratedPrefToDictionaryValue" enum="BooleanHit"> +<histogram name="Search.MigratedPrefToDictionaryValue" enum="BooleanHit" + expires_after="2017-01-10"> <obsolete> Deprecated after migrator is deleted in 12/2016. </obsolete> @@ -107466,7 +109420,7 @@ </histogram> <histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput" - enum="BooleanShown"> + enum="BooleanShown" expires_after="2016-11-10"> <obsolete> Deprecated on 2016-11-10 because this is replaced by two separate metrics: Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard and @@ -107482,7 +109436,7 @@ </histogram> <histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard" - enum="BooleanShown"> + enum="BooleanShown" expires_after="2018-12-20"> <obsolete> Deprecated 2018-12 after HTTPBad was rolled out for all HTTP pages, and discrete credit card / password tracking was removed. @@ -107497,7 +109451,7 @@ </histogram> <histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.Password" - enum="BooleanShown"> + enum="BooleanShown" expires_after="2018-12-20"> <obsolete> Deprecated 2018-12 after HTTPBad was rolled out for all HTTP pages, and discrete credit card / password tracking was removed. @@ -107556,7 +109510,7 @@ </histogram> <histogram name="Security.PageInfo.Action.HttpsUrl.Valid" - enum="WebsiteSettingsAction"> + enum="WebsiteSettingsAction" expires_after="2018-02-01"> <obsolete> Deprecated 2018-01-31, split into ValidEV and ValidNonEV. </obsolete> @@ -107741,7 +109695,7 @@ </summary> </histogram> -<histogram base="true" name="Security.TimeOnPage"> +<histogram base="true" name="Security.TimeOnPage" expires_after="2019-03-15"> <obsolete> Deprecated March 2019 in favor of Security.TimeOnPage2. </obsolete> @@ -107812,7 +109766,8 @@ </summary> </histogram> -<histogram name="SequencedWorkerPool.ShutdownDelayTime" units="ms"> +<histogram name="SequencedWorkerPool.ShutdownDelayTime" units="ms" + expires_after="2018-02-22"> <obsolete> Deprecated 02/2018. SequencedWorkerPool has been removed. </obsolete> @@ -107822,7 +109777,7 @@ </summary> </histogram> -<histogram name="SequencedWorkerPool.TaskCount"> +<histogram name="SequencedWorkerPool.TaskCount" expires_after="2016-03-07"> <obsolete> Histogram wasn't even reported anymore when ownership was taken in 11/2015. </obsolete> @@ -107833,7 +109788,8 @@ </summary> </histogram> -<histogram name="SequencedWorkerPool.UnrunnableTaskCount"> +<histogram name="SequencedWorkerPool.UnrunnableTaskCount" + expires_after="2016-03-07"> <obsolete> Histogram wasn't even reported anymore when ownership was taken in 11/2015. </obsolete> @@ -107910,7 +109866,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.ActivateEventExecutionTime" units="ms"> +<histogram name="ServiceWorker.ActivateEventExecutionTime" units="ms" + expires_after="2015-05-28"> <obsolete> Deprecated 2015-05 in favor of ServiceWorker.ActivateEvent.Time. </obsolete> @@ -107952,7 +109909,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.BackgroundFetchedEvent.Time" units="ms"> +<histogram name="ServiceWorker.BackgroundFetchedEvent.Time" units="ms" + expires_after="2018-08-14"> <obsolete> Deprecated 08/2018, and renamed to BackgroundFetchSuccessEvent. See ServiceWorker.BackgroundFetchSuccessEvent.Time instead. @@ -108052,7 +110010,7 @@ </histogram> <histogram name="ServiceWorker.ContextRequestHandlerStatus" - enum="ServiceWorkerContextRequestHandlerStatus"> + enum="ServiceWorkerContextRequestHandlerStatus" expires_after="2019-03-13"> <obsolete> No longer recorded since NetS13nSW shipped on Dec 2018. </obsolete> @@ -108140,7 +110098,7 @@ </histogram> <histogram name="ServiceWorker.DiskCacheMigrator.MigrationResult" - enum="ServiceWorkerDiskCacheMigrationStatus"> + enum="ServiceWorkerDiskCacheMigrationStatus" expires_after="2015-12-15"> <obsolete> Deprecated because the migrator was removed as of 12/2015. </obsolete> @@ -108151,7 +110109,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.DiskCacheMigrator.MigrationTime" units="ms"> +<histogram name="ServiceWorker.DiskCacheMigrator.MigrationTime" units="ms" + expires_after="2015-12-15"> <obsolete> Deprecated because the migrator was removed as of 12/2015. </obsolete> @@ -108162,7 +110121,7 @@ </histogram> <histogram name="ServiceWorker.DiskCacheMigrator.NumberOfMigratedResources" - units="count"> + units="count" expires_after="2015-12-15"> <obsolete> Deprecated because the migrator was removed as of 12/2015. </obsolete> @@ -108186,7 +110145,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.EventDispatchingDelay" units="ms"> +<histogram name="ServiceWorker.EventDispatchingDelay" units="ms" + expires_after="2018-11-01"> <obsolete> Removed Oct 2018 (M72) </obsolete> @@ -108203,7 +110163,7 @@ </histogram> <histogram name="ServiceWorker.EventHandledRatioType.Fetch" - enum="ServiceWorkerEventHandleRatioType"> + enum="ServiceWorkerEventHandleRatioType" expires_after="2018-07-02"> <obsolete> Removed July 2018 (M69) </obsolete> @@ -108217,7 +110177,7 @@ </histogram> <histogram name="ServiceWorker.EventHandledRatioType.ForeignFetch" - enum="ServiceWorkerEventHandleRatioType"> + enum="ServiceWorkerEventHandleRatioType" expires_after="2018-07-02"> <obsolete> Removed July 2018 (M69) </obsolete> @@ -108288,7 +110248,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.FetchEvent.Time" units="ms"> +<histogram name="ServiceWorker.FetchEvent.Time" units="ms" + expires_after="2015-07-14"> <obsolete> Deprecated on 2015-07-13; please use ServiceWorker.FetchEvent.HasResponse.Time or @@ -108311,7 +110272,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.FetchEventExecutionTime" units="ms"> +<histogram name="ServiceWorker.FetchEventExecutionTime" units="ms" + expires_after="2015-05-28"> <obsolete> Deprecated 2015-05 in favor of ServiceWorker.FetchEvent.Time. </obsolete> @@ -108331,7 +110293,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.ForeignFetch.OriginCount"> +<histogram name="ServiceWorker.ForeignFetch.OriginCount" + expires_after="2018-04-09"> <obsolete> Deprecated April 2018. </obsolete> @@ -108347,7 +110310,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.ForeignFetch.ScopeCount"> +<histogram name="ServiceWorker.ForeignFetch.ScopeCount" + expires_after="2018-04-09"> <obsolete> Deprecated April 2018. </obsolete> @@ -108396,7 +110360,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.InstallEventExecutionTime" units="ms"> +<histogram name="ServiceWorker.InstallEventExecutionTime" units="ms" + expires_after="2015-05-28"> <obsolete> Deprecated 2015-05 in favor of ServiceWorker.InstallEvent.Time. </obsolete> @@ -108671,7 +110636,7 @@ </histogram> <histogram name="ServiceWorker.MainFramePageLoad.CoreTransition" - enum="CorePageTransition"> + enum="CorePageTransition" expires_after="2018-01-30"> <obsolete> Deprecated 2018-01 in favor of PageLoad.Clients.ServiceWorker.PageTransition. @@ -108684,7 +110649,7 @@ </histogram> <histogram name="ServiceWorker.MainFramePageLoad.RedirectChainLength" - units="urls"> + units="urls" expires_after="2018-01-30"> <obsolete> Deprecated 2018-01. </obsolete> @@ -108716,7 +110681,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.MessageEvent.Time" units="ms"> +<histogram name="ServiceWorker.MessageEvent.Time" units="ms" + expires_after="2016-04-18"> <obsolete> Deprecated 2016-04 in favor of ServiceWorker.ExtendableMessageEvent.Time. </obsolete> @@ -108724,7 +110690,8 @@ <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary> </histogram> -<histogram name="ServiceWorker.MessageEventExecutionTime" units="ms"> +<histogram name="ServiceWorker.MessageEventExecutionTime" units="ms" + expires_after="2015-05-28"> <obsolete> Deprecated 2015-05 in favor of ServiceWorker.MessageEvent.Time. </obsolete> @@ -108732,7 +110699,8 @@ <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary> </histogram> -<histogram name="ServiceWorker.NavigationHintPrecision" enum="BooleanEnabled"> +<histogram name="ServiceWorker.NavigationHintPrecision" enum="BooleanEnabled" + expires_after="2017-03-29"> <obsolete> This experiment was turned down, see https://crbug.com/616502. </obsolete> @@ -108745,7 +110713,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.NavigationPreload.ConcurrentTime" units="ms"> +<histogram name="ServiceWorker.NavigationPreload.ConcurrentTime" units="ms" + expires_after="2017-06-07"> <obsolete> Deprecated June 2017 in favor of ServiceWorker.NavPreload.ConcurrentTime, see https://crbug.com/728035. @@ -108766,7 +110735,7 @@ </histogram> <histogram name="ServiceWorker.NavigationPreload.FinishedBeforeStartWorker" - enum="BooleanNavPreloadFinishedFirst"> + enum="BooleanNavPreloadFinishedFirst" expires_after="2017-06-07"> <obsolete> Deprecated June 2017 in favor of ServiceWorker.NavPreload.FinishedFirst, see https://crbug.com/728035. @@ -108795,7 +110764,7 @@ </histogram> <histogram name="ServiceWorker.NavigationPreload.NavPreloadAfterSWStart" - units="ms"> + units="ms" expires_after="2017-06-07"> <obsolete> Deprecated June 2017. No replacement exists. See https://crbug.com/728035. </obsolete> @@ -108814,7 +110783,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.NavigationPreload.ResponseTime" units="ms"> +<histogram name="ServiceWorker.NavigationPreload.ResponseTime" units="ms" + expires_after="2017-06-07"> <obsolete> Deprecated June 2017 in favor of ServiceWorker.NavPreload.ResponseTime. See https://crbug.com/728035. @@ -108831,7 +110801,7 @@ </histogram> <histogram name="ServiceWorker.NavigationPreload.SWStartAfterNavPreload" - units="ms"> + units="ms" expires_after="2017-06-07"> <obsolete> Deprecated June 2017 in favor of ServiceWorker.NavPreload.WorkerWaitTime. See https://crbug.com/728035. @@ -108947,7 +110917,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.NotificationClickEventExecutionTime" units="ms"> +<histogram name="ServiceWorker.NotificationClickEventExecutionTime" units="ms" + expires_after="2015-05-28"> <obsolete> Deprecated 2015-05 in favor of ServiceWorker.NotificationClickEvent.Time. </obsolete> @@ -108991,7 +110962,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.PushEventExecutionTime" units="ms"> +<histogram name="ServiceWorker.PushEventExecutionTime" units="ms" + expires_after="2015-05-28"> <obsolete> Deprecated 2015-05 in favor of ServiceWorker.PushEvent.Time. </obsolete> @@ -109055,7 +111027,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.ScriptLoadSuccess" enum="BooleanSuccess"> +<histogram name="ServiceWorker.ScriptLoadSuccess" enum="BooleanSuccess" + expires_after="2018-06-26"> <obsolete> Removed June 2018 (M69). This was recorded as 100% success since service worker script streaming launched in M64, since load failures didn't reach @@ -109362,7 +111335,7 @@ </histogram> <histogram name="ServiceWorker.StopWorker.Status" - enum="ServiceWorkerStopStatus"> + enum="ServiceWorkerStopStatus" expires_after="2015-10-09"> <obsolete> Removed from code in Oct 2015, replaced with ServiceWorker.WorkerStopped. </obsolete> @@ -109389,7 +111362,7 @@ </histogram> <histogram name="ServiceWorker.Storage.DiskCacheMigrationResult" - enum="ServiceWorkerDiskCacheMigrationResult"> + enum="ServiceWorkerDiskCacheMigrationResult" expires_after="2015-12-15"> <obsolete> Deprecated because the migrator was removed as of 12/2015. </obsolete> @@ -109434,7 +111407,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.TerminateThread.Time" units="ms"> +<histogram name="ServiceWorker.TerminateThread.Time" units="ms" + expires_after="2017-06-15"> <obsolete> Deprecated in June 2017. </obsolete> @@ -109445,7 +111419,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.TimeBetweenEvents" units="ms"> +<histogram name="ServiceWorker.TimeBetweenEvents" units="ms" + expires_after="2017-06-15"> <obsolete> Deprecated in June 2017. </obsolete> @@ -109458,7 +111433,8 @@ </summary> </histogram> -<histogram name="ServiceWorker.UnhandledEventRatio" units="%"> +<histogram name="ServiceWorker.UnhandledEventRatio" units="%" + expires_after="2015-07-07"> <obsolete> Deprecated 2015-06 in favor of ServiceWorker.EventHandledStatus*. </obsolete> @@ -109618,7 +111594,8 @@ </summary> </histogram> -<histogram name="ServiceWorkerCache.Scheduler.OperationDuration" units="ms"> +<histogram name="ServiceWorkerCache.Scheduler.OperationDuration" units="ms" + expires_after="2018-11-28"> <obsolete> This histogram was deprecated in M72 in favor of ServiceWorkerCache.Scheduler.OperationDuration2. @@ -109638,7 +111615,8 @@ </summary> </histogram> -<histogram name="ServiceWorkerCache.Scheduler.QueueDuration" units="ms"> +<histogram name="ServiceWorkerCache.Scheduler.QueueDuration" units="ms" + expires_after="2018-11-28"> <obsolete> This histogram was deprecated in M72 in favor of ServiceWorkerCache.Scheduler.QueueDuration2. @@ -109666,7 +111644,8 @@ </summary> </histogram> -<histogram name="Servicification.Startup" enum="ServicificationStartupMode"> +<histogram name="Servicification.Startup" enum="ServicificationStartupMode" + expires_after="2019-02-26"> <obsolete> Deprecated 2019-02 in favour of Servicification.Startup2. The data was incompelete since it was only recorded the first time when the @@ -109962,7 +111941,8 @@ </summary> </histogram> -<histogram name="SessionRestore.command_size" units="bytes"> +<histogram name="SessionRestore.command_size" units="bytes" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -109971,7 +111951,8 @@ </summary> </histogram> -<histogram name="SessionRestore.FirstTabPainted" units="ms"> +<histogram name="SessionRestore.FirstTabPainted" units="ms" + expires_after="2014-10-29"> <obsolete> Deprecated 2014-10 in favor of SessionRestore.ForegroundTabFirstPaint and ultimately SessionRestore.ForegroundTabFirstPaint3. @@ -109989,7 +111970,8 @@ </summary> </histogram> -<histogram name="SessionRestore.ForegroundTabFirstPaint" units="ms"> +<histogram name="SessionRestore.ForegroundTabFirstPaint" units="ms" + expires_after="2015-07-31"> <obsolete> Deprecated 2015-03-13 in favor of SessionRestore.ForegroundTabFirstPaint2 and ultimately SessionRestore.ForegroundTabFirstPaint3. @@ -110002,7 +111984,8 @@ </summary> </histogram> -<histogram name="SessionRestore.ForegroundTabFirstPaint2" units="ms"> +<histogram name="SessionRestore.ForegroundTabFirstPaint2" units="ms" + expires_after="2015-06-19"> <obsolete> Deprecated 2015-05 in favor of SessionRestore.ForegroundTabFirstPaint3. </obsolete> @@ -110026,7 +112009,7 @@ </histogram> <histogram name="SessionRestore.FrameUniqueNameFromRequestedNameSize" - units="characters"> + units="characters" expires_after="2018-05-08"> <obsolete> Deprecated 2018-05-02. This data was used to confirm that the unique name generation change succeeded in reducing memory usage, and is no longer @@ -110041,7 +112024,8 @@ </summary> </histogram> -<histogram name="SessionRestore.FrameUniqueNameLength" units="bytes"> +<histogram name="SessionRestore.FrameUniqueNameLength" units="bytes" + expires_after="2017-08-09"> <obsolete> Deprecated 2017-08 due to unique name generation change. Please use SessionRestore.FrameUniqueNameFromRequestedNameSize and @@ -110057,7 +112041,7 @@ </histogram> <histogram name="SessionRestore.FrameUniqueNameOriginalRequestedNameSize" - units="characters"> + units="characters" expires_after="2018-05-08"> <obsolete> Deprecated 2018-05-02. This data was used to confirm that the unique name generation change succeeded in reducing memory usage, and is no longer @@ -110074,7 +112058,7 @@ </histogram> <histogram name="SessionRestore.FrameUniqueNameWithFramePathSize" - units="characters"> + units="characters" expires_after="2018-05-08"> <obsolete> Deprecated 2018-05-02. This data was used to confirm that the unique name generation change succeeded in reducing memory usage, and is no longer @@ -110092,7 +112076,7 @@ </histogram> <histogram name="SessionRestore.FrameUniqueNameWithFramePathSizePerComponent" - units="characters per depth"> + units="characters per depth" expires_after="2018-05-08"> <obsolete> Deprecated 2018-05-02. This data was used to confirm that the unique name generation change succeeded in reducing memory usage, and is no longer @@ -110109,14 +112093,16 @@ </summary> </histogram> -<histogram name="SessionRestore.last_session_file_size" units="KB"> +<histogram name="SessionRestore.last_session_file_size" units="KB" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> <summary>The size, in k, of the last session file on disk.</summary> </histogram> -<histogram name="SessionRestore.NavEntryCommittedLongPeriod"> +<histogram name="SessionRestore.NavEntryCommittedLongPeriod" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110126,7 +112112,8 @@ </summary> </histogram> -<histogram name="SessionRestore.NavEntryCommittedPeriod" units="ms"> +<histogram name="SessionRestore.NavEntryCommittedPeriod" units="ms" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110136,7 +112123,8 @@ </summary> </histogram> -<histogram name="SessionRestore.NavigationListPrunedLongPeriod"> +<histogram name="SessionRestore.NavigationListPrunedLongPeriod" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110146,7 +112134,8 @@ </summary> </histogram> -<histogram name="SessionRestore.NavigationListPrunedPeriod" units="ms"> +<histogram name="SessionRestore.NavigationListPrunedPeriod" units="ms" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110156,7 +112145,7 @@ </summary> </histogram> -<histogram name="SessionRestore.ParallelTabLoads"> +<histogram name="SessionRestore.ParallelTabLoads" expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110165,7 +112154,8 @@ </summary> </histogram> -<histogram name="SessionRestore.read_session_file_time" units="ms"> +<histogram name="SessionRestore.read_session_file_time" units="ms" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110215,7 +112205,7 @@ </summary> </histogram> -<histogram name="SessionRestore.SaveLongPeriod"> +<histogram name="SessionRestore.SaveLongPeriod" expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110225,7 +112215,8 @@ </summary> </histogram> -<histogram name="SessionRestore.SavePeriod" units="ms"> +<histogram name="SessionRestore.SavePeriod" units="ms" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110256,7 +112247,7 @@ </summary> </histogram> -<histogram name="SessionRestore.TabClosedLongPeriod"> +<histogram name="SessionRestore.TabClosedLongPeriod" expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110266,7 +112257,8 @@ </summary> </histogram> -<histogram name="SessionRestore.TabClosedPeriod" units="ms"> +<histogram name="SessionRestore.TabClosedPeriod" units="ms" + expires_after="2017-02-24"> <obsolete> Deprecated 2017-02 as not actionable. </obsolete> @@ -110423,7 +112415,8 @@ </summary> </histogram> -<histogram name="Settings.DefaultSearchProvider" enum="OmniboxSearchEngine"> +<histogram name="Settings.DefaultSearchProvider" enum="OmniboxSearchEngine" + expires_after="2013-08-20"> <obsolete> Deprecated in Chrome 30. Use Search.DefaultSearchProviderType instead. </obsolete> @@ -110481,7 +112474,8 @@ </summary> </histogram> -<histogram name="Settings.HomePageDomain" enum="OmniboxSearchEngine"> +<histogram name="Settings.HomePageDomain" enum="OmniboxSearchEngine" + expires_after="2013-08-20"> <obsolete> Deprecated in Chrome 30. Replaced by Settings.HomePageEngineType. </obsolete> @@ -110517,7 +112511,8 @@ </summary> </histogram> -<histogram name="Settings.HomePageIsNewTabPage" enum="Boolean"> +<histogram name="Settings.HomePageIsNewTabPage" enum="Boolean" + expires_after="2013-08-06"> <obsolete> Deprecated 08/05/2013. Replaced by Settings.GivenShowHomeButton_HomePageIsNewTabPage. @@ -110574,7 +112569,8 @@ </summary> </histogram> -<histogram name="Settings.JsonDataSizeKilobytes" units="KB"> +<histogram name="Settings.JsonDataSizeKilobytes" units="KB" + expires_after="2015-01-31"> <obsolete> Deprecated 02/2015. Replaced by Settings.JsonDataReadSizeKilobytes. </obsolete> @@ -110585,7 +112581,8 @@ </summary> </histogram> -<histogram name="Settings.JsonDataWriteCount" units="count"> +<histogram name="Settings.JsonDataWriteCount" units="count" + expires_after="2018-11-27"> <obsolete> Removed 11/2018 due to lack of use. </obsolete> @@ -110637,7 +112634,8 @@ </summary> </histogram> -<histogram name="Settings.MachineIdGenerationSuccess" enum="BooleanSuccess"> +<histogram name="Settings.MachineIdGenerationSuccess" enum="BooleanSuccess" + expires_after="2017-10-02"> <obsolete> Deprecated in Chrome 63, as we verified that machine id generation was not flaky. @@ -110649,7 +112647,8 @@ </summary> </histogram> -<histogram name="Settings.MigratedHashesFromLocalState" enum="BooleanMigrated"> +<histogram name="Settings.MigratedHashesFromLocalState" enum="BooleanMigrated" + expires_after="2016-07-14"> <obsolete> Deprecated in Chrome 54, as we stopped legacy migration of preferences. </obsolete> @@ -110807,7 +112806,8 @@ </summary> </histogram> -<histogram name="Settings.StartupPageDomains" enum="OmniboxSearchEngine"> +<histogram name="Settings.StartupPageDomains" enum="OmniboxSearchEngine" + expires_after="2013-08-20"> <obsolete> Deprecated in Chrome 30. Replaced by Settings.StartupPageEngineTypes. </obsolete> @@ -110869,7 +112869,8 @@ </summary> </histogram> -<histogram name="Settings.StartupURLsMigration" enum="StartupURLsMigration"> +<histogram name="Settings.StartupURLsMigration" enum="StartupURLsMigration" + expires_after="2015-12-03"> <obsolete> Deprecated 12/2015. </obsolete> @@ -110877,7 +112878,8 @@ <summary>The startup URLs pref migration steps.</summary> </histogram> -<histogram name="Settings.StartupURLsResetTime" units="ms"> +<histogram name="Settings.StartupURLsResetTime" units="ms" + expires_after="2015-12-03"> <obsolete> Deprecated 12/2015. </obsolete> @@ -110939,7 +112941,8 @@ </summary> </histogram> -<histogram name="Settings.TrackedPreferenceMigrated" enum="TrackedPreference"> +<histogram name="Settings.TrackedPreferenceMigrated" enum="TrackedPreference" + expires_after="2014-07-29"> <obsolete> Deprecated 2014-07. </obsolete> @@ -110979,7 +112982,7 @@ </histogram> <histogram name="Settings.TrackedPreferencesAlternateStoreVersion" - enum="PrefHashStoreVersion"> + enum="PrefHashStoreVersion" expires_after="2014-06-14"> <obsolete> Deprecated 2014-06. </obsolete> @@ -110992,7 +112995,7 @@ </histogram> <histogram name="Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom" - enum="PrefHashStoreVersion"> + enum="PrefHashStoreVersion" expires_after="2014-06-14"> <obsolete> Deprecated 2014-06. </obsolete> @@ -111006,7 +113009,7 @@ </histogram> <histogram name="Settings.TrackedPreferencesInitializedForUnloadedProfile" - enum="BooleanHit"> + enum="BooleanHit" expires_after="2014-02-17"> <obsolete> Deprecated 2014-02 in favor of Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom. @@ -111066,7 +113069,8 @@ </summary> </histogram> -<histogram name="Settings.ZoomLevelPreferencesMigrated" enum="BooleanMigrated"> +<histogram name="Settings.ZoomLevelPreferencesMigrated" enum="BooleanMigrated" + expires_after="2015-08-21"> <obsolete> Deprecated 2015-08-18. </obsolete> @@ -111121,7 +113125,7 @@ </histogram> <histogram name="SettingsResetPrompt.NumberOfExtensionsDisabled" - units="extensions"> + units="extensions" expires_after="2018-01-16"> <obsolete> Deprecated on 2018-01-16. </obsolete> @@ -111133,7 +113137,7 @@ </histogram> <histogram name="SettingsResetPrompt.NumberOfExtensionsToDisable" - units="extensions"> + units="extensions" expires_after="2018-01-16"> <obsolete> Deprecated on 2018-01-16. </obsolete> @@ -111193,7 +113197,8 @@ </summary> </histogram> -<histogram name="SettingsResetPrompt.TimeUntilDeclined" units="ms"> +<histogram name="SettingsResetPrompt.TimeUntilDeclined" units="ms" + expires_after="2017-04-10"> <obsolete> Deprecated in M59 in April 2017 and replaced by SettingsResetPrompt.TimeUntilCanceled and @@ -111484,7 +113489,8 @@ </summary> </histogram> -<histogram name="SharedMemory.TimeSpentMakingAnonymousMemory" units="ms"> +<histogram name="SharedMemory.TimeSpentMakingAnonymousMemory" units="ms" + expires_after="2015-06-03"> <obsolete> Deprecated 2015-06 because the Finch experiment SharedMemoryCreateStrategy has finished running. @@ -111496,7 +113502,8 @@ </summary> </histogram> -<histogram name="SharedWorker.RendererSurviveForWorkerTime" units="ms"> +<histogram name="SharedWorker.RendererSurviveForWorkerTime" units="ms" + expires_after="2017-08-24"> <obsolete> Replaced with BrowserRenderProcessHost.KeepAliveDuration as of Aug 2017. </obsolete> @@ -111549,7 +113556,7 @@ </summary> </histogram> -<histogram name="Shutdown.browser_exit.time"> +<histogram name="Shutdown.browser_exit.time" expires_after="2016-10-11"> <obsolete> Replaced by Shutdown.browser_exit.time2 to get more resolution into the tail of the distribution (10/2016). @@ -111575,7 +113582,7 @@ </summary> </histogram> -<histogram name="Shutdown.end_session.time"> +<histogram name="Shutdown.end_session.time" expires_after="2016-10-11"> <obsolete> Replaced by Shutdown.end_session.time2 to get more resolution into the tail of the distribution (10/2016). @@ -111623,7 +113630,8 @@ <summary>The type of the last shutdown.</summary> </histogram> -<histogram name="Shutdown.window_close.time" units="ms"> +<histogram name="Shutdown.window_close.time" units="ms" + expires_after="2016-10-11"> <obsolete> Replaced by Shutdown.window_close.time2 to get more resolution into the tail of the distribution (10/2016). @@ -111977,7 +113985,7 @@ </histogram> <histogram name="Signin.AndroidSigninPromoAction" - enum="AndroidSigninPromoAction"> + enum="AndroidSigninPromoAction" expires_after="2016-05-12"> <obsolete> Removed this histogram since we have had newly designed histograms Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and @@ -112055,7 +114063,8 @@ <summary>The total number of accounts in the cookie jar.</summary> </histogram> -<histogram name="Signin.DiceEnabledForProfile" enum="Boolean"> +<histogram name="Signin.DiceEnabledForProfile" enum="Boolean" + expires_after="2017-11-10"> <obsolete> Replaced by Signin.DiceMigrationStatus. Does not have any meaningful information. @@ -112316,7 +114325,7 @@ <summary>Tracks events related to the reauthentication Gaia page.</summary> </histogram> -<histogram name="Signin.Reconciler.AddedToChrome"> +<histogram name="Signin.Reconciler.AddedToChrome" expires_after="2014-09-25"> <obsolete> Deprecated 2014-09 because chrome no longer tries to reconcile from the cookie jar to the browser. @@ -112358,7 +114367,7 @@ </summary> </histogram> -<histogram name="Signin.Reconciler.Duration"> +<histogram name="Signin.Reconciler.Duration" expires_after="2019-04-05"> <obsolete> Deprecated in favor of Signin.Reconciler.Duration.UpTo3mins. </obsolete> @@ -112407,7 +114416,8 @@ </summary> </histogram> -<histogram name="Signin.RefreshTokenAnnotationRequest" enum="BooleanSuccess"> +<histogram name="Signin.RefreshTokenAnnotationRequest" enum="BooleanSuccess" + expires_after="2018-01-12"> <obsolete> Removed this histogram along with the code that was logging it. </obsolete> @@ -112543,7 +114553,8 @@ <summary>Logs the reason of each completed sign in.</summary> </histogram> -<histogram name="Signin.SigninSource" enum="SigninSource"> +<histogram name="Signin.SigninSource" enum="SigninSource" + expires_after="2015-12-07"> <obsolete> Removed this histogram since we have had newly designed histograms Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and @@ -112669,7 +114680,8 @@ </summary> </histogram> -<histogram name="Signin.XDevicePromo.BrowsingSessionDuration" units="minutes"> +<histogram name="Signin.XDevicePromo.BrowsingSessionDuration" units="minutes" + expires_after="2019-02-12"> <obsolete> Obsolete because the XDevicePromo never shipped. </obsolete> @@ -112683,7 +114695,7 @@ </histogram> <histogram name="Signin.XDevicePromo.BrowsingSessionDurationComputed" - units="minutes"> + units="minutes" expires_after="2019-02-12"> <obsolete> Obsolete because the XDevicePromo never shipped. </obsolete> @@ -112697,7 +114709,7 @@ </histogram> <histogram name="Signin.XDevicePromo.Eligibility" - enum="SigninXDevicePromoEligibility"> + enum="SigninXDevicePromoEligibility" expires_after="2019-02-12"> <obsolete> Obsolete because the XDevicePromo never shipped. </obsolete> @@ -112711,7 +114723,7 @@ </histogram> <histogram name="Signin.XDevicePromo.Initialized" - enum="SigninXDevicePromoInitialized"> + enum="SigninXDevicePromoInitialized" expires_after="2019-02-12"> <obsolete> Obsolete because the XDevicePromo never shipped. </obsolete> @@ -112848,7 +114860,7 @@ </histogram> <histogram base="true" name="SimpleCache.EntryCreatedAndStream2Omitted" - enum="SimpleCache.EntryCreatedAndStream2Omitted"> + enum="SimpleCache.EntryCreatedAndStream2Omitted" expires_after="2018-02-08"> <obsolete> Removed 2018-02. Not creating stream 2 on CreateEntry entries is indeed a good idea, since stream 2 writes are done on things opened with OpenEntry. @@ -112885,7 +114897,8 @@ </summary> </histogram> -<histogram base="true" name="SimpleCache.EntryOperationsPending"> +<histogram base="true" name="SimpleCache.EntryOperationsPending" + expires_after="2019-03-12"> <obsolete> Removed 2019-03. </obsolete> @@ -112926,7 +114939,8 @@ </summary> </histogram> -<histogram name="SimpleCache.Eviction.CacheSizeOnStart" units="bytes"> +<histogram name="SimpleCache.Eviction.CacheSizeOnStart" units="bytes" + expires_after="2015-09-22"> <obsolete> Deprecated 2013 in favour of SimpleCache.Eviction.CacheSizeOnStart2 </obsolete> @@ -112944,7 +114958,8 @@ <summary>The number of entries to be erased in an eviction.</summary> </histogram> -<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart" units="bytes"> +<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart" units="bytes" + expires_after="2015-09-22"> <obsolete> Deprecated 2013 in favour of SimpleCache.Eviction.MaxCacheSizeOnStart2 </obsolete> @@ -112967,7 +114982,8 @@ <summary>The result of an eviction.</summary> </histogram> -<histogram name="SimpleCache.Eviction.SizeOfEvicted" units="bytes"> +<histogram name="SimpleCache.Eviction.SizeOfEvicted" units="bytes" + expires_after="2015-09-22"> <obsolete> Deprecated 2013 in favour of SimpleCache.Eviction.SizeOfEvicted2 </obsolete> @@ -112980,7 +114996,8 @@ <summary>The amount of memory freed in an eviction.</summary> </histogram> -<histogram name="SimpleCache.Eviction.SizeWhenDone" units="bytes"> +<histogram name="SimpleCache.Eviction.SizeWhenDone" units="bytes" + expires_after="2015-09-22"> <obsolete> Deprecated 2013 in favour of SimpleCache.Eviction.SizeWhenDone2 </obsolete> @@ -113060,7 +115077,7 @@ </histogram> <histogram base="true" name="SimpleCache.HeaderSizeChange" - enum="SimpleCacheHeaderSizeChange"> + enum="SimpleCacheHeaderSizeChange" expires_after="2018-06-06"> <obsolete> Removed 2018-06-05 </obsolete> @@ -113073,7 +115090,7 @@ </histogram> <histogram base="true" name="SimpleCache.HeaderSizeDecreaseAbsolute" - units="bytes"> + units="bytes" expires_after="2018-06-06"> <obsolete> Removed 2018-06-05 </obsolete> @@ -113085,7 +115102,7 @@ </histogram> <histogram base="true" name="SimpleCache.HeaderSizeDecreasePercentage" - units="%"> + units="%" expires_after="2018-06-06"> <obsolete> Removed 2018-06-05 </obsolete> @@ -113097,7 +115114,7 @@ </histogram> <histogram base="true" name="SimpleCache.HeaderSizeIncreaseAbsolute" - units="bytes"> + units="bytes" expires_after="2018-06-06"> <obsolete> Removed 2018-06-05 </obsolete> @@ -113109,7 +115126,7 @@ </histogram> <histogram base="true" name="SimpleCache.HeaderSizeIncreasePercentage" - units="%"> + units="%" expires_after="2018-06-06"> <obsolete> Removed 2018-06-05 </obsolete> @@ -113193,7 +115210,8 @@ </summary> </histogram> -<histogram name="SimpleCache.IndexStale" enum="BooleanStale"> +<histogram name="SimpleCache.IndexStale" enum="BooleanStale" + expires_after="2015-09-22"> <obsolete> Deprecated 07/2013, and replaced by IndexFileStateOnLoad. </obsolete> @@ -113236,7 +115254,8 @@ </summary> </histogram> -<histogram name="SimpleCache.IndexWriteToDiskTime" units="ms"> +<histogram name="SimpleCache.IndexWriteToDiskTime" units="ms" + expires_after="2015-09-22"> <obsolete> Deprecated 2013-05 in favour of SimpleCache.SimpleIndexWriteToDiskTime.Background and @@ -113270,7 +115289,8 @@ </summary> </histogram> -<histogram name="SimpleCache.KeyMatchedOnOpen" enum="BooleanMatched"> +<histogram name="SimpleCache.KeyMatchedOnOpen" enum="BooleanMatched" + expires_after="2016-05-20"> <obsolete> Deprecated 2016-05 as the match checking was moved back into the entry itself, so this result is now reported in the SimpleCache.x.SyncOpenResult @@ -113282,7 +115302,8 @@ </summary> </histogram> -<histogram base="true" name="SimpleCache.LastClusterLossPercent" units="%"> +<histogram base="true" name="SimpleCache.LastClusterLossPercent" units="%" + expires_after="2018-01-23"> <obsolete> Deprecated 2018-01; not viewed as actionable. </obsolete> @@ -113294,7 +115315,8 @@ </summary> </histogram> -<histogram base="true" name="SimpleCache.LastClusterSize" units="bytes"> +<histogram base="true" name="SimpleCache.LastClusterSize" units="bytes" + expires_after="2018-01-23"> <obsolete> Deprecated 2018-01; not viewed as actionable. </obsolete> @@ -113385,7 +115407,7 @@ </histogram> <histogram base="true" name="SimpleCache.ReadIsParallelizable" - enum="SimpleCacheReadParallelizable"> + enum="SimpleCacheReadParallelizable" expires_after="2018-07-17"> <obsolete> Removed 2018-07-02. See https://crrev.com/c/1122706 </obsolete> @@ -113507,7 +115529,8 @@ </summary> </histogram> -<histogram base="true" name="SimpleCache.SyncOpenDidPrefetch" enum="Boolean"> +<histogram base="true" name="SimpleCache.SyncOpenDidPrefetch" enum="Boolean" + expires_after="2019-01-04"> <obsolete> Replaced Dec, 2018 by SimpleCache.SyncOpenPrefetchMode. The new histogram is an enumeration that can distinguish between full file prefetching from @@ -113564,7 +115587,7 @@ </histogram> <histogram base="true" name="SimpleCache.WriteDependencyType" - enum="SimpleCacheWriteDependencyType"> + enum="SimpleCacheWriteDependencyType" expires_after="2018-07-17"> <obsolete> Removed 2018-07-02. See https://crrev.com/c/1122706 </obsolete> @@ -113575,7 +115598,8 @@ </summary> </histogram> -<histogram name="SimpleCache.WriteResult" enum="SimpleCacheWriteResult"> +<histogram name="SimpleCache.WriteResult" enum="SimpleCacheWriteResult" + expires_after="2013-09-02"> <obsolete> Replaced 2013/09/03 by WriteResult2, which adds "fast empty return", which previously showed up as "success". @@ -113671,7 +115695,8 @@ </summary> </histogram> -<histogram name="SiteEngagementService.EngagementPercentageForHTTPS"> +<histogram name="SiteEngagementService.EngagementPercentageForHTTPS" + expires_after="2017-04-18"> <obsolete> Removed in M60. See crbug.com/712493. </obsolete> @@ -113696,7 +115721,8 @@ </summary> </histogram> -<histogram name="SiteEngagementService.EngagementScore.HTTP"> +<histogram name="SiteEngagementService.EngagementScore.HTTP" + expires_after="2017-04-18"> <obsolete> Removed in M60. See crbug.com/712493. </obsolete> @@ -113711,7 +115737,8 @@ </summary> </histogram> -<histogram name="SiteEngagementService.EngagementScore.HTTPS"> +<histogram name="SiteEngagementService.EngagementScore.HTTPS" + expires_after="2017-04-18"> <obsolete> Removed in M60. See crbug.com/712493. </obsolete> @@ -113853,7 +115880,7 @@ </summary> </histogram> -<histogram name="SiteIsolatedCodeCache.Behaviour"> +<histogram name="SiteIsolatedCodeCache.Behaviour" expires_after="2018-10-10"> <obsolete> Split this histogram into SiteIsolatedCodeCache.JS.Behaviour and SiteIsolatedCodeCache.WASM.Behaviour to collect statistics for JS and WASM @@ -114231,7 +116258,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.DataLength" units="byte"> +<histogram name="SiteIsolation.XSD.DataLength" units="byte" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114243,7 +116271,7 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.HTML.Blocked"> +<histogram name="SiteIsolation.XSD.HTML.Blocked" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114255,7 +116283,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114268,7 +116297,7 @@ </histogram> <histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2 in December 2015. @@ -114284,7 +116313,7 @@ </histogram> <histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114298,7 +116327,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114312,7 +116342,7 @@ </histogram> <histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2 in December 2015. @@ -114328,7 +116358,7 @@ </histogram> <histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114342,7 +116372,7 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.HTML.NotBlocked"> +<histogram name="SiteIsolation.XSD.HTML.NotBlocked" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114354,7 +116384,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.HTML.NotBlocked.MaybeJS"> +<histogram name="SiteIsolation.XSD.HTML.NotBlocked.MaybeJS" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114366,7 +116397,7 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.JSON.Blocked"> +<histogram name="SiteIsolation.XSD.JSON.Blocked" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114378,7 +116409,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.JSON.Blocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.JSON.Blocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114391,7 +116423,7 @@ </histogram> <histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2 in December 2015. @@ -114407,7 +116439,7 @@ </histogram> <histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114421,7 +116453,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114435,7 +116468,7 @@ </histogram> <histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2 in December 2015. @@ -114451,7 +116484,7 @@ </histogram> <histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114465,7 +116498,7 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.JSON.NotBlocked"> +<histogram name="SiteIsolation.XSD.JSON.NotBlocked" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114477,7 +116510,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.JSON.NotBlocked.MaybeJS"> +<histogram name="SiteIsolation.XSD.JSON.NotBlocked.MaybeJS" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114489,7 +116523,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.MimeType" enum="SiteIsolationMimeType"> +<histogram name="SiteIsolation.XSD.MimeType" enum="SiteIsolationMimeType" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114516,7 +116551,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked"> +<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114528,7 +116564,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114541,7 +116578,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2 in December 2015. @@ -114557,7 +116594,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114571,7 +116608,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked"> +<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114583,7 +116621,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114597,7 +116636,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2 in December 2015. @@ -114613,7 +116652,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114642,7 +116681,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2 in December 2015. @@ -114658,7 +116697,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114672,7 +116711,7 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.NotBlocked"> +<histogram name="SiteIsolation.XSD.Plain.NotBlocked" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114684,7 +116723,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.NotBlocked.MaybeJS"> +<histogram name="SiteIsolation.XSD.Plain.NotBlocked.MaybeJS" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114696,7 +116736,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.XML.Blocked"> +<histogram name="SiteIsolation.XSD.Plain.XML.Blocked" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114708,7 +116749,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114722,7 +116764,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2 in December 2015. @@ -114738,7 +116780,7 @@ </histogram> <histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114752,7 +116794,7 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.XML.Blocked"> +<histogram name="SiteIsolation.XSD.XML.Blocked" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114764,7 +116806,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.XML.Blocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.XML.Blocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114777,7 +116820,7 @@ </histogram> <histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2 in December 2015. @@ -114793,7 +116836,7 @@ </histogram> <histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114807,7 +116850,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.NonRenderableStatusCode"> +<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.NonRenderableStatusCode" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114821,7 +116865,7 @@ </histogram> <histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode" - enum="ContentResourceType"> + enum="ContentResourceType" expires_after="2015-12-22"> <obsolete> Superseded by SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2 in December 2015. @@ -114837,7 +116881,7 @@ </histogram> <histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2" - enum="ContentResourceType2"> + enum="ContentResourceType2" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114851,7 +116895,7 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.XML.NotBlocked"> +<histogram name="SiteIsolation.XSD.XML.NotBlocked" expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -114863,7 +116907,8 @@ </summary> </histogram> -<histogram name="SiteIsolation.XSD.XML.NotBlocked.MaybeJS"> +<histogram name="SiteIsolation.XSD.XML.NotBlocked.MaybeJS" + expires_after="2018-03-21"> <obsolete> Removed in March 2018; in M67+, browser-process CORB policy is enabled. </obsolete> @@ -115125,7 +117170,7 @@ </histogram> <histogram name="SoftwareReporter.Cleaner.DownloadHttpResponseCode" - enum="HttpResponseCode"> + enum="HttpResponseCode" expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. Replaced with SoftwareReporter.Cleaner.DownloadStatusErrorCode. @@ -115172,7 +117217,7 @@ </histogram> <histogram name="SoftwareReporter.Cleaner.NumberOfDownloadAttempts" - units="counts"> + units="counts" expires_after="2018-01-17"> <obsolete> Deprecated on 2018-01-15. </obsolete> @@ -115419,7 +117464,8 @@ </summary> </histogram> -<histogram name="SoftwareReporter.PromptShown" enum="Boolean"> +<histogram name="SoftwareReporter.PromptShown" enum="Boolean" + expires_after="2017-08-08"> <obsolete> Replaced 2017-08-01 with SoftwareReporter.PromptShownWithType. </obsolete> @@ -115440,7 +117486,8 @@ </summary> </histogram> -<histogram name="SoftwareReporter.PromptUsage" enum="SRTPromptUsage"> +<histogram name="SoftwareReporter.PromptUsage" enum="SRTPromptUsage" + expires_after="2017-11-02"> <obsolete> Deprecated as of 2017-11-01. Replaced with SoftwareReporter.PromptDialogResponse. @@ -115608,7 +117655,8 @@ </summary> </histogram> -<histogram name="Sqlite.AppCache.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.AppCache.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.AppCache in M-27. </obsolete> @@ -115616,7 +117664,7 @@ <summary>Error codes returned by sqlite for the appcache db.</summary> </histogram> -<histogram name="Sqlite.AutoCommitTime" units="ms"> +<histogram name="Sqlite.AutoCommitTime" units="ms" expires_after="2019-02-26"> <obsolete> Removed in M74. </obsolete> @@ -115632,7 +117680,7 @@ <summary>Error which prevented database close.</summary> </histogram> -<histogram name="Sqlite.CommitTime" units="ms"> +<histogram name="Sqlite.CommitTime" units="ms" expires_after="2019-02-26"> <obsolete> Removed in M74. </obsolete> @@ -115640,7 +117688,8 @@ <summary>Record time spent in explicit COMMIT statements.</summary> </histogram> -<histogram name="Sqlite.Cookie.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.Cookie.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.Cookie in M-27. </obsolete> @@ -115648,7 +117697,8 @@ <summary>Error codes returned by sqlite the cookie db.</summary> </histogram> -<histogram name="Sqlite.DatabaseTracker.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.DatabaseTracker.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.DatabaseTracker in M-27. </obsolete> @@ -115664,7 +117714,8 @@ </summary> </histogram> -<histogram name="Sqlite.DomainBoundCerts.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.DomainBoundCerts.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.DomainBoundCerts in M-27. </obsolete> @@ -115674,7 +117725,8 @@ </summary> </histogram> -<histogram name="Sqlite.DomStorageDatabase.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.DomStorageDatabase.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.DomStorageDatabase in M-27. </obsolete> @@ -115687,7 +117739,8 @@ <summary>SQLite extended error codes.</summary> </histogram> -<histogram name="Sqlite.Error.IOERR" enum="SqliteIOERRCode"> +<histogram name="Sqlite.Error.IOERR" enum="SqliteIOERRCode" + expires_after="2013-05-15"> <obsolete> Replaced 5/14/2013 by expanded Sqlite.Error histogram. </obsolete> @@ -115695,7 +117748,8 @@ <summary>SQLite extended SQLITE_IOERR codes for all databases.</summary> </histogram> -<histogram name="Sqlite.History.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.History.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.History in M-27. </obsolete> @@ -115753,7 +117807,7 @@ <summary>Error from first read of the database.</summary> </histogram> -<histogram name="Sqlite.QueryTime" units="ms"> +<histogram name="Sqlite.QueryTime" units="ms" expires_after="2019-02-26"> <obsolete> Removed in M74. </obsolete> @@ -115761,7 +117815,8 @@ <summary>Record times for all statements run against the database.</summary> </histogram> -<histogram name="Sqlite.Quota.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.Quota.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.Quota in M-27. </obsolete> @@ -115821,7 +117876,8 @@ <summary>Size in kilobytes of pre-existing database at startup.</summary> </histogram> -<histogram name="Sqlite.Stats" enum="SqliteStatsEnum"> +<histogram name="Sqlite.Stats" enum="SqliteStatsEnum" + expires_after="2019-03-01"> <obsolete> Deprecated in favor of Sqlite.Stats2 in M74. </obsolete> @@ -115839,7 +117895,8 @@ </summary> </histogram> -<histogram name="Sqlite.Text.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.Text.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.Text in M-27. </obsolete> @@ -115847,7 +117904,8 @@ <summary>Error codes returned by sqlite the full text db.</summary> </histogram> -<histogram name="Sqlite.Thumbnail.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.Thumbnail.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.Thumbnail in M-27. </obsolete> @@ -115855,7 +117913,7 @@ <summary>Error codes returned by sqlite for the thumbnail db.</summary> </histogram> -<histogram name="Sqlite.UpdateTime" units="ms"> +<histogram name="Sqlite.UpdateTime" units="ms" expires_after="2019-02-26"> <obsolete> Removed in M74. </obsolete> @@ -115871,7 +117929,7 @@ <summary>Version of pre-existing database at startup.</summary> </histogram> -<histogram name="Sqlite.Vfs" units="bytes"> +<histogram name="Sqlite.Vfs" units="bytes" expires_after="2018-02-09"> <obsolete> Removed 2018/02/06. </obsolete> @@ -115881,7 +117939,8 @@ </summary> </histogram> -<histogram name="Sqlite.Vfs_Events" enum="SqliteVfsEvents"> +<histogram name="Sqlite.Vfs_Events" enum="SqliteVfsEvents" + expires_after="2018-02-09"> <obsolete> Removed 2018/02/06. </obsolete> @@ -115891,7 +117950,8 @@ </summary> </histogram> -<histogram name="Sqlite.Web.Error" enum="SqliteErrorCode"> +<histogram name="Sqlite.Web.Error" enum="SqliteErrorCode" + expires_after="2013-11-19"> <obsolete> Moved to Sqlite.Error.Web in M-27. </obsolete> @@ -115900,7 +117960,7 @@ </histogram> <histogram name="sri.resource_integrity_mismatch_event" - enum="SRIResourceIntegrityMismatchEvent"> + enum="SRIResourceIntegrityMismatchEvent" expires_after="2017-07-14"> <obsolete> Removed 07/2017. Reference: crbug.com/708041 </obsolete> @@ -115941,7 +118001,8 @@ </summary> </histogram> -<histogram name="SSL.ExpectCTReportFailure" enum="NetErrorCodes"> +<histogram name="SSL.ExpectCTReportFailure" enum="NetErrorCodes" + expires_after="2016-07-20"> <obsolete> Deprecated as of 07/2016. Replaced with SSL.ExpectCTReportFailure2. </obsolete> @@ -115984,7 +118045,8 @@ </summary> </histogram> -<histogram name="SSL.MarkHttpAsStatus" enum="MarkHttpAsStatus"> +<histogram name="SSL.MarkHttpAsStatus" enum="MarkHttpAsStatus" + expires_after="2017-12-27"> <obsolete> Deprecated December 2017 (M65). This information in this histogram can be found in LoginCustomFlags (for users who have set a flag) or by filtering to @@ -116002,7 +118064,8 @@ </summary> </histogram> -<histogram name="SSL.MarkNonSecureAsStatus" enum="MarkNonSecureAsStatus"> +<histogram name="SSL.MarkNonSecureAsStatus" enum="MarkNonSecureAsStatus" + expires_after="2016-09-20"> <obsolete> Deprecated 09/2016 and replaced with SSL.MarkHttpAsStatus. </obsolete> @@ -116041,7 +118104,8 @@ </summary> </histogram> -<histogram name="Stability.Android.PendingMinidumpsOnStartup" units="minidumps"> +<histogram name="Stability.Android.PendingMinidumpsOnStartup" units="minidumps" + expires_after="2017-05-16"> <obsolete> Deprecated in M60. Roughly 50% of Chrome startups that had *any* pending minidumps had at least one pending minidump without any logcat output. About @@ -116058,7 +118122,7 @@ </histogram> <histogram name="Stability.Android.PendingMinidumpsOnStartup.SansLogcat" - units="minidumps"> + units="minidumps" expires_after="2017-05-16"> <obsolete> Deprecated in M60. Roughly 50% of Chrome startups that had *any* pending minidumps had at least one pending minidump without any logcat output. About @@ -116594,7 +118658,7 @@ </histogram> <histogram name="Startup.Android.Experimental.Cold.TimeToFirstContentfulPaint" - units="ms"> + units="ms" expires_after="2018-05-24"> <obsolete> This metric was deprecated in M68 in favour of "Startup.Android.Cold.TimeToFirstContentfulPaint.Tabbed". It has @@ -116615,7 +118679,7 @@ </histogram> <histogram name="Startup.Android.Experimental.Cold.TimeToFirstNavigationCommit" - units="ms"> + units="ms" expires_after="2018-05-24"> <obsolete> This metric was deprecated in M68 in favour of "Startup.Android.Cold.TimeToFirstNavigationCommit.Tabbed". It has @@ -116636,7 +118700,8 @@ </summary> </histogram> -<histogram name="Startup.AppListFirstPaintColdStart" units="ms"> +<histogram name="Startup.AppListFirstPaintColdStart" units="ms" + expires_after="2018-03-20"> <obsolete> Deprecated 03/2018 with Mash AppList refactoring. </obsolete> @@ -116648,7 +118713,8 @@ </summary> </histogram> -<histogram name="Startup.AppListFirstPaintWarmStart" units="ms"> +<histogram name="Startup.AppListFirstPaintWarmStart" units="ms" + expires_after="2018-03-20"> <obsolete> Deprecated 03/2018 with Mash AppList refactoring. </obsolete> @@ -116723,7 +118789,7 @@ </histogram> <histogram name="Startup.BrowserMessageLoopStart.To.MainNavigationStart" - units="ms"> + units="ms" expires_after="2018-02-20"> <obsolete> Removed 2/2018, as MessageLoopStart is after MainNavigationStart with browser-side navigation. @@ -116758,7 +118824,7 @@ </histogram> <histogram name="Startup.BrowserMessageLoopStartHardFaultCount.FirstRun" - units="faults"> + units="faults" expires_after="2016-01-26"> <obsolete> Removed 1/2016. </obsolete> @@ -116771,7 +118837,7 @@ </histogram> <histogram name="Startup.BrowserMessageLoopStartHardFaultCount.Success" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2015-12-10"> <obsolete> Deprecated 12/2015. No longer tracked because values collected on stable show that the function pretty much never fails (succeeds 99.9996% of the @@ -116794,7 +118860,8 @@ </summary> </histogram> -<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry" units="ms"> +<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry" units="ms" + expires_after="2016-12-17"> <obsolete> Deprecated 12/2016. crbug.com/634408 </obsolete> @@ -116810,7 +118877,7 @@ </histogram> <histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun" - units="ms"> + units="ms" expires_after="2016-12-17"> <obsolete> Deprecated 12/2016. crbug.com/634408 </obsolete> @@ -116835,7 +118902,8 @@ </summary> </histogram> -<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2" units="ms"> +<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2" units="ms" + expires_after="2018-01-08"> <obsolete> Deprecated 2018-01 in favor of Startup.BrowserMessageLoopStartTimeFromMainEntry3 which does not involve a @@ -116899,7 +118967,8 @@ </summary> </histogram> -<histogram name="Startup.ChromeCast.TimeToDisplayVideo" units="ms"> +<histogram name="Startup.ChromeCast.TimeToDisplayVideo" units="ms" + expires_after="2015-07-09"> <obsolete> Deprecated 7/2015. To be replaced with Cast events. </obsolete> @@ -116992,7 +119061,8 @@ </summary> </histogram> -<histogram name="Startup.FirstCommitNavigationTime" units="ms"> +<histogram name="Startup.FirstCommitNavigationTime" units="ms" + expires_after="2016-08-08"> <obsolete> Replaced by Startup.FirstCommitNavigationTime2 </obsolete> @@ -117004,7 +119074,8 @@ </summary> </histogram> -<histogram name="Startup.FirstCommitNavigationTime2" units="ms"> +<histogram name="Startup.FirstCommitNavigationTime2" units="ms" + expires_after="2017-06-28"> <obsolete> Replaced with Startup.FirstCommitNavigationTime3 on 6/2017 </obsolete> @@ -117017,7 +119088,8 @@ </summary> </histogram> -<histogram name="Startup.FirstCommitNavigationTime3" units="ms"> +<histogram name="Startup.FirstCommitNavigationTime3" units="ms" + expires_after="2017-12-05"> <obsolete> Replaced with Startup.Android.Experimental.Cold.TimeToFirstNavigationCommit on 11/2017 @@ -117040,7 +119112,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.MainFrameLoad" units="ms"> +<histogram name="Startup.FirstWebContents.MainFrameLoad" units="ms" + expires_after="2016-03-01"> <obsolete> Deprecated with 3/2016 with M48. </obsolete> @@ -117085,7 +119158,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.NonEmptyPaint" units="ms"> +<histogram name="Startup.FirstWebContents.NonEmptyPaint" units="ms" + expires_after="2016-03-01"> <obsolete> Deprecated with 3/2016 with M48. </obsolete> @@ -117124,7 +119198,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.UINotResponsive" units="ms"> +<histogram name="Startup.FirstWebContents.UINotResponsive" units="ms" + expires_after="2015-10-30"> <obsolete> Deprecated 10/2015. </obsolete> @@ -117137,7 +119212,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.UINotResponsive_10sec" units="ms"> +<histogram name="Startup.FirstWebContents.UINotResponsive_10sec" units="ms" + expires_after="2015-10-30"> <obsolete> Deprecated 10/2015. </obsolete> @@ -117150,7 +119226,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.UINotResponsive_1sec" units="ms"> +<histogram name="Startup.FirstWebContents.UINotResponsive_1sec" units="ms" + expires_after="2015-10-30"> <obsolete> Deprecated 10/2015. </obsolete> @@ -117163,7 +119240,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.UIResponsive" units="ms"> +<histogram name="Startup.FirstWebContents.UIResponsive" units="ms" + expires_after="2015-10-30"> <obsolete> Deprecated 10/2015. </obsolete> @@ -117176,7 +119254,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.UIResponsive_10sec" units="ms"> +<histogram name="Startup.FirstWebContents.UIResponsive_10sec" units="ms" + expires_after="2015-10-30"> <obsolete> Deprecated 10/2015. </obsolete> @@ -117189,7 +119268,8 @@ </summary> </histogram> -<histogram name="Startup.FirstWebContents.UIResponsive_1sec" units="ms"> +<histogram name="Startup.FirstWebContents.UIResponsive_1sec" units="ms" + expires_after="2015-10-30"> <obsolete> Deprecated 10/2015. </obsolete> @@ -117202,7 +119282,8 @@ </summary> </histogram> -<histogram name="Startup.Fling.TimeToDisplayVideo" units="ms"> +<histogram name="Startup.Fling.TimeToDisplayVideo" units="ms" + expires_after="2015-07-09"> <obsolete> Deprecated 7/2015. To be replaced with Cast events. </obsolete> @@ -117213,7 +119294,7 @@ </summary> </histogram> -<histogram name="Startup.IsResume"> +<histogram name="Startup.IsResume" expires_after="2013-07-08"> <obsolete> Deprecated 12/2011. Merged into MobileSessionStartType. </obsolete> @@ -117221,7 +119302,7 @@ <summary>Whether a startup is a resume (vs a cold start).</summary> </histogram> -<histogram name="Startup.LoadTime.ExeMainToDllMain"> +<histogram name="Startup.LoadTime.ExeMainToDllMain" expires_after="2016-12-17"> <obsolete> Deprecated 12/2016. crbug.com/634408 </obsolete> @@ -117243,7 +119324,8 @@ </summary> </histogram> -<histogram name="Startup.LoadTime.ProcessCreateToDllMain"> +<histogram name="Startup.LoadTime.ProcessCreateToDllMain" + expires_after="2016-12-17"> <obsolete> Deprecated 12/2016. crbug.com/634408 </obsolete> @@ -117263,7 +119345,8 @@ <summary>Time from the process creation to chrome.dll's main().</summary> </histogram> -<histogram name="Startup.LoadTime.ProcessCreateToExeMain"> +<histogram name="Startup.LoadTime.ProcessCreateToExeMain" + expires_after="2016-12-17"> <obsolete> Deprecated 12/2016. crbug.com/634408 </obsolete> @@ -117399,7 +119482,8 @@ </summary> </histogram> -<histogram name="Startup.PreMainMessageLoopRunImplTime" units="ms"> +<histogram name="Startup.PreMainMessageLoopRunImplTime" units="ms" + expires_after="2015-02-17"> <obsolete> Deprecated as of 2/2015. </obsolete> @@ -117440,7 +119524,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupBookmarksLoad" units="ms"> +<histogram name="Startup.SlowStartupBookmarksLoad" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117451,7 +119536,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupExtensionServiceInitAfterImport" units="ms"> +<histogram name="Startup.SlowStartupExtensionServiceInitAfterImport" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117463,7 +119549,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupFinalProfileInit" units="ms"> +<histogram name="Startup.SlowStartupFinalProfileInit" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117475,7 +119562,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupNSSInit" units="ms"> +<histogram name="Startup.SlowStartupNSSInit" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117487,7 +119575,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupPreferenceLoading" units="ms"> +<histogram name="Startup.SlowStartupPreferenceLoading" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117498,7 +119587,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupProfileIODataInit" units="ms"> +<histogram name="Startup.SlowStartupProfileIODataInit" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117510,7 +119600,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupSafeBrowsingGetDatabase" units="ms"> +<histogram name="Startup.SlowStartupSafeBrowsingGetDatabase" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117522,7 +119613,8 @@ </summary> </histogram> -<histogram name="Startup.SlowStartupSafeBrowsingServiceInitialize" units="ms"> +<histogram name="Startup.SlowStartupSafeBrowsingServiceInitialize" units="ms" + expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117535,7 +119627,7 @@ </histogram> <histogram name="Startup.SlowStartupSessionServiceCreateTabsAndWindows" - units="ms"> + units="ms" expires_after="2015-06-09"> <obsolete> Deprecated 06/2015. </obsolete> @@ -117548,7 +119640,7 @@ </histogram> <histogram name="Startup.StartupBrowserCreator_ProcessCmdLineImplTime" - units="ms"> + units="ms" expires_after="2015-02-24"> <obsolete> Deprecated 02/2015. Startup.StartupBrowserCreator_Start is more useful. </obsolete> @@ -117615,7 +119707,7 @@ </summary> </histogram> -<histogram name="StartupTimeBomb.Alarm" units="ms"> +<histogram name="StartupTimeBomb.Alarm" units="ms" expires_after="2014-10-23"> <obsolete> Deprecated as of 10/2014. </obsolete> @@ -117686,7 +119778,8 @@ </summary> </histogram> -<histogram name="Storage.Blob.ExceededMemory" enum="Boolean"> +<histogram name="Storage.Blob.ExceededMemory" enum="Boolean" + expires_after="2016-03-30"> <obsolete> Deprecated as of 3/2016. Use Storage.Blob.Broken to see the fraction of blobs that are broken, and Storage.Blob.BrokenReason for the number of @@ -117758,7 +119851,8 @@ </summary> </histogram> -<histogram name="Storage.Blob.ItemCount" units="Blob Items"> +<histogram name="Storage.Blob.ItemCount" units="Blob Items" + expires_after="2018-12-13"> <obsolete> Deprecated as of 12/18. Metric wasn't used for anything and wasn't useful. </obsolete> @@ -117769,7 +119863,8 @@ </summary> </histogram> -<histogram name="Storage.Blob.MaxDiskSpace" units="MB"> +<histogram name="Storage.Blob.MaxDiskSpace" units="MB" + expires_after="2018-12-13"> <obsolete> Deprecated as of 12/18. Use Storage.Blob.MaxDiskSpace2 instead. </obsolete> @@ -117910,7 +120005,7 @@ </summary> </histogram> -<histogram name="Storage.BlobItemSize" units="KB"> +<histogram name="Storage.BlobItemSize" units="KB" expires_after="2018-12-13"> <obsolete> Deprecated on 12/18. Metric wasn't used for anything and wasn't useful. </obsolete> @@ -117920,7 +120015,8 @@ </summary> </histogram> -<histogram name="Storage.BlobItemSize.BlobSlice" units="KB"> +<histogram name="Storage.BlobItemSize.BlobSlice" units="KB" + expires_after="2018-12-13"> <obsolete> Deprecated on 12/18. Metric wasn't used for anything and wasn't useful. </obsolete> @@ -117942,7 +120038,8 @@ </summary> </histogram> -<histogram name="Storage.BlobItemSize.FileSystem.Unknown" enum="BooleanUnknown"> +<histogram name="Storage.BlobItemSize.FileSystem.Unknown" enum="BooleanUnknown" + expires_after="2018-12-13"> <obsolete> Deprecated on 12/18. Metric was always false. </obsolete> @@ -118056,7 +120153,8 @@ </summary> </histogram> -<histogram name="Style.AuthorStyleSheet.ParseTime" units="microseconds"> +<histogram name="Style.AuthorStyleSheet.ParseTime" units="microseconds" + expires_after="2019-02-13"> <obsolete> Deprecated 2019-02, no longer used. </obsolete> @@ -118080,7 +120178,8 @@ </summary> </histogram> -<histogram name="Style.LazyUsage.Percent" enum="LazyCSSParseUsage"> +<histogram name="Style.LazyUsage.Percent" enum="LazyCSSParseUsage" + expires_after="2018-07-25"> <obsolete> Deprecated 07/2018, no longer used. </obsolete> @@ -118108,7 +120207,7 @@ </summary> </histogram> -<histogram name="Style.TotalLazyRules" units="count"> +<histogram name="Style.TotalLazyRules" units="count" expires_after="2018-07-25"> <obsolete> Deprecated 07/2018, no longer used. </obsolete> @@ -118119,7 +120218,8 @@ </summary> </histogram> -<histogram name="Style.TotalLazyRules.FullUsage" units="count"> +<histogram name="Style.TotalLazyRules.FullUsage" units="count" + expires_after="2018-07-25"> <obsolete> Deprecated 07/2018, no longer used. </obsolete> @@ -118130,7 +120230,8 @@ </summary> </histogram> -<histogram name="Style.UpdateTime" units="microseconds"> +<histogram name="Style.UpdateTime" units="microseconds" + expires_after="2018-08-01"> <obsolete> Deprecated 07/2018, replaced by Style.RecalcTime and Style.RebuildLayoutTreeTime. @@ -118147,7 +120248,8 @@ </summary> </histogram> -<histogram name="SubresourceFilter.Actions" enum="SubresourceFilterActions"> +<histogram name="SubresourceFilter.Actions" enum="SubresourceFilterActions" + expires_after="2018-07-13"> <obsolete> Deprecated June 2018 in favor of SubresourceFilter.Actions2 </obsolete> @@ -118201,7 +120303,8 @@ </summary> </histogram> -<histogram name="SubresourceFilter.AdDelay.IsolatedInfo" enum="AdIsolatedInfo"> +<histogram name="SubresourceFilter.AdDelay.IsolatedInfo" enum="AdIsolatedInfo" + expires_after="2018-07-16"> <obsolete> Deprecated July 2018. Replaced with Ads.Features.AdResourceIsIsolated. </obsolete> @@ -118213,7 +120316,8 @@ </summary> </histogram> -<histogram name="SubresourceFilter.AdDelay.SecureInfo" enum="AdSecureInfo"> +<histogram name="SubresourceFilter.AdDelay.SecureInfo" enum="AdSecureInfo" + expires_after="2018-07-16"> <obsolete> Deprecated July 2018. Replaced with Ads.Features.ResourceIsSecure. </obsolete> @@ -118435,7 +120539,7 @@ </histogram> <histogram name="SubresourceFilter.IndexRuleset.Verify.WallDuration" - units="microseconds"> + units="microseconds" expires_after="2017-11-07"> <obsolete> Deprecated in favor of the Verify2 metric </obsolete> @@ -118536,7 +120640,8 @@ </summary> </histogram> -<histogram name="SubresourceFilter.PageLoad.BlockedPopups" units="popups"> +<histogram name="SubresourceFilter.PageLoad.BlockedPopups" units="popups" + expires_after="2017-10-20"> <obsolete> Metric is broken and will be replaced by ContentSettings.Popups.StringBlocked.NumBlocked. This only logged values for @@ -118553,7 +120658,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.FinalURLMatch" - enum="BooleanMatched"> + enum="BooleanMatched" expires_after="2017-08-25"> <obsolete> Deprecated in favor of SubresourceFilter.PageLoad.ActivationList. </obsolete> @@ -118566,7 +120671,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.ForcedActivation.DisallowedLoad" - enum="Boolean"> + enum="Boolean" expires_after="2018-05-31"> <obsolete> Deprecated May 2018 in favor of SubresourceFilter.PageLoad.ActivationDecision @@ -118621,7 +120726,8 @@ </summary> </histogram> -<histogram name="SubresourceFilter.PageLoad.RedirectChainLength" units="urls"> +<histogram name="SubresourceFilter.PageLoad.RedirectChainLength" units="urls" + expires_after="2018-05-24"> <obsolete> Deprecated May 2018 </obsolete> @@ -118633,7 +120739,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.RedirectChainMatchPattern" - enum="SubresourceFilterMatchPattern"> + enum="SubresourceFilterMatchPattern" expires_after="2017-05-16"> <obsolete> Obsolete as of April 2017, since the don't have correct data to record anymore. @@ -118705,7 +120811,8 @@ </summary> </histogram> -<histogram name="SubresourceFilter.Prompt.NumReloads" enum="BooleanRequested"> +<histogram name="SubresourceFilter.Prompt.NumReloads" enum="BooleanRequested" + expires_after="2018-07-13"> <obsolete> Deprecated in favor of the whitelisted bucket in SubresourceFilter.Actions2 </obsolete> @@ -118716,7 +120823,8 @@ </summary> </histogram> -<histogram name="SubresourceFilter.Prompt.NumVisibility" enum="BooleanVisible"> +<histogram name="SubresourceFilter.Prompt.NumVisibility" enum="BooleanVisible" + expires_after="2017-03-30"> <obsolete> Deprecated in favor of SubresourceFilter.Action </obsolete> @@ -118741,7 +120849,7 @@ </histogram> <histogram name="SubresourceFilter.SafeBrowsing.CheckDispatchTime" - units="microseconds"> + units="microseconds" expires_after="2018-05-15"> <obsolete> Deprecated in May 2018 in favor of the more general SB2.RemoteCall.CheckDispatchTime. @@ -118869,7 +120977,7 @@ </histogram> <histogram name="SupervisedUserContentProvider.ChromeNotStartedRequestTime" - units="ms"> + units="ms" expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -118881,7 +120989,7 @@ </histogram> <histogram name="SupervisedUserContentProvider.ChromeStartedRequestTime" - units="ms"> + units="ms" expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -118893,7 +121001,7 @@ </histogram> <histogram name="SupervisedUserContentProvider.RequestTimedOut" - enum="BooleanTimedOut"> + enum="BooleanTimedOut" expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -118914,7 +121022,7 @@ </summary> </histogram> -<histogram name="Sync.AppAssociationTime" units="ms"> +<histogram name="Sync.AppAssociationTime" units="ms" expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -118925,7 +121033,7 @@ </summary> </histogram> -<histogram name="Sync.AppRunFailures"> +<histogram name="Sync.AppRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -118936,7 +121044,8 @@ </summary> </histogram> -<histogram name="Sync.AppSettingsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.AppSettingsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by AppSettingsConfigureFailure. See crbug.com/478226. </obsolete> @@ -118944,7 +121053,8 @@ <summary>Enumeration of types of app settings association failures.</summary> </histogram> -<histogram name="Sync.AppsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.AppsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by AppsConfigureFailure. See crbug.com/478226. </obsolete> @@ -118952,7 +121062,8 @@ <summary>Enumeration of types of app association failures.</summary> </histogram> -<histogram name="Sync.AppStartFailures" enum="SyncStartResult"> +<histogram name="Sync.AppStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -118970,7 +121081,8 @@ <summary>Time taken during association of this data type.</summary> </histogram> -<histogram name="Sync.Attachments.DownloadChecksumResult" enum="BooleanMatched"> +<histogram name="Sync.Attachments.DownloadChecksumResult" enum="BooleanMatched" + expires_after="2018-04-20"> <obsolete> Deprecated 2018-04, Sync attachments were never launched. </obsolete> @@ -118979,7 +121091,7 @@ </histogram> <histogram name="Sync.Attachments.DownloadResponseCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2018-04-20"> <obsolete> Deprecated 2018-04, Sync attachments were never launched. </obsolete> @@ -118987,7 +121099,8 @@ <summary>Response or error codes from downloading sync attachments.</summary> </histogram> -<histogram name="Sync.Attachments.DownloadTotalTime" units="ms"> +<histogram name="Sync.Attachments.DownloadTotalTime" units="ms" + expires_after="2018-04-20"> <obsolete> Deprecated 2018-04, Sync attachments were never launched. </obsolete> @@ -118998,7 +121111,7 @@ </histogram> <histogram name="Sync.Attachments.StoreInitResult" - enum="SyncAttachmentStoreResult"> + enum="SyncAttachmentStoreResult" expires_after="2018-04-20"> <obsolete> Deprecated 2018-04, Sync attachments were never launched. </obsolete> @@ -119007,7 +121120,7 @@ </histogram> <histogram name="Sync.Attachments.UploadResponseCode" - enum="CombinedHttpResponseAndNetErrorCode"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2018-04-20"> <obsolete> Deprecated 2018-04, Sync attachments were never launched. </obsolete> @@ -119023,7 +121136,8 @@ </summary> </histogram> -<histogram name="Sync.AuthInvalidationRejectedTokenAgeLong" units="days"> +<histogram name="Sync.AuthInvalidationRejectedTokenAgeLong" units="days" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119034,7 +121148,8 @@ </summary> </histogram> -<histogram name="Sync.AuthInvalidationRejectedTokenAgeShort" units="ms"> +<histogram name="Sync.AuthInvalidationRejectedTokenAgeShort" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119045,7 +121160,8 @@ </summary> </histogram> -<histogram name="Sync.AuthorizationTimeInNetwork" units="ms"> +<histogram name="Sync.AuthorizationTimeInNetwork" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119053,7 +121169,8 @@ <summary>Time taken during initial authorization.</summary> </histogram> -<histogram name="Sync.AuthServerRejectedTokenAgeLong" units="days"> +<histogram name="Sync.AuthServerRejectedTokenAgeLong" units="days" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119064,7 +121181,8 @@ </summary> </histogram> -<histogram name="Sync.AuthServerRejectedTokenAgeShort" units="ms"> +<histogram name="Sync.AuthServerRejectedTokenAgeShort" units="ms" + expires_after="2016-06-20"> <obsolete> No longer relevant since transition to OAuth. </obsolete> @@ -119095,7 +121213,8 @@ </summary> </histogram> -<histogram name="Sync.AutofillProfileAssociationTime" units="ms"> +<histogram name="Sync.AutofillProfileAssociationTime" units="ms" + expires_after="2018-09-27"> <obsolete> Replaced by Sync.AutofillProfilesAssociationTime. </obsolete> @@ -119106,7 +121225,7 @@ </summary> </histogram> -<histogram name="Sync.AutofillProfileRunFailures"> +<histogram name="Sync.AutofillProfileRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -119118,7 +121237,8 @@ </summary> </histogram> -<histogram name="Sync.AutofillProfilesStartFailure" enum="SyncStartResult"> +<histogram name="Sync.AutofillProfilesStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by AutofillProfilesConfigureFailure. See crbug.com/478226. </obsolete> @@ -119128,7 +121248,8 @@ </summary> </histogram> -<histogram name="Sync.AutofillProfileStartFailures" enum="SyncStartResult"> +<histogram name="Sync.AutofillProfileStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -119139,7 +121260,7 @@ </summary> </histogram> -<histogram name="Sync.AutofillRunFailures"> +<histogram name="Sync.AutofillRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -119151,7 +121272,8 @@ </summary> </histogram> -<histogram name="Sync.AutofillStartFailure" enum="SyncStartResult"> +<histogram name="Sync.AutofillStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by AutofillConfigureFailure. See crbug.com/478226. </obsolete> @@ -119182,7 +121304,7 @@ </histogram> <histogram name="Sync.BackendInitializeRestoreState" - enum="SyncBackendInitializeRestoreState"> + enum="SyncBackendInitializeRestoreState" expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119209,7 +121331,8 @@ </summary> </histogram> -<histogram name="Sync.BadRequestCountOnSignInNeedsUpdateInfoBar"> +<histogram name="Sync.BadRequestCountOnSignInNeedsUpdateInfoBar" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119220,7 +121343,8 @@ </summary> </histogram> -<histogram name="Sync.BookmarkAssociationTime" units="ms"> +<histogram name="Sync.BookmarkAssociationTime" units="ms" + expires_after="2014-02-28"> <obsolete> Deprecated as of m18 </obsolete> @@ -119228,7 +121352,7 @@ <summary>Time taken during bookmark association.</summary> </histogram> -<histogram name="Sync.BookmarkRunFailures"> +<histogram name="Sync.BookmarkRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -119273,7 +121397,8 @@ </summary> </histogram> -<histogram name="Sync.BookmarksStartFailure" enum="SyncStartResult"> +<histogram name="Sync.BookmarksStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by BookmarksConfigureFailure. See crbug.com/478226. </obsolete> @@ -119281,7 +121406,8 @@ <summary>Enumeration of types of bookmark association failures.</summary> </histogram> -<histogram name="Sync.BookmarkStartFailures" enum="SyncStartResult"> +<histogram name="Sync.BookmarkStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -119292,7 +121418,8 @@ </summary> </histogram> -<histogram name="Sync.ClearServerDataEvents" enum="ClearServerDataEvents"> +<histogram name="Sync.ClearServerDataEvents" enum="ClearServerDataEvents" + expires_after="2019-02-19"> <obsolete> Removed in 2019-02. </obsolete> @@ -119341,7 +121468,8 @@ </summary> </histogram> -<histogram name="Sync.ConfigureTime.ABORTED" units="ms"> +<histogram name="Sync.ConfigureTime.ABORTED" units="ms" + expires_after="2014-02-28"> <obsolete> Replaced by Sync.ConfigureTime_Long.ABORTED in m21. </obsolete> @@ -119352,7 +121480,7 @@ </summary> </histogram> -<histogram name="Sync.ConfigureTime.OK" units="ms"> +<histogram name="Sync.ConfigureTime.OK" units="ms" expires_after="2014-02-28"> <obsolete> Replaced by Sync.ConfigureTime_Long.OK in m21. </obsolete> @@ -119362,7 +121490,8 @@ </summary> </histogram> -<histogram name="Sync.ConfigureTime.PARTIAL_SUCCESS" units="ms"> +<histogram name="Sync.ConfigureTime.PARTIAL_SUCCESS" units="ms" + expires_after="2014-02-28"> <obsolete> Replaced by Sync.ConfigureTime_Long.PARTIAL_SUCCESS in m21. </obsolete> @@ -119373,7 +121502,8 @@ </summary> </histogram> -<histogram name="Sync.ConfigureTime.UNRECOVERABLE_ERROR" units="ms"> +<histogram name="Sync.ConfigureTime.UNRECOVERABLE_ERROR" units="ms" + expires_after="2014-02-28"> <obsolete> Replaced by Sync.ConfigureTime_Long.UNRECOVERABLE_ERROR in m21. </obsolete> @@ -119416,7 +121546,7 @@ </summary> </histogram> -<histogram name="Sync.ConflictFixCircularity"> +<histogram name="Sync.ConflictFixCircularity" expires_after="2014-02-28"> <obsolete> Deprecated 12/2011. No longer tracked. See crbug.com/107816. </obsolete> @@ -119427,7 +121557,8 @@ </summary> </histogram> -<histogram name="Sync.ConflictFixRemovedDirectoriesWithContent"> +<histogram name="Sync.ConflictFixRemovedDirectoriesWithContent" + expires_after="2014-02-28"> <obsolete> Deprecated 12/2011. No longer tracked. See crbug.com/107816. </obsolete> @@ -119457,7 +121588,8 @@ </summary> </histogram> -<histogram name="Sync.CredentialsLost" enum="BooleanCredentialsLost"> +<histogram name="Sync.CredentialsLost" enum="BooleanCredentialsLost" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119541,7 +121673,7 @@ </summary> </histogram> -<histogram name="Sync.CustomPassphrase"> +<histogram name="Sync.CustomPassphrase" expires_after="2014-02-28"> <obsolete> Deprecated as of m26. </obsolete> @@ -119553,7 +121685,8 @@ </summary> </histogram> -<histogram name="Sync.CustomSync" enum="UserSelectableSyncType"> +<histogram name="Sync.CustomSync" enum="UserSelectableSyncType" + expires_after="2018-10-22"> <obsolete> Deprecated 10/2018, replaced by Sync.CustomSync2. </obsolete> @@ -119575,7 +121708,7 @@ </summary> </histogram> -<histogram name="Sync.DatatypePrefRecovery"> +<histogram name="Sync.DatatypePrefRecovery" expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119588,7 +121721,8 @@ </summary> </histogram> -<histogram name="Sync.DataTypeRunFailures" enum="SyncModelTypes"> +<histogram name="Sync.DataTypeRunFailures" enum="SyncModelTypes" + expires_after="2018-10-09"> <obsolete> Deprecated 10/2018. Replaced by Sync.DataTypeRunFailures2 which correctly splits run and start failures. @@ -119613,7 +121747,8 @@ </summary> </histogram> -<histogram name="Sync.DataTypeStartFailures" enum="SyncModelTypes"> +<histogram name="Sync.DataTypeStartFailures" enum="SyncModelTypes" + expires_after="2018-10-09"> <obsolete> Deprecated 10/2018. Replaced by Sync.DataTypeStartFailures2 which correctly splits run and start failures. @@ -119641,7 +121776,7 @@ </summary> </histogram> -<histogram name="Sync.DeviceCount"> +<histogram name="Sync.DeviceCount" expires_after="2019-02-08"> <obsolete> Deprecated in M74. </obsolete> @@ -119663,7 +121798,8 @@ </summary> </histogram> -<histogram name="Sync.DeviceIdMismatchDetails" enum="DeviceIdMismatch"> +<histogram name="Sync.DeviceIdMismatchDetails" enum="DeviceIdMismatch" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119675,7 +121811,8 @@ </summary> </histogram> -<histogram name="Sync.DictionaryStartFailure" enum="SyncStartResult"> +<histogram name="Sync.DictionaryStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by DictionaryConfigureFailure. See crbug.com/478226. </obsolete> @@ -119690,7 +121827,7 @@ </summary> </histogram> -<histogram name="Sync.DirectoryOpenFailedMac"> +<histogram name="Sync.DirectoryOpenFailedMac" expires_after="2014-02-28"> <obsolete> Deprecated 11/2011. No longer tracked. </obsolete> @@ -119698,7 +121835,7 @@ <summary>Number of failures trying to open the sync database on mac.</summary> </histogram> -<histogram name="Sync.DirectoryOpenFailedNotWinMac"> +<histogram name="Sync.DirectoryOpenFailedNotWinMac" expires_after="2014-02-28"> <obsolete> Deprecated 11/2011. No longer tracked. </obsolete> @@ -119709,7 +121846,7 @@ </summary> </histogram> -<histogram name="Sync.DirectoryOpenFailedWin"> +<histogram name="Sync.DirectoryOpenFailedWin" expires_after="2014-02-28"> <obsolete> Deprecated 11/2011. No longer tracked. </obsolete> @@ -119806,7 +121943,7 @@ </summary> </histogram> -<histogram name="Sync.EncryptAllData"> +<histogram name="Sync.EncryptAllData" expires_after="2014-02-28"> <obsolete> Deprecated as of m26. </obsolete> @@ -119846,7 +121983,8 @@ <summary>A UI event occured.</summary> </histogram> -<histogram name="Sync.ExtensionAssociationTime" units="ms"> +<histogram name="Sync.ExtensionAssociationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119857,7 +121995,7 @@ </summary> </histogram> -<histogram name="Sync.ExtensionRunFailures"> +<histogram name="Sync.ExtensionRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -119868,7 +122006,8 @@ </summary> </histogram> -<histogram name="Sync.ExtensionSettingsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.ExtensionSettingsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by ExtensionSettingsConfigureFailure. See crbug.com/478226. </obsolete> @@ -119878,7 +122017,8 @@ </summary> </histogram> -<histogram name="Sync.ExtensionsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.ExtensionsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by ExtensionsConfigureFailure. See crbug.com/478226. </obsolete> @@ -119886,7 +122026,8 @@ <summary>Enumeration of types of extension association failures.</summary> </histogram> -<histogram name="Sync.ExtensionStartFailures" enum="SyncStartResult"> +<histogram name="Sync.ExtensionStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -119897,7 +122038,8 @@ </summary> </histogram> -<histogram name="Sync.ExtraSyncDataCount" units="entries"> +<histogram name="Sync.ExtraSyncDataCount" units="entries" + expires_after="2018-07-26"> <obsolete> Deprecated as of 07/2018. No longer tracked (because it is directory-specific and related to now obsolete metrics Sync.ModelTypeCount). @@ -119916,7 +122058,7 @@ <summary>Whether a sync favicon cache lookup succeeded or not.</summary> </histogram> -<histogram name="Sync.FaviconCount"> +<histogram name="Sync.FaviconCount" expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119924,7 +122066,8 @@ <summary>Number of synced favicons at initialization time.</summary> </histogram> -<histogram name="Sync.FaviconImagesStartFailure" enum="SyncStartResult"> +<histogram name="Sync.FaviconImagesStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by FaviconImagesConfigureFailure. See crbug.com/478226. </obsolete> @@ -119934,7 +122077,8 @@ </summary> </histogram> -<histogram name="Sync.FaviconsAvailableAtMerge" enum="SyncFaviconsAvailable"> +<histogram name="Sync.FaviconsAvailableAtMerge" enum="SyncFaviconsAvailable" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119945,7 +122089,8 @@ </summary> </histogram> -<histogram name="Sync.FaviconTrackingStartFailure" enum="SyncStartResult"> +<histogram name="Sync.FaviconTrackingStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by FaviconTrackingConfigureFailure. See crbug.com/478226. </obsolete> @@ -119955,7 +122100,8 @@ </summary> </histogram> -<histogram name="Sync.FaviconVisitPeriod" units="hours"> +<histogram name="Sync.FaviconVisitPeriod" units="hours" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -119963,7 +122109,8 @@ <summary>Time between updates to a synced favicon's visit time.</summary> </histogram> -<histogram name="Sync.FirstBackendInitializeSuccess" enum="BooleanSuccess"> +<histogram name="Sync.FirstBackendInitializeSuccess" enum="BooleanSuccess" + expires_after="2014-02-28"> <obsolete> Deprecated 11/2011. Was counted incorrectly. Replaced by Sync.BackendInitializeFirstTimeSuccess. @@ -119974,7 +122121,8 @@ </summary> </histogram> -<histogram name="Sync.FirstSyncDelayByBackup" units="ms"> +<histogram name="Sync.FirstSyncDelayByBackup" units="ms" + expires_after="2016-02-24"> <obsolete> Backup logic has been removed since 02/2016. </obsolete> @@ -119982,7 +122130,7 @@ <summary>First sync delay casued by backing up user data.</summary> </histogram> -<histogram name="Sync.FreqApps" units="ms"> +<histogram name="Sync.FreqApps" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -119993,7 +122141,7 @@ </summary> </histogram> -<histogram name="Sync.FreqAutofill" units="ms"> +<histogram name="Sync.FreqAutofill" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120005,7 +122153,8 @@ </summary> </histogram> -<histogram name="Sync.FreqAutofillProfiles" units="ms"> +<histogram name="Sync.FreqAutofillProfiles" units="ms" + expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120017,7 +122166,7 @@ </summary> </histogram> -<histogram name="Sync.FreqBookmarks" units="ms"> +<histogram name="Sync.FreqBookmarks" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120028,7 +122177,7 @@ </summary> </histogram> -<histogram name="Sync.FreqDictionary" units="ms"> +<histogram name="Sync.FreqDictionary" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120039,7 +122188,7 @@ </summary> </histogram> -<histogram name="Sync.FreqExtensions" units="ms"> +<histogram name="Sync.FreqExtensions" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120050,7 +122199,7 @@ </summary> </histogram> -<histogram name="Sync.FreqFaviconImages" units="ms"> +<histogram name="Sync.FreqFaviconImages" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120061,7 +122210,8 @@ </summary> </histogram> -<histogram name="Sync.FreqFaviconTracking" units="ms"> +<histogram name="Sync.FreqFaviconTracking" units="ms" + expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120073,7 +122223,7 @@ </summary> </histogram> -<histogram name="Sync.FreqNigori" units="ms"> +<histogram name="Sync.FreqNigori" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120084,7 +122234,7 @@ </summary> </histogram> -<histogram name="Sync.FreqPasswords" units="ms"> +<histogram name="Sync.FreqPasswords" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120095,7 +122245,7 @@ </summary> </histogram> -<histogram name="Sync.FreqPreferences" units="ms"> +<histogram name="Sync.FreqPreferences" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120106,7 +122256,7 @@ </summary> </histogram> -<histogram name="Sync.FreqSearchEngines" units="ms"> +<histogram name="Sync.FreqSearchEngines" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120117,7 +122267,7 @@ </summary> </histogram> -<histogram name="Sync.FreqSessions" units="ms"> +<histogram name="Sync.FreqSessions" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120128,7 +122278,8 @@ </summary> </histogram> -<histogram name="Sync.FreqSyncedNotifications" units="ms"> +<histogram name="Sync.FreqSyncedNotifications" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -120140,7 +122291,7 @@ </summary> </histogram> -<histogram name="Sync.FreqThemes" units="ms"> +<histogram name="Sync.FreqThemes" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120151,7 +122302,7 @@ </summary> </histogram> -<histogram name="Sync.FreqTypedUrls" units="ms"> +<histogram name="Sync.FreqTypedUrls" units="ms" expires_after="2018-03-02"> <obsolete> Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval. </obsolete> @@ -120162,7 +122313,8 @@ </summary> </histogram> -<histogram name="Sync.FreqWifiCredentials" units="ms"> +<histogram name="Sync.FreqWifiCredentials" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -120203,7 +122355,8 @@ </summary> </histogram> -<histogram name="Sync.InvalidationSessionsAndroid" enum="BooleanHit"> +<histogram name="Sync.InvalidationSessionsAndroid" enum="BooleanHit" + expires_after="2016-06-08"> <obsolete> Deprecated as of 5/2016. </obsolete> @@ -120331,7 +122484,8 @@ </summary> </histogram> -<histogram name="Sync.ModelTypeCount" units="entries"> +<histogram name="Sync.ModelTypeCount" units="entries" + expires_after="2018-07-26"> <obsolete> Deprecated as of 7/2018. Replaced by Sync.ModelTypeCount2 which does record data consistently for both directory data types and USS data types. @@ -120553,7 +122707,8 @@ </summary> </histogram> -<histogram name="Sync.PageRevisitBookmarksDuration" units="ms"> +<histogram name="Sync.PageRevisitBookmarksDuration" units="ms" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120563,7 +122718,8 @@ </summary> </histogram> -<histogram name="Sync.PageRevisitBookmarksMatchAge" units="minutes"> +<histogram name="Sync.PageRevisitBookmarksMatchAge" units="minutes" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120575,7 +122731,7 @@ </histogram> <histogram name="Sync.PageRevisitBookmarksMatchTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120584,7 +122740,7 @@ </histogram> <histogram name="Sync.PageRevisitBookmarksMissTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120592,7 +122748,8 @@ <summary>Transition type to a page that didn't match a bookmark.</summary> </histogram> -<histogram name="Sync.PageRevisitNavigationMatchAge" units="minutes"> +<histogram name="Sync.PageRevisitNavigationMatchAge" units="minutes" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120604,7 +122761,8 @@ </summary> </histogram> -<histogram name="Sync.PageRevisitNavigationMatchOffset"> +<histogram name="Sync.PageRevisitNavigationMatchOffset" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120618,7 +122776,7 @@ </histogram> <histogram name="Sync.PageRevisitNavigationMatchTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120627,7 +122785,7 @@ </histogram> <histogram name="Sync.PageRevisitNavigationMissTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120635,7 +122793,8 @@ <summary>Transition type that didn't match a synced navigation.</summary> </histogram> -<histogram name="Sync.PageRevisitSessionDuration" units="ms"> +<histogram name="Sync.PageRevisitSessionDuration" units="ms" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120645,7 +122804,8 @@ </summary> </histogram> -<histogram name="Sync.PageRevisitTabMatchAge" units="minutes"> +<histogram name="Sync.PageRevisitTabMatchAge" units="minutes" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120657,7 +122817,7 @@ </histogram> <histogram name="Sync.PageRevisitTabMatchTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120666,7 +122826,7 @@ </histogram> <histogram name="Sync.PageRevisitTabMissTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120674,7 +122834,8 @@ <summary>Transition type that didn't match a synced tab.</summary> </histogram> -<histogram name="Sync.PageRevisitTypedUrlDuration" units="ms"> +<histogram name="Sync.PageRevisitTypedUrlDuration" units="ms" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120684,7 +122845,8 @@ </summary> </histogram> -<histogram name="Sync.PageRevisitTypedUrlMatchAge" units="minutes"> +<histogram name="Sync.PageRevisitTypedUrlMatchAge" units="minutes" + expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120696,7 +122858,7 @@ </histogram> <histogram name="Sync.PageRevisitTypedUrlMatchTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120705,7 +122867,7 @@ </histogram> <histogram name="Sync.PageRevisitTypedUrlMissTransition" - enum="PageVisitTransitionType"> + enum="PageVisitTransitionType" expires_after="2018-02-21"> <obsolete> Deprecated in M66. </obsolete> @@ -120739,7 +122901,8 @@ <summary>The active sync passphrase type at sync startup.</summary> </histogram> -<histogram name="Sync.PasswordAssociationTime" units="ms"> +<histogram name="Sync.PasswordAssociationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -120750,7 +122913,7 @@ </summary> </histogram> -<histogram name="Sync.PasswordRunFailures"> +<histogram name="Sync.PasswordRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -120761,7 +122924,8 @@ </summary> </histogram> -<histogram name="Sync.PasswordsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.PasswordsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by PasswordsConfigureFailure. See crbug.com/478226. </obsolete> @@ -120769,7 +122933,8 @@ <summary>Enumeration of types of password association failures.</summary> </histogram> -<histogram name="Sync.PasswordStartFailures" enum="SyncStartResult"> +<histogram name="Sync.PasswordStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -120827,7 +122992,8 @@ </summary> </histogram> -<histogram name="Sync.PreferenceAssociationTime" units="ms"> +<histogram name="Sync.PreferenceAssociationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -120838,7 +123004,7 @@ </summary> </histogram> -<histogram name="Sync.PreferenceRunFailures"> +<histogram name="Sync.PreferenceRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -120881,7 +123047,8 @@ </summary> </histogram> -<histogram name="Sync.PreferencesStartFailure" enum="SyncStartResult"> +<histogram name="Sync.PreferencesStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by PreferencesConfigureFailure. See crbug.com/478226. </obsolete> @@ -120889,7 +123056,8 @@ <summary>Enumeration of types of preference association failures.</summary> </histogram> -<histogram name="Sync.PreferenceStartFailures" enum="SyncStartResult"> +<histogram name="Sync.PreferenceStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -120900,7 +123068,8 @@ </summary> </histogram> -<histogram name="Sync.ReauthorizationTime" units="ms"> +<histogram name="Sync.ReauthorizationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -120927,7 +123096,8 @@ </summary> </histogram> -<histogram name="Sync.RefreshTokenAvailable" enum="BooleanSuccess"> +<histogram name="Sync.RefreshTokenAvailable" enum="BooleanSuccess" + expires_after="2016-04-05"> <obsolete> Deprecated 04/2016 as not useful since it always logged true. </obsolete> @@ -120985,7 +123155,8 @@ </summary> </histogram> -<histogram name="Sync.RestoreBackendInitializeSucess" enum="BooleanSuccess"> +<histogram name="Sync.RestoreBackendInitializeSucess" enum="BooleanSuccess" + expires_after="2014-02-28"> <obsolete> Deprecated 11/2011. Was counted incorrectly. Replaced by Sync.BackendInitializeRestoreSuccess. @@ -120997,7 +123168,8 @@ </summary> </histogram> -<histogram name="Sync.SearchEngineAssociationTime" units="ms"> +<histogram name="Sync.SearchEngineAssociationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121008,7 +123180,7 @@ </summary> </histogram> -<histogram name="Sync.SearchEngineRunFailures"> +<histogram name="Sync.SearchEngineRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121019,7 +123191,8 @@ </summary> </histogram> -<histogram name="Sync.SearchEnginesStartFailure" enum="SyncStartResult"> +<histogram name="Sync.SearchEnginesStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by SearchEnginesConfigureFailure. See crbug.com/478226. </obsolete> @@ -121027,7 +123200,8 @@ <summary>Enumeration of types of search engine association failures.</summary> </histogram> -<histogram name="Sync.SearchEngineStartFailures" enum="SyncStartResult"> +<histogram name="Sync.SearchEngineStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121054,7 +123228,8 @@ </summary> </histogram> -<histogram name="Sync.SessionAssociationTime" units="ms"> +<histogram name="Sync.SessionAssociationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121065,7 +123240,7 @@ </summary> </histogram> -<histogram name="Sync.SessionRunFailures"> +<histogram name="Sync.SessionRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121094,7 +123269,8 @@ </summary> </histogram> -<histogram name="Sync.SessionsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.SessionsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by SessionsConfigureFailure. See crbug.com/478226. </obsolete> @@ -121102,7 +123278,8 @@ <summary>Enumeration of types of session association failures.</summary> </histogram> -<histogram name="Sync.SessionStartFailures" enum="SyncStartResult"> +<histogram name="Sync.SessionStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121129,7 +123306,8 @@ </summary> </histogram> -<histogram name="Sync.SesssionsDuplicateSyncId" units="count"> +<histogram name="Sync.SesssionsDuplicateSyncId" units="count" + expires_after="2018-06-19"> <obsolete> Deprecated in M69. </obsolete> @@ -121161,7 +123339,8 @@ </summary> </histogram> -<histogram name="Sync.Shutdown.StopRegistrarTime" units="ms"> +<histogram name="Sync.Shutdown.StopRegistrarTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121172,7 +123351,8 @@ </summary> </histogram> -<histogram name="Sync.Shutdown.StopSyncThreadTime" units="ms"> +<histogram name="Sync.Shutdown.StopSyncThreadTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121188,7 +123368,8 @@ <summary>The type of event that triggered sync initialization.</summary> </histogram> -<histogram name="Sync.Startup.TimeDeferred" units="ms"> +<histogram name="Sync.Startup.TimeDeferred" units="ms" + expires_after="2014-03-18"> <obsolete> Deprecated, see TimeDeferred2. </obsolete> @@ -121222,7 +123403,8 @@ </summary> </histogram> -<histogram name="Sync.SyncAuthError" enum="SyncAuthError"> +<histogram name="Sync.SyncAuthError" enum="SyncAuthError" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121233,7 +123415,7 @@ </summary> </histogram> -<histogram name="Sync.SyncCycleInterval" units="ms"> +<histogram name="Sync.SyncCycleInterval" units="ms" expires_after="2019-03-12"> <obsolete> Removed 2019-03. </obsolete> @@ -121244,7 +123426,8 @@ </summary> </histogram> -<histogram name="Sync.SyncedNotificationsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.SyncedNotificationsStartFailure" enum="SyncStartResult" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. Replaced by SyncedNotificationsConfigureFailure. See crbug.com/478226. @@ -121255,7 +123438,7 @@ </summary> </histogram> -<histogram name="Sync.SyncerConflictStuck"> +<histogram name="Sync.SyncerConflictStuck" expires_after="2014-02-28"> <obsolete> Deprecated 12/2011. No longer tracked. See crbug.com/107816. </obsolete> @@ -121274,7 +123457,7 @@ </summary> </histogram> -<histogram name="Sync.SyncEverything"> +<histogram name="Sync.SyncEverything" expires_after="2018-10-22"> <obsolete> Deprecated 10/2018, replaced by Sync.SyncEverything2. </obsolete> @@ -121297,7 +123480,8 @@ </summary> </histogram> -<histogram name="Sync.ThemeAssociationTime" units="ms"> +<histogram name="Sync.ThemeAssociationTime" units="ms" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19 </obsolete> @@ -121308,7 +123492,7 @@ </summary> </histogram> -<histogram name="Sync.ThemeRunFailures"> +<histogram name="Sync.ThemeRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121319,7 +123503,8 @@ </summary> </histogram> -<histogram name="Sync.ThemesStartFailure" enum="SyncStartResult"> +<histogram name="Sync.ThemesStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by ThemesConfigureFailure. See crbug.com/478226. </obsolete> @@ -121327,7 +123512,8 @@ <summary>Enumeration of types of theme association failures.</summary> </histogram> -<histogram name="Sync.ThemeStartFailures" enum="SyncStartResult"> +<histogram name="Sync.ThemeStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121338,7 +123524,8 @@ </summary> </histogram> -<histogram name="Sync.TypedUrlAssociationTime" units="ms"> +<histogram name="Sync.TypedUrlAssociationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121349,7 +123536,8 @@ </summary> </histogram> -<histogram name="Sync.TypedUrlChangeProcessorErrors" units="%"> +<histogram name="Sync.TypedUrlChangeProcessorErrors" units="%" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121370,7 +123558,8 @@ </summary> </histogram> -<histogram name="Sync.TypedUrlModelAssociationErrors" units="%"> +<histogram name="Sync.TypedUrlModelAssociationErrors" units="%" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121382,7 +123571,7 @@ </summary> </histogram> -<histogram name="Sync.TypedUrlRunFailures"> +<histogram name="Sync.TypedUrlRunFailures" expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121393,7 +123582,8 @@ </summary> </histogram> -<histogram name="Sync.TypedUrlsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.TypedUrlsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by TypedUrlsConfigureFailure. See crbug.com/478226. </obsolete> @@ -121401,7 +123591,8 @@ <summary>Enumeration of types of typed url association failures.</summary> </histogram> -<histogram name="Sync.TypedUrlStartFailures" enum="SyncStartResult"> +<histogram name="Sync.TypedUrlStartFailures" enum="SyncStartResult" + expires_after="2014-02-28"> <obsolete> Deprecated as of m19. </obsolete> @@ -121445,7 +123636,8 @@ </summary> </histogram> -<histogram name="Sync.UserPerceivedAuthorizationTime" units="ms"> +<histogram name="Sync.UserPerceivedAuthorizationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121453,7 +123645,8 @@ <summary>Time the user spends looking at the authorization dialog.</summary> </histogram> -<histogram name="Sync.UserPerceivedBookmarkAssociation"> +<histogram name="Sync.UserPerceivedBookmarkAssociation" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121497,7 +123690,8 @@ </summary> </histogram> -<histogram name="Sync.WifiCredentialsAssociationTime" units="ms"> +<histogram name="Sync.WifiCredentialsAssociationTime" units="ms" + expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121506,7 +123700,7 @@ </histogram> <histogram name="Sync.WifiCredentialsConfigureFailure" - enum="SyncConfigureResult"> + enum="SyncConfigureResult" expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121516,7 +123710,8 @@ </summary> </histogram> -<histogram name="Sync.WifiCredentialsStartFailure" enum="SyncStartResult"> +<histogram name="Sync.WifiCredentialsStartFailure" enum="SyncStartResult" + expires_after="2015-04-20"> <obsolete> Replaced by WifiCredentialsConfigureFailure. See crbug.com/478226. </obsolete> @@ -121526,7 +123721,8 @@ </summary> </histogram> -<histogram name="Sync.WorkerApplyHasEncryptedUpdates" enum="Boolean"> +<histogram name="Sync.WorkerApplyHasEncryptedUpdates" enum="Boolean" + expires_after="2018-04-12"> <obsolete> Deprecated in M67. After more than a year, almost all clients are reporting FALSE. @@ -121540,7 +123736,8 @@ </summary> </histogram> -<histogram name="Sync.YoungestForeignTabAgeOnNTP" units="seconds"> +<histogram name="Sync.YoungestForeignTabAgeOnNTP" units="seconds" + expires_after="2018-02-22"> <obsolete> Deprecated in M66. </obsolete> @@ -121549,7 +123746,7 @@ </histogram> <histogram name="SyncedNotifications.Actions" - enum="SyncedNotificationActionType"> + enum="SyncedNotificationActionType" expires_after="2016-06-20"> <obsolete> Deprecated in M53. </obsolete> @@ -121688,7 +123885,7 @@ </summary> </histogram> -<histogram name="Tab.Close" units="ms"> +<histogram name="Tab.Close" units="ms" expires_after="2019-01-15"> <obsolete> Removed 01/2019. </obsolete> @@ -121698,7 +123895,7 @@ </summary> </histogram> -<histogram name="Tab.Close.UnloadTime" units="ms"> +<histogram name="Tab.Close.UnloadTime" units="ms" expires_after="2019-01-15"> <obsolete> Removed 01/2019. </obsolete> @@ -121709,7 +123906,8 @@ </summary> </histogram> -<histogram name="Tab.Deactivation.Bookmarked" enum="Boolean"> +<histogram name="Tab.Deactivation.Bookmarked" enum="Boolean" + expires_after="2016-11-11"> <obsolete> Deprecated 11/2016. No longer useful after finding out that it has no effect on tab reactivation rates. @@ -121738,7 +123936,8 @@ </summary> </histogram> -<histogram name="Tab.Discarding" enum="TabDiscardingEvents"> +<histogram name="Tab.Discarding" enum="TabDiscardingEvents" + expires_after="2015-10-06"> <obsolete> Deprecated 10/2015, not needed anymore. </obsolete> @@ -121751,7 +123950,8 @@ </summary> </histogram> -<histogram name="Tab.Discarding.DiscardCount" units="Discards"> +<histogram name="Tab.Discarding.DiscardCount" units="Discards" + expires_after="2015-10-06"> <obsolete> Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount. </obsolete> @@ -121764,7 +123964,8 @@ </summary> </histogram> -<histogram name="Tab.EvictedTabWasActive" enum="Boolean"> +<histogram name="Tab.EvictedTabWasActive" enum="Boolean" + expires_after="2016-10-06"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -121785,7 +123986,8 @@ </summary> </histogram> -<histogram name="Tab.FormActivityCountEvictedHistogram"> +<histogram name="Tab.FormActivityCountEvictedHistogram" + expires_after="2016-10-06"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -121855,7 +124057,8 @@ </summary> </histogram> -<histogram name="Tab.OpenedPopup.PopupToCrossOriginRedirectTime" units="ms"> +<histogram name="Tab.OpenedPopup.PopupToCrossOriginRedirectTime" units="ms" + expires_after="2017-10-05"> <obsolete> Deprecated in favor of Tab.TabUnder.PopupToTabUnderTime. </obsolete> @@ -121867,7 +124070,7 @@ </histogram> <histogram name="Tab.OpenedPopup.VisibleTimeAfterCrossOriginRedirect" - units="ms"> + units="ms" expires_after="2017-10-05"> <obsolete> Deprecated in favor of Tab.TabUnder.VisibleTime. </obsolete> @@ -121928,7 +124131,8 @@ </details> </histogram> -<histogram name="Tab.Reactivation.Bookmarked" enum="Boolean"> +<histogram name="Tab.Reactivation.Bookmarked" enum="Boolean" + expires_after="2016-11-11"> <obsolete> Deprecated 11/2016. No longer useful after finding out that it has no effect on tab reactivation rates. @@ -122077,7 +124281,8 @@ </summary> </histogram> -<histogram name="Tab.StatusWhenDisplayed" enum="TabStatus"> +<histogram name="Tab.StatusWhenDisplayed" enum="TabStatus" + expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -122098,7 +124303,7 @@ </histogram> <histogram name="Tab.StatusWhenSwitchedBackToForegroundDataProxyEnabled" - enum="TabStatus"> + enum="TabStatus" expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -122119,7 +124324,7 @@ </histogram> <histogram name="Tab.SwitchedToForegroundLaunchedWithURL" - enum="TabSwitchedToForegroundLaunchedWithURL"> + enum="TabSwitchedToForegroundLaunchedWithURL" expires_after="2014-04-14"> <obsolete> Deprecated as of 04/2014. </obsolete> @@ -122130,7 +124335,7 @@ </summary> </histogram> -<histogram name="Tab.SwitchedToForegroundMRURank"> +<histogram name="Tab.SwitchedToForegroundMRURank" expires_after="2014-04-14"> <obsolete> Deprecated as of 04/2014. </obsolete> @@ -122139,7 +124344,7 @@ </summary> </histogram> -<histogram name="Tab.SwitchedToForegroundNumTabs"> +<histogram name="Tab.SwitchedToForegroundNumTabs" expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -122147,7 +124352,7 @@ </histogram> <histogram name="Tab.SwitchedToForegroundRevisit" - enum="TabSwitchedToForegroundRevisit"> + enum="TabSwitchedToForegroundRevisit" expires_after="2014-04-14"> <obsolete> Deprecated as of 04/2014. </obsolete> @@ -122169,7 +124374,8 @@ </summary> </histogram> -<histogram name="Tab.TabUnder.EngagementScore" units="engagement score"> +<histogram name="Tab.TabUnder.EngagementScore" units="engagement score" + expires_after="2018-08-07"> <obsolete> Deprecated August 2018 </obsolete> @@ -122219,7 +124425,7 @@ </summary> </histogram> -<histogram name="Tab.TimeSinceActive" units="ms"> +<histogram name="Tab.TimeSinceActive" units="ms" expires_after="2016-10-06"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -122229,7 +124435,8 @@ </summary> </histogram> -<histogram name="Tab.TimeSinceActiveEvicted" units="ms"> +<histogram name="Tab.TimeSinceActiveEvicted" units="ms" + expires_after="2016-10-06"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -122239,7 +124446,8 @@ </summary> </histogram> -<histogram name="Tab.TimeSinceFormActivityEvictedHistogram" units="ms"> +<histogram name="Tab.TimeSinceFormActivityEvictedHistogram" units="ms" + expires_after="2016-10-06"> <obsolete> Deprecated as of 10/2016. </obsolete> @@ -122294,7 +124502,8 @@ </summary> </histogram> -<histogram name="Tab.VisibleTimeAfterCrossOriginRedirect" units="ms"> +<histogram name="Tab.VisibleTimeAfterCrossOriginRedirect" units="ms" + expires_after="2017-10-05"> <obsolete> This metric was deprecated in favor of just using Tab.TabUnder.VisibleTime directly. Consider bringing it back if we care about visible time after a @@ -122510,7 +124719,8 @@ </summary> </histogram> -<histogram name="TabManager.Discarding.DiscardedEngagementScore"> +<histogram name="TabManager.Discarding.DiscardedEngagementScore" + expires_after="2017-11-21"> <obsolete> Deprecated 11/2017. Analysis showed that MRU was as good as engagement score to choose which tabs to discard. The new plan is to build a machine learning @@ -122567,7 +124777,7 @@ </histogram> <histogram name="TabManager.Discarding.LocalDatabase.DatabaseInit" - enum="LocalSiteCharacteristicsDBInitStatus"> + enum="LocalSiteCharacteristicsDBInitStatus" expires_after="2018-07-10"> <obsolete> Deprecated 07/2018, and replaced by ResourceCoordinator.LocalDB.DatabaseInit. @@ -122579,7 +124789,7 @@ </histogram> <histogram name="TabManager.Discarding.LocalDatabase.DatabaseInitAfterDelete" - enum="LocalSiteCharacteristicsDBInitStatus"> + enum="LocalSiteCharacteristicsDBInitStatus" expires_after="2018-07-10"> <obsolete> Deprecated 07/2018, and replaced by ResourceCoordinator.LocalDB.DatabaseInitAfterDelete. @@ -122592,7 +124802,7 @@ </histogram> <histogram name="TabManager.Discarding.LocalDatabase.DatabaseInitAfterRepair" - enum="LocalSiteCharacteristicsDBInitStatus"> + enum="LocalSiteCharacteristicsDBInitStatus" expires_after="2018-07-10"> <obsolete> Deprecated 07/2018, and replaced by ResourceCoordinator.LocalDB.DatabaseInitAfterRepair. @@ -122605,7 +124815,7 @@ </histogram> <histogram name="TabManager.Discarding.LocalDatabase.DatabaseRepair" - enum="BooleanSuccess"> + enum="BooleanSuccess" expires_after="2018-07-10"> <obsolete> Deprecated 07/2018, and replaced by ResourceCoordinator.LocalDB.DatabaseRepair. @@ -122637,7 +124847,8 @@ </summary> </histogram> -<histogram name="TabManager.Discarding.ReloadedEngagementScore"> +<histogram name="TabManager.Discarding.ReloadedEngagementScore" + expires_after="2017-11-21"> <obsolete> Deprecated 11/2017. Analysis showed that MRU was as good as engagement score to choose which tabs to discard. The new plan is to build a machine learning @@ -122879,7 +125090,7 @@ </histogram> <histogram name="TabManager.Experimental.SessionRestore.TabSwitchLoadTime" - units="ms"> + units="ms" expires_after="2017-08-31"> <obsolete> Deprecated 08/2017, and replaced by TabManager.Experimental.SessionRestore.TabSwitchLoadTime.UntilTabIsLoaded. @@ -122928,7 +125139,7 @@ </histogram> <histogram name="TabManager.Heuristics.FromBackgroundedToFirstAlertFired" - units="ms"> + units="ms" expires_after="2019-01-21"> <obsolete> Removed on 21/1/2019. </obsolete> @@ -122942,7 +125153,7 @@ </histogram> <histogram name="TabManager.Heuristics.FromBackgroundedToFirstAudioStarts" - units="ms"> + units="ms" expires_after="2019-01-21"> <obsolete> Removed on 21/1/2019. </obsolete> @@ -123017,7 +125228,7 @@ </histogram> <histogram name="TabManager.SessionRestore.CompressedPagesPerSecond" - units="pages/s"> + units="pages/s" expires_after="2017-08-30"> <obsolete> Deprecated 08/2017, and replaced by TabManager.Experimental.SessionRestore.CompressedPagesPerSecond. @@ -123034,7 +125245,7 @@ </histogram> <histogram name="TabManager.SessionRestore.DecompressedPagesPerSecond" - units="pages/s"> + units="pages/s" expires_after="2017-08-30"> <obsolete> Deprecated 08/2017, and replaced by TabManager.Experimental.SessionRestore.DecompressedPagesPerSecond. @@ -123065,7 +125276,8 @@ </summary> </histogram> -<histogram name="TabManager.SessionRestore.SwapInPerSecond" units="swaps/s"> +<histogram name="TabManager.SessionRestore.SwapInPerSecond" units="swaps/s" + expires_after="2017-08-30"> <obsolete> Deprecated 08/2017, and replaced by TabManager.Experimental.SessionRestore.SwapInPerSecond. @@ -123081,7 +125293,8 @@ </summary> </histogram> -<histogram name="TabManager.SessionRestore.SwapOutPerSecond" units="swaps/s"> +<histogram name="TabManager.SessionRestore.SwapOutPerSecond" units="swaps/s" + expires_after="2017-08-30"> <obsolete> Deprecated 08/2017, and replaced by TabManager.Experimental.SessionRestore.SwapOutPerSecond. @@ -123167,7 +125380,7 @@ <summary>[Android and iOS] The number of tabs open at cold launch.</summary> </histogram> -<histogram name="Tabs.Discard.DiscardCount"> +<histogram name="Tabs.Discard.DiscardCount" expires_after="2015-10-06"> <obsolete> Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount. </obsolete> @@ -123180,7 +125393,8 @@ </summary> </histogram> -<histogram name="Tabs.Discard.DiscardInLastMinute" enum="BooleanTabDiscard"> +<histogram name="Tabs.Discard.DiscardInLastMinute" enum="BooleanTabDiscard" + expires_after="2017-11-08"> <obsolete> Deprecated 11/2017. Average number of minutes between discard events is available in Tabs.Discard.InitialTime2 and Tabs.Discard.IntervalTime2. @@ -123193,7 +125407,8 @@ </summary> </histogram> -<histogram name="Tabs.Discard.InitialTime" units="seconds"> +<histogram name="Tabs.Discard.InitialTime" units="seconds" + expires_after="2015-06-02"> <obsolete> Deprecated May 4, 2012. Replaced by Tabs.Discard.InitialTime2 because this stat had too low of a range maximum. No longer tracked. @@ -123205,7 +125420,8 @@ </summary> </histogram> -<histogram name="Tabs.Discard.InitialTime2" units="seconds"> +<histogram name="Tabs.Discard.InitialTime2" units="seconds" + expires_after="2017-12-04"> <obsolete> Deprecated 11/2017. Replaced with Discarding.Urgent.TimeSinceStartup which is recorded when Chrome has to discard tabs or apps urgently (instead of @@ -123219,7 +125435,8 @@ </summary> </histogram> -<histogram name="Tabs.Discard.IntervalTime" units="seconds"> +<histogram name="Tabs.Discard.IntervalTime" units="seconds" + expires_after="2015-06-02"> <obsolete> Deprecated May 4, 2012. Replaced by Tabs.Discard.IntervalTime2 because this stat had too low of a range maximum. No longer tracked. @@ -123231,7 +125448,8 @@ </summary> </histogram> -<histogram name="Tabs.Discard.IntervalTime2" units="ms"> +<histogram name="Tabs.Discard.IntervalTime2" units="ms" + expires_after="2017-12-04"> <obsolete> Deprecated 11/2017. Replaced with Discarding.Urgent.TimeSinceLastUrgent which is recorded before a set of tabs/apps are urgently discarded (instead @@ -123254,7 +125472,8 @@ </summary> </histogram> -<histogram name="Tabs.Discard.MemAnonymousMB" units="MB"> +<histogram name="Tabs.Discard.MemAnonymousMB" units="MB" + expires_after="2015-06-02"> <obsolete> Deprecated December 7, 2012. Replaced by Tabs.Discard.MemAllocatedMB because this stat has insufficient precision in the 2-4 GB range and does not @@ -123293,7 +125512,7 @@ </summary> </histogram> -<histogram name="Tabs.Discard.ReloadCount"> +<histogram name="Tabs.Discard.ReloadCount" expires_after="2015-10-06"> <obsolete> Deprecated 10/2015, and replaced by TabManager.Discarding.ReloadCount. </obsolete> @@ -123307,7 +125526,7 @@ </summary> </histogram> -<histogram name="Tabs.Discard.TabCount" units="tabs"> +<histogram name="Tabs.Discard.TabCount" units="tabs" expires_after="2017-12-04"> <obsolete> Deprecated 11/2017. Replaced with Discarding.Urgent.NumAliveTabs which records the number of tabs that are not pending load or discarded when an @@ -123573,7 +125792,7 @@ </histogram> <histogram name="Tabs.SpeculativeRestoreApplicability" - enum="SpeculativeRestoreApplicability"> + enum="SpeculativeRestoreApplicability" expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -123587,7 +125806,7 @@ </histogram> <histogram name="Tabs.SpeculativeRestorePredictionAccuracy.SideSwipe" - enum="SpeculativeRestorePredictionAccuracy"> + enum="SpeculativeRestorePredictionAccuracy" expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -123598,7 +125817,7 @@ </histogram> <histogram name="Tabs.SpeculativeRestorePredictionAccuracy.TabSwitcher" - enum="SpeculativeRestorePredictionAccuracy"> + enum="SpeculativeRestorePredictionAccuracy" expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -123609,7 +125828,7 @@ </histogram> <histogram name="Tabs.SpeculativeRestoreTargetStatus" - enum="SpeculativeRestoreTabStatus"> + enum="SpeculativeRestoreTabStatus" expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -123618,7 +125837,8 @@ </summary> </histogram> -<histogram name="Tabs.SpeculativeRestoreTimeAhead.SideSwipe" units="ms"> +<histogram name="Tabs.SpeculativeRestoreTimeAhead.SideSwipe" units="ms" + expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -123629,7 +125849,8 @@ </summary> </histogram> -<histogram name="Tabs.SpeculativeRestoreTimeAhead.TabSwitcher" units="ms"> +<histogram name="Tabs.SpeculativeRestoreTimeAhead.TabSwitcher" units="ms" + expires_after="2019-01-16"> <obsolete> No longer logged </obsolete> @@ -123679,7 +125900,7 @@ </details> </histogram> -<histogram name="Tabs.StateTransfer.Time" units="ms"> +<histogram name="Tabs.StateTransfer.Time" units="ms" expires_after="2017-05-08"> <obsolete> Deprecated as of 4/2017. </obsolete> @@ -124001,7 +126222,7 @@ </histogram> <histogram name="TaskScheduler.BlockShutdownTasksPostedDuringShutdown" - units="tasks"> + units="tasks" expires_after="2018-10-18"> <obsolete> Deprecated 10/2018. Instead of recording a histogram with the number of BLOCK_SHUTDOWN tasks posted during shutdown, we generate a crash when too @@ -124058,7 +126279,7 @@ </histogram> <histogram base="true" name="TaskScheduler.NumCancelledDelayedTasks" - units="tasks"> + units="tasks" expires_after="2019-03-20"> <obsolete> Deprecated as of 03/2019. The number of cancelled delayed tasks found by the lazy approach is 0 more than 99% of the time. @@ -124118,7 +126339,7 @@ </histogram> <histogram base="true" name="TaskScheduler.PercentCancelledDelayedTasks" - units="tasks"> + units="tasks" expires_after="2019-03-20"> <obsolete> Deprecated as of 03/2019. The number of cancelled delayed tasks found by the lazy approach is 0 more than 99% of the time. @@ -124134,7 +126355,8 @@ </summary> </histogram> -<histogram base="true" name="TaskScheduler.TaskLatency" units="ms"> +<histogram base="true" name="TaskScheduler.TaskLatency" units="ms" + expires_after="2017-04-28"> <obsolete> Deprecated 4/2017. Units changed from milliseconds to microseconds. </obsolete> @@ -124392,7 +126614,8 @@ </summary> </histogram> -<histogram name="ThirdPartyModules.InstalledPrograms.DataSize" units="KB"> +<histogram name="ThirdPartyModules.InstalledPrograms.DataSize" units="KB" + expires_after="2018-01-14"> <obsolete> Deprecated 12/2017. </obsolete> @@ -124403,7 +126626,8 @@ </summary> </histogram> -<histogram name="ThirdPartyModules.InstalledPrograms.GetDataTime" units="ms"> +<histogram name="ThirdPartyModules.InstalledPrograms.GetDataTime" units="ms" + expires_after="2018-07-24"> <obsolete> Deprecated 07/2018. </obsolete> @@ -124477,7 +126701,8 @@ </summary> </histogram> -<histogram name="ThirdPartyModules.ShellExtensionsCount" units="counts"> +<histogram name="ThirdPartyModules.ShellExtensionsCount" units="counts" + expires_after="2018-08-15"> <obsolete> Deprecated as of 14 Aug 2018 as reporting to this metric was incorrect since its inception. Replaced by ThirdPartyModules.ShellExtensionsCount2. @@ -124490,7 +126715,8 @@ </summary> </histogram> -<histogram name="ThirdPartyModules.ShellExtensionsCount2" units="counts"> +<histogram name="ThirdPartyModules.ShellExtensionsCount2" units="counts" + expires_after="2018-09-11"> <obsolete> Deprecated on 30/08/2018 now that the enumeration removes duplicate entries. </obsolete> @@ -124671,7 +126897,8 @@ <summary>Number of retries until the final response was recorded.</summary> </histogram> -<histogram name="Toolbar.ActionsModel.ComponentActionsCount"> +<histogram name="Toolbar.ActionsModel.ComponentActionsCount" + expires_after="2018-12-27"> <obsolete> We no longer have component actions. </obsolete> @@ -124684,7 +126911,8 @@ </summary> </histogram> -<histogram name="Toolbar.ActionsModel.OverallActionsCount"> +<histogram name="Toolbar.ActionsModel.OverallActionsCount" + expires_after="2019-02-28"> <obsolete> After the removal of component actions, this histogram is equivalent to ExtensionToolbarModel.BrowserActionsCount. See that histogram instead. @@ -124731,7 +126959,8 @@ </summary> </histogram> -<histogram name="Toolbar.Menu.NewTabPresentationDuration" units="ms"> +<histogram name="Toolbar.Menu.NewTabPresentationDuration" units="ms" + expires_after="2019-02-12"> <obsolete> Long removed. </obsolete> @@ -124838,7 +127067,8 @@ <summary>Tracks touchpad device state.</summary> </histogram> -<histogram name="Touchpad.Metrics" enum="TouchpadProblemType"> +<histogram name="Touchpad.Metrics" enum="TouchpadProblemType" + expires_after="2017-08-10"> <obsolete> Deprecated 8/2017. </obsolete> @@ -124875,7 +127105,8 @@ </summary> </histogram> -<histogram name="Touchpad.Sensitivity.Changed" enum="PointerSensitivity"> +<histogram name="Touchpad.Sensitivity.Changed" enum="PointerSensitivity" + expires_after="2013-07-02"> <obsolete> Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Changed. </obsolete> @@ -124883,7 +127114,8 @@ <summary>Tracks touchpad sensitivity setting changes by the user.</summary> </histogram> -<histogram name="Touchpad.Sensitivity.Started" enum="PointerSensitivity"> +<histogram name="Touchpad.Sensitivity.Started" enum="PointerSensitivity" + expires_after="2013-07-02"> <obsolete> Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Started. </obsolete> @@ -124911,14 +127143,16 @@ <summary>Tracks touchpad TapToClick setting on startup.</summary> </histogram> -<histogram name="Touchpad.ThreeFingerSwipe.Changed" enum="BooleanEnabled"> +<histogram name="Touchpad.ThreeFingerSwipe.Changed" enum="BooleanEnabled" + expires_after="2013-07-04"> <obsolete> Deprecated as of 7/2013. </obsolete> <owner>jhawkins@chromium.org</owner> </histogram> -<histogram name="Touchpad.ThreeFingerSwipe.Started" enum="BooleanEnabled"> +<histogram name="Touchpad.ThreeFingerSwipe.Started" enum="BooleanEnabled" + expires_after="2013-07-04"> <obsolete> Deprecated as of 7/2013. </obsolete> @@ -124937,7 +127171,8 @@ </summary> </histogram> -<histogram name="Touchscreen.TapDisambiguation" enum="TapDisambiguation"> +<histogram name="Touchscreen.TapDisambiguation" enum="TapDisambiguation" + expires_after="2018-07-31"> <obsolete> Deprecated as of 7/2018. </obsolete> @@ -124989,7 +127224,8 @@ </summary> </histogram> -<histogram name="TrackedObjects.GetRetiredOrCreateThreadData" units="ms"> +<histogram name="TrackedObjects.GetRetiredOrCreateThreadData" units="ms" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. Code measured by this histogram no longer exists. </obsolete> @@ -125001,7 +127237,8 @@ </summary> </histogram> -<histogram name="TrafficStatsAmortizer.AmortizationDelay" units="ms"> +<histogram name="TrafficStatsAmortizer.AmortizationDelay" units="ms" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -125014,7 +127251,8 @@ </summary> </histogram> -<histogram name="TrafficStatsAmortizer.BufferSizeOnFlush" units="count"> +<histogram name="TrafficStatsAmortizer.BufferSizeOnFlush" units="count" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -125025,7 +127263,8 @@ </summary> </histogram> -<histogram name="TrafficStatsAmortizer.ConcurrentTabs" units="count"> +<histogram name="TrafficStatsAmortizer.ConcurrentTabs" units="count" + expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -125040,7 +127279,7 @@ </histogram> <histogram name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes" - units="bytes"> + units="bytes" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -125055,7 +127294,7 @@ </histogram> <histogram name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes" - units="bytes"> + units="bytes" expires_after="2018-07-19"> <obsolete> Deprecated 2018/07. </obsolete> @@ -125099,7 +127338,8 @@ </summary> </histogram> -<histogram name="Translate.CLD2.LanguageAccuracy" units="%"> +<histogram name="Translate.CLD2.LanguageAccuracy" units="%" + expires_after="2017-11-09"> <obsolete> Deprecated as of 11/2017, since cld2 is deprecated. </obsolete> @@ -125110,7 +127350,8 @@ </summary> </histogram> -<histogram name="Translate.CLD2.LanguageDetected" enum="CLD2LanguageCode"> +<histogram name="Translate.CLD2.LanguageDetected" enum="CLD2LanguageCode" + expires_after="2017-11-09"> <obsolete> Deprecated as of 11/2017, since cld2 is deprecated. </obsolete> @@ -125297,7 +127538,8 @@ </summary> </histogram> -<histogram name="Translate.InitiationStatus" enum="TranslateInitiationStatus"> +<histogram name="Translate.InitiationStatus" enum="TranslateInitiationStatus" + expires_after="2013-11-05"> <obsolete> Deprecated as of 11/2013, and replaced by Translate.InitiationStatus.v2. </obsolete> @@ -125429,7 +127671,7 @@ </summary> </histogram> -<histogram name="Translate.PageCaptured" units="ms"> +<histogram name="Translate.PageCaptured" units="ms" expires_after="2018-02-13"> <obsolete> Deprecated 2/2018 </obsolete> @@ -125540,7 +127782,8 @@ </summary> </histogram> -<histogram name="Translate.ServerReportedUnsupportedLanguage"> +<histogram name="Translate.ServerReportedUnsupportedLanguage" + expires_after="2013-06-14"> <obsolete> Deprecated 5/2013 by Translate.UndisplayableLanguage </obsolete> @@ -125551,7 +127794,8 @@ </summary> </histogram> -<histogram name="Translate.ShowBeforeTranslateInfobar"> +<histogram name="Translate.ShowBeforeTranslateInfobar" + expires_after="2013-05-30"> <obsolete> Deprecated 7/2010. No longer tracked. </obsolete> @@ -125722,7 +127966,8 @@ </summary> </histogram> -<histogram name="TryScroll.SlowScroll" enum="ScrollThread"> +<histogram name="TryScroll.SlowScroll" enum="ScrollThread" + expires_after="2016-02-29"> <obsolete> Deprecated 02/2016 in Issue 1741103002, and replaced by Renderer4.CompositorWheelScrollUpdateThread and @@ -125732,7 +127977,8 @@ <summary>Whether a scroll is executed on main thread.</summary> </histogram> -<histogram name="UI.CompositorResizeLock.Duration" units="ms"> +<histogram name="UI.CompositorResizeLock.Duration" units="ms" + expires_after="2019-02-07"> <obsolete> Removed in M65. </obsolete> @@ -125744,7 +127990,8 @@ </summary> </histogram> -<histogram name="UI.CompositorResizeLock.TimedOut" units="Boolean"> +<histogram name="UI.CompositorResizeLock.TimedOut" units="Boolean" + expires_after="2019-02-07"> <obsolete> Removed in M65. </obsolete> @@ -125806,7 +128053,7 @@ </summary> </histogram> -<histogram name="UKM.Entries.SerializedCount"> +<histogram name="UKM.Entries.SerializedCount" expires_after="2018-02-16"> <obsolete> Deprecated 2/2018 by UKM.Entries.SerializedCount2. </obsolete> @@ -125862,7 +128109,8 @@ </summary> </histogram> -<histogram name="UKM.LogUploader.UploadSize" units="bytes"> +<histogram name="UKM.LogUploader.UploadSize" units="bytes" + expires_after="2019-01-22"> <obsolete> Removed in favor of UKM.LogSize.OnSuccess </obsolete> @@ -125918,7 +128166,8 @@ </summary> </histogram> -<histogram name="UKM.Sources.SerializedCount" units="sources"> +<histogram name="UKM.Sources.SerializedCount" units="sources" + expires_after="2018-10-22"> <obsolete> Deprecated 10/2018 by UKM.Sources.SerializedCount2. </obsolete> @@ -125988,7 +128237,8 @@ </summary> </histogram> -<histogram name="UKM.Upload.ResponseCode" enum="HttpResponseCode"> +<histogram name="UKM.Upload.ResponseCode" enum="HttpResponseCode" + expires_after="2017-04-04"> <obsolete> Replaced by UKM.LogUpload.ResponseOrErrorCode </obsolete> @@ -126037,7 +128287,8 @@ </summary> </histogram> -<histogram name="UMA.ClientIdMigrated" enum="BooleanMigrated"> +<histogram name="UMA.ClientIdMigrated" enum="BooleanMigrated" + expires_after="2015-06-01"> <obsolete> Removed in M45. </obsolete> @@ -126048,7 +128299,8 @@ </summary> </histogram> -<histogram name="UMA.CollectExternalEventsTime" units="ms"> +<histogram name="UMA.CollectExternalEventsTime" units="ms" + expires_after="2015-08-07"> <obsolete> Deprecated as of August 2015. The histogram showed no unexpected slowness, and a profiler is a better tool for identifying any future issues. @@ -126060,7 +128312,7 @@ </histogram> <histogram name="UMA.ComputeCurrentSigninStatus" - enum="ComputeCurrentSigninStatus"> + enum="ComputeCurrentSigninStatus" expires_after="2016-06-14"> <obsolete> Deprecated as of Jun 2016. The histogram was added for debugging purpose and is not needed anymore. @@ -126074,7 +128326,7 @@ </histogram> <histogram name="UMA.CreatePersistentHistogram.Result" - enum="CreatePersistentHistogramResult"> + enum="CreatePersistentHistogramResult" expires_after="2018-04-12"> <obsolete> Removed April, 2018 as the information has never shown any problems. </obsolete> @@ -126105,7 +128357,7 @@ </histogram> <histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpDuration" - units="ms"> + units="ms" expires_after="2017-01-24"> <obsolete> Deprecated 01/2017 for UMA.Debug.EnableCrashUploadDeferredStartupAsyncTaskDuration. @@ -126136,7 +128388,8 @@ </summary> </histogram> -<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime" units="ms"> +<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime" units="ms" + expires_after="2016-08-08"> <obsolete> Replaced by UMA.Debug.EnableCrashUpload.DeferredStartUptime2 </obsolete> @@ -126148,7 +128401,8 @@ </summary> </histogram> -<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime2" units="ms"> +<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime2" units="ms" + expires_after="2017-06-28"> <obsolete> Deprecated 2017. No longer tracked. </obsolete> @@ -126162,7 +128416,7 @@ </histogram> <histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime" - units="ms"> + units="ms" expires_after="2016-08-08"> <obsolete> Replaced by UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2 </obsolete> @@ -126174,7 +128428,7 @@ </histogram> <histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2" - units="ms"> + units="ms" expires_after="2017-06-28"> <obsolete> Deprecated 2017. No longer tracked. </obsolete> @@ -126187,7 +128441,8 @@ </summary> </histogram> -<histogram name="UMA.Debug.EnableCrashUpload.Uptime" units="ms"> +<histogram name="UMA.Debug.EnableCrashUpload.Uptime" units="ms" + expires_after="2016-05-16"> <obsolete> Replaced by UMA.Debug.EnableCrashUpload.Uptime2 </obsolete> @@ -126199,7 +128454,8 @@ </summary> </histogram> -<histogram name="UMA.Debug.EnableCrashUpload.Uptime2" units="ms"> +<histogram name="UMA.Debug.EnableCrashUpload.Uptime2" units="ms" + expires_after="2016-08-08"> <obsolete> Replaced by UMA.Debug.EnableCrashUpload.Uptime3 </obsolete> @@ -126211,7 +128467,8 @@ </summary> </histogram> -<histogram name="UMA.Debug.EnableCrashUpload.Uptime3" units="ms"> +<histogram name="UMA.Debug.EnableCrashUpload.Uptime3" units="ms" + expires_after="2017-06-28"> <obsolete> Deprecated 2017. No longer tracked. </obsolete> @@ -126223,7 +128480,7 @@ </summary> </histogram> -<histogram name="UMA.Discarded Log Events"> +<histogram name="UMA.Discarded Log Events" expires_after="2017-06-05"> <obsolete> Replaced by UMA.Truncate* metrics. </obsolete> @@ -126266,7 +128523,8 @@ </summary> </histogram> -<histogram name="UMA.FieldTrialAllocator.Size" units="bytes"> +<histogram name="UMA.FieldTrialAllocator.Size" units="bytes" + expires_after="2016-11-09"> <obsolete> Deprecated 11/2016 for UMA.FieldTrialAllocator.Used </obsolete> @@ -126279,7 +128537,8 @@ </summary> </histogram> -<histogram name="UMA.FieldTrialsEnabledBenchmarking" enum="BooleanUsage"> +<histogram name="UMA.FieldTrialsEnabledBenchmarking" enum="BooleanUsage" + expires_after="2014-10-15"> <obsolete> Deprecated 2012. No longer tracked. </obsolete> @@ -126299,7 +128558,8 @@ </summary> </histogram> -<histogram name="UMA.FileMetricsProvider.DeletedFiles"> +<histogram name="UMA.FileMetricsProvider.DeletedFiles" + expires_after="2018-04-12"> <obsolete> Removed April, 2018 as the information it provides is no longer useful. </obsolete> @@ -126313,7 +128573,8 @@ </summary> </histogram> -<histogram name="UMA.FileMetricsProvider.DirectoryFiles"> +<histogram name="UMA.FileMetricsProvider.DirectoryFiles" + expires_after="2018-04-12"> <obsolete> Removed April, 2018 as no problems were ever indicated. </obsolete> @@ -126326,7 +128587,7 @@ </histogram> <histogram name="UMA.FileMetricsProvider.EmbeddedProfile.DroppedFileAge" - units="minutes"> + units="minutes" expires_after="2017-07-08"> <obsolete> Deprecated 07/2017. Was only for short-term analysis. About 95% of dropped files were less than 1 day old. @@ -126373,7 +128634,7 @@ </histogram> <histogram name="UMA.FileMetricsProvider.Happening" - enum="FileMetricsProviderHappening"> + enum="FileMetricsProviderHappening" expires_after="2018-02-09"> <obsolete> This metrics was to provide information for crbug/760317 which has been resolved. Removed February, 2018. @@ -126405,7 +128666,8 @@ </summary> </histogram> -<histogram name="UMA.FileMetricsProvider.InitialCheckTime.Total" units="ms"> +<histogram name="UMA.FileMetricsProvider.InitialCheckTime.Total" units="ms" + expires_after="2018-04-12"> <obsolete> Removed April, 2018 as the information it provides is no longer useful. </obsolete> @@ -126426,7 +128688,8 @@ </summary> </histogram> -<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.Total" units="ms"> +<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.Total" units="ms" + expires_after="2018-04-12"> <obsolete> Removed April, 2018 as the information it provides is no longer useful. </obsolete> @@ -126446,7 +128709,8 @@ </summary> </histogram> -<histogram name="UMA.FileMetricsProvider.SnapshotTime.Total" units="ms"> +<histogram name="UMA.FileMetricsProvider.SnapshotTime.Total" units="ms" + expires_after="2018-04-12"> <obsolete> Removed April, 2018 as the information it provides is no longer useful. </obsolete> @@ -126458,7 +128722,8 @@ </summary> </histogram> -<histogram name="UMA.GeneratedLowEntropySource" enum="Boolean"> +<histogram name="UMA.GeneratedLowEntropySource" enum="Boolean" + expires_after="2015-08-07"> <obsolete> Deprecated as of August 2015. No longer tracked. </obsolete> @@ -126469,7 +128734,8 @@ </summary> </histogram> -<histogram name="UMA.Histograms.Activity" enum="HistogramActivityReport"> +<histogram name="UMA.Histograms.Activity" enum="HistogramActivityReport" + expires_after="2017-10-16"> <obsolete> Deprecated as of October 2017. No longer tracked. </obsolete> @@ -126518,7 +128784,7 @@ </summary> </histogram> -<histogram name="UMA.LoadLogsTime" units="ms"> +<histogram name="UMA.LoadLogsTime" units="ms" expires_after="2015-08-05"> <obsolete> Deprecated as of August 2015. The histograms showed no unexpected slowness, and a profiler is a better tool for identifying any future issues. @@ -126548,7 +128814,7 @@ </summary> </histogram> -<histogram name="UMA.LogLoadComplete called"> +<histogram name="UMA.LogLoadComplete called" expires_after="2016-04-09"> <obsolete> No longer tracked. </obsolete> @@ -126577,7 +128843,8 @@ </summary> </histogram> -<histogram name="UMA.LogUpload.ConnetionType" enum="NetworkConnectionType"> +<histogram name="UMA.LogUpload.ConnetionType" enum="NetworkConnectionType" + expires_after="2016-04-11"> <obsolete> Used for analyzing UMA log uploads on cellular connection, but necessary after the analysis is finished. @@ -126609,7 +128876,8 @@ </summary> </histogram> -<histogram name="UMA.LogUploader.UploadSize" units="bytes"> +<histogram name="UMA.LogUploader.UploadSize" units="bytes" + expires_after="2019-01-22"> <obsolete> Removed in favor of UMA.LogSize.OnSuccess </obsolete> @@ -126668,7 +128936,8 @@ </summary> </histogram> -<histogram name="UMA.MetricsService.DeletedDirectorySize.Failure" units="KB"> +<histogram name="UMA.MetricsService.DeletedDirectorySize.Failure" units="KB" + expires_after="2018-02-09"> <obsolete> This metrics was to provide information for crbug/760317 which has been resolved. Removed February, 2018. @@ -126680,7 +128949,8 @@ </summary> </histogram> -<histogram name="UMA.MetricsService.DeletedDirectorySize.Success" units="KB"> +<histogram name="UMA.MetricsService.DeletedDirectorySize.Success" units="KB" + expires_after="2018-02-09"> <obsolete> This metrics was to provide information for crbug/760317 which has been resolved. Removed February, 2018. @@ -126693,7 +128963,8 @@ </summary> </histogram> -<histogram name="UMA.MetricsService.RecordCurrentHistograms.Time" units="ms"> +<histogram name="UMA.MetricsService.RecordCurrentHistograms.Time" units="ms" + expires_after="2018-02-07"> <obsolete> Removed February, 2018 because persistent metrics are fully launched with no observable change in operation time. @@ -126731,7 +129002,8 @@ </summary> </histogram> -<histogram name="UMA.Perf.GetData" enum="GetPerfDataOutcome"> +<histogram name="UMA.Perf.GetData" enum="GetPerfDataOutcome" + expires_after="2019-01-14"> <obsolete> Deprecated 01/2019 in b/110205489 being split into ChromeOS.CWP.CollectPerf and ChromeOS.CWP.UploadPerf. @@ -126743,7 +129015,8 @@ </summary> </histogram> -<histogram base="true" name="UMA.PersistentAllocator.Allocs" units="bytes"> +<histogram base="true" name="UMA.PersistentAllocator.Allocs" units="bytes" + expires_after="2017-02-16"> <obsolete> Deprecated 2/2017 for Issue 689315 which indicated they weren't being used. </obsolete> @@ -126792,7 +129065,7 @@ </summary> </histogram> -<histogram name="UMA.ProfilesCount.AfterErase"> +<histogram name="UMA.ProfilesCount.AfterErase" expires_after="2016-06-14"> <obsolete> Deprecated as of Jun 2016. The histogram was added for debugging purpose and is not needed anymore. @@ -126825,7 +129098,7 @@ </summary> </histogram> -<histogram name="UMA.ProtoGzipped" enum="Boolean"> +<histogram name="UMA.ProtoGzipped" enum="Boolean" expires_after="2013-09-13"> <obsolete> Deprecated as of Sep, 2013. Gzipping protobufs is now the default. </obsolete> @@ -126833,7 +129106,7 @@ <summary>Was the UMA protobuf uploaded earlier compressed or not.</summary> </histogram> -<histogram name="UMA.ProtoGzippedKBSaved" units="KB"> +<histogram name="UMA.ProtoGzippedKBSaved" units="KB" expires_after="2015-08-06"> <obsolete> Deprecated as of August 2015. See UMA.ProtoCompressionRatio instead. </obsolete> @@ -126851,7 +129124,7 @@ </summary> </histogram> -<histogram name="UMA.StoreLogsTime" units="ms"> +<histogram name="UMA.StoreLogsTime" units="ms" expires_after="2015-08-05"> <obsolete> Deprecated as of August 2015. The histograms showed no unexpected slowness, and a profiler is a better tool for identifying any future issues. @@ -126885,7 +129158,7 @@ </summary> </histogram> -<histogram name="UMA.SyntheticTrials.Count"> +<histogram name="UMA.SyntheticTrials.Count" expires_after="2015-08-06"> <obsolete> Deprecated as of August 2015. </obsolete> @@ -126913,7 +129186,7 @@ </summary> </histogram> -<histogram name="UMA.Unacceptable_Log_Discarded"> +<histogram name="UMA.Unacceptable_Log_Discarded" expires_after="2013-07-11"> <obsolete> Deprecated as of May, 2012 (i.e. Chrome 21+). Replaced by the UMA.UploadResponseStatus.XML and UMA.UploadResponseStatus.Protobuf @@ -126936,7 +129209,8 @@ </summary> </histogram> -<histogram name="UMA.UploadCreation" enum="BooleanSuccess"> +<histogram name="UMA.UploadCreation" enum="BooleanSuccess" + expires_after="2015-08-06"> <obsolete> Deprecated as of August 2015. This failure case no longer exists. </obsolete> @@ -126950,7 +129224,7 @@ </histogram> <histogram name="UMA.UploadResponseStatus.Protobuf" - enum="UmaUploadResponseStatus"> + enum="UmaUploadResponseStatus" expires_after="2017-04-04"> <obsolete> Replaced by UMA.LogUpload.ResponseOrErrorCode </obsolete> @@ -126961,7 +129235,8 @@ </summary> </histogram> -<histogram name="UMA.UploadResponseStatus.XML" enum="UmaUploadResponseStatus"> +<histogram name="UMA.UploadResponseStatus.XML" enum="UmaUploadResponseStatus" + expires_after="2014-10-15"> <obsolete> Deprecated 2013. No longer tracked. </obsolete> @@ -126972,7 +129247,8 @@ </summary> </histogram> -<histogram name="UMA.UsedResetVariationsFlag" enum="BooleanUsage"> +<histogram name="UMA.UsedResetVariationsFlag" enum="BooleanUsage" + expires_after="2016-04-09"> <obsolete> No longer tracked. </obsolete> @@ -126983,7 +129259,7 @@ </summary> </histogram> -<histogram name="UMA.XMLNodeDumpTime" units="ms"> +<histogram name="UMA.XMLNodeDumpTime" units="ms" expires_after="2014-10-15"> <obsolete> Deprecated 2013. No longer tracked. </obsolete> @@ -126994,7 +129270,8 @@ </summary> </histogram> -<histogram name="UMA.XMLWriterDestructionTime" units="ms"> +<histogram name="UMA.XMLWriterDestructionTime" units="ms" + expires_after="2014-10-15"> <obsolete> Deprecated 2013. No longer tracked. </obsolete> @@ -127013,7 +129290,7 @@ </histogram> <histogram name="UnifiedConsent.ConsentBump.Action" - enum="UnifiedConsentBumpAction"> + enum="UnifiedConsentBumpAction" expires_after="2018-11-30"> <obsolete> Removed 2018/11, because the consent bump was removed. </obsolete> @@ -127024,7 +129301,8 @@ </summary> </histogram> -<histogram name="UnifiedConsent.ConsentBump.EligibleAtStartup" enum="Boolean"> +<histogram name="UnifiedConsent.ConsentBump.EligibleAtStartup" enum="Boolean" + expires_after="2018-11-30"> <obsolete> Removed 2018/11, because the consent bump was removed. </obsolete> @@ -127039,7 +129317,7 @@ </histogram> <histogram name="UnifiedConsent.ConsentBump.SuppressReason" - enum="UnifiedConsentBumpSuppressReason"> + enum="UnifiedConsentBumpSuppressReason" expires_after="2018-11-30"> <obsolete> Removed 2018/11, because the consent bump was removed. </obsolete> @@ -127051,7 +129329,8 @@ </summary> </histogram> -<histogram name="UnifiedConsent.RevokeReason" enum="UnifiedConsentRevokeReason"> +<histogram name="UnifiedConsent.RevokeReason" enum="UnifiedConsentRevokeReason" + expires_after="2018-11-27"> <obsolete> Removed 2018/11 because it's no longer necessary. </obsolete> @@ -127873,7 +130152,8 @@ </summary> </histogram> -<histogram name="Uptime.ProcessesTerminatedToXTerminatedAfterLogout" units="ms"> +<histogram name="Uptime.ProcessesTerminatedToXTerminatedAfterLogout" units="ms" + expires_after="2018-06-06"> <obsolete> Deprecated 05/2018 in Issue 721891 with removal of X11. Replaced by Uptime.OtherProcessesTerminatedToChromeExecAfterLogout in ChromeOS M69. @@ -127901,7 +130181,8 @@ </summary> </histogram> -<histogram name="Uptime.XTerminatedToChromeExecAfterLogout" units="ms"> +<histogram name="Uptime.XTerminatedToChromeExecAfterLogout" units="ms" + expires_after="2018-06-06"> <obsolete> Replaced by Uptime.OtherProcessesTerminatedToChromeExecAfterLogout in ChromeOS M69. Equivalent to the new name since at least ChromeOS M62. @@ -127915,7 +130196,8 @@ </summary> </histogram> -<histogram name="URLBlacklistManager.ConstructorBuildTime" units="ms"> +<histogram name="URLBlacklistManager.ConstructorBuildTime" units="ms" + expires_after="2018-09-04"> <obsolete> Served its purpose; deprecated 9/2018 in M71 (https://crbug.com/827173). </obsolete> @@ -127926,7 +130208,8 @@ </summary> </histogram> -<histogram name="UrlFetcher.StringResponseSize" units="KB"> +<histogram name="UrlFetcher.StringResponseSize" units="KB" + expires_after="2017-10-11"> <obsolete> Removed 10/2017. </obsolete> @@ -127964,7 +130247,8 @@ </summary> </histogram> -<histogram name="UserCert.ContentDisposition" enum="UserCertContentDisposition"> +<histogram name="UserCert.ContentDisposition" enum="UserCertContentDisposition" + expires_after="2016-12-21"> <obsolete> Removed in M57. </obsolete> @@ -128078,7 +130362,8 @@ </summary> </histogram> -<histogram name="V8.ArrayBufferBigAllocations" units="MB"> +<histogram name="V8.ArrayBufferBigAllocations" units="MB" + expires_after="2017-05-05"> <obsolete> Deprecated 5/2017 in Issue 704922. Replaced by V8.ArrayBufferLargeAllocations. @@ -128136,7 +130421,7 @@ </summary> </histogram> -<histogram name="V8.ASTOptimization"> +<histogram name="V8.ASTOptimization" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -128157,7 +130442,7 @@ <summary>Cache size to source size ratio when caching compiled code.</summary> </histogram> -<histogram name="V8.CodeCreation"> +<histogram name="V8.CodeCreation" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -128165,7 +130450,7 @@ <summary>TBD</summary> </histogram> -<histogram name="V8.CodeGeneration"> +<histogram name="V8.CodeGeneration" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -128173,7 +130458,8 @@ <summary>Time spent generating native code for functions.</summary> </histogram> -<histogram name="V8.CodegenFractionCrankshaft" units="%"> +<histogram name="V8.CodegenFractionCrankshaft" units="%" + expires_after="2016-07-19"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -128185,7 +130471,7 @@ </summary> </histogram> -<histogram name="V8.Compile" units="ms"> +<histogram name="V8.Compile" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.CompileMicroSeconds. </obsolete> @@ -128207,7 +130493,7 @@ </summary> </histogram> -<histogram name="V8.CompileDeserialize" units="ms"> +<histogram name="V8.CompileDeserialize" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.CompileDeserializeMicroSeconds. </obsolete> @@ -128229,7 +130515,7 @@ </summary> </histogram> -<histogram name="V8.CompileEval" units="ms"> +<histogram name="V8.CompileEval" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.CompileEvalMicroSeconds. </obsolete> @@ -128251,7 +130537,8 @@ </summary> </histogram> -<histogram name="V8.CompileHeuristicsDecision" enum="CompileHeuristicsDecision"> +<histogram name="V8.CompileHeuristicsDecision" enum="CompileHeuristicsDecision" + expires_after="2017-11-03"> <obsolete> This histogram has been replaced by V8.CompileTime.CacheBehaviour. </obsolete> @@ -128263,7 +130550,8 @@ </summary> </histogram> -<histogram name="V8.CompileInlineScriptMicroSeconds" units="microseconds"> +<histogram name="V8.CompileInlineScriptMicroSeconds" units="microseconds" + expires_after="2017-11-03"> <obsolete> This histogram has been replaced by V8.CompileTimeMicroSeconds.NoCache.InlineScript. @@ -128272,7 +130560,7 @@ <summary>Time spent compiling an inline script.</summary> </histogram> -<histogram name="V8.CompileLazy" units="ms"> +<histogram name="V8.CompileLazy" units="ms" expires_after="2014-09-16"> <obsolete> This histogram has been replaced by V8.CompileLazyMicroSeconds. </obsolete> @@ -128307,7 +130595,8 @@ </summary> </histogram> -<histogram name="V8.CompileNoncacheableMicroSeconds" units="microseconds"> +<histogram name="V8.CompileNoncacheableMicroSeconds" units="microseconds" + expires_after="2017-11-03"> <obsolete> This histogram has been replaced by the subcategories of V8.CompileTimeMicroSeconds.NoCache @@ -128318,7 +130607,7 @@ </summary> </histogram> -<histogram name="V8.CompileScript" units="ms"> +<histogram name="V8.CompileScript" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.CompileScriptMicroSeconds. </obsolete> @@ -128492,7 +130781,7 @@ </summary> </histogram> -<histogram name="V8.CompileSerialize" units="ms"> +<histogram name="V8.CompileSerialize" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.CompileSerializeMicroSeconds. </obsolete> @@ -128521,7 +130810,7 @@ </summary> </histogram> -<histogram name="V8.DeferredCodeGeneration"> +<histogram name="V8.DeferredCodeGeneration" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8 </obsolete> @@ -128547,7 +130836,8 @@ </summary> </histogram> -<histogram name="V8.ExecutableMemoryMax" units="bytes"> +<histogram name="V8.ExecutableMemoryMax" units="bytes" + expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8 </obsolete> @@ -128565,7 +130855,8 @@ </summary> </histogram> -<histogram name="V8.GC.ParallelTaskLatencyMicroSeconds" units="microseconds"> +<histogram name="V8.GC.ParallelTaskLatencyMicroSeconds" units="microseconds" + expires_after="2019-02-19"> <obsolete> Deprecated in Feb 2019. No longer tracked in V8. </obsolete> @@ -128752,7 +131043,8 @@ <summary>Time spent in IdleNotifications.</summary> </histogram> -<histogram name="V8.GCIdleTimeAllottedInMS" units="ms"> +<histogram name="V8.GCIdleTimeAllottedInMS" units="ms" + expires_after="2017-08-03"> <obsolete> Deprecated in August 2017. No longer tracked. </obsolete> @@ -128760,7 +131052,8 @@ <summary>Idle time passed to V8 via IdleNotifications.</summary> </histogram> -<histogram name="V8.GCIdleTimeLimit.Overshot" units="ms"> +<histogram name="V8.GCIdleTimeLimit.Overshot" units="ms" + expires_after="2017-08-03"> <obsolete> Deprecated in August 2017. No longer tracked. </obsolete> @@ -128770,7 +131063,8 @@ </summary> </histogram> -<histogram name="V8.GCIdleTimeLimit.Undershot" units="ms"> +<histogram name="V8.GCIdleTimeLimit.Undershot" units="ms" + expires_after="2017-08-03"> <obsolete> Deprecated in August 2017. No longer tracked. </obsolete> @@ -128905,7 +131199,8 @@ <summary>Results from opening V8 snapshot files.</summary> </histogram> -<histogram name="V8.MemoryExternalFragmentationCellSpace" units="%"> +<histogram name="V8.MemoryExternalFragmentationCellSpace" units="%" + expires_after="2017-09-27"> <obsolete> This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace. </obsolete> @@ -128938,7 +131233,8 @@ </summary> </histogram> -<histogram name="V8.MemoryExternalFragmentationOldDataSpace" units="%"> +<histogram name="V8.MemoryExternalFragmentationOldDataSpace" units="%" + expires_after="2015-05-22"> <obsolete> This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace. </obsolete> @@ -128949,7 +131245,8 @@ </summary> </histogram> -<histogram name="V8.MemoryExternalFragmentationOldPointerSpace" units="%"> +<histogram name="V8.MemoryExternalFragmentationOldPointerSpace" units="%" + expires_after="2015-05-22"> <obsolete> This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace. </obsolete> @@ -128974,7 +131271,7 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapCommitted" units="KB"> +<histogram name="V8.MemoryHeapCommitted" units="KB" expires_after="2018-07-17"> <obsolete> This histogram has been replaced by Memory.Experimental.Renderer2.V8. </obsolete> @@ -128985,7 +131282,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionCellSpace" units="%"> +<histogram name="V8.MemoryHeapFractionCellSpace" units="%" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -128995,7 +131293,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionCodeSpace" units="%"> +<histogram name="V8.MemoryHeapFractionCodeSpace" units="%" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129005,7 +131304,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionLoSpace" units="%"> +<histogram name="V8.MemoryHeapFractionLoSpace" units="%" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129015,7 +131315,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionMapSpace" units="%"> +<histogram name="V8.MemoryHeapFractionMapSpace" units="%" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129025,7 +131326,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionNewSpace" units="%"> +<histogram name="V8.MemoryHeapFractionNewSpace" units="%" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129035,7 +131337,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionOldDataSpace" units="%"> +<histogram name="V8.MemoryHeapFractionOldDataSpace" units="%" + expires_after="2015-05-22"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129046,7 +131349,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionOldPointerSpace" units="%"> +<histogram name="V8.MemoryHeapFractionOldPointerSpace" units="%" + expires_after="2015-05-22"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129057,7 +131361,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapFractionOldSpace" units="%"> +<histogram name="V8.MemoryHeapFractionOldSpace" units="%" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129067,7 +131372,8 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapSampleCellSpaceCommitted" units="KB"> +<histogram name="V8.MemoryHeapSampleCellSpaceCommitted" units="KB" + expires_after="2017-09-27"> <obsolete> Deprecated as of 09/2017. </obsolete> @@ -129115,7 +131421,7 @@ </summary> </histogram> -<histogram name="V8.MemoryHeapUsed" units="KB"> +<histogram name="V8.MemoryHeapUsed" units="KB" expires_after="2018-07-17"> <obsolete> This histogram has been replaced by Memory.Experimental.Renderer2.V8.AllocatedObjects. @@ -129126,7 +131432,7 @@ </summary> </histogram> -<histogram name="V8.Parse" units="ms"> +<histogram name="V8.Parse" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.ParseMicroSeconds. </obsolete> @@ -129134,7 +131440,7 @@ <summary>Time spent in V8 parser.</summary> </histogram> -<histogram name="V8.ParseLazy" units="ms"> +<histogram name="V8.ParseLazy" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.ParseLazyMicroSeconds. </obsolete> @@ -129144,7 +131450,8 @@ </summary> </histogram> -<histogram name="V8.ParseLazyMicroSeconds" units="microseconds"> +<histogram name="V8.ParseLazyMicroSeconds" units="microseconds" + expires_after="2016-10-26"> <obsolete> Deprecated. </obsolete> @@ -129154,7 +131461,8 @@ </summary> </histogram> -<histogram name="V8.ParseMicroSeconds" units="microseconds"> +<histogram name="V8.ParseMicroSeconds" units="microseconds" + expires_after="2016-10-26"> <obsolete> Deprecated. </obsolete> @@ -129162,7 +131470,7 @@ <summary>Time spent in V8 parser.</summary> </histogram> -<histogram name="V8.PreParse" units="ms"> +<histogram name="V8.PreParse" units="ms" expires_after="2015-01-27"> <obsolete> This histogram has been replaced by V8.PreParseMicroSeconds. </obsolete> @@ -129170,7 +131478,8 @@ <summary>Time spent preparsing source code.</summary> </histogram> -<histogram name="V8.PreParseMicroSeconds" units="microseconds"> +<histogram name="V8.PreParseMicroSeconds" units="microseconds" + expires_after="2016-10-26"> <obsolete> Deprecated. </obsolete> @@ -129178,7 +131487,7 @@ <summary>Time spent preparsing source code.</summary> </histogram> -<histogram name="V8.Rewriting"> +<histogram name="V8.Rewriting" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -129186,7 +131495,7 @@ <summary>Time spent on rewriting ASTs before compilation.</summary> </histogram> -<histogram name="V8.RSetLO"> +<histogram name="V8.RSetLO" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -129194,7 +131503,7 @@ <summary>TBD</summary> </histogram> -<histogram name="V8.RSetPaged"> +<histogram name="V8.RSetPaged" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -129202,7 +131511,7 @@ <summary>TBD</summary> </histogram> -<histogram name="V8.ScriptCache"> +<histogram name="V8.ScriptCache" expires_after="2015-01-27"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -129354,7 +131663,7 @@ </summary> </histogram> -<histogram name="V8.UsageAnalysis"> +<histogram name="V8.UsageAnalysis" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -129362,7 +131671,7 @@ <summary>Time spent analysing the usage of variables.</summary> </histogram> -<histogram name="V8.VariableAllocation"> +<histogram name="V8.VariableAllocation" expires_after="2014-09-16"> <obsolete> This histogram is no longer present in V8. </obsolete> @@ -129466,7 +131775,8 @@ </summary> </histogram> -<histogram name="V8.WasmExecutionTimeMicroSeconds" units="microseconds"> +<histogram name="V8.WasmExecutionTimeMicroSeconds" units="microseconds" + expires_after="2019-03-12"> <obsolete> Deprecated 03/2019. No longer tracked. </obsolete> @@ -129634,7 +131944,8 @@ </summary> </histogram> -<histogram name="Variations.DisabledNoEntropyProvider" enum="BooleanHit"> +<histogram name="Variations.DisabledNoEntropyProvider" enum="BooleanHit" + expires_after="2013-06-07"> <obsolete> Deprecated 1/2013. No longer tracked. </obsolete> @@ -129645,7 +131956,8 @@ </summary> </histogram> -<histogram name="Variations.FailedRequestErrorCode" enum="NetErrorCodes"> +<histogram name="Variations.FailedRequestErrorCode" enum="NetErrorCodes" + expires_after="2016-10-03"> <obsolete> Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode. </obsolete> @@ -129656,7 +131968,8 @@ </summary> </histogram> -<histogram name="Variations.FetchNotModifiedLatency" units="ms"> +<histogram name="Variations.FetchNotModifiedLatency" units="ms" + expires_after="2014-02-26"> <obsolete> Deprecated 2/2014. No longer tracked. </obsolete> @@ -129667,7 +131980,8 @@ </summary> </histogram> -<histogram name="Variations.FetchOtherLatency" units="ms"> +<histogram name="Variations.FetchOtherLatency" units="ms" + expires_after="2014-02-26"> <obsolete> Deprecated 2/2014. No longer tracked. </obsolete> @@ -129678,7 +131992,8 @@ </summary> </histogram> -<histogram name="Variations.FetchSuccessLatency" units="ms"> +<histogram name="Variations.FetchSuccessLatency" units="ms" + expires_after="2014-02-26"> <obsolete> Deprecated 2/2014. No longer tracked. </obsolete> @@ -129789,7 +132104,8 @@ </summary> </histogram> -<histogram name="Variations.NetworkAvailability" enum="BooleanSuccess"> +<histogram name="Variations.NetworkAvailability" enum="BooleanSuccess" + expires_after="2013-04-19"> <obsolete> Deprecated 9/2012. No longer tracked. </obsolete> @@ -129819,7 +132135,8 @@ </summary> </histogram> -<histogram name="Variations.SafeMode.FellBackToSafeMode" enum="BooleanSafeMode"> +<histogram name="Variations.SafeMode.FellBackToSafeMode" enum="BooleanSafeMode" + expires_after="2018-01-29"> <obsolete> Deprecated as of M66 / Jan 2018. Replaced by Variations.SafeMode.FellBackToSafeMode2. @@ -129914,7 +132231,8 @@ </summary> </histogram> -<histogram name="Variations.SeedDateSkew.BuildTimeAheadBy" units="days"> +<histogram name="Variations.SeedDateSkew.BuildTimeAheadBy" units="days" + expires_after="2015-10-01"> <obsolete> Deprecated as of 9/2015. </obsolete> @@ -129927,7 +132245,8 @@ </summary> </histogram> -<histogram name="Variations.SeedDateSkew.BuildTimeBehindBy" units="days"> +<histogram name="Variations.SeedDateSkew.BuildTimeBehindBy" units="days" + expires_after="2015-10-01"> <obsolete> Deprecated as of 9/2015. </obsolete> @@ -129940,7 +132259,8 @@ </summary> </histogram> -<histogram name="Variations.SeedDateSkew.SystemClockAheadBy" units="days"> +<histogram name="Variations.SeedDateSkew.SystemClockAheadBy" units="days" + expires_after="2015-10-01"> <obsolete> Deprecated as of 9/2015. </obsolete> @@ -129953,7 +132273,8 @@ </summary> </histogram> -<histogram name="Variations.SeedDateSkew.SystemClockBehindBy" units="days"> +<histogram name="Variations.SeedDateSkew.SystemClockBehindBy" units="days" + expires_after="2015-10-01"> <obsolete> Deprecated as of 9/2015. </obsolete> @@ -129966,7 +132287,8 @@ </summary> </histogram> -<histogram name="Variations.SeedEmpty" enum="VariationsSeedLoadResult"> +<histogram name="Variations.SeedEmpty" enum="VariationsSeedLoadResult" + expires_after="2017-06-14"> <obsolete> Deprecated in M61, and replaced by Variations.SeedLoadResult. This histogram incorrectly conflated failures from loading the seed with failures while @@ -129979,7 +132301,8 @@ </summary> </histogram> -<histogram name="Variations.SeedFetchResponseCode" enum="HttpResponseCode"> +<histogram name="Variations.SeedFetchResponseCode" enum="HttpResponseCode" + expires_after="2016-10-03"> <obsolete> Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode. </obsolete> @@ -130058,7 +132381,7 @@ </histogram> <histogram name="Variations.ServerStudyExpiredUniformity1Percent" - enum="BooleanExpired"> + enum="BooleanExpired" expires_after="2013-06-07"> <obsolete> Deprecated 11/2012. No longer tracked. </obsolete> @@ -130192,7 +132515,8 @@ </summary> </histogram> -<histogram name="Variations.UniformityTrialExpired" enum="BooleanHit"> +<histogram name="Variations.UniformityTrialExpired" enum="BooleanHit" + expires_after="2013-06-07"> <obsolete> Deprecated 1/2013. No longer tracked. </obsolete> @@ -130205,7 +132529,7 @@ </histogram> <histogram name="Variations.UniformityTrialGroupNotActive" - enum="UniformityTrialGroupNotActive"> + enum="UniformityTrialGroupNotActive" expires_after="2013-06-07"> <obsolete> Deprecated 1/2013. No longer tracked. </obsolete> @@ -130348,7 +132672,8 @@ </summary> </histogram> -<histogram name="VirtualKeyboard.KeystrokesBetweenBackspace"> +<histogram name="VirtualKeyboard.KeystrokesBetweenBackspace" + expires_after="2016-04-29"> <obsolete> Deprecated 04/2016 as doesn't have data nor owner. </obsolete> @@ -130480,7 +132805,7 @@ </histogram> <histogram name="VR.Component.Assets.DurationUntilReady.OnChromeStart" - units="ms"> + units="ms" expires_after="2018-02-06"> <obsolete> Deprecated 02/2018 in issue 799074. VR.Component.Assets.DurationUntilReady.OnRegisterComponent measures the @@ -130607,7 +132932,8 @@ </summary> </histogram> -<histogram name="VRAutopresentedWebVR" enum="Boolean"> +<histogram name="VRAutopresentedWebVR" enum="Boolean" + expires_after="2019-02-20"> <obsolete> Deprecated as of 02/2019, VR DLAs are no longer supported. </obsolete> @@ -130655,7 +132981,7 @@ </summary> </histogram> -<histogram name="VRSessionTimeFromDLA" units="ms"> +<histogram name="VRSessionTimeFromDLA" units="ms" expires_after="2019-02-20"> <obsolete> Deprecated as of 02/2019, VR DLAs are no longer supported. </obsolete> @@ -130721,7 +133047,8 @@ </summary> </histogram> -<histogram name="Wallet.ApiCallDuration.SaveAddress" units="ms"> +<histogram name="Wallet.ApiCallDuration.SaveAddress" units="ms" + expires_after="2013-07-20"> <obsolete> Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet. </obsolete> @@ -130732,7 +133059,8 @@ </summary> </histogram> -<histogram name="Wallet.ApiCallDuration.SaveInstrument" units="ms"> +<histogram name="Wallet.ApiCallDuration.SaveInstrument" units="ms" + expires_after="2013-07-20"> <obsolete> Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet. </obsolete> @@ -130743,7 +133071,8 @@ </summary> </histogram> -<histogram name="Wallet.ApiCallDuration.SaveInstrumentAndAddress" units="ms"> +<histogram name="Wallet.ApiCallDuration.SaveInstrumentAndAddress" units="ms" + expires_after="2013-07-20"> <obsolete> Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet. </obsolete> @@ -130777,7 +133106,8 @@ </summary> </histogram> -<histogram name="Wallet.ApiCallDuration.UpdateAddress" units="ms"> +<histogram name="Wallet.ApiCallDuration.UpdateAddress" units="ms" + expires_after="2013-07-20"> <obsolete> Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet. </obsolete> @@ -130788,7 +133118,8 @@ </summary> </histogram> -<histogram name="Wallet.ApiCallDuration.UpdateInstrument" units="ms"> +<histogram name="Wallet.ApiCallDuration.UpdateInstrument" units="ms" + expires_after="2013-07-20"> <obsolete> Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet. </obsolete> @@ -130812,7 +133143,8 @@ <summary>HTTP response codes seen by Wallet client.</summary> </histogram> -<histogram name="Web.CertVerifyAgreement" enum="WebCertVerifyAgreement"> +<histogram name="Web.CertVerifyAgreement" enum="WebCertVerifyAgreement" + expires_after="2016-08-15"> <obsolete> Deprecated 08/2016 because CertVerifier is not used for web view cert verification. @@ -130843,7 +133175,8 @@ </summary> </histogram> -<histogram name="Web.CurrentURLEqualsLastCommittedURL" enum="BooleanEqual"> +<histogram name="Web.CurrentURLEqualsLastCommittedURL" enum="BooleanEqual" + expires_after="2017-09-13"> <obsolete> Deprecated as of 9/2013, replaced by Web.CurrentOriginEqualsLastCommittedOrigin. @@ -130873,7 +133206,8 @@ </summary> </histogram> -<histogram name="WebApk.Install.AvailableSpace.Success" units="MB"> +<histogram name="WebApk.Install.AvailableSpace.Success" units="MB" + expires_after="2017-10-27"> <obsolete> Deprecated 2017-09. As of M64, this is no longer recorded. </obsolete> @@ -130889,7 +133223,8 @@ </summary> </histogram> -<histogram name="WebApk.Install.AvailableSpaceAfterFreeUpAll.Fail" units="MB"> +<histogram name="WebApk.Install.AvailableSpaceAfterFreeUpAll.Fail" units="MB" + expires_after="2018-07-11"> <obsolete> Deprecated in Chrome M69. </obsolete> @@ -130944,7 +133279,8 @@ </summary> </histogram> -<histogram name="WebApk.Install.ChromeUnimportantStorage.Fail" units="MB"> +<histogram name="WebApk.Install.ChromeUnimportantStorage.Fail" units="MB" + expires_after="2018-07-11"> <obsolete> Deprecated in Chrome M69. </obsolete> @@ -130958,7 +133294,8 @@ </summary> </histogram> -<histogram name="WebApk.Install.GooglePlayBindDuration" units="ms"> +<histogram name="WebApk.Install.GooglePlayBindDuration" units="ms" + expires_after="2018-07-11"> <obsolete> Deprecated in Chrome M69. </obsolete> @@ -130994,7 +133331,7 @@ </histogram> <histogram name="WebApk.Install.GooglePlayInstallState" - enum="WebApkGooglePlayInstallState"> + enum="WebApkGooglePlayInstallState" expires_after="2017-07-11"> <obsolete> Deleted in M61. </obsolete> @@ -131011,7 +133348,8 @@ </summary> </histogram> -<histogram name="WebApk.Install.InfoBarShown" enum="WebApkInstallInfoBarShown"> +<histogram name="WebApk.Install.InfoBarShown" enum="WebApkInstallInfoBarShown" + expires_after="2017-08-21"> <obsolete> Deprecated 2017-08. As of M62, this is no longer recorded. </obsolete> @@ -131049,7 +133387,8 @@ </summary> </histogram> -<histogram name="WebApk.Install.InstallSource" enum="WebApkInstallSource"> +<histogram name="WebApk.Install.InstallSource" enum="WebApkInstallSource" + expires_after="2018-03-20"> <obsolete> No longer recorded as of M65. </obsolete> @@ -131087,7 +133426,8 @@ </summary> </histogram> -<histogram name="WebApk.Install.UserAction" enum="WebApkUserAction"> +<histogram name="WebApk.Install.UserAction" enum="WebApkUserAction" + expires_after="2017-08-21"> <obsolete> Deprecated 2017-08. As of M62, this is no longer recorded. </obsolete> @@ -131113,7 +133453,7 @@ </summary> </histogram> -<histogram name="WebApk.LaunchInterval" units="ms"> +<histogram name="WebApk.LaunchInterval" units="ms" expires_after="2018-01-24"> <obsolete> Deprecated 2018-01. Replaced by WebApk.LaunchInterval2 </obsolete> @@ -131146,7 +133486,8 @@ </summary> </histogram> -<histogram name="WebApk.OpenFromMenu" enum="WebApkOpenResult"> +<histogram name="WebApk.OpenFromMenu" enum="WebApkOpenResult" + expires_after="2018-07-11"> <obsolete> Deprecated in Chrome M69. </obsolete> @@ -131161,7 +133502,7 @@ </histogram> <histogram name="WebApk.Permission.ChromePermissionDenied" - enum="WebApkPermissionType"> + enum="WebApkPermissionType" expires_after="2017-12-05"> <obsolete> Deprecated 2017-11. This UMA logs extra requests. Replaced by ChromePermissionDenied2. @@ -131198,7 +133539,8 @@ </summary> </histogram> -<histogram name="WebApk.Session.TotalDuration" units="ms"> +<histogram name="WebApk.Session.TotalDuration" units="ms" + expires_after="2018-08-29"> <obsolete> Deprecated 2018-08 in favour of WebApk.Session.TotalDuration2. </obsolete> @@ -131221,7 +133563,7 @@ </summary> </histogram> -<histogram base="true" name="WebApk.ShellApkVersion"> +<histogram base="true" name="WebApk.ShellApkVersion" expires_after="2018-08-29"> <obsolete> Deprecated 2018-08 in favour of WebApk.ShellApkVersion2. </obsolete> @@ -131407,7 +133749,8 @@ </summary> </histogram> -<histogram name="Webapp.Install.InstallSource" enum="WebAppInstallSource"> +<histogram name="Webapp.Install.InstallSource" enum="WebAppInstallSource" + expires_after="2018-01-18"> <obsolete> Deprecated 2018-01 in favour of Webapp.Install.InstallEvent. </obsolete> @@ -131529,7 +133872,8 @@ </summary> </histogram> -<histogram name="WebAudio.AudioBuffer.SampleRate" units="Hz"> +<histogram name="WebAudio.AudioBuffer.SampleRate" units="Hz" + expires_after="2016-10-12"> <obsolete> Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher supported sample rates. @@ -131551,7 +133895,8 @@ </summary> </histogram> -<histogram name="WebAudio.AudioBuffer.SampleRateRatio"> +<histogram name="WebAudio.AudioBuffer.SampleRateRatio" + expires_after="2016-10-12"> <obsolete> Replaced by SampleRateRatio384kHz in Issue 644683 on 2016/10 due to higher supported sample rates. @@ -131636,7 +133981,8 @@ </summary> </histogram> -<histogram name="WebAudio.AudioParam.ValueSetterConflictCount"> +<histogram name="WebAudio.AudioParam.ValueSetterConflictCount" + expires_after="2018-02-08"> <obsolete> Removed 02/2018 in Issue 764396. Information no longer needed or recorded. </obsolete> @@ -131649,7 +133995,8 @@ </summary> </histogram> -<histogram name="WebAudio.AudioParam.ValueSetterConflictPercentage"> +<histogram name="WebAudio.AudioParam.ValueSetterConflictPercentage" + expires_after="2018-02-08"> <obsolete> Removed 02/2018 in Issue 764396. Information no longer needed or recorded. </obsolete> @@ -131662,7 +134009,8 @@ </summary> </histogram> -<histogram name="WebAudio.AudioParam.ValueSetterCount"> +<histogram name="WebAudio.AudioParam.ValueSetterCount" + expires_after="2018-02-08"> <obsolete> Removed 02/2018 in Issue 764396. Information no longer needed or recorded. </obsolete> @@ -131711,7 +134059,7 @@ </summary> </histogram> -<histogram name="WebAudio.BiquadFilter.Q.Highpass"> +<histogram name="WebAudio.BiquadFilter.Q.Highpass" expires_after="2017-10-16"> <obsolete> Removed in Issue 774526 on 2017/10; statistics aren't needed anymore. </obsolete> @@ -131725,7 +134073,7 @@ </summary> </histogram> -<histogram name="WebAudio.BiquadFilter.Q.Lowpass"> +<histogram name="WebAudio.BiquadFilter.Q.Lowpass" expires_after="2017-10-16"> <obsolete> Removed in Issue 774526 on 2017/10; statistics aren't needed anymore. </obsolete> @@ -131780,7 +134128,8 @@ </summary> </histogram> -<histogram name="WebAudio.OfflineAudioContext.SampleRate" units="Hz"> +<histogram name="WebAudio.OfflineAudioContext.SampleRate" units="Hz" + expires_after="2016-10-12"> <obsolete> Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher supported sample rates. @@ -131836,7 +134185,8 @@ </summary> </histogram> -<histogram name="WebAudio.UserGesture" enum="UserGestureRequirement"> +<histogram name="WebAudio.UserGesture" enum="UserGestureRequirement" + expires_after="2016-09-30"> <obsolete> Deprecated 2016-09. As of M55, this is no longer recorded. </obsolete> @@ -131970,7 +134320,8 @@ </summary> </histogram> -<histogram name="WebCore.Animation.CSSProperties" enum="MappedCSSProperties"> +<histogram name="WebCore.Animation.CSSProperties" enum="MappedCSSProperties" + expires_after="2018-09-19"> <obsolete> This has been superseded by Blink.UseCounter.CSSProperties which does not count multiple times per page load. See https://crbug.com/458925. @@ -131984,7 +134335,8 @@ </summary> </histogram> -<histogram name="WebCore.CanvasContextUsage" enum="CanvasContextUsage"> +<histogram name="WebCore.CanvasContextUsage" enum="CanvasContextUsage" + expires_after="2018-10-23"> <obsolete> Deprecated 10/2018 with Blink.Canvas.IsComposited, Blink.Canvas.ResourceProviderIsAccelerated, @@ -132029,7 +134381,8 @@ </summary> </histogram> -<histogram name="WebCore.FeatureObserver" enum="FeatureObserver"> +<histogram name="WebCore.FeatureObserver" enum="FeatureObserver" + expires_after="2017-11-01"> <obsolete> As of M57 this has been superseded by Blink.UseCounter.Features which fixes a number of issues. See https://crbug.com/676837. @@ -132043,7 +134396,7 @@ </histogram> <histogram name="WebCore.FeatureObserver.CSSProperties" - enum="MappedCSSProperties"> + enum="MappedCSSProperties" expires_after="2017-11-01"> <obsolete> As of M57 this has been superseded by Blink.UseCounter.CSSProperties which fixes a number of issues. See https://crbug.com/676837. @@ -132065,7 +134418,8 @@ </summary> </histogram> -<histogram name="WebCore.Framebust" enum="FramebustPermissions"> +<histogram name="WebCore.Framebust" enum="FramebustPermissions" + expires_after="2018-09-26"> <obsolete> Deprecated in September 2018 for a version that also tracks if the frame is an ad frame. @@ -132103,7 +134457,8 @@ </summary> </histogram> -<histogram name="WebCore.Framebust2" enum="FramebustPermissionsPlusAds"> +<histogram name="WebCore.Framebust2" enum="FramebustPermissionsPlusAds" + expires_after="2019-03-27"> <obsolete> Deprecated in March 2019. </obsolete> @@ -132152,7 +134507,7 @@ </histogram> <histogram name="WebCore.IndexedDB.BackingStore.InternalError" - enum="IDBLevelDBBackingStoreInternalErrorType"> + enum="IDBLevelDBBackingStoreInternalErrorType" expires_after="2013-04-11"> <obsolete> As of chrome 26, use {Consistency, Read, Write}Error instead. </obsolete> @@ -132234,7 +134589,7 @@ </histogram> <histogram name="WebCore.IndexedDB.FrontEndAPICalls" - enum="IndexedDatabaseMethods"> + enum="IndexedDatabaseMethods" expires_after="2018-07-23"> <obsolete> Deprecated as of July 2018. </obsolete> @@ -132253,7 +134608,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDB.FreeDiskSpaceFailure" - enum="LevelDBErrorCount"> + enum="LevelDBErrorCount" expires_after="2019-01-08"> <obsolete> Deprecated 1/19. Metric never actually worked, as -1 / 1024 yields 0. </obsolete> @@ -132264,7 +134619,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.LevelDB.OpenFailureFreeDiskSpace" units="Kb"> +<histogram name="WebCore.IndexedDB.LevelDB.OpenFailureFreeDiskSpace" units="Kb" + expires_after="2019-01-08"> <obsolete> Deprecated 1/19. Use Quota.AvailableDiskSpace instead. </obsolete> @@ -132275,7 +134631,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.LevelDB.OpenSuccessFreeDiskSpace" units="Kb"> +<histogram name="WebCore.IndexedDB.LevelDB.OpenSuccessFreeDiskSpace" units="Kb" + expires_after="2019-01-08"> <obsolete> Deprecated 1/19. Use Quota.AvailableDiskSpace instead. </obsolete> @@ -132301,7 +134658,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.LevelDB.Transaction.CommitTime" units="ms"> +<histogram name="WebCore.IndexedDB.LevelDB.Transaction.CommitTime" units="ms" + expires_after="2018-11-28"> <obsolete> Removed in M72. </obsolete> @@ -132354,7 +134712,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno" - enum="PopularOSErrno"> + enum="PopularOSErrno" expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE. </obsolete> @@ -132366,7 +134724,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE" - enum="PlatformFileError"> + enum="PlatformFileError" expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE. </obsolete> @@ -132411,7 +134769,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno" - enum="PopularOSErrno"> + enum="PopularOSErrno" expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE. </obsolete> @@ -132423,7 +134781,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE" - enum="PlatformFileError"> + enum="PlatformFileError" expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE. </obsolete> @@ -132469,7 +134827,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno" - enum="PopularOSErrno"> + enum="PopularOSErrno" expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE. </obsolete> @@ -132481,7 +134839,7 @@ </histogram> <histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE" - enum="PlatformFileError"> + enum="PlatformFileError" expires_after="2015-03-24"> <obsolete> Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE. </obsolete> @@ -132512,7 +134870,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.OpenTime.Blocked" units="ms"> +<histogram name="WebCore.IndexedDB.OpenTime.Blocked" units="ms" + expires_after="2018-11-16"> <obsolete> Deprecated 2018-11. No longer needed. </obsolete> @@ -132523,7 +134882,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.OpenTime.Error" units="ms"> +<histogram name="WebCore.IndexedDB.OpenTime.Error" units="ms" + expires_after="2018-11-16"> <obsolete> Deprecated 2018-11. No longer needed. </obsolete> @@ -132534,7 +134894,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.OpenTime.Success" units="ms"> +<histogram name="WebCore.IndexedDB.OpenTime.Success" units="ms" + expires_after="2018-11-16"> <obsolete> Deprecated 2018-11. No longer needed. </obsolete> @@ -132545,7 +134906,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.OpenTime.UpgradeNeeded" units="ms"> +<histogram name="WebCore.IndexedDB.OpenTime.UpgradeNeeded" units="ms" + expires_after="2018-11-16"> <obsolete> Deprecated 2018-11. No longer needed. </obsolete> @@ -132581,7 +134943,8 @@ </summary> </histogram> -<histogram name="WebCore.IndexedDB.PutValueSize" units="KB"> +<histogram name="WebCore.IndexedDB.PutValueSize" units="KB" + expires_after="2017-06-09"> <obsolete> Replaced with WebCore.IndexedDB.PutValueSize2 on 6/2017 </obsolete> @@ -132809,7 +135172,7 @@ </histogram> <histogram name="WebCore.IndexedDB.Transaction.ReadOnly.SizeOnCommit" - units="KB"> + units="KB" expires_after="2017-06-09"> <obsolete> Replaced with WebCore.IndexedDB.Transaction.ReadOnly.SizeOnCommit2 on 6/2017 </obsolete> @@ -132841,7 +135204,7 @@ </histogram> <histogram name="WebCore.IndexedDB.Transaction.ReadWrite.SizeOnCommit" - units="KB"> + units="KB" expires_after="2017-06-09"> <obsolete> Replaced with WebCore.IndexedDB.Transaction.ReadWrite.SizeOnCommit2 on 6/2017 @@ -132874,7 +135237,7 @@ </histogram> <histogram name="WebCore.IndexedDB.Transaction.VersionChange.SizeOnCommit" - units="KB"> + units="KB" expires_after="2017-06-09"> <obsolete> Replaced with WebCore.IndexedDB.Transaction.VersionChange.SizeOnCommit2 on 6/2017 @@ -132920,7 +135283,7 @@ </summary> </histogram> -<histogram name="WebCore.PreloadDelayMs" units="ms"> +<histogram name="WebCore.PreloadDelayMs" units="ms" expires_after="2017-10-05"> <obsolete> Deprecated, preloads are issued on the main thread now, so this is less useful. @@ -132941,7 +135304,7 @@ </summary> </histogram> -<histogram name="WebCore.ResourceFetcher.HitCount"> +<histogram name="WebCore.ResourceFetcher.HitCount" expires_after="2017-04-24"> <obsolete> Deprecated April 2017. </obsolete> @@ -132952,7 +135315,7 @@ </summary> </histogram> -<histogram name="WebCore.ResourceFetcher.LoadCount"> +<histogram name="WebCore.ResourceFetcher.LoadCount" expires_after="2017-04-24"> <obsolete> Deprecated April 2017. </obsolete> @@ -132973,7 +135336,7 @@ </histogram> <histogram name="WebCore.ResourceFetcher.ResourceTypeUponCacheHit" - enum="ResourceType"> + enum="ResourceType" expires_after="2016-07-17"> <obsolete> This metric has been not recorded at least since 2016/01. The displayed enum labels might be unreliable because C++ enum values of blink::Resource::Type @@ -132985,7 +135348,8 @@ </summary> </histogram> -<histogram name="WebCore.ResourceFetcher.RevalidateCount"> +<histogram name="WebCore.ResourceFetcher.RevalidateCount" + expires_after="2017-04-24"> <obsolete> Deprecated April 2017. </obsolete> @@ -132997,7 +135361,7 @@ </histogram> <histogram name="WebCore.ScriptedIdleTaskController.IdleCallbackDeadline" - units="ms"> + units="ms" expires_after="2017-12-07"> <obsolete> Deprecated November 2017. </obsolete> @@ -133096,7 +135460,7 @@ </histogram> <histogram name="WebCore.Scripts.ParsingBlocking.AlreadyLoaded" - enum="BooleanLoaded"> + enum="BooleanLoaded" expires_after="2015-03-24"> <obsolete> Deprecated as this data was needed for streaming investigations, no longer needed. @@ -133121,7 +135485,7 @@ </histogram> <histogram name="WebCore.Scripts.ParsingBlocking.TimeBetweenLoadedAndCompiled" - units="ms"> + units="ms" expires_after="2015-03-24"> <obsolete> Deprecated as this data was needed for streaming investigations, no longer needed. @@ -133143,14 +135507,15 @@ </histogram> <histogram name="WebCore.UseCounter_TEST.CSSProperties" - enum="MappedCSSProperties"> + enum="MappedCSSProperties" expires_after="2017-01-06"> <obsolete> Temporary histogram replaced by Blink.UseCounter.CSSProperties. </obsolete> <owner>rbyers@chromium.org</owner> </histogram> -<histogram name="WebCore.UseCounter_TEST.Features" enum="FeatureObserver"> +<histogram name="WebCore.UseCounter_TEST.Features" enum="FeatureObserver" + expires_after="2017-01-06"> <obsolete> Temporary histogram replaced by Blink.UseCounter.Features. </obsolete> @@ -133158,7 +135523,7 @@ </histogram> <histogram name="WebCore.UseCounter_TEST.SVGImage.CSSProperties" - enum="MappedCSSProperties"> + enum="MappedCSSProperties" expires_after="2017-01-06"> <obsolete> Temporary histogram replaced by Blink.UseCounter.SVGImage.CSSProperties. </obsolete> @@ -133166,7 +135531,7 @@ </histogram> <histogram name="WebCore.UseCounter_TEST.SVGImage.Features" - enum="FeatureObserver"> + enum="FeatureObserver" expires_after="2017-01-06"> <obsolete> Temporary histogram replaced by Blink.UseCounter.SVGImage.Features. </obsolete> @@ -133174,7 +135539,7 @@ </histogram> <histogram name="WebCore.V8DOMWindowShell.createContext.IsolatedWorld" - units="ms"> + units="ms" expires_after="2014-08-12"> <obsolete> Deprecated 05/2013, we no longer have the code that uses this metric. </obsolete> @@ -133184,7 +135549,8 @@ </summary> </histogram> -<histogram name="WebCore.V8DOMWindowShell.createContext.MainWorld" units="ms"> +<histogram name="WebCore.V8DOMWindowShell.createContext.MainWorld" units="ms" + expires_after="2014-08-12"> <obsolete> Deprecated 05/2013, we no longer have the code that uses this metric. </obsolete> @@ -133194,7 +135560,8 @@ </summary> </histogram> -<histogram name="WebCore.WebSocket.BinaryTypeChangesAfterOpen"> +<histogram name="WebCore.WebSocket.BinaryTypeChangesAfterOpen" + expires_after="2017-06-12"> <obsolete> Deprecate 2017-06, as we've collected enough data to discuss. (see issue 584616). @@ -133211,7 +135578,7 @@ </histogram> <histogram name="WebCore.WebSocket.HandshakeResult" - enum="WebSocketHandshakeResult"> + enum="WebSocketHandshakeResult" expires_after="2017-06-02"> <obsolete> Deprecated 2014-06 when we replaced the WebSocket implementation (see issue 226931). @@ -133243,7 +135610,8 @@ </histogram> <histogram name="WebCore.WebSocket.PerMessageDeflateContextTakeOverMode" - enum="WebSocketPerMessageDeflateContextTakeOverMode"> + enum="WebSocketPerMessageDeflateContextTakeOverMode" + expires_after="2017-06-02"> <obsolete> Deprecated 2014-06 when we replaced the WebSocket implementation (see issue 226931). @@ -133275,7 +135643,7 @@ </histogram> <histogram name="WebCore.XHR.send.ArrayBufferOrView" - enum="XMLHttpRequestSendArrayBufferOrView"> + enum="XMLHttpRequestSendArrayBufferOrView" expires_after="2014-07-09"> <obsolete> Deprecated as of 7/2014. This histogram was used to determine when it would be ok to remove the deprecated XMLHttpRequest.send(ArrayBuffer) overload. @@ -133449,7 +135817,8 @@ </summary> </histogram> -<histogram name="WebFont.InterventionResult" enum="WebFontInterventionResult"> +<histogram name="WebFont.InterventionResult" enum="WebFontInterventionResult" + expires_after="2017-10-19"> <obsolete> Deprecated 10/2017. Related field trial has finished rolling out. </obsolete> @@ -133464,7 +135833,7 @@ </histogram> <histogram name="WebFont.InterventionResult.MissedCache" - enum="WebFontInterventionResult"> + enum="WebFontInterventionResult" expires_after="2017-11-02"> <obsolete> Deprecated 10/2017. Related field trial has finished rolling out. </obsolete> @@ -133478,7 +135847,7 @@ </summary> </histogram> -<histogram name="WebFont.LayoutLatency" units="ms"> +<histogram name="WebFont.LayoutLatency" units="ms" expires_after="2013-08-22"> <obsolete> Renamed to WebFont.StyleRecalcToDownloadLatency for clarity. </obsolete> @@ -133501,7 +135870,8 @@ </summary> </histogram> -<histogram name="WebFont.LoadTime.0.Under10KB" units="ms"> +<histogram name="WebFont.LoadTime.0.Under10KB" units="ms" + expires_after="2013-08-08"> <obsolete> Deprecated as of 8/2013, replaced by WebFont.DownloadTime.0.Under10KB. </obsolete> @@ -133513,7 +135883,8 @@ </summary> </histogram> -<histogram name="WebFont.LoadTime.1.10KBTo50KB" units="ms"> +<histogram name="WebFont.LoadTime.1.10KBTo50KB" units="ms" + expires_after="2013-08-08"> <obsolete> Deprecated as of 8/2013, replaced by WebFont.DownloadTime.1.10KBTo50KB. </obsolete> @@ -133525,7 +135896,8 @@ </summary> </histogram> -<histogram name="WebFont.LoadTime.2.50KBTo100KB" units="ms"> +<histogram name="WebFont.LoadTime.2.50KBTo100KB" units="ms" + expires_after="2013-08-08"> <obsolete> Deprecated as of 8/2013, replaced by WebFont.DownloadTime.2.50KBTo100KB. </obsolete> @@ -133537,7 +135909,8 @@ </summary> </histogram> -<histogram name="WebFont.LoadTime.3.100KBTo1MB" units="ms"> +<histogram name="WebFont.LoadTime.3.100KBTo1MB" units="ms" + expires_after="2013-08-08"> <obsolete> Deprecated as of 8/2013, replaced by WebFont.DownloadTime.3.100KBTo1MB. </obsolete> @@ -133549,7 +135922,8 @@ </summary> </histogram> -<histogram name="WebFont.LoadTime.4.Over1MB" units="ms"> +<histogram name="WebFont.LoadTime.4.Over1MB" units="ms" + expires_after="2013-08-08"> <obsolete> Deprecated as of 8/2013, replaced by WebFont.DownloadTime.4.Over1MB. </obsolete> @@ -133561,7 +135935,8 @@ </summary> </histogram> -<histogram name="WebFont.LoadTime.LoadError" units="ms"> +<histogram name="WebFont.LoadTime.LoadError" units="ms" + expires_after="2013-08-08"> <obsolete> Deprecated as of 8/2013, replaced by WebFont.DownloadTime.LoadError. </obsolete> @@ -133593,7 +135968,8 @@ </summary> </histogram> -<histogram name="WebFont.Resource.StyleRecalcToDownloadLatency" units="ms"> +<histogram name="WebFont.Resource.StyleRecalcToDownloadLatency" units="ms" + expires_after="2014-07-18"> <obsolete> Deprecated 11/2013. No longer tracked. </obsolete> @@ -133607,7 +135983,8 @@ </summary> </histogram> -<histogram name="WebFont.Resource.UsageType" enum="WebFontUsageType"> +<histogram name="WebFont.Resource.UsageType" enum="WebFontUsageType" + expires_after="2014-07-18"> <obsolete> Deprecated 11/2013. No longer tracked. </obsolete> @@ -133624,7 +136001,8 @@ </summary> </histogram> -<histogram name="WebFont.StyleRecalcToDownloadLatency" units="ms"> +<histogram name="WebFont.StyleRecalcToDownloadLatency" units="ms" + expires_after="2013-09-05"> <obsolete> Deprecated as of 9/2013, replaced by WebFont.Resource.StyleRecalcToDownloadLatency. @@ -133637,7 +136015,8 @@ </summary> </histogram> -<histogram name="WebFont.UsageType" enum="WebFontUsageType"> +<histogram name="WebFont.UsageType" enum="WebFontUsageType" + expires_after="2013-09-05"> <obsolete> Deprecated as of 9/2013, replaced by WebFont.Resource.UsageType. </obsolete> @@ -133746,7 +136125,8 @@ </summary> </histogram> -<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard"> +<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard" + expires_after="2014-12-28"> <obsolete> Deprecated as of 12/2014, replaced by WebRTC.ApplicationMaxConsecutiveBytesDiscard.v2. @@ -134480,7 +136860,7 @@ </summary> </histogram> -<histogram name="WebRTC.AudioCaptureTime" units="ms"> +<histogram name="WebRTC.AudioCaptureTime" units="ms" expires_after="2014-02-26"> <obsolete> Removed from code 2014/2/25. </obsolete> @@ -134494,7 +136874,8 @@ <summary>Audio input channel layout in WebRTC.</summary> </histogram> -<histogram name="WebRTC.AudioInputFramesPerBuffer" enum="AudioFramesPerBuffer"> +<histogram name="WebRTC.AudioInputFramesPerBuffer" enum="AudioFramesPerBuffer" + expires_after="2014-02-26"> <obsolete> No longer exists in the code as of 2014/2/25. </obsolete> @@ -134503,7 +136884,7 @@ </histogram> <histogram name="WebRTC.AudioInputFramesPerBufferUnexpected" - units="audio frames"> + units="audio frames" expires_after="2014-02-26"> <obsolete> No longer exists in the code as of 2014/2/25. </obsolete> @@ -134525,7 +136906,8 @@ </summary> </histogram> -<histogram name="WebRTC.AudioOutputChannelLayout" enum="ChannelLayout"> +<histogram name="WebRTC.AudioOutputChannelLayout" enum="ChannelLayout" + expires_after="2014-02-26"> <obsolete> Removed from code on 2014/2/25. </obsolete> @@ -134533,7 +136915,8 @@ <summary>Audio output channel layout in WebRTC.</summary> </histogram> -<histogram name="WebRTC.AudioOutputFramesPerBuffer" enum="AudioFramesPerBuffer"> +<histogram name="WebRTC.AudioOutputFramesPerBuffer" enum="AudioFramesPerBuffer" + expires_after="2016-11-24"> <obsolete> Removed from code Sep 2014. </obsolete> @@ -134542,7 +136925,7 @@ </histogram> <histogram name="WebRTC.AudioOutputFramesPerBufferUnexpected" - units="audio frames"> + units="audio frames" expires_after="2016-11-24"> <obsolete> Removed from code Sep 2014. </obsolete> @@ -134564,7 +136947,7 @@ </summary> </histogram> -<histogram name="WebRTC.AudioRenderTime" units="ms"> +<histogram name="WebRTC.AudioRenderTime" units="ms" expires_after="2014-02-26"> <obsolete> Removed from code 2014/2/25. </obsolete> @@ -134572,7 +136955,7 @@ <summary>Duration in milliseconds of WebRTC audio render session.</summary> </histogram> -<histogram name="WebRTC.AudioRenderTimes" units="ms"> +<histogram name="WebRTC.AudioRenderTimes" units="ms" expires_after="2016-08-25"> <obsolete> Deprecated as of Aug 2016, replaced by Media.Audio.Render.GetSourceDataTime.WebRTC. @@ -134796,7 +137179,8 @@ </summary> </histogram> -<histogram name="WebRTC.Call.TimeSendingAudioRtpPacketsInSeconds" units="s"> +<histogram name="WebRTC.Call.TimeSendingAudioRtpPacketsInSeconds" units="s" + expires_after="2018-11-26"> <obsolete> Deprecated 11/2018 due to little use and high implementation complexity. </obsolete> @@ -135212,7 +137596,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.SelectedRtcpMuxPolicy" - enum="PeerConnectionRtcpMuxPolicy"> + enum="PeerConnectionRtcpMuxPolicy" expires_after="2016-12-20"> <obsolete> Deprecated on Dec 2016. This histogram is used to gauge the risk of making the change for issue 6030. The decision has been made and this is not needed @@ -135460,7 +137844,7 @@ </histogram> <histogram name="WebRTC.UserMediaRequest.Result" - enum="MediaStreamRequestResult"> + enum="MediaStreamRequestResult" expires_after="2018-02-13"> <obsolete> Replaced by WebRTC.UserMediaRequest.Result2 in Feb 2018. </obsolete> @@ -136754,7 +139138,8 @@ </summary> </histogram> -<histogram name="WebRTC.webkitApiCountUniqueByOrigin" enum="WebRTCAPIName"> +<histogram name="WebRTC.webkitApiCountUniqueByOrigin" enum="WebRTCAPIName" + expires_after="2014-03-28"> <obsolete> Deprecated as of r253828 (27 Feb 2014). </obsolete> @@ -136852,7 +139237,8 @@ </summary> </histogram> -<histogram name="WebsiteSettings.Action.HttpsUrl" enum="WebsiteSettingsAction"> +<histogram name="WebsiteSettings.Action.HttpsUrl" enum="WebsiteSettingsAction" + expires_after="2016-10-23"> <obsolete> Deprecated October 2016 in favor of Security.PageInfo.Action.HttpsUrl.Valid, Security.PageInfo.Action.HttpsUrl.Dangerous, and @@ -136981,7 +139367,8 @@ </summary> </histogram> -<histogram name="WebsiteSettings.PermissionChanged" enum="ContentType"> +<histogram name="WebsiteSettings.PermissionChanged" enum="ContentType" + expires_after="2014-12-17"> <obsolete> Deprecated 12/2014 in Issue 433776, and replaced by WebsiteSettings.OriginInfo.PermissionChanged. @@ -136996,7 +139383,8 @@ </summary> </histogram> -<histogram name="websql.Async.OpenTime.Error" units="ms"> +<histogram name="websql.Async.OpenTime.Error" units="ms" + expires_after="2018-11-22"> <obsolete> Deprecated 12/2018. We're no longer monitoring WebSQL performance. </obsolete> @@ -137006,7 +139394,8 @@ </summary> </histogram> -<histogram name="websql.Async.OpenTime.Success" units="ms"> +<histogram name="websql.Async.OpenTime.Success" units="ms" + expires_after="2018-11-22"> <obsolete> Deprecated 12/2018. We're no longer monitoring WebSQL performance. </obsolete> @@ -137029,7 +139418,8 @@ </summary> </histogram> -<histogram name="WebstoreWidgetApp.Close" enum="SuggestAppsDialogCloseReason"> +<histogram name="WebstoreWidgetApp.Close" enum="SuggestAppsDialogCloseReason" + expires_after="2019-02-15"> <obsolete> There is no remaining code that is emmiting this metric. It was removed at an unknown time. @@ -137040,7 +139430,8 @@ </summary> </histogram> -<histogram name="WebstoreWidgetApp.Install" enum="SuggestAppsDialogInstall"> +<histogram name="WebstoreWidgetApp.Install" enum="SuggestAppsDialogInstall" + expires_after="2019-02-15"> <obsolete> There is no remaining code that is emmiting this metric. It was removed at an unknown time. @@ -137052,7 +139443,8 @@ </summary> </histogram> -<histogram name="WebstoreWidgetApp.Load" enum="SuggestAppsDialogLoad"> +<histogram name="WebstoreWidgetApp.Load" enum="SuggestAppsDialogLoad" + expires_after="2019-02-15"> <obsolete> There is no remaining code that is emmiting this metric. It was removed at an unknown time. @@ -137064,7 +139456,8 @@ </summary> </histogram> -<histogram name="WebstoreWidgetApp.LoadTime" units="ms"> +<histogram name="WebstoreWidgetApp.LoadTime" units="ms" + expires_after="2019-02-15"> <obsolete> There is no remaining code that is emmiting this metric. It was removed at an unknown time. @@ -137143,7 +139536,8 @@ <summary>Records calls to WebView APIs in WebViewChromium.</summary> </histogram> -<histogram name="WebView.LoadDataWithBaseUrl.HistoryUrl" enum="HistoryUrlType"> +<histogram name="WebView.LoadDataWithBaseUrl.HistoryUrl" enum="HistoryUrlType" + expires_after="2018-04-06"> <obsolete> Obsolete 04/04/2018 as it has been replaced by Android.WebView.LoadDataWithBaseUrl.HistoryUrl. @@ -137239,7 +139633,8 @@ </summary> </histogram> -<histogram name="WindowManager.PanelWindowCountPerLoad"> +<histogram name="WindowManager.PanelWindowCountPerLoad" + expires_after="2015-04-13"> <obsolete> Deprecated 4/2013. No longer tracked. </obsolete> @@ -137436,7 +139831,8 @@ <summary>Count of browser launches from a Windows tablet pc.</summary> </histogram> -<histogram name="Windows.Win32kRendererLockdown" enum="BooleanEnabled"> +<histogram name="Windows.Win32kRendererLockdown" enum="BooleanEnabled" + expires_after="2016-10-11"> <obsolete> Deprecated 10/2016 as this is enabled by default so provides no useful data. </obsolete> @@ -137452,7 +139848,7 @@ <summary>The type of category clicked in the Windows Jumplist</summary> </histogram> -<histogram name="WinJumplist.CreateIconFilesCount"> +<histogram name="WinJumplist.CreateIconFilesCount" expires_after="2017-07-07"> <obsolete> Obsolete 07/06/2017 as we are no long recording this metric. </obsolete> @@ -137463,7 +139859,8 @@ </summary> </histogram> -<histogram name="WinJumplist.CreateIconFilesDuration" units="ms"> +<histogram name="WinJumplist.CreateIconFilesDuration" units="ms" + expires_after="2017-07-07"> <obsolete> Obsolete 07/06/2017 as we are no long recording this metric. </obsolete> @@ -137474,7 +139871,8 @@ </summary> </histogram> -<histogram name="WinJumplist.DeleteDirectoryContentDuration" units="ms"> +<histogram name="WinJumplist.DeleteDirectoryContentDuration" units="ms" + expires_after="2017-07-10"> <obsolete> Obsolete 07/06/2016 as we are no long recording this metric. </obsolete> @@ -137482,7 +139880,8 @@ <summary>Time spent in DeleteDirectoryContentAndLogRuntime().</summary> </histogram> -<histogram name="WinJumplist.DeleteDirectoryDuration" units="ms"> +<histogram name="WinJumplist.DeleteDirectoryDuration" units="ms" + expires_after="2017-05-01"> <obsolete> Obsolete 04/25/2017 as we are no long recording this metric. </obsolete> @@ -137491,7 +139890,7 @@ </histogram> <histogram name="WinJumplist.DeleteStatusJumpListIcons" - enum="JumplisticonsDeleteCategory"> + enum="JumplisticonsDeleteCategory" expires_after="2017-05-01"> <obsolete> Obsolete 04/25/2017 as we are no long recording this metric. </obsolete> @@ -137502,7 +139901,7 @@ </histogram> <histogram name="WinJumplist.DeleteStatusJumpListIconsOld" - enum="JumplisticonsDeleteCategory"> + enum="JumplisticonsDeleteCategory" expires_after="2017-05-01"> <obsolete> Obsolete 04/25/2017 as we are no long recording this metric. </obsolete> @@ -137514,7 +139913,7 @@ </histogram> <histogram name="WinJumplist.DetailedFolderMoveResults" - enum="JumplistIconsDetailedFolderMoveCategory"> + enum="JumplistIconsDetailedFolderMoveCategory" expires_after="2016-12-14"> <obsolete> Obsolete 12/13/2016 as we are no long recording this metric. </obsolete> @@ -137531,7 +139930,8 @@ </histogram> <histogram name="WinJumplist.DetailedFolderResults" - enum="JumplistIconsDetailedFolderOperationCategory"> + enum="JumplistIconsDetailedFolderOperationCategory" + expires_after="2017-03-13"> <obsolete> Obsolete 03/10/2017 as it is replaced by DetailedFolderResultsDeleteUpdated. </obsolete> @@ -137549,7 +139949,8 @@ </histogram> <histogram name="WinJumplist.DetailedFolderResultsDeleteUpdated" - enum="JumplistIconsDetailedFolderOperationDeleteUpdatedCategory"> + enum="JumplistIconsDetailedFolderOperationDeleteUpdatedCategory" + expires_after="2017-03-23"> <obsolete> Obsolete 03/20/2017. New metrics named WinJumplist.DeleteStatusJumpListIcons and WinJumplist.DeleteStatusJumpListIconsOld are used instead. @@ -137570,7 +139971,7 @@ </histogram> <histogram name="WinJumplist.DirectoryStatusJumpListIcons" - enum="JumpListIconsFolderExistOrEmptyCategory"> + enum="JumpListIconsFolderExistOrEmptyCategory" expires_after="2017-05-01"> <obsolete> Obsolete 04/25/2017 as we are no long recording this metric. </obsolete> @@ -137582,7 +139983,7 @@ </histogram> <histogram name="WinJumplist.DirectoryStatusJumpListIconsOld" - enum="JumpListIconsFolderExistOrEmptyCategory"> + enum="JumpListIconsFolderExistOrEmptyCategory" expires_after="2017-05-01"> <obsolete> Obsolete 04/25/2017 as we are no long recording this metric. </obsolete> @@ -137594,7 +139995,7 @@ </histogram> <histogram name="WinJumplist.FolderMoveResults" - enum="JumplistIconsFolderMoveCategory"> + enum="JumplistIconsFolderMoveCategory" expires_after="2016-12-09"> <obsolete> Obsolete 12/08/2016. DetailedFolderMoveResults is used for more detailed analysis. @@ -137612,7 +140013,8 @@ </summary> </histogram> -<histogram name="WinJumplist.FolderResults" enum="JumplisticonsfolderCategory"> +<histogram name="WinJumplist.FolderResults" enum="JumplisticonsfolderCategory" + expires_after="2016-12-14"> <obsolete> Obsolete 12/13/2016, as we are now recording DetailedFolderResults. </obsolete> @@ -137628,7 +140030,8 @@ </summary> </histogram> -<histogram name="WinJumplist.NotificationTimeInterval" units="ms"> +<histogram name="WinJumplist.NotificationTimeInterval" units="ms" + expires_after="2017-07-11"> <obsolete> Obsolete 07/10/2017 as it's no longer needed. </obsolete> @@ -137639,7 +140042,8 @@ </summary> </histogram> -<histogram name="WinJumplist.NotificationTimeInterval2" units="ms"> +<histogram name="WinJumplist.NotificationTimeInterval2" units="ms" + expires_after="2017-07-24"> <obsolete> Obsolete 07/23/2017 as it's no longer needed. </obsolete> @@ -137650,7 +140054,8 @@ </summary> </histogram> -<histogram name="WinJumplist.OnFaviconDataAvailableDuration" units="ms"> +<histogram name="WinJumplist.OnFaviconDataAvailableDuration" units="ms" + expires_after="2017-06-29"> <obsolete> Obsolete 06/22/2017 as it's no longer needed. </obsolete> @@ -137658,7 +140063,8 @@ <summary>Time spent in OnFaviconDataAvailable().</summary> </histogram> -<histogram name="WinJumplist.RatioAddCategoryTime" units="scaled ratio"> +<histogram name="WinJumplist.RatioAddCategoryTime" units="scaled ratio" + expires_after="2017-07-24"> <obsolete> Obsolete 07/23/2017 as it's no longer needed. </obsolete> @@ -137669,7 +140075,8 @@ </summary> </histogram> -<histogram name="WinJumplist.StartLoadingFaviconDuration" units="ms"> +<histogram name="WinJumplist.StartLoadingFaviconDuration" units="ms" + expires_after="2017-06-29"> <obsolete> Obsolete 06/22/2017 as it's no longer needed. </obsolete> @@ -137677,7 +140084,8 @@ <summary>Time spent in StartLoadingFavicon().</summary> </histogram> -<histogram name="WinJumplist.UpdateJumpListDuration" units="ms"> +<histogram name="WinJumplist.UpdateJumpListDuration" units="ms" + expires_after="2017-04-25"> <obsolete> Obsolete 04/20/2017 as it's no longer accurate due to the code change. </obsolete> @@ -137688,7 +140096,8 @@ </summary> </histogram> -<histogram name="WinJumplistUpdater.AddCustomCategoryDuration" units="ms"> +<histogram name="WinJumplistUpdater.AddCustomCategoryDuration" units="ms" + expires_after="2017-07-28"> <obsolete> Obsolete 07/26/2017 as it's no longer needed. </obsolete> @@ -137696,7 +140105,8 @@ <summary>Time spent in JumpListUpdater::AddCustomCategory.</summary> </histogram> -<histogram name="WinJumplistUpdater.AddTasksDuration" units="ms"> +<histogram name="WinJumplistUpdater.AddTasksDuration" units="ms" + expires_after="2017-07-11"> <obsolete> Obsolete 07/10/2017 as it's no longer needed. </obsolete> @@ -137704,7 +140114,8 @@ <summary>Time spent in JumpListUpdater::AddTasks.</summary> </histogram> -<histogram name="WinJumplistUpdater.BeginUpdateDuration" units="ms"> +<histogram name="WinJumplistUpdater.BeginUpdateDuration" units="ms" + expires_after="2017-07-28"> <obsolete> Obsolete 07/26/2017 as it's no longer needed. </obsolete> @@ -137712,7 +140123,8 @@ <summary>Time spent in JumpListUpdater::BeginUpdate.</summary> </histogram> -<histogram name="WinJumplistUpdater.CommitUpdateDuration" units="ms"> +<histogram name="WinJumplistUpdater.CommitUpdateDuration" units="ms" + expires_after="2017-07-28"> <obsolete> Obsolete 07/26/2017 as it's no longer needed. </obsolete> @@ -137720,7 +140132,8 @@ <summary>Time spent in JumpListUpdater::CommitUpdate.</summary> </histogram> -<histogram name="WinTimeTicks.FailedToChangeCores" enum="WindowsVersion"> +<histogram name="WinTimeTicks.FailedToChangeCores" enum="WindowsVersion" + expires_after="2017-01-12"> <obsolete> Removed 01/2017. </obsolete> @@ -137732,7 +140145,8 @@ </summary> </histogram> -<histogram name="WinTimeTicks.MinResolutionNanoseconds" units="nanoseconds"> +<histogram name="WinTimeTicks.MinResolutionNanoseconds" units="nanoseconds" + expires_after="2017-01-12"> <obsolete> Removed 01/2017. </obsolete> @@ -137743,7 +140157,7 @@ </summary> </histogram> -<histogram name="WinTimeTicks.NonStopTsc"> +<histogram name="WinTimeTicks.NonStopTsc" expires_after="2017-01-12"> <obsolete> Removed 01/2017. </obsolete> @@ -137754,7 +140168,8 @@ </summary> </histogram> -<histogram name="WinTimeTicks.TickedBackwards" enum="WindowsVersion"> +<histogram name="WinTimeTicks.TickedBackwards" enum="WindowsVersion" + expires_after="2017-01-12"> <obsolete> Removed 01/2017. </obsolete> @@ -137765,7 +140180,8 @@ </summary> </histogram> -<histogram name="WinTimeTicks.VersionSuccessful" enum="WindowsVersion"> +<histogram name="WinTimeTicks.VersionSuccessful" enum="WindowsVersion" + expires_after="2017-01-12"> <obsolete> Removed 01/2017. </obsolete> @@ -137776,7 +140192,8 @@ </summary> </histogram> -<histogram name="WinTimeTicks.VersionTotal" enum="WindowsVersion"> +<histogram name="WinTimeTicks.VersionTotal" enum="WindowsVersion" + expires_after="2017-01-12"> <obsolete> Removed 01/2017. </obsolete> @@ -137811,7 +140228,8 @@ </summary> </histogram> -<histogram name="WorkerThread.DebuggerTask.Time" units="ms"> +<histogram name="WorkerThread.DebuggerTask.Time" units="ms" + expires_after="2018-02-13"> <obsolete> Deprecated on 2018-02. </obsolete> @@ -137834,7 +140252,7 @@ </summary> </histogram> -<histogram name="WorkerThread.Task.Time" units="ms"> +<histogram name="WorkerThread.Task.Time" units="ms" expires_after="2018-02-13"> <obsolete> Deprecated on 2018-02. The sample count was overflowing. crbug.com/809672. </obsolete>
diff --git a/tools/metrics/histograms/update_histogram_enum.py b/tools/metrics/histograms/update_histogram_enum.py index bcabcdf..59509136 100644 --- a/tools/metrics/histograms/update_histogram_enum.py +++ b/tools/metrics/histograms/update_histogram_enum.py
@@ -228,7 +228,7 @@ source_enum_path, caller_script_name, histograms_doc) - new_xml = histograms_print_style.GetPrintStyle().PrettyPrintNode( + new_xml = histograms_print_style.GetPrintStyle().PrettyPrintXml( histograms_doc) return (xml, new_xml)
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 7bf87f405..3bb08260 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -4690,12 +4690,23 @@ </summary> </metric> <metric name="Net.NetworkBytes"> + <obsolete> + Deprecated 03/2019 in favor of Net.NetworkBytes2. + </obsolete> <summary> The total number of body bytes loaded from the network for all resources on the page. This is rounded down to the nearest exponential bucket (with a bucket spacing factor of 1.3). </summary> </metric> + <metric name="Net.NetworkBytes2"> + <summary> + The total number of bytes loaded from the network for all resources on the + page, including incomplete resources and headers. This is rounded down to + the nearest exponential bucket (with a bucket spacing factor of 1.3). On + mobile this only records bytes up until the page/app is backgrounded. + </summary> + </metric> <metric name="Net.TransportRttEstimate.OnNavigationStart"> <summary> The transport round trip time estimate for this page load, at the time the
diff --git a/ui/aura/mus/window_mus.h b/ui/aura/mus/window_mus.h index d73c38d..fe88f8d 100644 --- a/ui/aura/mus/window_mus.h +++ b/ui/aura/mus/window_mus.h
@@ -35,7 +35,7 @@ class Window; class WindowTreeClient; -// See PrepareForServerBoundsChange() for details on this. +// See PrepareForServerVisibilityChange() for details on this. struct AURA_EXPORT WindowMusChangeData { virtual ~WindowMusChangeData() {} }; @@ -112,8 +112,6 @@ // because it needs to call another function that as a side effect changes the // window. Once the call to the underlying window has completed the returned // object should be destroyed. - virtual std::unique_ptr<WindowMusChangeData> PrepareForServerBoundsChange( - const gfx::Rect& bounds) = 0; virtual std::unique_ptr<WindowMusChangeData> PrepareForServerVisibilityChange( bool value) = 0;
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc index da3ad16..579ecdf 100644 --- a/ui/aura/mus/window_port_mus.cc +++ b/ui/aura/mus/window_port_mus.cc
@@ -584,17 +584,6 @@ } std::unique_ptr<WindowMusChangeData> -WindowPortMus::PrepareForServerBoundsChange(const gfx::Rect& bounds) { - std::unique_ptr<WindowMusChangeDataImpl> data( - std::make_unique<WindowMusChangeDataImpl>()); - ServerChangeData change_data; - change_data.bounds_in_dip = bounds; - data->change = std::make_unique<ScopedServerChange>( - this, ServerChangeType::BOUNDS, change_data); - return std::move(data); -} - -std::unique_ptr<WindowMusChangeData> WindowPortMus::PrepareForServerVisibilityChange(bool value) { std::unique_ptr<WindowMusChangeDataImpl> data( std::make_unique<WindowMusChangeDataImpl>());
diff --git a/ui/aura/mus/window_port_mus.h b/ui/aura/mus/window_port_mus.h index 87040b13..1ea52dc 100644 --- a/ui/aura/mus/window_port_mus.h +++ b/ui/aura/mus/window_port_mus.h
@@ -266,8 +266,6 @@ void RemoveTransientChildFromServer(WindowMus* child) override; ChangeSource OnTransientChildAdded(WindowMus* child) override; ChangeSource OnTransientChildRemoved(WindowMus* child) override; - std::unique_ptr<WindowMusChangeData> PrepareForServerBoundsChange( - const gfx::Rect& bounds) override; std::unique_ptr<WindowMusChangeData> PrepareForServerVisibilityChange( bool value) override; void PrepareForDestroy() override;
diff --git a/ui/aura/window.cc b/ui/aura/window.cc index fe8b3bd..5b2b3c9 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc
@@ -589,6 +589,7 @@ return; event_targeting_policy_ = policy; + layer()->SetAcceptEvents(policy != ws::mojom::EventTargetingPolicy::NONE); if (port_) port_->OnEventTargetingPolicyChanged(); }
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc index 3e95a2b..74a7e22 100644 --- a/ui/aura/window_unittest.cc +++ b/ui/aura/window_unittest.cc
@@ -1590,29 +1590,38 @@ EXPECT_EQ(w121.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); w12->SetEventTargetingPolicy(ws::mojom::EventTargetingPolicy::TARGET_ONLY); EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); + EXPECT_TRUE(w12.get()->layer()->accept_events()); w12->SetEventTargetingPolicy( ws::mojom::EventTargetingPolicy::TARGET_AND_DESCENDANTS); - EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(10, 10))); + EXPECT_TRUE(w12.get()->layer()->accept_events()); w12->SetEventTargetingPolicy(ws::mojom::EventTargetingPolicy::NONE); EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(10, 10))); + EXPECT_FALSE(w12.get()->layer()->accept_events()); + w12->SetEventTargetingPolicy( ws::mojom::EventTargetingPolicy::TARGET_AND_DESCENDANTS); EXPECT_EQ(w121.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); w121->SetEventTargetingPolicy(ws::mojom::EventTargetingPolicy::NONE); EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); + EXPECT_FALSE(w121.get()->layer()->accept_events()); w12->SetEventTargetingPolicy(ws::mojom::EventTargetingPolicy::NONE); EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); + EXPECT_FALSE(w12.get()->layer()->accept_events()); w111->SetEventTargetingPolicy(ws::mojom::EventTargetingPolicy::NONE); EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); + EXPECT_FALSE(w111.get()->layer()->accept_events()); w11->SetEventTargetingPolicy( ws::mojom::EventTargetingPolicy::DESCENDANTS_ONLY); EXPECT_EQ(nullptr, w1->GetEventHandlerForPoint(gfx::Point(160, 160))); + EXPECT_TRUE(w11.get()->layer()->accept_events()); + w111->SetEventTargetingPolicy( ws::mojom::EventTargetingPolicy::TARGET_AND_DESCENDANTS); EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); + EXPECT_TRUE(w111.get()->layer()->accept_events()); } // Tests transformation on the root window.
diff --git a/ui/chromeos/BUILD.gn b/ui/chromeos/BUILD.gn index d1075fc..0ebad134 100644 --- a/ui/chromeos/BUILD.gn +++ b/ui/chromeos/BUILD.gn
@@ -30,8 +30,8 @@ "//base", "//base/third_party/dynamic_annotations", "//chromeos", - "//chromeos/dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus/power", + "//chromeos/dbus/power:power_manager_proto", "//components/device_event_log", "//components/onc", "//mojo/public/cpp/bindings",
diff --git a/ui/chromeos/user_activity_power_manager_notifier.cc b/ui/chromeos/user_activity_power_manager_notifier.cc index 4f65a06..bb905ee 100644 --- a/ui/chromeos/user_activity_power_manager_notifier.cc +++ b/ui/chromeos/user_activity_power_manager_notifier.cc
@@ -4,7 +4,6 @@ #include "ui/chromeos/user_activity_power_manager_notifier.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_manager_client.h" #include "services/device/public/mojom/constants.mojom.h" #include "services/service_manager/public/cpp/connector.h"
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc index fe7f544..2ae69f9 100644 --- a/ui/compositor/layer.cc +++ b/ui/compositor/layer.cc
@@ -213,6 +213,7 @@ clone->SetMasksToBounds(GetMasksToBounds()); clone->SetOpacity(GetTargetOpacity()); clone->SetVisible(GetTargetVisibility()); + clone->SetAcceptEvents(accept_events()); clone->SetFillsBoundsOpaquely(fills_bounds_opaquely_); clone->SetFillsBoundsCompletely(fills_bounds_completely_); clone->SetRoundedCornerRadius(rounded_corner_radii()); @@ -555,6 +556,13 @@ GetAnimator()->SetVisibility(visible); } +void Layer::SetAcceptEvents(bool accept_events) { + if (accept_events_ == accept_events) + return; + accept_events_ = accept_events; + cc_layer_->SetHitTestable(visible_ && accept_events_); +} + bool Layer::GetTargetVisibility() const { if (animator_ && animator_->IsAnimatingProperty( LayerAnimationElement::VISIBILITY)) @@ -679,7 +687,7 @@ cc_layer_->SetTransformOrigin(gfx::Point3F()); cc_layer_->SetContentsOpaque(fills_bounds_opaquely_); cc_layer_->SetIsDrawable(type_ != LAYER_NOT_DRAWN); - cc_layer_->SetHitTestable(type_ != LAYER_NOT_DRAWN); + cc_layer_->SetHitTestable(visible_ && accept_events_); cc_layer_->SetHideLayerAndSubtree(!visible_); cc_layer_->SetBackdropFilterQuality(backdrop_filter_quality_); cc_layer_->SetElementId(cc::ElementId(cc_layer_->id())); @@ -1280,6 +1288,7 @@ visible_ = visible; cc_layer_->SetHideLayerAndSubtree(!visible_); + cc_layer_->SetHitTestable(visible_ && accept_events_); } void Layer::SetBrightnessFromAnimation(float brightness,
diff --git a/ui/compositor/layer.h b/ui/compositor/layer.h index 047d8d69..e67e81f 100644 --- a/ui/compositor/layer.h +++ b/ui/compositor/layer.h
@@ -269,6 +269,11 @@ // and is not completely obscured by a child. bool ShouldDraw() const; + // If set to true, this layer can receive hit test events, this property does + // not affect the layer's descendants. + void SetAcceptEvents(bool accept_events); + bool accept_events() const { return accept_events_; } + // Sets a rounded corner clip radius on the layer. This will clip the layer to // bounds. The ordering for the array is: // top left, top right, bottom right, bottom left @@ -574,6 +579,11 @@ // Visibility of this layer. See SetVisible/IsDrawn for more details. bool visible_; + // Whether or not the layer wants to receive hit testing events. When set to + // false, the layer will be ignored in hit testing even if it is visible. It + // does not affect the layer's descendants. + bool accept_events_ = true; + // See SetFillsBoundsOpaquely(). Defaults to true. bool fills_bounds_opaquely_;
diff --git a/ui/gfx/font.cc b/ui/gfx/font.cc index 3b709564..99f0103 100644 --- a/ui/gfx/font.cc +++ b/ui/gfx/font.cc
@@ -88,7 +88,7 @@ return platform_font_->GetFontRenderParams(); } -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) +#if defined(OS_MACOSX) || defined(OS_IOS) NativeFont Font::GetNativeFont() const { return platform_font_->GetNativeFont(); }
diff --git a/ui/gfx/font.h b/ui/gfx/font.h index e33bb680..ebf85a212 100644 --- a/ui/gfx/font.h +++ b/ui/gfx/font.h
@@ -60,7 +60,7 @@ Font(const Font& other); Font& operator=(const Font& other); -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) +#if defined(OS_MACOSX) || defined(OS_IOS) // Creates a font from the specified native font. explicit Font(NativeFont native_font); #endif @@ -117,11 +117,9 @@ // Returns an object describing how the font should be rendered. const FontRenderParams& GetFontRenderParams() const; -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) +#if defined(OS_MACOSX) || defined(OS_IOS) // Returns the native font handle. // Lifetime lore: - // Windows: This handle is owned by the Font object, and should not be - // destroyed by the caller. // Mac: The object is owned by the system and should not be released. NativeFont GetNativeFont() const; #endif
diff --git a/ui/gfx/font_fallback_win.cc b/ui/gfx/font_fallback_win.cc index b53f366c..f4ded19 100644 --- a/ui/gfx/font_fallback_win.cc +++ b/ui/gfx/font_fallback_win.cc
@@ -23,6 +23,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/trace_event/trace_event.h" #include "base/win/registry.h" +#include "base/win/scoped_gdi_object.h" #include "ui/gfx/font.h" #include "ui/gfx/font_fallback.h" #include "ui/gfx/platform_font_win.h" @@ -221,8 +222,22 @@ if (!meta_file_dc) return false; - SelectObject(meta_file_dc, font.GetNativeFont()); + // Extracts |fonts| properties. + const DWORD italic = (font.GetStyle() & Font::ITALIC) ? TRUE : FALSE; + const DWORD underline = (font.GetStyle() & Font::UNDERLINE) ? TRUE : FALSE; + // The font mapper matches its absolute value against the character height of + // the available fonts. + const int height = -font.GetFontSize(); + // Select the primary font which force a mapping to a physical font. + base::win::ScopedHFONT primary_font(::CreateFont( + height, 0, 0, 0, static_cast<int>(font.GetWeight()), italic, underline, + FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, + base::UTF8ToUTF16(font.GetFontName()).c_str())); + SelectObject(meta_file_dc, primary_font.get()); + + // Run the script analysis. SCRIPT_STRING_ANALYSIS script_analysis; HRESULT hresult = ScriptStringAnalyse(meta_file_dc, text, text_length, 0, -1,
diff --git a/ui/gfx/font_unittest.cc b/ui/gfx/font_unittest.cc index aaefea5ab..04b28e7 100644 --- a/ui/gfx/font_unittest.cc +++ b/ui/gfx/font_unittest.cc
@@ -24,7 +24,7 @@ TEST_F(FontTest, LoadArial) { Font cf(kTestFontName, 16); -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) +#if defined(OS_MACOSX) || defined(OS_IOS) EXPECT_TRUE(cf.GetNativeFont()); #endif EXPECT_EQ(cf.GetStyle(), Font::NORMAL); @@ -37,7 +37,7 @@ TEST_F(FontTest, LoadArialBold) { Font cf(kTestFontName, 16); Font bold(cf.Derive(0, Font::NORMAL, Font::Weight::BOLD)); -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) +#if defined(OS_MACOSX) || defined(OS_IOS) EXPECT_TRUE(bold.GetNativeFont()); #endif EXPECT_EQ(bold.GetStyle(), Font::NORMAL);
diff --git a/ui/gfx/icc_profile.cc b/ui/gfx/icc_profile.cc index a6e4e197..49fb7cf 100644 --- a/ui/gfx/icc_profile.cc +++ b/ui/gfx/icc_profile.cc
@@ -50,9 +50,6 @@ return kICCFailedToParse; } - // Extract the primary matrix. - to_XYZD50_ = profile.toXYZD50; - // We have seen many users with profiles that don't have a D50 white point. // Windows appears to detect these profiles, and not use them for OS drawing. // It still returns them when we query the system for the installed profile. @@ -70,23 +67,30 @@ return kICCFailedToParse; } + // Extract the primary matrix, and assume that transfer function is sRGB until + // we get something more precise. + to_XYZD50_ = profile.toXYZD50; + transfer_fn_ = SkNamedTransferFn::kSRGB; + // Coerce it into a rasterization destination (if possible). If the profile // can't be approximated accurately, then use an sRGB transfer function and // return failure. We will continue to use the gamut from this profile. if (!skcms_MakeUsableAsDestinationWithSingleCurve(&profile)) { - DLOG(ERROR) << "Parsed ICC profile but can't make usable as destination."; - transfer_fn_ = SkNamedTransferFn::kSRGB; + DLOG(ERROR) << "Parsed ICC profile but can't make usable as destination, " + "using sRGB gamma"; return kICCFailedToMakeUsable; } // If SkColorSpace will treat the gamma as that of sRGB, then use the named // constants. sk_sp<SkColorSpace> sk_color_space = SkColorSpace::Make(profile); - DCHECK(sk_color_space); - if (sk_color_space->gammaCloseToSRGB()) { - transfer_fn_ = SkNamedTransferFn::kSRGB; - return kICCExtractedMatrixAndTrFn; + if (!sk_color_space) { + DLOG(ERROR) << "Parsed ICC profile but cannot create SkColorSpace from it, " + "using sRGB gamma."; + return kICCFailedToMakeUsable; } + if (sk_color_space->gammaCloseToSRGB()) + return kICCExtractedMatrixAndTrFn; // We assume that if we accurately approximated the profile, then the // single-curve version (which may have higher error) is also okay. If we
diff --git a/ui/gfx/platform_font.h b/ui/gfx/platform_font.h index 38188923..50c371d6 100644 --- a/ui/gfx/platform_font.h +++ b/ui/gfx/platform_font.h
@@ -86,7 +86,7 @@ // Returns an object describing how the font should be rendered. virtual const FontRenderParams& GetFontRenderParams() = 0; -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS) +#if defined(OS_MACOSX) || defined(OS_IOS) // Returns the native font handle. virtual NativeFont GetNativeFont() const = 0; #endif
diff --git a/ui/gfx/platform_font_win.h b/ui/gfx/platform_font_win.h index 61496a3..97ce5073 100644 --- a/ui/gfx/platform_font_win.h +++ b/ui/gfx/platform_font_win.h
@@ -54,7 +54,7 @@ std::string GetActualFontNameForTesting() const override; int GetFontSize() const override; const FontRenderParams& GetFontRenderParams() override; - NativeFont GetNativeFont() const override; + NativeFont GetNativeFont() const; // Called once during initialization if we should be retrieving font metrics // from skia and DirectWrite.
diff --git a/ui/gfx/system_fonts_win.cc b/ui/gfx/system_fonts_win.cc index 8504dde..849654c 100644 --- a/ui/gfx/system_fonts_win.cc +++ b/ui/gfx/system_fonts_win.cc
@@ -25,9 +25,6 @@ auto it = system_fonts_.find(system_font); DCHECK(it != system_fonts_.end()) << "System font #" << static_cast<int>(system_font) << " not found!"; - DCHECK(it->second.GetNativeFont()) - << "Font for system font #" << static_cast<int>(system_font) - << " has invalid handle."; return it->second; } @@ -76,10 +73,14 @@ static Font GetFontFromLOGFONT(const LOGFONT* logfont) { // Finds a matching font by triggering font mapping. The font mapper finds // the closest physical font for a given logical font. - base::win::ScopedGDIObject<HFONT> font(::CreateFontIndirect(logfont)); + base::win::ScopedHFONT font(::CreateFontIndirect(logfont)); base::win::ScopedGetDC screen_dc(NULL); base::win::ScopedSelectObject scoped_font(screen_dc, font.get()); + DCHECK(font.get()) << "Font for '" + << base::SysWideToUTF8(logfont->lfFaceName) + << "' has an invalid handle."; + // Retrieve the name and height of the mapped font (physical font). LOGFONT mapped_font_info; GetObject(font.get(), sizeof(mapped_font_info), &mapped_font_info); @@ -228,8 +229,9 @@ return SystemFonts::Instance()->GetFont(system_font); } -Font AdjustExistingSystemFont(NativeFont existing_font, - const FontAdjustment& font_adjustment) { +GFX_EXPORT NativeFont +AdjustExistingSystemFont(NativeFont existing_font, + const FontAdjustment& font_adjustment) { LOGFONT logfont; auto result = GetObject(existing_font, sizeof(logfont), &logfont); DCHECK(result); @@ -241,7 +243,7 @@ logfont.lfHeight = SystemFonts::AdjustFontSize(logfont.lfHeight, 0); // Create the Font object. - return SystemFonts::GetFontFromLOGFONT(&logfont); + return ::CreateFontIndirect(&logfont); } int AdjustFontSize(int lf_height, int size_delta) {
diff --git a/ui/gfx/system_fonts_win.h b/ui/gfx/system_fonts_win.h index 16a57bc..fe651c0 100644 --- a/ui/gfx/system_fonts_win.h +++ b/ui/gfx/system_fonts_win.h
@@ -39,8 +39,9 @@ GFX_EXPORT const Font& GetSystemFont(SystemFont system_font); // Applies a font adjustment to an existing native font. -GFX_EXPORT Font AdjustExistingSystemFont(NativeFont existing_font, - const FontAdjustment& font_adjustment); +GFX_EXPORT NativeFont +AdjustExistingSystemFont(NativeFont existing_font, + const FontAdjustment& font_adjustment); // Computes and returns the adjusted size of a font, subject to the global // minimum size. |lf_height| is the height as reported by the LOGFONT structure,
diff --git a/ui/views/controls/tabbed_pane/tabbed_pane.cc b/ui/views/controls/tabbed_pane/tabbed_pane.cc index a0bb177b..3b5ade9 100644 --- a/ui/views/controls/tabbed_pane/tabbed_pane.cc +++ b/ui/views/controls/tabbed_pane/tabbed_pane.cc
@@ -353,6 +353,12 @@ MdTab::~MdTab() = default; void MdTab::OnStateChanged() { + // kHighlight mode has different color theme. + if (tabbed_pane()->GetStyle() == TabbedPane::TabStripStyle::kHighlight) { + Tab::OnStateChanged(); + return; + } + ui::NativeTheme* theme = GetNativeTheme(); SkColor font_color =
diff --git a/ui/views/corewm/tooltip_win.cc b/ui/views/corewm/tooltip_win.cc index 7313820..971e0dd 100644 --- a/ui/views/corewm/tooltip_win.cc +++ b/ui/views/corewm/tooltip_win.cc
@@ -102,7 +102,7 @@ const HFONT old_font = GetWindowFont(tooltip_hwnd_); // Determine if we need to override the font. - if ((!override_font_ || override_font_->GetNativeFont() != old_font) && + if ((!override_font_.get() || override_font_.get() != old_font) && l10n_util::NeedOverrideDefaultUIFont( &font_adjustment.font_family_override, &font_adjustment.font_scale)) { // Determine if we need to regenerate the font. @@ -111,14 +111,14 @@ // font unless the underlying text/DPI scale of the window has changed. const float current_scale = display::win::ScreenWin::GetScaleFactorForHWND(tooltip_hwnd_); - if (!override_font_ || current_scale != override_scale_) { - override_font_ = - gfx::win::AdjustExistingSystemFont(old_font, font_adjustment); + if (!override_font_.get() || current_scale != override_scale_) { + override_font_.reset( + gfx::win::AdjustExistingSystemFont(old_font, font_adjustment)); override_scale_ = current_scale; } // Override the font in the tooltip. - SetWindowFont(tooltip_hwnd_, override_font_->GetNativeFont(), FALSE); + SetWindowFont(tooltip_hwnd_, override_font_.get(), FALSE); } }
diff --git a/ui/views/corewm/tooltip_win.h b/ui/views/corewm/tooltip_win.h index e656c87d..9ed24d36 100644 --- a/ui/views/corewm/tooltip_win.h +++ b/ui/views/corewm/tooltip_win.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/optional.h" #include "base/strings/string16.h" -#include "ui/gfx/font.h" +#include "base/win/scoped_gdi_object.h" #include "ui/gfx/geometry/point.h" #include "ui/views/corewm/tooltip.h" @@ -51,9 +51,8 @@ bool IsVisible() override; // Font we're currently overriding our UI font with. - // (Lets us keep a handle around so we don't leak.) // Should outlast |tooltip_hwnd_|. - base::Optional<gfx::Font> override_font_; + base::win::ScopedHFONT override_font_; // The window |tooltip_hwnd_| is parented to. HWND parent_hwnd_;
diff --git a/ui/webui/resources/images/throbber_medium.svg b/ui/webui/resources/images/throbber_medium.svg index d0ea24e..39fd7b0 100644 --- a/ui/webui/resources/images/throbber_medium.svg +++ b/ui/webui/resources/images/throbber_medium.svg
@@ -1 +1 @@ -<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><style>@keyframes fillunfill{50%{stroke-dashoffset:0}}</style><g style="animation-duration:1568.63ms;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;transform-origin:50% 50%;width:28px;height:28px"><path fill="none" d="M14 1.5A12.5 12.5 0 1 1 1.5 14" stroke-width="3" stroke-linecap="round" style="animation-duration:1333ms,5332ms,5332ms;animation-fill-mode:forwards;animation-iteration-count:infinite,infinite,infinite;animation-name:fillunfill,rot,colors;animation-play-state:running,running,running;animation-timing-function:cubic-bezier(.4,0,.2,1),steps(4),linear;transform-origin:50% 50%" stroke-dasharray="58.9" stroke-dashoffset="58.9"/></g></svg> \ No newline at end of file +<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><style>@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes fillunfill{0%{stroke-dashoffset:58.8}50%{stroke-dashoffset:0}to{stroke-dashoffset:-58.4}}@keyframes rot{0%{transform:rotate(0deg)}to{transform:rotate(-360deg)}}@keyframes colors{0%,to{stroke:#4285f4}}</style><g style="animation-duration:1568.63ms;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;transform-origin:50% 50%;width:28px;height:28px"><path fill="none" d="M14 1.5A12.5 12.5 0 1 1 1.5 14" stroke-width="3" stroke-linecap="round" style="animation-duration:1333ms,5332ms,5332ms;animation-fill-mode:forwards;animation-iteration-count:infinite,infinite,infinite;animation-name:fillunfill,rot,colors;animation-play-state:running,running,running;animation-timing-function:cubic-bezier(.4,0,.2,1),steps(4),linear;transform-origin:50% 50%" stroke-dasharray="58.9" stroke-dashoffset="58.9"/></g></svg> \ No newline at end of file
diff --git a/ui/webui/resources/images/throbber_small.svg b/ui/webui/resources/images/throbber_small.svg index cfbc2c5..8f0d9cb 100644 --- a/ui/webui/resources/images/throbber_small.svg +++ b/ui/webui/resources/images/throbber_small.svg
@@ -1 +1 @@ -<svg version="1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style>@keyframes fillunfill{50%{stroke-dashoffset:0}}</style><g style="animation-duration:1568.63ms;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;transform-origin:50% 50%;width:16px;height:16px"><path fill="none" d="M8 1.125A6.875 6.875 0 1 1 1.125 8" stroke-width="2.25" stroke-linecap="round" style="animation-duration:1333ms,5332ms,5332ms;animation-fill-mode:forwards;animation-iteration-count:infinite,infinite,infinite;animation-name:fillunfill,rot,colors;animation-play-state:running,running,running;animation-timing-function:cubic-bezier(.4,0,.2,1),steps(4),linear;transform-origin:50% 50%" stroke-dasharray="32.4" stroke-dashoffset="32.4"/></g></svg> \ No newline at end of file +<svg version="1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style>@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes fillunfill{0%{stroke-dashoffset:32.3}50%{stroke-dashoffset:0}to{stroke-dashoffset:-31.9}}@keyframes rot{0%{transform:rotate(0deg)}to{transform:rotate(-360deg)}}@keyframes colors{0%,to{stroke:#4285f4}}</style><g style="animation-duration:1568.63ms;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;transform-origin:50% 50%;width:16px;height:16px"><path fill="none" d="M8 1.125A6.875 6.875 0 1 1 1.125 8" stroke-width="2.25" stroke-linecap="round" style="animation-duration:1333ms,5332ms,5332ms;animation-fill-mode:forwards;animation-iteration-count:infinite,infinite,infinite;animation-name:fillunfill,rot,colors;animation-play-state:running,running,running;animation-timing-function:cubic-bezier(.4,0,.2,1),steps(4),linear;transform-origin:50% 50%" stroke-dasharray="32.4" stroke-dashoffset="32.4"/></g></svg> \ No newline at end of file