$i18n{wallpaperSearchHistoryHeader}
diff -Nru chromium-121.0.6167.139/chrome/browser/resources/side_panel/customize_chrome/wallpaper_search/wallpaper_search.ts chromium-121.0.6167.160/chrome/browser/resources/side_panel/customize_chrome/wallpaper_search/wallpaper_search.ts
--- chromium-121.0.6167.139/chrome/browser/resources/side_panel/customize_chrome/wallpaper_search/wallpaper_search.ts 2024-01-30 20:24:16.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/resources/side_panel/customize_chrome/wallpaper_search/wallpaper_search.ts 2024-02-06 23:11:24.000000000 +0000
@@ -35,7 +35,7 @@
import {CustomizeChromeAction, recordCustomizeChromeAction} from '../common.js';
import {CustomizeChromePageCallbackRouter, CustomizeChromePageHandlerInterface, Theme} from '../customize_chrome.mojom-webui.js';
import {CustomizeChromeApiProxy} from '../customize_chrome_api_proxy.js';
-import {DescriptorA, DescriptorB, DescriptorDValue, Descriptors, Inspirations, ResultDescriptors, UserFeedback, WallpaperSearchClientCallbackRouter, WallpaperSearchHandlerInterface, WallpaperSearchResult, WallpaperSearchStatus} from '../wallpaper_search.mojom-webui.js';
+import {DescriptorA, DescriptorB, DescriptorDName, DescriptorDValue, Descriptors, Inspiration, InspirationGroup, ResultDescriptors, UserFeedback, WallpaperSearchClientCallbackRouter, WallpaperSearchHandlerInterface, WallpaperSearchResult, WallpaperSearchStatus} from '../wallpaper_search.mojom-webui.js';
import {WindowProxy} from '../window_proxy.js';
import {ComboboxGroup, ComboboxItem, CustomizeChromeCombobox} from './combobox/customize_chrome_combobox.js';
@@ -65,6 +65,13 @@
},
];
+function descriptorDNameToHex(name: DescriptorDName): string {
+ switch (name) {
+ case DescriptorDName.kYellow:
+ return '#f9cc18';
+ }
+}
+
interface ColorDescriptor {
hex: string;
name: string;
@@ -138,7 +145,8 @@
},
errorState_: {
type: Object,
- computed: 'computeErrorState_(status_, history_)',
+ computed:
+ 'computeErrorState_(status_, shouldShowHistory_, shouldShowInspiration_)',
},
emptyHistoryContainers_: Object,
emptyResultContainers_: Object,
@@ -153,33 +161,34 @@
value: () =>
loadTimeData.getBoolean('wallpaperSearchInspirationCardEnabled'),
},
- inspirations_: Object,
+ inspirationGroups_: Object,
+ inspirationToggleIcon_: {
+ type: String,
+ computed: 'computeInspirationToggleIcon_(openInspirations_)',
+ },
+ openInspirations_: Boolean,
resultsDescriptors_: Object,
results_: Object,
selectedFeedbackOption_: {
type: Number,
value: CrFeedbackOption.UNSPECIFIED,
},
- selectedDescriptorA_: {
- type: String,
- observer: 'onSubjectDescriptorChange_',
- },
- selectedDescriptorB_: {
- type: String,
- observer: 'onStyleDescriptorChange_',
- },
- selectedDescriptorC_: {
- type: String,
- observer: 'onMoodDescriptorChange_',
- },
- selectedDescriptorD_: {
- type: Object,
- observer: 'onColorDescriptorChange_',
- },
+ selectedDescriptorA_: String,
+ selectedDescriptorB_: String,
+ selectedDescriptorC_: String,
+ selectedDescriptorD_: Object,
selectedHue_: {
type: Number,
value: null,
},
+ shouldShowHistory_: {
+ type: Boolean,
+ computed: 'computeShouldShowHistory_(history_)',
+ },
+ shouldShowInspiration_: {
+ type: Boolean,
+ computed: 'computeShouldShowInspiration_(inspirationGroups_)',
+ },
status_: {
type: WallpaperSearchStatus,
value: WallpaperSearchStatus.kOk,
@@ -201,9 +210,11 @@
private errorState_: ErrorState|null = null;
private expandedCategories_: {[categoryIndex: number]: boolean} = {};
private history_: WallpaperSearchResult[] = [];
- private inspirations_: Inspirations|null;
+ private inspirationGroups_: InspirationGroup[]|null;
private inspirationCardEnabled_: boolean;
+ private inspirationToggleIcon_: string;
private loading_: boolean;
+ private openInspirations_: boolean|undefined = false;
private results_: WallpaperSearchResult[] = [];
private resultsDescriptors_: ResultDescriptors|null = null;
private resultsPromises_: Array
{
- this.inspirations_ = inspirations;
- });
+ if (this.inspirationCardEnabled_) {
+ this.wallpaperSearchHandler_.getInspirations().then(
+ ({inspirationGroups}) => {
+ this.inspirationGroups_ = inspirationGroups;
+ });
+ }
}
override connectedCallback() {
@@ -252,6 +268,7 @@
(history: WallpaperSearchResult[]) => {
this.history_ = history;
this.emptyHistoryContainers_ = this.calculateEmptyTiles(history);
+ this.openInspirations_ = !this.shouldShowHistory_;
});
this.wallpaperSearchHandler_.updateHistory();
this.loadingUiResizeObserver_ = new ResizeObserver(() => {
@@ -289,11 +306,21 @@
case WallpaperSearchStatus.kOk:
return null;
case WallpaperSearchStatus.kError:
+ let errorDescription;
+ if (this.shouldShowHistory_ && this.shouldShowInspiration_) {
+ errorDescription =
+ this.i18n('genericErrorDescriptionWithHistoryAndInspiration');
+ } else if (this.shouldShowHistory_) {
+ errorDescription = this.i18n('genericErrorDescriptionWithHistory');
+ } else if (this.shouldShowInspiration_) {
+ errorDescription =
+ this.i18n('genericErrorDescriptionWithInspiration');
+ } else {
+ errorDescription = this.i18n('genericErrorDescription');
+ }
return {
title: this.i18n('genericErrorTitle'),
- description: this.shouldShowHistory_() ?
- this.i18n('genericErrorDescriptionWithHistory') :
- this.i18n('genericErrorDescription'),
+ description: errorDescription,
callToAction: this.i18n('tryAgain'),
};
case WallpaperSearchStatus.kRequestThrottled:
@@ -305,7 +332,7 @@
case WallpaperSearchStatus.kOffline:
return {
title: this.i18n('offlineTitle'),
- description: this.shouldShowHistory_() ?
+ description: this.shouldShowHistory_ ?
this.i18n('offlineDescriptionWithHistory') :
this.i18n('offlineDescription'),
callToAction: this.i18n('ok'),
@@ -313,6 +340,18 @@
}
}
+ private computeInspirationToggleIcon_(): string {
+ return this.openInspirations_ ? 'collapse-carets' : 'expand-carets';
+ }
+
+ private computeShouldShowHistory_(): boolean {
+ return this.history_.length > 0;
+ }
+
+ private computeShouldShowInspiration_(): boolean {
+ return !!this.inspirationGroups_ && this.inspirationGroups_.length > 0;
+ }
+
private expandCategoryForDescriptorA_(label: string) {
if (!this.descriptors_) {
return;
@@ -412,6 +451,38 @@
return this.selectedHue_ !== null ? 'true' : 'false';
}
+ private getInspirationDescriptorsCheckedStatus_(
+ groupDescriptors: ResultDescriptors): string {
+ const groupDescriptorColor = groupDescriptors.color?.name !== undefined ?
+ descriptorDNameToHex(groupDescriptors.color!.name) :
+ undefined;
+ return (groupDescriptors.subject || null) === this.selectedDescriptorA_ &&
+ (groupDescriptors.style || null) === this.selectedDescriptorB_ &&
+ (groupDescriptors.mood || null) === this.selectedDescriptorC_ &&
+ groupDescriptorColor === this.selectedDefaultColor_ ?
+ 'true' :
+ 'false';
+ }
+
+ private getInspirationGroupTitle_(descriptors: ResultDescriptors): string {
+ // Filter out undefined or null values, then join the rest into a comma
+ // separated string.
+ let colorName;
+ if (descriptors.color?.name !== undefined) {
+ const hex = descriptorDNameToHex(descriptors.color.name);
+ if (hex) {
+ colorName = this.getColorLabel_(hex);
+ }
+ }
+ return [
+ descriptors.subject,
+ descriptors.style,
+ descriptors.mood,
+ colorName,
+ ].filter(Boolean)
+ .join(', ');
+ }
+
private getHistoryResultAriaLabel_(
index: number, result: WallpaperSearchResult): string {
if (!result.descriptors || !result.descriptors.subject) {
@@ -496,13 +567,15 @@
private onDefaultColorClick_(e: DomRepeatEvent) {
this.selectedHue_ = null;
- this.selectedDefaultColor_ = e.model.item;
- this.selectedDescriptorD_ = {
- color: hexColorToSkColor(this.selectedDefaultColor_),
- };
- }
-
- private onColorDescriptorChange_() {
+ if (this.selectedDefaultColor_ === e.model.item) {
+ this.selectedDefaultColor_ = undefined;
+ this.selectedDescriptorD_ = null;
+ } else {
+ this.selectedDefaultColor_ = e.model.item;
+ this.selectedDescriptorD_ = {
+ color: hexColorToSkColor(this.selectedDefaultColor_),
+ };
+ }
recordCustomizeChromeAction(
CustomizeChromeAction.WALLPAPER_SEARCH_COLOR_DESCRIPTOR_UPDATED);
}
@@ -549,6 +622,37 @@
e.model.item.id, e.model.item.descriptors ?? {});
}
+ private onInspirationGroupTitleClick_(e: DomRepeatEvent) {
+ this.selectDescriptorsFromInspirationGroup_(e.model.item);
+ }
+
+ private onInspirationGroupTitleKeydown_(e: KeyboardEvent) {
+ if (['Enter', ' '].includes(e.key)) {
+ e.preventDefault();
+ e.stopPropagation();
+ (e.target as HTMLElement).click();
+ }
+ }
+
+ private onInspirationToggleClick_() {
+ this.openInspirations_ = !this.openInspirations_;
+ }
+
+ private onInspirationImageClick_(e: Event&{
+ model: {
+ item: Inspiration,
+ parentModel: {
+ item: InspirationGroup,
+ },
+ },
+ }) {
+ recordCustomizeChromeAction(
+ CustomizeChromeAction.WALLPAPER_SEARCH_INSPIRATION_THEME_SELECTED);
+ this.wallpaperSearchHandler_.setBackgroundToInspirationImage(
+ e.model.item.id, e.model.item.backgroundUrl);
+ this.selectDescriptorsFromInspirationGroup_(e.model.parentModel.item);
+ }
+
private onLearnMoreClick_(e: Event) {
e.preventDefault();
this.wallpaperSearchHandler_.openHelpArticle();
@@ -558,6 +662,8 @@
this.selectedDefaultColor_ = undefined;
this.selectedHue_ = this.$.hueSlider.selectedHue;
this.selectedDescriptorD_ = {hue: this.selectedHue_};
+ recordCustomizeChromeAction(
+ CustomizeChromeAction.WALLPAPER_SEARCH_COLOR_DESCRIPTOR_UPDATED);
}
private onSelectedHueDelete_() {
@@ -611,6 +717,7 @@
if (this.status_ === WallpaperSearchStatus.kOk) {
announcer.announce(
this.i18n('wallpaperSearchSuccessA11yMessage', results.length));
+ this.wallpaperSearchHandler_.launchHatsSurvey();
}
recordStatusChange(status);
this.selectedFeedbackOption_ = CrFeedbackOption.UNSPECIFIED;
@@ -646,6 +753,29 @@
}
}
+ private selectDescriptorsFromInspirationGroup_(group: InspirationGroup) {
+ const announcer = getAnnouncerInstance() as CrA11yAnnouncerElement;
+ const groupDescriptors = group.descriptors;
+ this.selectedDescriptorA_ = groupDescriptors.subject || null;
+ this.selectedDescriptorB_ = groupDescriptors.style || null;
+ this.selectedDescriptorC_ = groupDescriptors.mood || null;
+
+ if (groupDescriptors.color?.name !== undefined) {
+ const hex = descriptorDNameToHex(groupDescriptors.color.name);
+ this.selectedDefaultColor_ = hex;
+ this.selectedHue_ = null;
+ this.selectedDescriptorD_ = {
+ color: hexColorToSkColor(this.selectedDefaultColor_),
+ };
+ } else {
+ this.selectedDefaultColor_ = undefined;
+ this.selectedHue_ = null;
+ this.selectedDescriptorD_ = null;
+ }
+ announcer.announce(
+ this.i18n('wallpaperSearchDescriptorsChangedA11yMessage'));
+ }
+
private shouldShowDeleteSelectedHueButton_() {
return this.selectedHue_ !== null;
}
@@ -657,10 +787,6 @@
private shouldShowGrid_(): boolean {
return this.results_.length > 0 || this.emptyResultContainers_.length > 0;
}
-
- private shouldShowHistory_(): boolean {
- return this.history_.length > 0;
- }
}
declare global {
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/ntp_background_data.h chromium-121.0.6167.160/chrome/browser/search/background/ntp_background_data.h
--- chromium-121.0.6167.139/chrome/browser/search/background/ntp_background_data.h 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/ntp_background_data.h 2024-02-06 23:11:24.000000000 +0000
@@ -138,6 +138,10 @@
// local background, rather than from wallpaper search.
absl::optional local_background_id;
+ // Whether the image is an inspiration image. This information is only
+ // used if local_background_id is set.
+ bool is_inspiration_image;
+
// First attribution string for custom background.
std::string custom_background_attribution_line_1;
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/ntp_custom_background_service.cc chromium-121.0.6167.160/chrome/browser/search/background/ntp_custom_background_service.cc
--- chromium-121.0.6167.139/chrome/browser/search/background/ntp_custom_background_service.cc 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/ntp_custom_background_service.cc 2024-02-06 23:11:24.000000000 +0000
@@ -162,6 +162,7 @@
registry->RegisterBooleanPref(prefs::kNtpCustomBackgroundLocalToDevice,
false);
registry->RegisterStringPref(prefs::kNtpCustomBackgroundLocalToDeviceId, "");
+ registry->RegisterBooleanPref(prefs::kNtpCustomBackgroundInspiration, false);
// Register wallpaper search profile prefs.
if (base::FeatureList::IsEnabled(
ntp_features::kCustomizeChromeWallpaperSearch) &&
@@ -178,6 +179,7 @@
pref_service->ClearPref(prefs::kNtpCustomBackgroundDict);
pref_service->SetBoolean(prefs::kNtpCustomBackgroundLocalToDevice, false);
pref_service->ClearPref(prefs::kNtpCustomBackgroundLocalToDeviceId);
+ pref_service->SetBoolean(prefs::kNtpCustomBackgroundInspiration, false);
}
// static
@@ -449,6 +451,8 @@
custom_background->is_uploaded_image = true;
custom_background->local_background_id =
base::Token::FromString(local_background_id);
+ custom_background->is_inspiration_image =
+ pref_service_->GetBoolean(prefs::kNtpCustomBackgroundInspiration);
custom_background->custom_background_snapshot_url = GURL();
custom_background->custom_background_attribution_line_1 = std::string();
custom_background->custom_background_attribution_line_2 = std::string();
@@ -630,7 +634,8 @@
}
void NtpCustomBackgroundService::SetBackgroundToLocalResourceWithId(
- const base::Token& id) {
+ const base::Token& id,
+ bool is_inspiration_image) {
background_updated_timestamp_ = base::TimeTicks::Now();
// Remove the last local background if it exists. This is
// temporary until multiple local images is supported.
@@ -638,6 +643,8 @@
pref_service_->SetBoolean(prefs::kNtpCustomBackgroundLocalToDevice, true);
pref_service_->SetString(prefs::kNtpCustomBackgroundLocalToDeviceId,
id.ToString());
+ pref_service_->SetBoolean(prefs::kNtpCustomBackgroundInspiration,
+ is_inspiration_image);
NotifyAboutBackgrounds();
}
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/ntp_custom_background_service.h chromium-121.0.6167.160/chrome/browser/search/background/ntp_custom_background_service.h
--- chromium-121.0.6167.139/chrome/browser/search/background/ntp_custom_background_service.h 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/ntp_custom_background_service.h 2024-02-06 23:11:24.000000000 +0000
@@ -73,7 +73,8 @@
virtual void SelectLocalBackgroundImage(const base::FilePath& path);
// Set bool pref for local background and set id.
- virtual void SetBackgroundToLocalResourceWithId(const base::Token& id);
+ virtual void SetBackgroundToLocalResourceWithId(const base::Token& id,
+ bool is_inspiration_image);
// Virtual for testing.
virtual void RefreshBackgroundIfNeeded();
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/ntp_custom_background_service_unittest.cc chromium-121.0.6167.160/chrome/browser/search/background/ntp_custom_background_service_unittest.cc
--- chromium-121.0.6167.139/chrome/browser/search/background/ntp_custom_background_service_unittest.cc 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/ntp_custom_background_service_unittest.cc 2024-02-06 23:11:24.000000000 +0000
@@ -1058,7 +1058,7 @@
profile().GetTestingPrefService();
base::Token token = base::Token::CreateRandom();
- custom_background_service_->SetBackgroundToLocalResourceWithId(token);
+ custom_background_service_->SetBackgroundToLocalResourceWithId(token, true);
task_environment_.RunUntilIdle();
// Check that local background image was set.
@@ -1072,6 +1072,8 @@
pref_service->GetBoolean(prefs::kNtpCustomBackgroundLocalToDevice));
EXPECT_EQ(pref_service->GetString(prefs::kNtpCustomBackgroundLocalToDeviceId),
token.ToString());
+ EXPECT_TRUE(pref_service->GetBoolean(prefs::kNtpCustomBackgroundInspiration));
EXPECT_TRUE(custom_background_service_->IsCustomBackgroundSet());
EXPECT_EQ(true, custom_background->is_uploaded_image);
+ EXPECT_TRUE(custom_background->is_inspiration_image);
}
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.cc chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.cc
--- chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.cc 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.cc 2024-02-06 23:11:24.000000000 +0000
@@ -150,6 +150,11 @@
profile_(profile),
pref_service_(profile_->GetPrefs()) {
CHECK(ntp_custom_background_service_);
+ pref_change_registrar_.Init(profile_->GetPrefs());
+ pref_change_registrar_.Add(
+ prefs::kNtpWallpaperSearchHistory,
+ base::BindRepeating(&WallpaperSearchBackgroundManager::NotifyAboutHistory,
+ weak_ptr_factory_.GetWeakPtr()));
}
WallpaperSearchBackgroundManager::~WallpaperSearchBackgroundManager() = default;
@@ -176,7 +181,8 @@
return;
}
- ntp_custom_background_service_->SetBackgroundToLocalResourceWithId(id);
+ ntp_custom_background_service_->SetBackgroundToLocalResourceWithId(
+ id, /*is_inspiration_image=*/false);
ntp_custom_background_service_->UpdateCustomLocalBackgroundColorAsync(image);
UmaHistogramMediumTimes(
@@ -187,6 +193,7 @@
void WallpaperSearchBackgroundManager::SelectLocalBackgroundImage(
const base::Token& id,
const SkBitmap& bitmap,
+ bool is_inspiration_image,
base::ElapsedTimer timer) {
if (ntp_custom_background_service_->IsCustomBackgroundDisabledByPolicy()) {
return;
@@ -214,7 +221,7 @@
base::BindOnce(&WallpaperSearchBackgroundManager::
SetBackgroundToLocalResourceWithId,
weak_ptr_factory_.GetWeakPtr(), id, std::move(timer),
- bitmap));
+ bitmap, is_inspiration_image));
} else {
ntp_custom_background_service_->UpdateCustomLocalBackgroundColorAsync(
gfx::Image::CreateFrom1xBitmap(bitmap));
@@ -259,14 +266,34 @@
return absl::nullopt;
}
+void WallpaperSearchBackgroundManager::AddObserver(
+ WallpaperSearchBackgroundManagerObserver* observer) {
+ observers_.AddObserver(observer);
+}
+
+void WallpaperSearchBackgroundManager::RemoveObserver(
+ WallpaperSearchBackgroundManagerObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
void WallpaperSearchBackgroundManager::SetBackgroundToLocalResourceWithId(
const base::Token& id,
base::ElapsedTimer timer,
- const SkBitmap& bitmap) {
- ntp_custom_background_service_->SetBackgroundToLocalResourceWithId(id);
+ const SkBitmap& bitmap,
+ bool is_inspiration_image) {
+ ntp_custom_background_service_->SetBackgroundToLocalResourceWithId(
+ id, is_inspiration_image);
ntp_custom_background_service_->UpdateCustomLocalBackgroundColorAsync(
gfx::Image::CreateFrom1xBitmap(bitmap));
UmaHistogramMediumTimes(
- "NewTabPage.WallpaperSearch.SetResultThemeProcessingLatency",
+ is_inspiration_image
+ ? "NewTabPage.WallpaperSearch.SetInspirationThemeProcessingLatency"
+ : "NewTabPage.WallpaperSearch.SetResultThemeProcessingLatency",
timer.Elapsed());
}
+
+void WallpaperSearchBackgroundManager::NotifyAboutHistory() {
+ for (auto& observer : observers_) {
+ observer.OnHistoryUpdated();
+ }
+}
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.h chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.h
--- chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.h 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.h 2024-02-06 23:11:24.000000000 +0000
@@ -12,8 +12,10 @@
#include "base/timer/elapsed_timer.h"
#include "base/token.h"
#include "chrome/browser/search/background/ntp_custom_background_service.h"
+#include "chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_observer.h"
#include "chrome/browser/search/background/wallpaper_search/wallpaper_search_data.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "components/prefs/pref_change_registrar.h"
#include "third_party/skia/include/core/SkBitmap.h"
class PrefRegistrySimple;
@@ -41,6 +43,7 @@
// data.
virtual void SelectLocalBackgroundImage(const base::Token& id,
const SkBitmap& bitmap,
+ bool is_inspiration_image,
base::ElapsedTimer timer);
// Saves the background to history if it is the current background.
@@ -48,14 +51,23 @@
virtual absl::optional SaveCurrentBackgroundToHistory(
const HistoryEntry& history_entry);
+ // Adds/Removes WallpaperSearchBackgroundManagerObserver observers.
+ virtual void AddObserver(WallpaperSearchBackgroundManagerObserver* observer);
+ void RemoveObserver(WallpaperSearchBackgroundManagerObserver* observer);
+
private:
void SetBackgroundToLocalResourceWithId(const base::Token& id,
base::ElapsedTimer timer,
- const SkBitmap& bitmap);
+ const SkBitmap& bitmap,
+ bool is_inspiration_image);
+
+ void NotifyAboutHistory();
+ PrefChangeRegistrar pref_change_registrar_;
raw_ptr ntp_custom_background_service_;
raw_ptr profile_;
raw_ptr pref_service_;
+ base::ObserverList observers_;
base::WeakPtrFactory weak_ptr_factory_{
this};
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_observer.h chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_observer.h
--- chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_observer.h 1970-01-01 00:00:00.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_observer.h 2024-02-06 23:11:24.000000000 +0000
@@ -0,0 +1,17 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_SEARCH_BACKGROUND_WALLPAPER_SEARCH_WALLPAPER_SEARCH_BACKGROUND_MANAGER_OBSERVER_H_
+#define CHROME_BROWSER_SEARCH_BACKGROUND_WALLPAPER_SEARCH_WALLPAPER_SEARCH_BACKGROUND_MANAGER_OBSERVER_H_
+
+#include "base/observer_list_types.h"
+
+// Observer for WallpaperSearchBackgroundManager.
+class WallpaperSearchBackgroundManagerObserver : public base::CheckedObserver {
+ public:
+ // Called when the history is updated.
+ virtual void OnHistoryUpdated() = 0;
+};
+
+#endif // CHROME_BROWSER_SEARCH_BACKGROUND_WALLPAPER_SEARCH_WALLPAPER_SEARCH_BACKGROUND_MANAGER_OBSERVER_H_
diff -Nru chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_unittest.cc chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_unittest.cc
--- chromium-121.0.6167.139/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_unittest.cc 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_unittest.cc 2024-02-06 23:11:24.000000000 +0000
@@ -32,6 +32,7 @@
const char kWallpaperSearchHistoryStyle[] = "style";
const char kWallpaperSearchHistorySubject[] = "subject";
+using testing::DoAll;
using testing::Return;
using testing::SaveArg;
@@ -41,10 +42,17 @@
: NtpCustomBackgroundService(profile) {}
MOCK_METHOD(absl::optional, GetCustomBackground, ());
MOCK_METHOD0(IsCustomBackgroundDisabledByPolicy, bool());
- MOCK_METHOD1(SetBackgroundToLocalResourceWithId, void(const base::Token&));
+ MOCK_METHOD2(SetBackgroundToLocalResourceWithId,
+ void(const base::Token&, bool));
MOCK_METHOD1(UpdateCustomLocalBackgroundColorAsync, void(const gfx::Image&));
};
+class MockWallpaperSearchBackgroundManagerObserver
+ : public WallpaperSearchBackgroundManagerObserver {
+ public:
+ MOCK_METHOD0(OnHistoryUpdated, void());
+};
+
std::unique_ptr MakeTestingProfile() {
TestingProfile::Builder profile_builder;
profile_builder.AddTestingFactory(
@@ -139,12 +147,14 @@
TEST_F(WallpaperSearchBackgroundManagerTest, SetHistoryImage) {
gfx::Image image_arg;
base::Token token_arg;
+ bool is_inspiration_image_arg;
ON_CALL(mock_ntp_custom_background_service(),
IsCustomBackgroundDisabledByPolicy)
.WillByDefault(testing::Return(false));
EXPECT_CALL(mock_ntp_custom_background_service(),
SetBackgroundToLocalResourceWithId)
- .WillOnce(SaveArg<0>(&token_arg));
+ .WillOnce(
+ DoAll(SaveArg<0>(&token_arg), SaveArg<1>(&is_inspiration_image_arg)));
EXPECT_CALL(mock_ntp_custom_background_service(),
UpdateCustomLocalBackgroundColorAsync)
.WillOnce(SaveArg<0>(&image_arg));
@@ -163,6 +173,9 @@
EXPECT_EQ(token_arg, token);
EXPECT_EQ(image, image_arg);
+ // Check that |is_inspiration_image| is false for history images.
+ EXPECT_FALSE(is_inspiration_image_arg);
+
// Check that processing time was saved to metrics.
histogram_tester().ExpectBucketCount(
"NewTabPage.WallpaperSearch.SetRecentThemeProcessingLatency", 321, 1);
@@ -171,12 +184,14 @@
TEST_F(WallpaperSearchBackgroundManagerTest, SetLocalBackgroundImage) {
gfx::Image image_arg;
base::Token token_arg;
+ bool is_inspiration_image_arg;
ON_CALL(mock_ntp_custom_background_service(),
IsCustomBackgroundDisabledByPolicy)
.WillByDefault(testing::Return(false));
EXPECT_CALL(mock_ntp_custom_background_service(),
SetBackgroundToLocalResourceWithId)
- .WillOnce(SaveArg<0>(&token_arg));
+ .WillOnce(
+ DoAll(SaveArg<0>(&token_arg), SaveArg<1>(&is_inspiration_image_arg)));
EXPECT_CALL(mock_ntp_custom_background_service(),
UpdateCustomLocalBackgroundColorAsync)
.WillOnce(SaveArg<0>(&image_arg));
@@ -188,7 +203,7 @@
base::Token token = base::Token::CreateRandom();
base::ElapsedTimer timer = base::ElapsedTimer();
wallpaper_search_background_manager().SelectLocalBackgroundImage(
- token, bitmap, std::move(timer));
+ token, bitmap, /*is_inspiration_image=*/false, std::move(timer));
task_environment().AdvanceClock(base::Milliseconds(345));
task_environment().RunUntilIdle();
@@ -199,12 +214,55 @@
EXPECT_EQ(token_arg.high(), token.high());
EXPECT_EQ(token_arg.low(), token.low());
EXPECT_EQ(SK_ColorRED, image_arg.ToSkBitmap()->getColor(0, 0));
+ EXPECT_FALSE(is_inspiration_image_arg);
// Check that processing time was saved to metrics.
histogram_tester().ExpectBucketCount(
"NewTabPage.WallpaperSearch.SetResultThemeProcessingLatency", 345, 1);
}
+TEST_F(WallpaperSearchBackgroundManagerTest,
+ SetLocalBackgroundImage_Inspiration) {
+ gfx::Image image_arg;
+ base::Token token_arg;
+ bool is_inspiration_image_arg;
+ ON_CALL(mock_ntp_custom_background_service(),
+ IsCustomBackgroundDisabledByPolicy)
+ .WillByDefault(testing::Return(false));
+ EXPECT_CALL(mock_ntp_custom_background_service(),
+ SetBackgroundToLocalResourceWithId)
+ .WillOnce(
+ DoAll(SaveArg<0>(&token_arg), SaveArg<1>(&is_inspiration_image_arg)));
+ EXPECT_CALL(mock_ntp_custom_background_service(),
+ UpdateCustomLocalBackgroundColorAsync)
+ .WillOnce(SaveArg<0>(&image_arg));
+
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(32, 32);
+ bitmap.eraseColor(SK_ColorRED);
+
+ base::Token token = base::Token::CreateRandom();
+ base::ElapsedTimer timer = base::ElapsedTimer();
+ wallpaper_search_background_manager().SelectLocalBackgroundImage(
+ token, bitmap, /*is_inspiration_image=*/true, std::move(timer));
+ task_environment().AdvanceClock(base::Milliseconds(345));
+ task_environment().RunUntilIdle();
+
+ // Check that image file was created.
+ EXPECT_TRUE(base::PathExists(GetFilePathForBackground(token)));
+
+ // Check that the args were passed to |NtpCustomBackgroundService|.
+ EXPECT_EQ(token_arg.high(), token.high());
+ EXPECT_EQ(token_arg.low(), token.low());
+ EXPECT_EQ(SK_ColorRED, image_arg.ToSkBitmap()->getColor(0, 0));
+ EXPECT_TRUE(is_inspiration_image_arg);
+
+ // Check that processing time was saved to metrics.
+ histogram_tester().ExpectBucketCount(
+ "NewTabPage.WallpaperSearch.SetInspirationThemeProcessingLatency", 345,
+ 1);
+}
+
// If the currently set wallpaper search image is set again, do not pass it
// through to SetBackgroundToLocalResourceWithId(). Otherwise, its image file
// could be deleted.
@@ -231,7 +289,7 @@
ON_CALL(mock_ntp_custom_background_service(), GetCustomBackground())
.WillByDefault(Return(absl::make_optional(custom_background)));
wallpaper_search_background_manager().SelectLocalBackgroundImage(
- token, bitmap, base::ElapsedTimer());
+ token, bitmap, true, base::ElapsedTimer());
task_environment().RunUntilIdle();
@@ -545,3 +603,23 @@
// The theme file created above should still be there.
EXPECT_TRUE(base::PathExists(GetFilePathForBackground(tokens[3])));
}
+
+TEST_F(WallpaperSearchBackgroundManagerTest, NotifyAboutHistory) {
+ std::unique_ptr observer =
+ std::make_unique();
+ EXPECT_CALL(*observer, OnHistoryUpdated());
+
+ // Add mock observer to observer list and update history pref.
+ wallpaper_search_background_manager().AddObserver(observer.get());
+ base::Value::List history =
+ base::Value::List().Append(base::Value::Dict().Set(
+ kWallpaperSearchHistoryId, base::Token::CreateRandom().ToString()));
+ pref_service().SetList(prefs::kNtpWallpaperSearchHistory, std::move(history));
+
+ // Remove mock observer to observer list and update history pref.
+ // This shouldn't create another call to OnHistoryUpdated().
+ wallpaper_search_background_manager().RemoveObserver(observer.get());
+ history = base::Value::List().Append(base::Value::Dict().Set(
+ kWallpaperSearchHistoryId, base::Token::CreateRandom().ToString()));
+ pref_service().SetList(prefs::kNtpWallpaperSearchHistory, std::move(history));
+}
diff -Nru chromium-121.0.6167.139/chrome/browser/search_engine_choice/search_engine_choice_service_unittest.cc chromium-121.0.6167.160/chrome/browser/search_engine_choice/search_engine_choice_service_unittest.cc
--- chromium-121.0.6167.139/chrome/browser/search_engine_choice/search_engine_choice_service_unittest.cc 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/search_engine_choice/search_engine_choice_service_unittest.cc 2024-02-06 23:11:24.000000000 +0000
@@ -10,6 +10,7 @@
#include "chrome/browser/search_engine_choice/search_engine_choice_service_factory.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/test/base/browser_with_test_window_test.h"
+#include "chrome/test/base/dialog_test_browser_window.h"
#include "chrome/test/base/testing_browser_process.h"
#include "components/country_codes/country_codes.h"
#include "components/search_engines/prepopulated_engines.h"
@@ -18,6 +19,36 @@
#include "components/signin/public/base/signin_switches.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace {
+
+void SetUserSelectedDefaultSearchProvider(
+ TemplateURLService* template_url_service,
+ bool created_by_policy) {
+ constexpr char kCustomSearchEngineDomain[] = "bar.com";
+ constexpr char16_t kCustomSearchEngineKeyword[] = u"bar.com";
+
+ TemplateURLData data;
+ data.SetShortName(kCustomSearchEngineKeyword);
+ data.SetKeyword(kCustomSearchEngineKeyword);
+ data.SetURL(base::StringPrintf("https://%s/url?bar={searchTerms}",
+ kCustomSearchEngineDomain));
+ data.new_tab_url =
+ base::StringPrintf("https://%s/newtab", kCustomSearchEngineDomain);
+ data.alternate_urls.push_back(base::StringPrintf(
+ "https://%s/alt#quux={searchTerms}", kCustomSearchEngineDomain));
+
+ if (created_by_policy) {
+ data.created_by_policy =
+ TemplateURLData::CreatedByPolicy::kDefaultSearchProvider;
+ }
+
+ TemplateURL* template_url =
+ template_url_service->Add(std::make_unique(data));
+ template_url_service->SetUserSelectedDefaultSearchProvider(template_url);
+}
+
+} // namespace
+
class SearchEngineChoiceServiceTest : public BrowserWithTestWindowTest {
public:
SearchEngineChoiceServiceTest() {
@@ -46,6 +77,11 @@
kBelgiumCountryId);
}
+ std::unique_ptr CreateBrowserWindow() override {
+ // Dialog eligibility checks require a `WebContentsModalDialogHost`.
+ return std::make_unique();
+ }
+
const base::HistogramTester& histogram_tester() const {
return histogram_tester_;
}
@@ -128,3 +164,25 @@
kProfileCreationDefaultWasSet,
1);
}
+
+TEST_F(SearchEngineChoiceServiceTest,
+ DoNotDisplayDialogIfPolicyIsSetDynamically) {
+ SearchEngineChoiceService* search_engine_choice_service =
+ SearchEngineChoiceServiceFactory::GetForProfile(profile());
+ ASSERT_TRUE(search_engine_choice_service);
+
+ SetUserSelectedDefaultSearchProvider(
+ TemplateURLServiceFactory::GetForProfile(profile()),
+ /*created_by_policy=*/true);
+ EXPECT_FALSE(search_engine_choice_service->CanShowDialog(*browser()));
+}
+
+TEST_F(SearchEngineChoiceServiceTest, DoNotCreateServiceIfPolicyIsSet) {
+ SetUserSelectedDefaultSearchProvider(
+ TemplateURLServiceFactory::GetForProfile(profile()),
+ /*created_by_policy=*/true);
+
+ SearchEngineChoiceService* search_engine_choice_service =
+ SearchEngineChoiceServiceFactory::GetForProfile(profile());
+ EXPECT_FALSE(search_engine_choice_service);
+}
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -1288,7 +1288,7 @@
مزيد من المعلومات عن الإعلانات التي تقترحها المواقع الإلكترونية
يتم مسبقًا تحميل بعض الصفحات التي تنتقل إليها. يمكن تحميل صفحات الويب مُسبقًا من خلال خوادم Google عند ربطها من موقع مصمَّم في "مواقع Google".
لا يمكن فتح Chrome على جهازك. لحلّ هذه المشكلة، عليك تنزيل تحديث Chrome الأخير من متجر التطبيقات.
-استكشاف محتوًى لمتابعته
+استكشاف محتوى لمتابعته
مقبض السحب
إنشاء بريد إلكتروني في
مربّعات طلبات البحث
@@ -1548,7 +1548,7 @@
الاستئناف من حيث توقفت
فتح علامة تبويب جديدة في وضع التصفّح المتخفّي
اختيار مقدِّم خدمة آخر
-الوضع غير متاح على جهازك.
+غير متاح على جهازك
يتم تسجيل دخولك باستخدام حساب تتم إدارته من خلال ومنح مشرفه الحق في التحكم في بياناتك على Chrome. سيؤدي ذلك إلى جعل بياناتك مرتبطة دائمًا بهذا الحساب. كما سيؤدي الخروج من Chrome إلى حذف بياناتك من هذا الجهاز، ولكن ستظل هذه البيانات مخزَّنة على حسابك في Google.
يوفر لك هذا الوضع حماية من المواقع الإلكترونية وعمليات التنزيل والإضافات التي تبيّن أنها ضارة. فإذا تم رصد نشاط مريب في إحدى الصفحات، يتم إرسال عناوين URL وأجزاء من محتوى الصفحة إلى ميزة "التصفّح الآمن من Google".
هل تريد المتابعة بدون قفل للملف الشخصي في السيارة؟
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -556,7 +556,7 @@
Du wirst bei einem Preisnachlass benachrichtigt
Sepia
Rechtliche Hinweise
-Versuchen Sie es später noch einmal
+Versuch es später noch einmal
Lesezeichen
Von – bereitgestellt durch Google
Du kannst dich über dieses Tablet auf dem Gerät anmelden, auf dem dieser QR-Code angezeigt wird.
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -507,7 +507,7 @@
Se inhabilitó esta configuración porque los controles parentales están activados
Condiciones del Servicio de Google
Enviar a tus dispositivos
-Saldrás de la mayoría de los sitios
+Saldrás de la mayoría de los sitios.
{TAB_COUNT,plural, =1{1 pestaña}other{# pestañas}}
Copiar imagen con el vínculo
Video
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -147,7 +147,7 @@
Minimizar la pestaña para volver a ella más tarde
Claro
La configuración de sincronización inicial no ha terminado
- no puede seguir usando
+ no puede seguir usando .
Buscar en la página
Activa la sincronización para recibir el contenido más relevante de Google
Abrir en el navegador Chrome
@@ -507,7 +507,7 @@
Este ajuste está inhabilitado porque el control parental está activado
Términos del Servicio de Google
Enviar a tus dispositivos
-Cierra tu sesión en la mayoría de los sitios
+Cierra tu sesión en la mayoría de los sitios.
{TAB_COUNT,plural, =1{1 pestaña}other{# pestañas}}
Copiar imagen con enlace
Vídeo
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -677,7 +677,7 @@
انتخاب از فهرست کرکرهای
آگهیهای پیشنهادی سایت
{SHIPPING_OPTIONS,plural, =1{\u2026 و گزینه دیگر}one{\u2026 و گزینه دیگر}other{\u2026 و گزینه دیگر}}
-تصاویر و فایلهای قرار گرفته در حافظه پنهان
+تصاویر و فایلهای قرار گرفته در حافظه نهان
ترتیب براساس جدیدترین
پیشنهاد برای ترجمه
دیدن سایتهای برتر شما
@@ -1271,7 +1271,7 @@
به Chrome خوش آمدید
نشانی وب ارائهدهنده
گذرعبارت نادرست است
-پاک کردن دادههای محصول مرور…
+پاک کردن دادههای مرور…
همگامسازی گذرواژه کار نمیکند
۷ روز گذشته
درحال روشن کردن بلوتوث…
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -1199,7 +1199,7 @@
Il est possible que votre appareil Android ait un paramètre similaire. Si ce paramètre est activé dans Chrome et sur votre appareil Android, une entreprise peut être capable de mesurer l'efficacité d'une annonce sur les sites Web que vous visitez et les applications que vous utilisez.
Hors ligne. Chrome ne peut pas vérifier vos mots de passe.
Touchez pour configurer la synchronisation
-Envoyer une demande « Ne pas suivre »
+Envoyer une demande « Do Not Track »
Connexion réussie
Synchronisez vos données pour accéder à du contenu plus pertinent de Google
Nouvelle fenêtre
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -137,7 +137,7 @@
Anda dapat menjelajah dan menelusuri lebih cepat saat Chrome melakukan pramuat halaman yang menurutnya mungkin akan Anda buka
Sinkronisasikan bookmark Anda
Grup tab - tab
-Buka tab
+Tab terbuka
Pembaruan Pengelola Sandi Google
{FILE_COUNT,plural, =1{Halaman, 1 halaman dalam daftar}other{Halaman, # halaman dalam daftar}}
Tandai sebagai belum dibaca
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -507,7 +507,7 @@
Questa impostazione è disattivata perché il Controllo genitori è attivo
Termini di servizio di Google
Invia ai tuoi dispositivi
-Uscirai dalla maggior parte dei siti.
+Ti disconnette dalla maggior parte dei siti.
{TAB_COUNT,plural, =1{1 scheda}other{# schede}}
Copia immagine con link
Video
@@ -895,7 +895,7 @@
Per copiare le password, imposta prima un blocco schermo sul tuo dispositivo
Spazio utilizzato: di
Cerca e sfoglia
-Viene cancellata la cronologia, anche nella casella di ricerca
+Cancella la cronologia, anche nella casella di ricerca
Argomento bloccato
{HOURS,plural, =1{# ora fa}other{# ore fa}}
Copyright Google LLC Tutti i diritti riservati.
@@ -1165,7 +1165,7 @@
Altro
Ordina manualmente
Questi siti e app sembrano importanti per te:
-Ottieni maggiori informazioni da .
+Richiedi maggiori informazioni a .
Ultimo giorno
Accesso eseguito come . Consente di aprire le impostazioni.
Apri Impostazioni
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -148,7 +148,7 @@
後で戻るにはタブを最小化します
明
最初の同期設定が終了していません
- は の使用を続行できません
+ を使用して で続行できません
ページ内検索
同期すると、最も関連性の高いコンテンツを表示できます
Chrome ブラウザで開く
@@ -1222,7 +1222,7 @@
Google アカウント ユーザー
ON にする
常に安全な接続を使用する
-検索などのカスタマイズを目的とした閲覧履歴の使用方法を設定
+検索などのカスタマイズに閲覧履歴がどのように使われるかを管理する
管理者によってオフにされています
Chrome からログアウト
ユーザーの IP アドレスを隠すプライバシー サーバーを介して、URL の一部を難読化して Google に送信します
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -214,7 +214,7 @@
Нешта што треба да се земат предвид
Додај корисничко име
Ако го отворите Chrome без „Заклучување на профилот“, ќе се отстранат вашите лозинки и начини на плаќање од автомобилот. „Заклучување на профилот“ ги штити овие податоци.
-Продолжи како
+Продолжете како
Празен прозорец
Активност на веб и апликации
Водич за приватност
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -1130,7 +1130,7 @@
ही समस्या येत राहिल्यास, कडून अधिक माहिती मिळवा.
तुमच्या डिव्हाइसवर आणि तुमच्या Google खाते मध्ये सेव्ह केलेले सर्व सुरक्षा कोड हटवले जातील
सेटिंग्ज मेनू पर्याय वापरून केव्हाही डीफॉल्ट डाउनलोड स्थान बदला
-तुम्ही सध्या तुमची सिंक सेटिंग्ज कस्टमाइझ करत आहात. सिंक सुरू करणे पूर्ण करण्यासाठी, स्क्रीनच्या तळाशी असलेल्या कंफर्म करा बटणावर टॅप करा. वर नेव्हिगेट करा
+तुम्ही सध्या तुमची सिंक सेटिंग्ज कस्टमाइझ करत आहात. सिंक सुरू करणे पूर्ण करण्यासाठी, स्क्रीनच्या तळाशी असलेल्या कन्फर्म करा बटणावर टॅप करा. वर नेव्हिगेट करा
निवडा
व्यवस्थापित केलेल्या ब्राउझरवर हे सेटिंग बंद केलेले आहे
बुकमार्क हटवा
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -923,7 +923,7 @@
Recomendação atual:
A ver a página publicada…
Abrir Centro de Ajuda do Chrome num novo separador
-Para ver os seus sites principais, toque no botão página inicial.
+Para ver os seus sites principais, toque no botão do ecrã principal.
Selecione uma conta.
Encontre os seus ficheiros e páginas nas Transferências.
Simplificar a página
@@ -1053,7 +1053,7 @@
As imagens são enviadas para a Google para melhorar as descrições.
Copiado para o Chrome
Melhora a segurança para si e todas as pessoas na Web.
-Para ver os sites e as notícias principais para si, toque no botão página inicial.
+Para ver os sites e as notícias principais para si, toque no botão do ecrã principal.
Para enviar este separador para outro dispositivo, inicie sessão no Chrome em ambos os dispositivos
Editar pasta
Desbloquear a Navegação anónima
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -507,7 +507,7 @@
Эта настройка отключена, так как работает родительский контроль
Условия использования Google
Отправка на свои устройства
-Вы автоматически выйдете из учетных записей на большинстве сайтов.
+Вы автоматически выйдете из аккаунтов на большинстве сайтов.
{TAB_COUNT,plural, =1{1 вкладка}one{# вкладка}few{# вкладки}many{# вкладок}other{# вкладки}}
Скопировать изображение со ссылкой
Видео
@@ -1544,7 +1544,7 @@
Продолжайте работу с того места, где остановились
Открыть новое окно в режиме инкогнито
Выбрать другого поставщика
-Недоступно на вашем устройстве
+Недоступно на вашем устройстве.
Вы входите в аккаунт, которым управляет администратор домена . Он может контролировать ваши данные Chrome, которые теперь будут связаны с управляемым аккаунтом. При выходе из системы все данные Chrome, хранящиеся на этом устройстве, будут удалены, но останутся в вашем аккаунте Google.
Защита от сайтов, расширений и скачанных файлов, признанных опасными. Если на какой-либо странице произойдет что-то подозрительное, ведущие на нее URL и часть ее контента будут отправлены в Google Безопасный просмотр.
Продолжить без блокировки профиля для автомобиля?
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -256,7 +256,7 @@
คำอธิบายรูปภาพเปิดอยู่
ไปที่การตั้งค่า
การแจ้งเตือน
-ประวัติการเข้าชมที่เรียกดู
+ประวัติการท่องเว็บ
ผู้ดูแลระบบปิดใช้การซิงค์
คุณจะเห็นสถานะการลงชื่อเข้าใช้ ข้อมูลการท่องเว็บ และข้อมูลเว็บไซต์ของ ใน Chrome
กำลังติดตั้ง ...
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -49,7 +49,7 @@
Chia sẻ nhanh trang này. Để chỉnh sửa lối tắt này, hãy chuyển đến phần Cài đặt.
Mẹo dùng Chrome
Đang tải
-Để tiếp tục, sẽ chia sẻ tên, địa chỉ email và ảnh hồ sơ của bạn với trang web này. Xem chính sách quyền riêng tư và điều khoản dịch vụ của trang web này
+Để tiếp tục, sẽ chia sẻ tên, địa chỉ email và ảnh hồ sơ của bạn với trang web này. Xem chính sách quyền riêng tư và điều khoản dịch vụ của trang web này.
Ngôn ngữ khác
Mật khẩu của bạn sẽ bị xoá khỏi Trình quản lý mật khẩu của Google trên . Bạn sẽ giữ tệp mật khẩu mà bạn vừa tải xuống.
thiết bị
@@ -177,7 +177,7 @@
Nâng cao
Không được bảo vệ (không khuyến nghị)
Tên đã tồn tại
-Để tiếp tục, sẽ chia sẻ tên, địa chỉ email và ảnh hồ sơ của bạn với trang web này. Xem chính sách quyền riêng tư của trang web này
+Để tiếp tục, sẽ chia sẻ tên, địa chỉ email và ảnh hồ sơ của bạn với trang web này. Xem chính sách quyền riêng tư của trang web này.
Bao gồm văn bản xung quanh trong các lượt tìm kiếm của Google?
Để đo lường hiệu suất quảng cáo, các trang web chỉ có thể chia sẻ với nhau một số loại dữ liệu nhất định, chẳng hạn như thời điểm trong ngày mà bạn thấy quảng cáo.
Khoá hồ sơ giúp đảm bảo an toàn cho thông tin của bạn trong ô tô, trong đó có mật khẩu đã đồng bộ hoá, thông tin thanh toán, v.v.
@@ -256,7 +256,7 @@
Tính năng mô tả hình ảnh đang bật
Chuyển đến phần Cài đặt
Thông báo
-Lịch sử duyệt web
+Nhật ký duyệt web
Quản trị viên của bạn đã tắt tính năng đồng bộ hóa
Trong Chrome, bạn sẽ thấy trạng thái đăng nhập, dữ liệu duyệt web và dữ liệu trang web trên
Đang cài đặt ...
@@ -834,7 +834,7 @@
Bạn vẫn muốn tải xuống?
Mở trong ứng dụng bản đồ
Biểu trưng của thông báo về quyền riêng tư cho trung tâm thông tin chi tiết về trang chuyển hướng đến trang hoạt động của tôi.
-Xóa dữ liệu
+Xoá dữ liệu
Mã hoá trên thiết bị
Bị quản trị viên của thiết bị này vô hiệu hóa
Mở khóa để xem mật khẩu của bạn
@@ -1271,13 +1271,13 @@
Chào mừng bạn đến với Chrome
URL của nhà cung cấp
Cụm mật khẩu không chính xác
-Xóa dữ liệu duyệt web…
+Xoá dữ liệu duyệt web…
Tính năng đồng bộ hóa mật khẩu hiện không hoạt động
7 ngày qua
Đang bật Bluetooth…
Không có trang web nào
Bật chế độ Khoá thẻ ẩn danh
-Hủy
+Huỷ
Thêm tài khoản
Các bài viết xuất hiện ở đây và bạn có thể đọc ngay cả khi không có kết nối mạng
Đã sao chép GIF
@@ -1354,7 +1354,7 @@
Trình duyệt
Xóa cả dữ liệu của bạn trên Chrome khỏi thiết bị này
Trả lại mọi nội dung trên trang về kích thước mặc định
-Xóa dữ liệu duyệt web
+Xoá dữ liệu duyệt web
Chọn vị trí lưu tệp tải xuống
Phê duyệt
Đang theo dõi
@@ -1544,7 +1544,7 @@
Bắt đầu từ nơi bạn đã dừng lại
Mở thẻ mới trong chế độ Ẩn danh
Chọn nhà cung cấp khác
-Không hoạt động trên thiết bị của bạn
+Tính năng đăng nhập không hoạt động trên thiết bị của bạn
Bạn đang đăng nhập bằng tài khoản do quản lý và cấp cho quản trị viên quyền kiểm soát dữ liệu Chrome của bạn. Dữ liệu của bạn sẽ được liên kết vĩnh viễn với tài khoản này. Việc đăng xuất khỏi Chrome sẽ xóa dữ liệu của bạn khỏi thiết bị này nhưng dữ liệu sẽ vẫn được lưu trữ trong Tài khoản Google.
Bảo vệ bạn khỏi các trang web, nội dung tải xuống và tiện ích được xác định là nguy hiểm. Nếu một trang có hoạt động đáng ngờ, thì URL và một phần nội dung của trang sẽ được gửi tới dịch vụ Duyệt web An toàn của Google.
Tiếp tục mà không cần khoá hồ sơ ô tô?
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
--- chromium-121.0.6167.139/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb 2024-02-06 23:11:25.000000000 +0000
@@ -399,7 +399,7 @@
分頁與視窗快速鍵
Chrome 已在執行中。
你可以要求 顯示行動版網站
-Discover
+探索
廣告評估功能
已加入書籤
立即檢查
@@ -1221,7 +1221,7 @@
Google 帳戶使用者
是,我要啟用
一律使用安全連線
-控制 Google 使用瀏覽記錄提供個人化搜尋服務和其他內容的方式
+控管 Google 如何使用瀏覽記錄,提供個人化的搜尋服務和其他內容
已由系統管理員停用
登出 Chrome
透過隱私權伺服器隱藏你的 IP 位址,再將經過模糊處理的部分網址傳送給 Google
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc chromium-121.0.6167.160/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc
--- chromium-121.0.6167.139/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc 2024-01-30 20:24:17.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/color/win/native_chrome_color_mixer_win.cc 2024-02-06 23:11:25.000000000 +0000
@@ -335,6 +335,14 @@
mixer[kColorTabBackgroundActiveFrameInactive] = {
kColorTabBackgroundActiveFrameActive};
mixer[kColorTabForegroundActiveFrameActive] = {ui::kColorNativeHighlightText};
+ mixer[kColorNewTabButtonCRBackgroundFrameActive] = {
+ kColorTabBackgroundActiveFrameActive};
+ mixer[kColorNewTabButtonCRBackgroundFrameInactive] = {
+ kColorTabBackgroundActiveFrameInactive};
+ mixer[kColorNewTabButtonForegroundFrameActive] = {
+ kColorTabForegroundActiveFrameActive};
+ mixer[kColorNewTabButtonForegroundFrameInactive] = {
+ kColorTabForegroundActiveFrameActive};
mixer[kColorToolbar] = {ui::kColorNativeWindow};
mixer[kColorToolbarButtonIcon] = {kColorToolbarText};
const bool platform_high_contrast_ink_drop = base::FeatureList::IsEnabled(
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom chromium-121.0.6167.160/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
--- chromium-121.0.6167.139/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom 2024-02-06 23:11:26.000000000 +0000
@@ -45,6 +45,7 @@
kThirdPartyTheme,
kUploadedImage,
kWallpaperSearch,
+ kWallpaperSearchInspiration,
};
// Enum representing the in product help promo to trigger.
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc chromium-121.0.6167.160/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
--- chromium-121.0.6167.139/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc 2024-02-06 23:11:26.000000000 +0000
@@ -256,8 +256,13 @@
image_source = new_tab_page::mojom::NtpBackgroundImageSource::
kFirstPartyThemeWithDailyRefresh;
} else if (custom_background->local_background_id.has_value()) {
- image_source =
- new_tab_page::mojom::NtpBackgroundImageSource::kWallpaperSearch;
+ if (custom_background->is_inspiration_image) {
+ image_source = new_tab_page::mojom::NtpBackgroundImageSource::
+ kWallpaperSearchInspiration;
+ } else {
+ image_source =
+ new_tab_page::mojom::NtpBackgroundImageSource::kWallpaperSearch;
+ }
} else if (custom_background->is_uploaded_image) {
image_source =
new_tab_page::mojom::NtpBackgroundImageSource::kUploadedImage;
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc chromium-121.0.6167.160/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc
--- chromium-121.0.6167.139/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc 2024-02-06 23:11:26.000000000 +0000
@@ -646,6 +646,7 @@
CustomBackground custom_background;
custom_background.is_uploaded_image = true;
custom_background.local_background_id = base::Token::CreateRandom();
+ custom_background.is_inspiration_image = false;
custom_background.daily_refresh_enabled = false;
ON_CALL(mock_ntp_custom_background_service_, GetCustomBackground())
.WillByDefault(testing::Return(absl::make_optional(custom_background)));
@@ -661,6 +662,33 @@
theme->background_image->image_source);
}
+TEST_P(NewTabPageHandlerThemeTest, SetWallpaperSearchInspirationImage) {
+ new_tab_page::mojom::ThemePtr theme;
+ EXPECT_CALL(mock_page_, SetTheme)
+ .Times(1)
+ .WillOnce(testing::Invoke([&theme](new_tab_page::mojom::ThemePtr arg) {
+ theme = std::move(arg);
+ }));
+ CustomBackground custom_background;
+ custom_background.is_uploaded_image = true;
+ custom_background.local_background_id = base::Token::CreateRandom();
+ custom_background.is_inspiration_image = true;
+ custom_background.daily_refresh_enabled = false;
+ ON_CALL(mock_ntp_custom_background_service_, GetCustomBackground())
+ .WillByDefault(testing::Return(std::make_optional(custom_background)));
+ ON_CALL(mock_theme_service_, UsingDefaultTheme())
+ .WillByDefault(testing::Return(false));
+
+ ntp_custom_background_service_observer_->OnCustomBackgroundImageUpdated();
+ mock_page_.FlushForTesting();
+
+ ASSERT_TRUE(theme);
+ ASSERT_TRUE(theme->background_image);
+ EXPECT_EQ(new_tab_page::mojom::NtpBackgroundImageSource::
+ kWallpaperSearchInspiration,
+ theme->background_image->image_source);
+}
+
TEST_P(NewTabPageHandlerThemeTest, SetThirdPartyTheme) {
new_tab_page::mojom::ThemePtr theme;
EXPECT_CALL(mock_page_, SetTheme)
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc
--- chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_ui.cc 2024-02-06 23:11:26.000000000 +0000
@@ -206,8 +206,15 @@
IDS_NTP_WALLPAPER_SEARCH_HISTORY_RESULT_LABEL_WITH_DESCRIPTOR_C},
{"wallpaperSearchHistoryResultLabelBC",
IDS_NTP_WALLPAPER_SEARCH_HISTORY_RESULT_LABEL_WITH_DESCRIPTORS_B_AND_C},
- {"wallpaperSearchMeadowInspirationTitle",
- IDS_NTP_WALLPAPER_SEARCH_MEADOW_INSPIRATION_TITLE}};
+ {"showInspirationCardToggle",
+ IDS_NTP_WALLPAPER_SEARCH_INSPIRATION_CARD_TOGGLE_TITLE},
+ {"genericErrorDescriptionWithInspiration",
+ IDS_NTP_WALLPAPER_SEARCH_GENERIC_ERROR_DESCRIPTION_WITH_INSPIRATION},
+ {"genericErrorDescriptionWithHistoryAndInspiration",
+ IDS_NTP_WALLPAPER_SEARCH_GENERIC_ERROR_DESCRIPTION_WITH_HISTORY_AND_INSPIRATION},
+ {"wallpaperSearchDescriptorsChangedA11yMessage",
+ IDS_NTP_WALLPAPER_SEARCH_DESCRIPTORS_CHANGED_A11Y_MESSAGE},
+ };
source->AddLocalizedStrings(kLocalizedStrings);
source->AddBoolean(
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search.mojom chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search.mojom
--- chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search.mojom 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search.mojom 2024-02-06 23:11:26.000000000 +0000
@@ -26,6 +26,12 @@
union DescriptorDValue {
skia.mojom.SkColor color;
float hue;
+ DescriptorDName name;
+};
+
+// Accepted color names for descriptor d.
+enum DescriptorDName {
+ kYellow,
};
// Full list of possible subject, style, and mood descriptors for the
@@ -37,12 +43,15 @@
};
struct Inspiration {
+ mojo_base.mojom.Token id;
+ string description;
url.mojom.Url background_url;
url.mojom.Url thumbnail_url;
};
-struct Inspirations {
- array inspiration_a;
+struct InspirationGroup {
+ ResultDescriptors descriptors;
+ array inspirations;
};
struct WallpaperSearchResult {
@@ -93,7 +102,7 @@
GetDescriptors() => (Descriptors? descriptors);
// Retrieves image URLs of example results.
- GetInspirations() => (Inspirations? inspirations);
+ GetInspirations() => (array? inspirationGroups);
// Searches NTP wallpaper for descriptors.
// Returns list of sanitized image data.
@@ -109,6 +118,11 @@
SetBackgroundToHistoryImage(mojo_base.mojom.Token result_id,
ResultDescriptors descriptors);
+ // Sets the inspiration image identified by `id` as the current background
+ // image.
+ SetBackgroundToInspirationImage(mojo_base.mojom.Token id,
+ url.mojom.Url background_url);
+
// Sets wallpaper search result identified by `result_id` to background image.
// `time` is Unix epoch time stamp of when the user selected the respective
// preview.
@@ -124,6 +138,9 @@
// Opens help article about the feature in a new tab when use clicks
// "Learn more".
OpenHelpArticle();
+
+ // Triggers the wallpaper search HaTS survey if eligible.
+ LaunchHatsSurvey();
};
// WebUI-side handler for requests from the browser.
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.cc chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.cc
--- chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.cc 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.cc 2024-02-06 23:11:26.000000000 +0000
@@ -15,6 +15,7 @@
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/metrics/histogram_functions.h"
+#include "base/task/sequenced_task_runner.h"
#include "base/task/thread_pool.h"
#include "base/time/time.h"
#include "base/timer/elapsed_timer.h"
@@ -30,7 +31,10 @@
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/browser_navigator_params.h"
#include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/hats/hats_service_factory.h"
+#include "chrome/browser/ui/hats/survey_config.h"
#include "chrome/browser/ui/webui/cr_components/theme_color_picker/customize_chrome_colors.h"
+#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chrome/common/webui_url_constants.h"
@@ -126,11 +130,8 @@
session_id_(session_id),
client_(std::move(pending_client)),
receiver_(this, std::move(pending_handler)) {
- pref_change_registrar_.Init(profile_->GetPrefs());
- pref_change_registrar_.Add(
- prefs::kNtpWallpaperSearchHistory,
- base::BindRepeating(&WallpaperSearchHandler::UpdateHistory,
- weak_ptr_factory_.GetWeakPtr()));
+ wallpaper_search_background_manager_observation_.Observe(
+ wallpaper_search_background_manager);
}
WallpaperSearchHandler::~WallpaperSearchHandler() {
@@ -176,17 +177,18 @@
mojo::WrapCallbackWithDefaultInvokeIfNotRun(std::move(callback), nullptr);
net::NetworkTrafficAnnotationTag traffic_annotation =
- net::DefineNetworkTrafficAnnotation("customize_chrome_page_handler", R"(
+ net::DefineNetworkTrafficAnnotation(
+ "wallpaper_search_handler_descriptors_fetcher", R"(
semantics {
sender: "Customize Chrome"
description:
- "This service downloads different configurations "
- "for Customize Chrome."
+ "This service downloads different descriptors "
+ "for Customize Chrome's Wallpaper Search."
trigger:
"Opening Customize Chrome on the Desktop NTP, "
"if Google is the default search provider "
"and the user is signed in."
- data: "None."
+ data: "Sends the URL to where the descriptor's JSON is located."
destination: GOOGLE_OWNED_SERVICE
internal {
contacts {
@@ -194,7 +196,7 @@
}
}
user_data {
- type: NONE
+ type: ACCESS_TOKEN
}
last_reviewed: "2023-10-10"
}
@@ -226,12 +228,13 @@
}
void WallpaperSearchHandler::GetInspirations(GetInspirationsCallback callback) {
- callback =
- mojo::WrapCallbackWithDefaultInvokeIfNotRun(std::move(callback), nullptr);
+ callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun(std::move(callback),
+ absl::nullopt);
net::NetworkTrafficAnnotationTag traffic_annotation =
- net::DefineNetworkTrafficAnnotation("customize_chrome_page_handler_image",
- R"(
+ net::DefineNetworkTrafficAnnotation(
+ "wallpaper_search_handler_inspirations_fetcher",
+ R"(
semantics {
sender: "Customize Chrome"
description:
@@ -241,7 +244,7 @@
"Opening Customize Chrome on the Desktop NTP, "
"if Google is the default search provider "
"and the user is signed in."
- data: "None."
+ data: "Sends the URL to where the example images' JSON is located."
destination: GOOGLE_OWNED_SERVICE
internal {
contacts {
@@ -249,7 +252,7 @@
}
}
user_data {
- type: NONE
+ type: ACCESS_TOKEN
}
last_reviewed: "2024-01-10"
}
@@ -268,7 +271,7 @@
})");
auto resource_request = std::make_unique();
resource_request->url =
- GURL(base::StrCat({kGstaticBaseURL, "inspirations.json"}));
+ GURL(base::StrCat({kGstaticBaseURL, "inspirations_en-US.json"}));
resource_request->request_initiator =
url::Origin::Create(GURL(chrome::kChromeUINewTabURL));
@@ -376,7 +379,68 @@
history_entry_->mood = descriptors->mood;
}
wallpaper_search_background_manager_->SelectLocalBackgroundImage(
- result_id, bitmap, base::ElapsedTimer());
+ result_id, bitmap, /*is_inspiration_image=*/false, base::ElapsedTimer());
+}
+
+void WallpaperSearchHandler::SetBackgroundToInspirationImage(
+ const base::Token& id,
+ const GURL& background_url) {
+ net::NetworkTrafficAnnotationTag traffic_annotation =
+ net::DefineNetworkTrafficAnnotation(
+ "wallpaper_search_handler_inspiration_image_downloader", R"(
+ semantics {
+ sender: "Customize Chrome"
+ description:
+ "Downloads an image to customize Chrome's appearance "
+ "i.e. change NTP background image and extract colors from the "
+ "image to change Chrome's color."
+ trigger:
+ "Pressing an image under the category titled 'Inspiration' "
+ "in Customize Chrome on the Desktop NTP, "
+ "if Google is the default search provider "
+ "and the user is signed in."
+ data: "Sends the URL for the image that the user selected."
+ destination: GOOGLE_OWNED_SERVICE
+ internal {
+ contacts {
+ email: "chrome-desktop-ntp@google.com"
+ }
+ }
+ user_data {
+ type: ACCESS_TOKEN
+ }
+ last_reviewed: "2024-01-12"
+ }
+ policy {
+ cookies_allowed: NO
+ setting:
+ "Users can control this feature by signing out or "
+ "selecting a non-Google default search engine in Chrome "
+ "settings under 'Search Engine'."
+ chrome_policy {
+ DefaultSearchProviderEnabled {
+ policy_options {mode: MANDATORY}
+ DefaultSearchProviderEnabled: false
+ }
+ }
+ })");
+ auto resource_request = std::make_unique();
+ resource_request->url = GURL(background_url);
+ resource_request->request_initiator =
+ url::Origin::Create(GURL(chrome::kChromeUINewTabURL));
+
+ image_download_simple_url_loader_ = network::SimpleURLLoader::Create(
+ std::move(resource_request), traffic_annotation);
+ image_download_simple_url_loader_->SetRetryOptions(
+ /*max_retries=*/3,
+ network::SimpleURLLoader::RetryMode::RETRY_ON_5XX |
+ network::SimpleURLLoader::RETRY_ON_NETWORK_CHANGE |
+ network::SimpleURLLoader::RETRY_ON_NAME_NOT_RESOLVED);
+ image_download_simple_url_loader_->DownloadToString(
+ profile_->GetURLLoaderFactory().get(),
+ base::BindOnce(&WallpaperSearchHandler::OnInspirationImageDownloaded,
+ weak_ptr_factory_.GetWeakPtr(), id, base::ElapsedTimer()),
+ network::SimpleURLLoader::kMaxBoundedStringDownloadSize);
}
void WallpaperSearchHandler::UpdateHistory() {
@@ -437,6 +501,16 @@
Navigate(&navigate_params);
}
+void WallpaperSearchHandler::LaunchHatsSurvey() {
+ base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask(
+ FROM_HERE,
+ base::BindOnce(&WallpaperSearchHandler::LaunchDelayedHatsSurvey,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::GetFieldTrialParamByFeatureAsTimeDelta(
+ features::kHappinessTrackingSurveysForWallpaperSearch,
+ ntp_features::kWallpaperSearchHatsDelayParam, base::TimeDelta()));
+}
+
void WallpaperSearchHandler::ShowFeedbackPage() {
#if BUILDFLAG(IS_CHROMEOS)
if (skip_show_feedback_page_for_testing_) {
@@ -472,6 +546,10 @@
/*autofill_metadata=*/base::Value::Dict(), std::move(feedback_metadata));
}
+void WallpaperSearchHandler::OnHistoryUpdated() {
+ WallpaperSearchHandler::UpdateHistory();
+}
+
// This function is a wrapper around image_fetcher::ImageDecoder::DecodeImage()
// because of argument order when working with PostTaskAndReplyWithResult().
void WallpaperSearchHandler::DecodeHistoryImage(
@@ -624,6 +702,30 @@
client_->SetHistory(std::move(thumbnails));
}
+void WallpaperSearchHandler::OnInspirationImageDownloaded(
+ const base::Token& id,
+ base::ElapsedTimer timer,
+ std::unique_ptr response_body) {
+ if (!response_body) {
+ // Network errors (i.e. the server did not provide a response).
+ DVLOG(1) << "Request failed with error: "
+ << image_download_simple_url_loader_->NetError();
+ return;
+ }
+ image_decoder_->DecodeImage(
+ *response_body, gfx::Size(), nullptr,
+ base::BindOnce(&WallpaperSearchHandler::OnInspirationImageDecoded,
+ weak_ptr_factory_.GetWeakPtr(), id, std::move(timer)));
+}
+
+void WallpaperSearchHandler::OnInspirationImageDecoded(
+ const base::Token& id,
+ base::ElapsedTimer timer,
+ const gfx::Image& image) {
+ wallpaper_search_background_manager_->SelectLocalBackgroundImage(
+ id, image.AsBitmap(), /*is_inspiration_image=*/true, std::move(timer));
+}
+
void WallpaperSearchHandler::OnInspirationsRetrieved(
GetInspirationsCallback callback,
std::unique_ptr response_body) {
@@ -631,7 +733,7 @@
// Network errors (i.e. the server did not provide a response).
DVLOG(1) << "Request failed with error: "
<< inspirations_simple_url_loader_->NetError();
- std::move(callback).Run(nullptr);
+ std::move(callback).Run(absl::nullopt);
return;
}
@@ -652,46 +754,86 @@
void WallpaperSearchHandler::OnInspirationsJsonParsed(
GetInspirationsCallback callback,
data_decoder::DataDecoder::ValueOrError result) {
- if (!result.has_value() || !result->is_dict()) {
+ if (!result.has_value() || !result->is_list()) {
DVLOG(1) << "Parsing JSON failed: " << result.error();
- std::move(callback).Run(nullptr);
- return;
- }
-
- const base::Value::List* inspiration_a =
- result->GetDict().FindList("inspiration_a");
- if (!inspiration_a) {
- DVLOG(1) << "Parsing JSON failed: no valid inspirations.";
- std::move(callback).Run(nullptr);
+ std::move(callback).Run(absl::nullopt);
return;
}
-
- std::vector
- mojo_inspiration_a_list;
- if (inspiration_a) {
- for (const auto& inspiration : *inspiration_a) {
- const base::Value::Dict& inspiration_a_dict = inspiration.GetDict();
- auto* background_image =
- inspiration_a_dict.FindString("background_image");
- auto* thumbnail_image = inspiration_a_dict.FindString("thumbnail_image");
- if (!background_image || !thumbnail_image) {
+ std::vector
+ mojo_inspiration_groups;
+ for (const auto& inspiration : result->GetList()) {
+ if (!inspiration.is_dict()) {
+ continue;
+ }
+ const base::Value::Dict& inspiration_dict = inspiration.GetDict();
+ const base::Value::List* images = inspiration_dict.FindList("images");
+ const std::string* descriptor_a =
+ inspiration_dict.FindString("descriptor_a");
+ if (!images || !descriptor_a) {
+ continue;
+ }
+ auto mojo_inspiration_group =
+ side_panel::customize_chrome::mojom::InspirationGroup::New();
+ mojo_inspiration_group->descriptors =
+ side_panel::customize_chrome::mojom::ResultDescriptors::New();
+ mojo_inspiration_group->descriptors->subject = *descriptor_a;
+ if (const std::string* descriptor_b =
+ inspiration_dict.FindString("descriptor_b")) {
+ mojo_inspiration_group->descriptors->style = *descriptor_b;
+ }
+ if (const std::string* descriptor_c =
+ inspiration_dict.FindString("descriptor_c")) {
+ mojo_inspiration_group->descriptors->mood = *descriptor_c;
+ }
+ if (const base::Value::Dict* descriptor_d_dict =
+ inspiration_dict.FindDict("descriptor_d")) {
+ if (const std::string* descriptor_d_name =
+ descriptor_d_dict->FindString("name")) {
+ if (descriptor_d_name->compare("Yellow") == 0) {
+ mojo_inspiration_group->descriptors->color =
+ side_panel::customize_chrome::mojom::DescriptorDValue::NewName(
+ side_panel::customize_chrome::mojom::DescriptorDName::
+ kYellow);
+ }
+ }
+ }
+ std::vector
+ mojo_inspiration_list;
+ for (const auto& image : *images) {
+ const base::Value::Dict& image_dict = image.GetDict();
+ const std::string* background_image =
+ image_dict.FindString("background_image");
+ const std::string* thumbnail_image =
+ image_dict.FindString("thumbnail_image");
+ const std::string* description = image_dict.FindString("description");
+ const std::string* id_string = image_dict.FindString("id");
+ if (!background_image || !thumbnail_image || !description || !id_string) {
+ continue;
+ }
+ const absl::optional id_token =
+ base::Token::FromString(*id_string);
+ if (!id_token.has_value()) {
continue;
}
- auto mojo_inspiration_a =
+ auto mojo_inspiration =
side_panel::customize_chrome::mojom::Inspiration::New();
- mojo_inspiration_a->background_url =
+ mojo_inspiration->id = id_token.value();
+ mojo_inspiration->background_url =
GURL(base::StrCat({kGstaticBaseURL, *background_image}));
- mojo_inspiration_a->thumbnail_url =
+ mojo_inspiration->thumbnail_url =
GURL(base::StrCat({kGstaticBaseURL, *thumbnail_image}));
- mojo_inspiration_a_list.push_back(std::move(mojo_inspiration_a));
+ mojo_inspiration->description = *description;
+ mojo_inspiration_list.push_back(std::move(mojo_inspiration));
+ }
+ if (mojo_inspiration_list.size() > 0) {
+ mojo_inspiration_group->inspirations = std::move(mojo_inspiration_list);
+ mojo_inspiration_groups.push_back(std::move(mojo_inspiration_group));
}
}
-
- if (!mojo_inspiration_a_list.empty()) {
- auto mojo_inspirations =
- side_panel::customize_chrome::mojom::Inspirations::New();
- mojo_inspirations->inspiration_a = std::move(mojo_inspiration_a_list);
- std::move(callback).Run(std::move(mojo_inspirations));
+ if (mojo_inspiration_groups.size() > 0) {
+ std::move(callback).Run(std::move(mojo_inspiration_groups));
+ } else {
+ std::move(callback).Run(absl::nullopt);
}
}
@@ -863,3 +1005,10 @@
side_panel::customize_chrome::mojom::WallpaperSearchStatus::kOk,
std::move(thumbnails));
}
+
+void WallpaperSearchHandler::LaunchDelayedHatsSurvey() {
+ HatsService* hats_service =
+ HatsServiceFactory::GetForProfile(profile_, /*create_if_necessary=*/true);
+ CHECK(hats_service);
+ hats_service->LaunchSurvey(kHatsSurveyTriggerWallpaperSearch);
+}
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.h chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.h
--- chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.h 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler.h 2024-02-06 23:11:26.000000000 +0000
@@ -13,13 +13,14 @@
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_ref.h"
#include "base/memory/weak_ptr.h"
+#include "base/scoped_observation.h"
#include "base/time/time.h"
#include "base/timer/elapsed_timer.h"
#include "base/token.h"
+#include "chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager_observer.h"
#include "chrome/browser/search/background/wallpaper_search/wallpaper_search_data.h"
#include "chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search.mojom.h"
#include "components/optimization_guide/core/optimization_guide_model_executor.h"
-#include "components/prefs/pref_change_registrar.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
@@ -45,7 +46,8 @@
} // namespace image_fetcher
class WallpaperSearchHandler
- : public side_panel::customize_chrome::mojom::WallpaperSearchHandler {
+ : public side_panel::customize_chrome::mojom::WallpaperSearchHandler,
+ public WallpaperSearchBackgroundManagerObserver {
public:
WallpaperSearchHandler(
mojo::PendingReceiver<
@@ -82,16 +84,22 @@
double time,
side_panel::customize_chrome::mojom::ResultDescriptorsPtr descriptors)
override;
+ void SetBackgroundToInspirationImage(const base::Token& id,
+ const GURL& background_url) override;
void UpdateHistory() override;
void SetUserFeedback(side_panel::customize_chrome::mojom::UserFeedback
selected_option) override;
void OpenHelpArticle() override;
+ void LaunchHatsSurvey() override;
#if BUILDFLAG(IS_CHROMEOS)
void SkipShowFeedbackPageForTesting(bool should_skip_check) {
skip_show_feedback_page_for_testing_ = should_skip_check;
}
#endif // BUILDFLAG(IS_CHROMEOS)
+ // WallpaperSearchBackgroundManagerObserver:
+ void OnHistoryUpdated() override;
+
private:
void ShowFeedbackPage();
void DecodeHistoryImage(image_fetcher::ImageDecodedCallback callback,
@@ -102,6 +110,12 @@
data_decoder::DataDecoder::ValueOrError result);
void OnHistoryDecoded(std::vector history,
std::vector> results);
+ void OnInspirationImageDownloaded(const base::Token& id,
+ base::ElapsedTimer timer,
+ std::unique_ptr response_body);
+ void OnInspirationImageDecoded(const base::Token& id,
+ base::ElapsedTimer timer,
+ const gfx::Image& image);
void OnInspirationsRetrieved(GetInspirationsCallback callback,
std::unique_ptr response_body);
void OnInspirationsJsonParsed(GetInspirationsCallback callback,
@@ -122,15 +136,19 @@
base::ElapsedTimer timer,
side_panel::customize_chrome::mojom::ResultDescriptorsPtr descriptors,
const gfx::Image& image);
+ void LaunchDelayedHatsSurvey();
raw_ptr profile_;
- PrefChangeRegistrar pref_change_registrar_;
std::unique_ptr descriptors_simple_url_loader_;
std::unique_ptr data_decoder_;
const raw_ref image_decoder_;
std::unique_ptr inspirations_simple_url_loader_;
+ std::unique_ptr image_download_simple_url_loader_;
const raw_ref
wallpaper_search_background_manager_;
+ base::ScopedObservation
+ wallpaper_search_background_manager_observation_{this};
// We keep all log entries alive until the session closes because whether and
// which image was selected will only be known then.
std::vector<
diff -Nru chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc
--- chromium-121.0.6167.139/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/browser/ui/webui/side_panel/customize_chrome/wallpaper_search/wallpaper_search_handler_unittest.cc 2024-02-06 23:11:26.000000000 +0000
@@ -26,6 +26,10 @@
#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
#include "chrome/browser/search/background/wallpaper_search/wallpaper_search_background_manager.h"
#include "chrome/browser/search/background/wallpaper_search/wallpaper_search_data.h"
+#include "chrome/browser/ui/hats/hats_service_factory.h"
+#include "chrome/browser/ui/hats/mock_hats_service.h"
+#include "chrome/browser/ui/hats/survey_config.h"
+#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/base/testing_profile.h"
@@ -94,9 +98,10 @@
void(const base::Token&,
const gfx::Image&,
base::ElapsedTimer timer));
- MOCK_METHOD3(SelectLocalBackgroundImage,
+ MOCK_METHOD4(SelectLocalBackgroundImage,
void(const base::Token&,
const SkBitmap&,
+ bool is_inspiration_image,
base::ElapsedTimer timer));
MOCK_METHOD1(SaveCurrentBackgroundToHistory,
absl::optional(const HistoryEntry& history_entry));
@@ -114,6 +119,8 @@
return std::make_unique<
testing::NiceMock>(context);
}));
+ profile_builder.AddTestingFactory(HatsServiceFactory::GetInstance(),
+ base::BindRepeating(&BuildMockHatsService));
profile_builder.SetSharedURLLoaderFactory(url_loader_factory);
auto profile = profile_builder.Build();
return profile;
@@ -138,7 +145,10 @@
OptimizationGuideKeyedServiceFactory::GetForProfile(
profile_.get()))),
mock_wallpaper_search_background_manager_(
- MockWallpaperSearchBackgroundManager(profile_.get())) {}
+ MockWallpaperSearchBackgroundManager(profile_.get())),
+ mock_hats_service_(static_cast(
+ HatsServiceFactory::GetForProfile(profile_.get(),
+ /*create_if_necessary=*/true))) {}
void SetUp() override {
feature_list_.InitWithFeatures(
@@ -168,7 +178,7 @@
}
const std::string kInspirationsLoadURL =
- base::StrCat({kGstaticBaseURL, "inspirations.json"});
+ base::StrCat({kGstaticBaseURL, "inspirations_en-US.json"});
void SetUpInspirationsResponseWithData(const std::string& response) {
test_url_loader_factory_.SetInterceptor(base::BindLambdaForTesting(
[&](const network::ResourceRequest& request) {}));
@@ -205,6 +215,10 @@
return mock_image_decoder_;
}
TestingProfile& profile() { return *profile_.get(); }
+ network::TestURLLoaderFactory& test_url_loader_factory() {
+ return test_url_loader_factory_;
+ }
+ MockHatsService& mock_hats_service() { return *mock_hats_service_; }
private:
// NOTE: The initialization order of these members matters.
@@ -222,6 +236,7 @@
MockWallpaperSearchBackgroundManager
mock_wallpaper_search_background_manager_;
data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
+ raw_ptr mock_hats_service_;
};
TEST_F(WallpaperSearchHandlerTest, GetHistory) {
@@ -1283,12 +1298,13 @@
SkBitmap bitmap;
base::Token token;
base::ElapsedTimer timer;
+ bool is_inspiration_image;
EXPECT_CALL(mock_wallpaper_search_background_manager(),
SelectLocalBackgroundImage(An(),
- An(),
+ An(), An(),
An()))
- .WillOnce(
- DoAll(SaveArg<0>(&token), SaveArg<1>(&bitmap), MoveArg<2>(&timer)));
+ .WillOnce(DoAll(SaveArg<0>(&token), SaveArg<1>(&bitmap),
+ SaveArg<2>(&is_inspiration_image), MoveArg<3>(&timer)));
auto descriptors =
side_panel::customize_chrome::mojom::ResultDescriptors::New();
@@ -1308,6 +1324,9 @@
// Check that the processing timer is being passed.
EXPECT_EQ(timer.Elapsed().InMilliseconds(), 123);
+ // Should not be marked as an inspiration image.
+ EXPECT_FALSE(is_inspiration_image);
+
// Simulate current background is saved to history.
HistoryEntry history_entry_arg;
EXPECT_CALL(mock_wallpaper_search_background_manager(),
@@ -1466,85 +1485,321 @@
qualities[1]->user_feedback());
}
+TEST_F(WallpaperSearchHandlerTest, DISABLED_LaunchHatsSurvey) {
+ base::test::ScopedFeatureList features;
+ features.InitWithFeaturesAndParameters(
+ {
+ {features::kHappinessTrackingSurveysForWallpaperSearch,
+ {{ntp_features::kWallpaperSearchHatsDelayParam, "5m"}}},
+ },
+ {});
+ EXPECT_CALL(mock_hats_service(),
+ LaunchSurvey(kHatsSurveyTriggerWallpaperSearch, _, _, _, _))
+ .Times(1);
+ auto handler = MakeHandler(/*session_id=*/123);
+ handler->LaunchHatsSurvey();
+ task_environment().FastForwardBy(base::Minutes(5));
+}
+
TEST_F(WallpaperSearchHandlerTest, GetInspirations_Success) {
- side_panel::customize_chrome::mojom::InspirationsPtr inspirations;
+ std::vector
+ inspiration_groups;
base::MockCallback callback;
EXPECT_CALL(callback, Run(_))
.Times(1)
.WillOnce(testing::Invoke(
- [&inspirations](side_panel::customize_chrome::mojom::InspirationsPtr
- inspirations_ptr_arg) {
- inspirations = std::move(inspirations_ptr_arg);
+ [&inspiration_groups](
+ std::optional>
+ inspiration_groups_ptr_arg) {
+ inspiration_groups = std::move(inspiration_groups_ptr_arg.value());
}));
SetUpInspirationsResponseWithData(
R"()]}'
- {"inspiration_a":[
- {"background_image":"foo_1.png","thumbnail_image":"foo_2.png"},
- {"background_image":"bar_1.png","thumbnail_image":"bar_2.png"}
- ]})");
- ASSERT_FALSE(inspirations);
+ [{
+ "descriptor_a": "foobar",
+ "images": [
+ {
+ "id": "00000000000000000000000000000000",
+ "description": "Description foo",
+ "background_image": "foo_1.png",
+ "thumbnail_image": "foo_2.png"
+ },
+ {
+ "id": "10000000000000000000000000000000",
+ "description": "Description bar",
+ "background_image": "bar_1.png",
+ "thumbnail_image": "bar_2.png"
+ }
+ ]
+ },
+ {
+ "descriptor_a": "baz",
+ "images": [
+ {
+ "id": "20000000000000000000000000000000",
+ "description": "Description baz",
+ "background_image": "baz_1.png",
+ "thumbnail_image": "baz_2.png"
+ }
+ ]
+ }]
+ )");
auto handler = MakeHandler(/*session_id=*/123);
handler->GetInspirations(callback.Get());
task_environment().RunUntilIdle();
- EXPECT_TRUE(inspirations);
- const auto& inspiration_a = inspirations->inspiration_a;
+ EXPECT_EQ(2u, inspiration_groups.size());
+ const auto& inspiration_group_a = inspiration_groups[0];
+ EXPECT_EQ("foobar", inspiration_group_a->descriptors->subject);
+ const auto& inspiration_a = inspiration_group_a->inspirations;
EXPECT_EQ(2u, inspiration_a.size());
const auto& foo_inspiration = inspiration_a[0];
EXPECT_EQ(foo_inspiration->background_url,
base::StrCat({kGstaticBaseURL, "foo_1.png"}));
EXPECT_EQ(foo_inspiration->thumbnail_url,
base::StrCat({kGstaticBaseURL, "foo_2.png"}));
+ EXPECT_EQ(foo_inspiration->description, "Description foo");
+ EXPECT_EQ(
+ foo_inspiration->id,
+ base::Token::FromString("00000000000000000000000000000000").value());
const auto& bar_inspiration = inspiration_a[1];
EXPECT_EQ(bar_inspiration->background_url,
base::StrCat({kGstaticBaseURL, "bar_1.png"}));
EXPECT_EQ(bar_inspiration->thumbnail_url,
base::StrCat({kGstaticBaseURL, "bar_2.png"}));
+ EXPECT_EQ(bar_inspiration->description, "Description bar");
+ EXPECT_EQ(
+ bar_inspiration->id,
+ base::Token::FromString("10000000000000000000000000000000").value());
+ const auto& inspiration_group_b = inspiration_groups[1];
+ EXPECT_EQ("baz", inspiration_group_b->descriptors->subject);
+ const auto& inspiration_b = inspiration_group_b->inspirations;
+ EXPECT_EQ(1u, inspiration_b.size());
+ const auto& baz_inspiration = inspiration_b[0];
+ EXPECT_EQ(baz_inspiration->background_url,
+ base::StrCat({kGstaticBaseURL, "baz_1.png"}));
+ EXPECT_EQ(baz_inspiration->thumbnail_url,
+ base::StrCat({kGstaticBaseURL, "baz_2.png"}));
+ EXPECT_EQ(baz_inspiration->description, "Description baz");
+ EXPECT_EQ(
+ baz_inspiration->id,
+ base::Token::FromString("20000000000000000000000000000000").value());
+}
+
+TEST_F(WallpaperSearchHandlerTest, GetInspirations_Success_Descriptors) {
+ std::vector
+ inspiration_groups;
+ base::MockCallback callback;
+ EXPECT_CALL(callback, Run(_))
+ .Times(1)
+ .WillOnce(testing::Invoke(
+ [&inspiration_groups](
+ std::optional>
+ inspiration_groups_ptr_arg) {
+ inspiration_groups = std::move(inspiration_groups_ptr_arg.value());
+ }));
+ SetUpInspirationsResponseWithData(
+ R"()]}'[
+ {
+ "descriptor_a": "foo",
+ "descriptor_b": "bar",
+ "descriptor_c": "baz",
+ "descriptor_d": {
+ "hex": "#f9cc18",
+ "name": "Yellow"
+ },
+ "images": [
+ {
+ "id": "00000000000000000000000000000000",
+ "description": "test inspiration",
+ "background_image": "foo_1.png",
+ "thumbnail_image": "foo_2.png"
+ }
+ ]
+ }
+ ])");
+
+ auto handler = MakeHandler(/*session_id=*/123);
+ handler->GetInspirations(callback.Get());
+ task_environment().RunUntilIdle();
+
+ EXPECT_EQ(1u, inspiration_groups.size());
+ const auto& inspiration_descriptors = inspiration_groups[0]->descriptors;
+ EXPECT_EQ("foo", inspiration_descriptors->subject);
+ EXPECT_EQ("bar", inspiration_descriptors->style);
+ EXPECT_EQ("baz", inspiration_descriptors->mood);
+ EXPECT_EQ(side_panel::customize_chrome::mojom::DescriptorDValue::NewName(
+ side_panel::customize_chrome::mojom::DescriptorDName::kYellow),
+ inspiration_descriptors->color);
}
TEST_F(WallpaperSearchHandlerTest,
- GetInspirations_Failure_InspirationsFormatIncorrect) {
- side_panel::customize_chrome::mojom::InspirationsPtr inspirations;
+ GetInspirations_InspirationsFormatIncorrect) {
+ std::vector
+ inspiration_groups;
base::MockCallback callback;
EXPECT_CALL(callback, Run(_))
.Times(1)
.WillOnce(testing::Invoke(
- [&inspirations](side_panel::customize_chrome::mojom::InspirationsPtr
- inspirations_ptr_arg) {
- inspirations = std::move(inspirations_ptr_arg);
+ [&inspiration_groups](
+ std::optional>
+ inspiration_groups_ptr_arg) {
+ inspiration_groups = std::move(inspiration_groups_ptr_arg.value());
}));
+ // First group has one valid inspiration. Second group has no "descriptor_a".
+ // Third group has no images.
SetUpInspirationsResponseWithData(
- R"()]}'
- {"inspiration_a":[
- {"background_image":"foo_1.png"},
- {"thumbnail_image":"bar_2.png"}
- ]})");
- ASSERT_FALSE(inspirations);
+ R"()]}'[
+ {
+ "descriptor_a": "foo",
+ "images": [
+ {
+ "id": "00000000000000000000000000000000",
+ "description": "test inspiration 1",
+ "background_image": "foo_1.png",
+ "thumbnail_image": "foo_2.png"
+ },
+ {
+ "description": "test inspiration 2",
+ "background_image": "bar_1.png",
+ "thumbnail_image": "bar_2.png"
+ },
+ {
+ "id": "20000000000000000000000000000000",
+ "background_image": "baz_1.png",
+ "thumbnail_image": "baz_2.png"
+ },
+ {
+ "id": "30000000000000000000000000000000",
+ "description": "test inspiration 4",
+ "thumbnail_image": "qux_2.png"
+ },
+ {
+ "id": "40000000000000000000000000000000",
+ "description": "test inspiration 5",
+ "background_image": "qux_1.png"
+ }
+ ]
+ },
+ {
+ "id": "00000000000000000000000000000000",
+ "descriptor_b": "bar",
+ "descriptor_c": "baz",
+ "descriptor_d": {
+ "hex": "#f9cc18",
+ "name": "Yellow"
+ },
+ "images": [
+ {
+ "description": "test inspiration 6",
+ "background_image": "foo_1.png",
+ "thumbnail_image": "foo_2.png"
+ }
+ ]
+ },
+ {
+ "descriptor_a": "qux"
+ }
+ ])");
auto handler = MakeHandler(/*session_id=*/123);
handler->GetInspirations(callback.Get());
task_environment().RunUntilIdle();
- EXPECT_FALSE(inspirations);
+ // There should only be one inspiration.
+ EXPECT_EQ(1u, inspiration_groups.size());
+ const auto& inspiration_group_a = inspiration_groups[0];
+ EXPECT_EQ("foo", inspiration_group_a->descriptors->subject);
+ const auto& inspiration_a = inspiration_group_a->inspirations;
+ EXPECT_EQ(1u, inspiration_a.size());
+ EXPECT_EQ(inspiration_a[0]->description, "test inspiration 1");
}
TEST_F(WallpaperSearchHandlerTest, GetInspirations_Failure_DataUnreachable) {
- side_panel::customize_chrome::mojom::InspirationsPtr inspirations;
+ std::optional<
+ std::vector>
+ inspiration_groups;
base::MockCallback callback;
EXPECT_CALL(callback, Run(_))
.Times(1)
.WillOnce(testing::Invoke(
- [&inspirations](side_panel::customize_chrome::mojom::InspirationsPtr
- inspirations_ptr_arg) {
- inspirations = std::move(inspirations_ptr_arg);
+ [&inspiration_groups](
+ std::optional>
+ inspiration_groups_ptr_arg) {
+ inspiration_groups = std::move(inspiration_groups_ptr_arg);
}));
SetUpInspirationsResponseWithNetworkError();
- ASSERT_FALSE(inspirations);
+ ASSERT_FALSE(inspiration_groups.has_value());
auto handler = MakeHandler(/*session_id=*/123);
handler->GetInspirations(callback.Get());
task_environment().RunUntilIdle();
- EXPECT_FALSE(inspirations);
+ EXPECT_FALSE(inspiration_groups.has_value());
+}
+
+TEST_F(WallpaperSearchHandlerTest, SetBackgroundToInspirationImage) {
+ base::OnceCallback decoder_callback;
+ EXPECT_CALL(mock_image_decoder(), DecodeImage(_, _, _, _))
+ .WillOnce(Invoke(
+ [&decoder_callback](const std::string& image_data,
+ const gfx::Size& desired_image_frame_size,
+ data_decoder::DataDecoder* data_decoder,
+ image_fetcher::ImageDecodedCallback callback) {
+ decoder_callback = std::move(callback);
+ }));
+ base::Token token_arg;
+ SkBitmap bitmap_arg;
+ base::ElapsedTimer timer_arg;
+ bool is_inspiration_image_arg;
+ EXPECT_CALL(mock_wallpaper_search_background_manager(),
+ SelectLocalBackgroundImage(An(),
+ An(), An(),
+ An()))
+ .WillOnce(DoAll(SaveArg<0>(&token_arg), SaveArg<1>(&bitmap_arg),
+ SaveArg<2>(&is_inspiration_image_arg),
+ MoveArg<3>(&timer_arg)));
+ // Ensure that the set theme is *not* saved to history on destruction.
+ EXPECT_CALL(mock_wallpaper_search_background_manager(),
+ SaveCurrentBackgroundToHistory(_))
+ .Times(0);
+
+ // Create test bitmap.
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(64, 32);
+ bitmap.eraseColor(SK_ColorRED);
+ std::vector encoded;
+ gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, /*discard_transparency=*/false,
+ &encoded);
+ // Respond with encoded image string when image is downloaded.
+ test_url_loader_factory().SetInterceptor(base::BindLambdaForTesting(
+ [&](const network::ResourceRequest& request) {}));
+ std::string image_url("https://example.com/image.png");
+ test_url_loader_factory().AddResponse(
+ image_url, std::string(encoded.begin(), encoded.end()));
+
+ auto handler = MakeHandler(/*session_id=*/123);
+ base::Token token = base::Token::CreateRandom();
+ handler->SetBackgroundToInspirationImage(token, GURL(image_url));
+ task_environment().AdvanceClock(base::Milliseconds(123));
+ task_environment().RunUntilIdle();
+ std::move(decoder_callback).Run(gfx::Image::CreateFrom1xBitmap(bitmap));
+
+ EXPECT_EQ(token_arg, token);
+ EXPECT_EQ(bitmap_arg.getColor(0, 0), bitmap.getColor(0, 0));
+ EXPECT_EQ(bitmap_arg.width(), bitmap.width());
+ EXPECT_EQ(bitmap_arg.height(), bitmap.height());
+ EXPECT_EQ(timer_arg.Elapsed().InMilliseconds(), 123);
+ EXPECT_TRUE(is_inspiration_image_arg);
+
+ // Ensure that after resetting a handler, no call is made to
+ // |mock_wallpaper_search_background_manager|'s,
+ // |SaveCurrentBackgroundToHistory|. The expectation is declared earlier in
+ // this test.
+ handler.reset();
}
diff -Nru chromium-121.0.6167.139/chrome/common/pref_names.h chromium-121.0.6167.160/chrome/common/pref_names.h
--- chromium-121.0.6167.139/chrome/common/pref_names.h 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/common/pref_names.h 2024-02-06 23:11:26.000000000 +0000
@@ -2225,6 +2225,8 @@
"ntp.custom_background_local_to_device";
inline constexpr char kNtpCustomBackgroundLocalToDeviceId[] =
"ntp.custom_background_local_to_device_id";
+inline constexpr char kNtpCustomBackgroundInspiration[] =
+ "ntp.custom_background_inspiration";
// Number of times the user has opened the side panel with the customize chrome
// button.
inline constexpr char kNtpCustomizeChromeButtonOpenCount[] =
diff -Nru chromium-121.0.6167.139/chrome/test/BUILD.gn chromium-121.0.6167.160/chrome/test/BUILD.gn
--- chromium-121.0.6167.139/chrome/test/BUILD.gn 2024-01-30 20:24:18.000000000 +0000
+++ chromium-121.0.6167.160/chrome/test/BUILD.gn 2024-02-06 23:11:26.000000000 +0000
@@ -7246,9 +7246,6 @@
"../browser/mac/auth_session_request_unittest.mm",
"../browser/mac/exception_processor_unittest.mm",
"../browser/mac/keystone_glue_unittest.mm",
- "../browser/metrics/power/coalition_resource_usage_provider_mac_unittest.mm",
- "../browser/metrics/power/coalition_resource_usage_provider_test_util_mac.cc",
- "../browser/metrics/power/coalition_resource_usage_provider_test_util_mac.h",
"../browser/notifications/mac/notification_dispatcher_mojo_unittest.cc",
"../browser/notifications/mac/notification_platform_bridge_mac_unittest.cc",
"../browser/notifications/mac/notification_utils_unittest.cc",
diff -Nru chromium-121.0.6167.139/chromeos/CHROMEOS_LKGM chromium-121.0.6167.160/chromeos/CHROMEOS_LKGM
--- chromium-121.0.6167.139/chromeos/CHROMEOS_LKGM 2024-01-30 20:24:20.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/CHROMEOS_LKGM 2024-02-06 23:11:28.000000000 +0000
@@ -1 +1 @@
-15699.51.0
\ No newline at end of file
+15699.58.0
\ No newline at end of file
diff -Nru chromium-121.0.6167.139/chromeos/strings/chromeos_strings_ar.xtb chromium-121.0.6167.160/chromeos/strings/chromeos_strings_ar.xtb
--- chromium-121.0.6167.139/chromeos/strings/chromeos_strings_ar.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/strings/chromeos_strings_ar.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -1067,7 +1067,7 @@
HSPA
{NUMBER_OF_PAGES,plural, =0{مسح ضوئي}=1{مسح صفحة واحدة ({NUMBER_OF_PAGES}) ضوئيًا}two{مسح صفحتَين ({NUMBER_OF_PAGES}) ضوئيًا}few{مسح {NUMBER_OF_PAGES} صفحات ضوئيًا}many{مسح {NUMBER_OF_PAGES} صفحة ضوئيًا}other{مسح {NUMBER_OF_PAGES} صفحة ضوئيًا}}
مستوى شحن بطارية الجهاز هو %.
-الوضع غير متاح على جهازك.
+غير متاح على جهازك
التردد
بريد إلكتروني
ملء الشاشة
diff -Nru chromium-121.0.6167.139/chromeos/strings/chromeos_strings_fa.xtb chromium-121.0.6167.160/chromeos/strings/chromeos_strings_fa.xtb
--- chromium-121.0.6167.139/chromeos/strings/chromeos_strings_fa.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/strings/chromeos_strings_fa.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -834,7 +834,7 @@
ارائهدهنده شبکه تلفن همراه
انتخاب ایمیل
اسکنر درحال استفاده است. بعداً دوباره امتحان کنید.
-میانبر دردسترس نیست. میانبر جدید باید با یکی از کلیدهای تغییردهنده (مهار، دگرساز، تبدیل، جستجو، یا راهانداز) اختصاص داده شود.
+میانبر دردسترس نیست. میانبر جدید باید با یکی از کلیدهای توصیفگر (مهار، دگرساز، تبدیل، جستجو، یا راهانداز) اختصاص داده شود.
/
احساس کردن نسیم
مجموعه کاغذدیواری
@@ -944,7 +944,7 @@
تغییر گذرواژه
اجازه دادن به Google برای ارسال ایمیل درباره این مشکل
از شبکهای باز و ناامن استفاده میکنید
-میانبر دردسترس نیست. بااستفاده از کلید تبدیل و یک کلید تغییردهنده دیگر (مهار، دگرساز، جستجو، یا راهانداز) میانبر جدیدی اختصاص دهید.
+میانبر دردسترس نیست. بااستفاده از کلید تبدیل و یک کلید توصیفگر دیگر (مهار، دگرساز، جستجو، یا راهانداز) میانبر جدیدی اختصاص دهید.
(Android) دروازه را میتوان پینگ کرد
درجه سانتیگراد
درخواست شمارشگرهای ترافیک
@@ -1091,7 +1091,7 @@
باز کردن قفل
برای اتصال مجدد، به «تنظیمات» بروید
ذخیره چند صفحه در یک فایل PDF
-کلیدهای تغییردهنده ۱ تا ۴ و یک کلید دیگر را روی صفحهکلید فشار دهید. برای خروج از حالت ویرایش، دگرساز + گریز را فشار دهید.
+کلیدهای توصیفگر ۱ تا ۴ و یک کلید دیگر را روی صفحهکلید فشار دهید. برای خروج از حالت ویرایش، دگرساز + گریز را فشار دهید.
سرویسهای Google
کلید تبدیل چپ
اجرای آزمایش حافظه
diff -Nru chromium-121.0.6167.139/chromeos/strings/chromeos_strings_is.xtb chromium-121.0.6167.160/chromeos/strings/chromeos_strings_is.xtb
--- chromium-121.0.6167.139/chromeos/strings/chromeos_strings_is.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/strings/chromeos_strings_is.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -1014,7 +1014,7 @@
pund
hægri
PSK-lykill
-Engin albúm. Búðu til albúm í Google myndum.
+Engin albúm. Búðu til albúm í Google-myndum.
Notaðu ör til vinstri eða ör til hægri til að stjórna þessum eiginleika.
Ég skil
Mistókst – blekið er búið
@@ -1024,7 +1024,7 @@
Lokið
Staðfesta breytingu
WireGuard
-Albúm í Google myndum
+Albúm í Google-myndum
Aðgangsstaður mótalds
A4
Flýtilykillinn er notaður fyrir „“. Ýttu á nýjan flýtilykil. Ýttu aftur á þennan flýtilykil til að skipta upprunalega flýtilyklinum út.
diff -Nru chromium-121.0.6167.139/chromeos/strings/chromeos_strings_it.xtb chromium-121.0.6167.160/chromeos/strings/chromeos_strings_it.xtb
--- chromium-121.0.6167.139/chromeos/strings/chromeos_strings_it.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/strings/chromeos_strings_it.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -889,7 +889,7 @@
Cambia avatar
Tonalità della tastiera
Conferma nuova password
-Nulla
+Nessun dato
VPN
WPA3
Luce della tastiera
diff -Nru chromium-121.0.6167.139/chromeos/strings/chromeos_strings_pt-BR.xtb chromium-121.0.6167.160/chromeos/strings/chromeos_strings_pt-BR.xtb
--- chromium-121.0.6167.139/chromeos/strings/chromeos_strings_pt-BR.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/strings/chromeos_strings_pt-BR.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -1021,7 +1021,7 @@
Rede não padrão acima do limite de latência
Tentar novamente
Parado (porta aberta)
-Concluído
+Concluir
Confirmar alteração
WireGuard
Álbum do Google Fotos
diff -Nru chromium-121.0.6167.139/chromeos/strings/chromeos_strings_ru.xtb chromium-121.0.6167.160/chromeos/strings/chromeos_strings_ru.xtb
--- chromium-121.0.6167.139/chromeos/strings/chromeos_strings_ru.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/strings/chromeos_strings_ru.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -1067,7 +1067,7 @@
HSPA
{NUMBER_OF_PAGES,plural, =0{Сканировать}=1{Сканировать {NUMBER_OF_PAGES} страницу}one{Сканировать {NUMBER_OF_PAGES} страницу}few{Сканировать {NUMBER_OF_PAGES} страницы}many{Сканировать {NUMBER_OF_PAGES} страниц}other{Сканировать {NUMBER_OF_PAGES} страницы}}
Устройство заряжено на %.
-Недоступно на вашем устройстве
+Недоступно на вашем устройстве.
Частота
электронная почта
полноэкранный режим
diff -Nru chromium-121.0.6167.139/chromeos/strings/chromeos_strings_vi.xtb chromium-121.0.6167.160/chromeos/strings/chromeos_strings_vi.xtb
--- chromium-121.0.6167.139/chromeos/strings/chromeos_strings_vi.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/chromeos/strings/chromeos_strings_vi.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -885,7 +885,7 @@
Hình nền
Yêu cầu HTTPS có độ trễ cao
Thiết bị là chuột.
-Hủy
+Huỷ
Thay đổi hình đại diện
màu bàn phím
Xác nhận mật khẩu mới
@@ -1067,7 +1067,7 @@
HSPA
{NUMBER_OF_PAGES,plural, =0{Quét}=1{Quét trang {NUMBER_OF_PAGES}}other{Quét trang {NUMBER_OF_PAGES}}}
Thiết bị còn % pin.
-Không hoạt động trên thiết bị của bạn
+Tính năng đăng nhập không hoạt động trên thiết bị của bạn
Tần số
email
toàn màn hình
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -186,7 +186,7 @@
هل تريد فعلاً حذف جميع البيانات المخزّنة على الجهاز، بما في ذلك ملفات تعريف الارتباط، وإعادة ضبط جميع الأذونات الخاصة بهذا الموقع الإلكتروني؟
عرض مبسَّط لصفحات الويب
المستوى التلقائي للتكبير/التصغير
-إعدادات المواقع الإلكترونية
+إعدادات الموقع الإلكتروني
تم ربط الموقع الإلكتروني بجهاز USB.
يتم طلب الإذن قبل السماح للمواقع الإلكترونية بالاطّلاع على المعلومات وتعديلها على الأجهزة المزوَّدة بتقنية NFC (إعداد مُقترَح).
فتح إعدادات الموقع الجغرافي
@@ -200,7 +200,7 @@
منع المواقع الإلكترونية من رصد استخدامك النشط لهذا الجهاز
السماح بملفات تعريف الارتباط التابعة لجهات خارجية
النوافذ المنبثقة وإعادة التوجيه
-سيؤدي هذا الإجراء إلى حذف جميع البيانات المخزّنة على الجهاز، بما في ذلك ملفات تعريف الارتباط، وإعادة ضبط جميع الأذونات الممنوحة للمصدر .
+سيؤدي هذا الإجراء إلى حذف جميع البيانات المخزّنة على الجهاز، بما في ذلك ملفات تعريف الارتباط، وإعادة ضبط جميع الأذونات الممنوحة لـ .
كتم صوت موقع إلكتروني معين.
{COOKIES,plural, =1{ملف تعريف ارتباط واحد}zero{# ملف تعريف ارتباط}two{ملفّا تعريف ارتباط}few{# ملفات تعريف ارتباط}many{# ملف تعريف ارتباط}other{# ملف تعريف ارتباط}}
تسهيل تخصيص عملية التكبير أو التصغير لمحتوى مواقع إلكترونية مختلفة
@@ -378,7 +378,7 @@
أنت تحظر الإشعارات عادةً. للسماح بها، يُرجى النقر على "التفاصيل".
إضافة موقع إلكتروني
سيتم حذف أي بيانات متوفّرة بلا إنترنت.
-إعدادات النطاق
+إعدادات
يعمل هذا الإعداد بدون تحديد هويتك أو السماح للمواقع الإلكترونية بالاطّلاع على سجلّ التصفُّح، إلا أنّ المواقع الإلكترونية يمكنها مشاركة قليلاً من المعلومات في إطار عملية إثبات الهوية.
السؤال أولاً
تم الحظر من قراءة الحافظة
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -84,7 +84,7 @@
Du hast dieser Website vorübergehend erlaubt, Drittanbieter-Cookies zu verwenden. Das bedeutet zwar weniger Schutz beim Surfen, aber dadurch erhöht sich die Wahrscheinlichkeit, dass Websites wie erwartet funktionieren. Feedback geben
Einige Websites funktionieren im Inkognitomodus möglicherweise nicht richtig
Desktopwebsite immer anfordern
-Durch diese Aktion werden alle Daten und Cookies für und alle untergeordneten Websites gelöscht
+Durch diesen Schritt werden alle Daten und Cookies für und alle untergeordneten Websites gelöscht
Zu den Einstellungen
Benachrichtigungen
Deinstallieren
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -13,7 +13,7 @@
Interrumpir
Para ahorrar datos, Google optimizó las imágenes de esta página.
Aquí se mostrarán los archivos que guarden los sitios web
-Se borran los datos que afectan la personalización de anuncios.
+Se borran los datos que afectan la personalización de anuncios
Olvidar este sitio
Este sitio determina lo que te gusta y, luego, sugiere anuncios a otros sitios
Se agregó el sitio .
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -231,7 +231,7 @@
اجازه دادن
مجاز بودن دسترسی سایتها به حسگرهای حرکتی (توصیه میشود)
این سایت میخواهد خارج از «حالت ناشناس»، اطلاعاتی را با برنامهای همرسانی کند.
-کاربر
+مصرف
سایت ویژه تلفن همراه
درخواست نمای رایانه
هرگاه روشن باشد، سایتها میتوانند از جاوا اسکریپت استفاده کنند. هرگاه خاموش باشد، سایتها نمیتوانند از جاوا اسکریپت استفاده کنند.
@@ -389,7 +389,7 @@
همیشه
مسدود کردن سایتها برای پخش محتوای محافظتشده
به دستگاه بلوتوث متصل است
-پاک کردن دادههای محصول مرور…
+پاک کردن دادههای مرور…
راهنما
لغو
جادوگر شهر اُز
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -102,7 +102,7 @@
Invia
Esci
Prova a consentire temporaneamente i cookie di terze parti, il che significa meno protezione, ma è più probabile che le funzionalità del sito funzionino.
-Vuoi eliminare e reimpostare?
+Vuoi eliminare e reimpostare i dati?
Disattiva fotocamera
Indirizzi email
I siti possono mostrare richieste di accesso da servizi di identità.
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -335,7 +335,7 @@
הביקור האחרון התבצע לפני ימים
הצגת התראות שקטה יותר (למניעת הקפצה של חלוניות מפריעות)
לגרסה במחשב
- GB
+GB
תוכן מוגן
להמשיך במצב אנונימי
כדי לצאת ממסך מלא, צריך ללחוץ על לחצן 'הקודם'.
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -489,7 +489,7 @@
オンにすると、サイトはデバイスにデータを保存できます。オフにすると、サイトはデバイスにデータを保存できません。
を許可しました
保護者により管理されています
-これらのサイトからログアウトする可能性があります
+これらのサイトからログアウトされる可能性があります
Bluetooth
このサイトは、アクティビティを確認できるグループに属しています。グループは によって定義されます
Cookie を削除しますか?
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -465,7 +465,7 @@
Ative a permissão para o app nas configurações do Android.
Quando essa configuração está ativada, os sites podem pedir para procurar dispositivos Bluetooth. Quando está desativada, os sites não podem procurar dispositivos Bluetooth.
Tentar novamente
-Concluído
+Concluir
{NUM_SELECTED,plural, =1{1 site permitido}one{# site permitido}other{# sites permitidos}}
Selecione uma imagem
Site indisponível?
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -298,7 +298,7 @@
Закрыть
Ещё
Завершенные скачивания
-Вы выйдете из аккаунта на этом сайте.
+Возможно, вам потребуется повторно войти в аккаунт на этом сайте.
Когда этот параметр включен, сайтам разрешено запрашивать информацию о том, используете ли вы сейчас устройство. Когда параметр отключен, сайтам запрещен доступ к таким сведениям.
Подробнее
Когда этот параметр включен, сайты могут запрашивать разрешение на использование устройств Bluetooth. Когда параметр отключен, сайтам запрещено использовать такие устройства.
@@ -489,7 +489,7 @@
Когда этот параметр включен, сайты могут сохранять данные на вашем устройстве. Когда параметр отключен, сайтам запрещено это делать.
Действует для сайта
Управляется вашими родителями
-Возможно, на этих сайтах вам потребуется повторно войти в аккаунт.
+Возможно, вам потребуется повторно войти в аккаунт на этих сайтах.
Bluetooth
Этот сайт может отслеживать ваши действия. Он входит в группу .
Удалить файлы cookie
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -84,7 +84,7 @@
คุณได้อนุญาตให้เว็บไซต์นี้ใช้คุกกี้ของบุคคลที่สามเป็นการชั่วคราว ซึ่งหมายความว่าจะมีการป้องกันขณะท่องเว็บน้อยลง แต่ฟีเจอร์ของเว็บไซต์จะทำงานตามที่คาดไว้ได้มากขึ้น ส่งความคิดเห็น
ฟีเจอร์บนเว็บไซต์บางแห่งอาจใช้งานในโหมดไม่ระบุตัวตนไม่ได้
ขอเว็บไซต์เวอร์ชันเดสก์ท็อปเสมอ
-การดำเนินการนี้จะลบข้อมูลและคุกกี้ทั้งหมดของ รวมถึงทุกเว็บไซต์จากต้นทางนี้
+การดำเนินการนี้จะลบข้อมูลและคุกกี้ทั้งหมดของ รวมถึงทุกเว็บไซต์ที่อยู่ภายใต้โดเมนนี้
ไปที่การตั้งค่า
การแจ้งเตือน
ถอนการติดตั้ง
@@ -489,7 +489,7 @@
เมื่อเปิด เว็บไซต์จะบันทึกข้อมูลลงในอุปกรณ์ของคุณได้ เมื่อปิด เว็บไซต์จะบันทึกข้อมูลลงในอุปกรณ์ของคุณไม่ได้
อนุญาตให้เข้าถึง ได้
มีการจัดการโดยผู้ปกครอง
-คุณอาจออกจากระบบเว็บไซต์เหล่านี้
+ระบบอาจนำคุณออกจากระบบเว็บไซต์เหล่านี้
บลูทูธ
เว็บไซต์นี้อยู่ในกลุ่มที่สามารถดูกิจกรรมของคุณได้ ซึ่งเป็นกลุ่มที่ กำหนดไว้
ลบคุกกี้ไหม
diff -Nru chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
--- chromium-121.0.6167.139/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -84,7 +84,7 @@
Bạn đã tạm thời cho phép trang web này sử dụng cookie của bên thứ ba. Điều này sẽ làm giảm khả năng bảo vệ khi duyệt web nhưng giúp các tính năng của trang web hoạt động bình thường một cách dễ dàng hơn. Gửi phản hồi
Tính năng trên một số trang web có thể không hoạt động được ở Chế độ ẩn danh
Luôn yêu cầu trang web dành cho máy tính
-Thao tác này sẽ xoá toàn bộ dữ liệu và cookie của cũng như mọi trang web trong đó
+Thao tác này sẽ xoá toàn bộ dữ liệu và cookie của cũng như mọi trang web thuộc miền đó
Chuyển đến phần Cài đặt
Thông báo
Gỡ cài đặt
@@ -147,7 +147,7 @@
Đã chặn cookie của bên thứ ba
Khi bạn bật tuỳ chọn này, các trang web có thể yêu cầu sử dụng camera. Khi bạn tắt tuỳ chọn này, các trang web không thể sử dụng camera.
{DAYS,plural, =1{Chrome sẽ chặn cookie trở lại vào ngày mai}other{Chrome sẽ chặn cookie trở lại sau # ngày nữa}}
-Các trang web trong
+Các trang web thuộc miền
Chặn không cho trang web tạo bản đồ 3D về các khu vực xung quanh bạn hoặc theo dõi thông tin vị trí của máy ảnh
Một công ty có thể xác định nhóm các trang web được sử dụng cookie để chia sẻ hoạt động của bạn trong nhóm. Tính năng này bị tắt trong chế độ Ẩn danh.
Thoát khỏi chế độ Ẩn danh?
@@ -185,7 +185,7 @@
Bạn có chắc chắn muốn xoá toàn bộ dữ liệu cục bộ, kể cả cookie, và đặt lại mọi quyền cho trang web này không?
Chế độ xem đơn giản cho trang web
Thu phóng mặc định
-Cài đặt trang web
+Chế độ cài đặt trang web
Đã kết nối với một thiết bị USB
Hỏi trước khi cho phép các trang web xem và thay đổi thông tin trên thiết bị NFC (nên chọn)
Mở phần Cài đặt vị trí
@@ -217,7 +217,7 @@
Thu phóng
Tìm hiểu về nguồn và chủ đề của trang
Hỏi khi một trang web muốn biết khi bạn đang dùng thiết bị này
-Bao gồm tất cả trang web trong miền này
+Bao gồm tất cả trang web thuộc miền này
Bạn không thể đặt lại các tùy chọn cài đặt được quản lý
Hỏi ý bạn trước khi cho phép các trang web sử dụng dữ liệu và thiết bị thực tế ảo của bạn (khuyên dùng)
Khi bạn bật tuỳ chọn này, các trang web có thể yêu cầu tự động tải nhiều tệp xuống. Khi bạn tắt tuỳ chọn này, các trang web không thể tự động tải nhiều tệp xuống.
@@ -243,7 +243,7 @@
Lần truy cập gần đây nhất: hôm nay
Bật máy ảnh
Bỏ qua
-Thao tác này sẽ xoá toàn bộ dữ liệu cục bộ, kể cả cookie, và đặt lại mọi quyền cho cũng như mọi trang web thuộc nhóm này
+Thao tác này sẽ xoá toàn bộ dữ liệu cục bộ, kể cả cookie, và đặt lại mọi quyền cho cũng như mọi trang web thuộc miền này
Xóa ""
Kéo từ trên xuống và chạm vào nút quay lại để thoát khỏi chế độ toàn màn hình.
Khi bạn bật tuỳ chọn này, các trang web có thể yêu cầu sử dụng thông tin mà trang web đã lưu về bạn. Khi bạn tắt tuỳ chọn này, các trang web không thể yêu cầu sử dụng thông tin mà trang web đã lưu về bạn.
@@ -365,7 +365,7 @@
KB
Làm mới
Dữ liệu trang web trên thiết bị
-Thao tác này sẽ xoá toàn bộ dữ liệu và cookie do tất cả trang web trong hoặc ứng dụng liên quan trên Màn hình chính lưu trữ
+Thao tác này sẽ xoá toàn bộ dữ liệu và cookie do tất cả trang web thuộc miền hoặc ứng dụng liên quan trên Màn hình chính lưu trữ
Được mở rộng
Xoá dữ liệu trang web?
Chọn hình ảnh
@@ -389,9 +389,9 @@
Luôn luôn
Chặn không cho trang web phát nội dung được bảo vệ
Đã kết nối với một thiết bị Bluetooth
-Xóa dữ liệu duyệt web…
+Xoá dữ liệu duyệt web…
Trợ giúp
-Hủy
+Huỷ
Phù thủy xứ Oz
Không cho phép một trang web dùng cookie của bên thứ ba
Thu phóng trang
diff -Nru chromium-121.0.6167.139/components/certificate_transparency/data/log_list.json chromium-121.0.6167.160/components/certificate_transparency/data/log_list.json
--- chromium-121.0.6167.139/components/certificate_transparency/data/log_list.json 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/certificate_transparency/data/log_list.json 2024-02-06 23:11:29.000000000 +0000
@@ -1,6 +1,6 @@
{
- "version": "30.14",
- "log_list_timestamp": "2024-01-29T12:55:22Z",
+ "version": "30.17",
+ "log_list_timestamp": "2024-02-01T12:55:51Z",
"operators": [
{
"name": "Google",
diff -Nru chromium-121.0.6167.139/components/content_settings/core/common/cookie_settings_base.cc chromium-121.0.6167.160/components/content_settings/core/common/cookie_settings_base.cc
--- chromium-121.0.6167.139/components/content_settings/core/common/cookie_settings_base.cc 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/content_settings/core/common/cookie_settings_base.cc 2024-02-06 23:11:29.000000000 +0000
@@ -341,19 +341,6 @@
net::cookie_util::StorageAccessResult::ACCESS_ALLOWED);
}
- if (block_third && ShouldConsider3pcdMetadataGrantsSettings(overrides) &&
- IsAllowed(GetContentSetting(*url, first_party_url,
- ContentSettingsType::TPCD_METADATA_GRANTS))) {
- block_third = false;
- third_party_cookie_allow_mechanism =
- ThirdPartyCookieAllowMechanism::kAllowBy3PCDMetadata;
- FireStorageAccessHistogram(net::cookie_util::StorageAccessResult::
- ACCESS_ALLOWED_3PCD_METADATA_GRANT);
- if (info) {
- info->source = SETTING_SOURCE_TPCD_GRANT;
- }
- }
-
if (block_third && ShouldConsider3pcdSupportSettings(overrides) &&
GetContentSetting(*url, first_party_url,
ContentSettingsType::TPCD_SUPPORT) ==
@@ -366,6 +353,19 @@
if (info) {
info->source = SETTING_SOURCE_TPCD_GRANT;
}
+ }
+
+ if (block_third && ShouldConsider3pcdMetadataGrantsSettings(overrides) &&
+ IsAllowed(GetContentSetting(*url, first_party_url,
+ ContentSettingsType::TPCD_METADATA_GRANTS))) {
+ block_third = false;
+ third_party_cookie_allow_mechanism =
+ ThirdPartyCookieAllowMechanism::kAllowBy3PCDMetadata;
+ FireStorageAccessHistogram(net::cookie_util::StorageAccessResult::
+ ACCESS_ALLOWED_3PCD_METADATA_GRANT);
+ if (info) {
+ info->source = SETTING_SOURCE_TPCD_GRANT;
+ }
}
if (block_third && ShouldConsider3pcdHeuristicsGrantsSettings(overrides) &&
diff -Nru chromium-121.0.6167.139/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb chromium-121.0.6167.160/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb
--- chromium-121.0.6167.139/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb 2024-01-30 20:24:21.000000000 +0000
+++ chromium-121.0.6167.160/components/embedder_support/android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb 2024-02-06 23:11:29.000000000 +0000
@@ -12,7 +12,7 @@
Đặt
Giá trị
Đen
-Hủy
+Huỷ
Đỏ
Màu sắc
Chọn màu
diff -Nru chromium-121.0.6167.139/components/omnibox/browser/document_suggestions_service.cc chromium-121.0.6167.160/components/omnibox/browser/document_suggestions_service.cc
--- chromium-121.0.6167.139/components/omnibox/browser/document_suggestions_service.cc 2024-01-30 20:24:22.000000000 +0000
+++ chromium-121.0.6167.160/components/omnibox/browser/document_suggestions_service.cc 2024-02-06 23:11:30.000000000 +0000
@@ -124,6 +124,8 @@
request->method = "POST";
std::string request_body = BuildDocumentSuggestionRequest(query);
request->load_flags = net::LOAD_DO_NOT_SAVE_COOKIES;
+ // Set the SiteForCookies to the request URL's site to avoid cookie blocking.
+ request->site_for_cookies = net::SiteForCookies::FromUrl(suggest_url);
// It is expected that the user is signed in here. But we only care about
// experiment IDs from the variations server, which do not require the
// signed-in version of this method.
diff -Nru chromium-121.0.6167.139/components/omnibox/browser/document_suggestions_service_unittest.cc chromium-121.0.6167.160/components/omnibox/browser/document_suggestions_service_unittest.cc
--- chromium-121.0.6167.139/components/omnibox/browser/document_suggestions_service_unittest.cc 2024-01-30 20:24:22.000000000 +0000
+++ chromium-121.0.6167.160/components/omnibox/browser/document_suggestions_service_unittest.cc 2024-02-06 23:11:30.000000000 +0000
@@ -98,4 +98,21 @@
base::RunLoop().RunUntilIdle();
}
+TEST_F(DocumentSuggestionsServiceTest, EnsureCookies) {
+ test_url_loader_factory_.SetInterceptor(
+ base::BindLambdaForTesting([](const network::ResourceRequest& request) {
+ EXPECT_TRUE(
+ request.site_for_cookies.IsEquivalent(net::SiteForCookies::FromUrl(
+ GURL("https://cloudsearch.googleapis.com"))))
+ << request.site_for_cookies.ToDebugString();
+ }));
+
+ document_suggestions_service_->CreateDocumentSuggestionsRequest(
+ u"", false, base::BindOnce(OnDocumentSuggestionsRequestAvailable),
+ base::BindOnce(OnDocumentSuggestionsLoaderAvailable),
+ base::BindOnce(OnURLLoadComplete));
+
+ base::RunLoop().RunUntilIdle();
+}
+
} // namespace
diff -Nru chromium-121.0.6167.139/components/omnibox/browser/remote_suggestions_service.cc chromium-121.0.6167.160/components/omnibox/browser/remote_suggestions_service.cc
--- chromium-121.0.6167.139/components/omnibox/browser/remote_suggestions_service.cc 2024-01-30 20:24:22.000000000 +0000
+++ chromium-121.0.6167.160/components/omnibox/browser/remote_suggestions_service.cc 2024-02-06 23:11:30.000000000 +0000
@@ -102,6 +102,8 @@
auto request = std::make_unique();
request->url = suggest_url;
request->load_flags = net::LOAD_DO_NOT_SAVE_COOKIES;
+ // Set the SiteForCookies to the request URL's site to avoid cookie blocking.
+ request->site_for_cookies = net::SiteForCookies::FromUrl(suggest_url);
// Add Chrome experiment state to the request headers.
AddVariationHeaders(request.get());
@@ -181,7 +183,7 @@
if (search_terms_args.bypass_cache) {
request->load_flags |= net::LOAD_BYPASS_CACHE;
}
- // Try to attach cookies for signed in user.
+ // Set the SiteForCookies to the request URL's site to avoid cookie blocking.
request->site_for_cookies = net::SiteForCookies::FromUrl(suggest_url);
// Add Chrome experiment state to the request headers.
AddVariationHeaders(request.get());
@@ -282,6 +284,8 @@
})");
auto request = std::make_unique();
request->url = url;
+ // Set the SiteForCookies to the request URL's site to avoid cookie blocking.
+ request->site_for_cookies = net::SiteForCookies::FromUrl(url);
// Add Chrome experiment state to the request headers.
AddVariationHeaders(request.get());
diff -Nru chromium-121.0.6167.139/components/omnibox/browser/remote_suggestions_service_unittest.cc chromium-121.0.6167.160/components/omnibox/browser/remote_suggestions_service_unittest.cc
--- chromium-121.0.6167.139/components/omnibox/browser/remote_suggestions_service_unittest.cc 2024-01-30 20:24:22.000000000 +0000
+++ chromium-121.0.6167.160/components/omnibox/browser/remote_suggestions_service_unittest.cc 2024-02-06 23:11:30.000000000 +0000
@@ -89,7 +89,7 @@
network::TestURLLoaderFactory test_url_loader_factory_;
};
-TEST_F(RemoteSuggestionsServiceTest, EnsureAttachCookies) {
+TEST_F(RemoteSuggestionsServiceTest, EnsureAttachCookies_ZeroPrefixSuggest) {
network::ResourceRequest resource_request;
test_url_loader_factory_.SetInterceptor(
base::BindLambdaForTesting([&](const network::ResourceRequest& request) {
@@ -111,12 +111,62 @@
EXPECT_EQ(net::LOAD_DO_NOT_SAVE_COOKIES, resource_request.load_flags);
EXPECT_TRUE(resource_request.site_for_cookies.IsEquivalent(
- net::SiteForCookies::FromUrl(resource_request.url)));
+ net::SiteForCookies::FromUrl(resource_request.url)))
+ << resource_request.site_for_cookies.ToDebugString();
const std::string kRequestUrl = "https://www.google.com/complete/search";
EXPECT_EQ(kRequestUrl,
resource_request.url.spec().substr(0, kRequestUrl.size()));
}
+TEST_F(RemoteSuggestionsServiceTest, EnsureAttachCookies_Suggest) {
+ network::ResourceRequest resource_request;
+ test_url_loader_factory_.SetInterceptor(
+ base::BindLambdaForTesting([&](const network::ResourceRequest& request) {
+ resource_request = request;
+ }));
+
+ RemoteSuggestionsService service(/*document_suggestions_service_=*/nullptr,
+ GetUrlLoaderFactory());
+ TemplateURLService template_url_service(/*prefs=*/nullptr, 0);
+ TemplateURLRef::SearchTermsArgs search_terms_args;
+ search_terms_args.current_page_url = "https://www.google.com/";
+ service.StartSuggestionsRequest(
+ template_url_service.GetDefaultSearchProvider(), search_terms_args,
+ template_url_service.search_terms_data(),
+ base::BindOnce(&RemoteSuggestionsServiceTest::OnRequestComplete,
+ base::Unretained(this)));
+
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_TRUE(resource_request.site_for_cookies.IsEquivalent(
+ net::SiteForCookies::FromUrl(resource_request.url)))
+ << resource_request.site_for_cookies.ToDebugString();
+ const std::string kRequestUrl = "https://www.google.com/complete/search";
+ EXPECT_EQ(kRequestUrl,
+ resource_request.url.spec().substr(0, kRequestUrl.size()));
+}
+
+TEST_F(RemoteSuggestionsServiceTest, EnsureAttachCookies_DeleteSuggest) {
+ network::ResourceRequest resource_request;
+ test_url_loader_factory_.SetInterceptor(
+ base::BindLambdaForTesting([&](const network::ResourceRequest& request) {
+ resource_request = request;
+ }));
+
+ RemoteSuggestionsService service(/*document_suggestions_service_=*/nullptr,
+ GetUrlLoaderFactory());
+ service.StartDeletionRequest(
+ "https://google.com/complete/delete",
+ base::BindOnce(&RemoteSuggestionsServiceTest::OnRequestComplete,
+ base::Unretained(this)));
+
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_TRUE(resource_request.site_for_cookies.IsEquivalent(
+ net::SiteForCookies::FromUrl(resource_request.url)))
+ << resource_request.site_for_cookies.ToDebugString();
+}
+
TEST_F(RemoteSuggestionsServiceTest, EnsureBypassCache) {
network::ResourceRequest resource_request;
test_url_loader_factory_.SetInterceptor(
@@ -141,7 +191,8 @@
EXPECT_EQ(net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_BYPASS_CACHE,
resource_request.load_flags);
EXPECT_TRUE(resource_request.site_for_cookies.IsEquivalent(
- net::SiteForCookies::FromUrl(resource_request.url)));
+ net::SiteForCookies::FromUrl(resource_request.url)))
+ << resource_request.site_for_cookies.ToDebugString();
const std::string kRequestUrl = "https://www.google.com/complete/search";
EXPECT_EQ(kRequestUrl,
resource_request.url.spec().substr(0, kRequestUrl.size()));
diff -Nru chromium-121.0.6167.139/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc chromium-121.0.6167.160/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc
--- chromium-121.0.6167.139/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc 2024-01-30 20:24:22.000000000 +0000
+++ chromium-121.0.6167.160/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service.cc 2024-02-06 23:11:30.000000000 +0000
@@ -39,6 +39,14 @@
status);
}
+void RecordUserFeedbackHistogram(proto::ModelExecutionFeature feature,
+ proto::UserFeedback user_feedback) {
+ base::UmaHistogramEnumeration(
+ base::StrCat({"OptimizationGuide.ModelQuality.UserFeedback.",
+ GetStringNameForModelExecutionFeature(feature)}),
+ static_cast(user_feedback));
+}
+
// Returns the URL endpoint for the model quality service along with the needed
// API key.
GURL GetModelQualityLogsUploaderServiceURL() {
@@ -79,31 +87,36 @@
proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_UNSPECIFIED;
switch (log_entry->log_ai_data_request()->feature_case()) {
case proto::LogAiDataRequest::FeatureCase::kCompose:
+ feature = proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_COMPOSE;
user_feedback =
log_entry->quality_data()->user_feedback();
- feature = proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_COMPOSE;
break;
case proto::LogAiDataRequest::FeatureCase::kTabOrganization:
- user_feedback = log_entry->quality_data()
- ->mutable_organizations(0)
- ->user_feedback();
feature = proto::ModelExecutionFeature::
MODEL_EXECUTION_FEATURE_TAB_ORGANIZATION;
+ // If there is no tab organization, we don't have any user_feedback.
+ if (log_entry->quality_data()
+ ->organizations_size() != 0) {
+ // We assume there is only one tab organizations when we upload the
+ // model quality data for this version.
+ // TODO(b/323300127): Fix this to consider logging feedback for all
+ // organizations.
+ user_feedback = log_entry->quality_data()
+ ->mutable_organizations(0)
+ ->user_feedback();
+ }
break;
case proto::LogAiDataRequest::FeatureCase::kWallpaperSearch:
- user_feedback = log_entry->quality_data()
- ->user_feedback();
feature = proto::ModelExecutionFeature::
MODEL_EXECUTION_FEATURE_WALLPAPER_SEARCH;
+ user_feedback = log_entry->quality_data()
+ ->user_feedback();
break;
default:
NOTREACHED();
break;
}
- base::UmaHistogramEnumeration(
- base::StrCat({"OptimizationGuide.ModelQuality.UserFeedback.",
- GetStringNameForModelExecutionFeature(feature)}),
- static_cast(user_feedback));
+ RecordUserFeedbackHistogram(feature, user_feedback);
}
// URL load completion callback.
diff -Nru chromium-121.0.6167.139/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc chromium-121.0.6167.160/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc
--- chromium-121.0.6167.139/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc 2024-01-30 20:24:22.000000000 +0000
+++ chromium-121.0.6167.160/components/optimization_guide/core/model_quality/model_quality_logs_uploader_service_unittest.cc 2024-02-06 23:11:30.000000000 +0000
@@ -355,6 +355,32 @@
proto::USER_FEEDBACK_THUMBS_DOWN, 1);
}
+TEST_F(ModelQualityLogsUploaderServiceTest,
+ TabOrganizationUserFeedbackNullCheck) {
+ // Set TabOrganization ModelQualityLogEntry without any quality data tab
+ // organization.
+ std::unique_ptr log_ai_data_request_1(
+ new proto::LogAiDataRequest());
+
+ proto::TabOrganizationLoggingData tab_organization_logging_data;
+
+ proto::TabOrganizationRequest tab_request;
+
+ *(tab_organization_logging_data.mutable_request_data()) = tab_request;
+ *(log_ai_data_request_1->mutable_tab_organization()) =
+ tab_organization_logging_data;
+ std::unique_ptr log_entry_1 =
+ std::make_unique(std::move(log_ai_data_request_1));
+
+ // Upload logs without quality data set this should mark user_feedback as
+ // unspecified.
+ UploadModelQualityLogsWithLogEntry(std::move(log_entry_1));
+
+ histogram_tester_.ExpectBucketCount(
+ "OptimizationGuide.ModelQuality.UserFeedback.TabOrganization",
+ proto::USER_FEEDBACK_UNSPECIFIED, 1);
+}
+
TEST_F(ModelQualityLogsUploaderServiceTest, ComposeUserFeedbackUMA) {
std::unique_ptr log_entry_1 =
GetModelQualityLogEntryAndSetFeedback(
diff -Nru chromium-121.0.6167.139/components/policy/resources/policy_templates_vi.xtb chromium-121.0.6167.160/components/policy/resources/policy_templates_vi.xtb
--- chromium-121.0.6167.139/components/policy/resources/policy_templates_vi.xtb 2024-01-30 20:24:22.000000000 +0000
+++ chromium-121.0.6167.160/components/policy/resources/policy_templates_vi.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -1855,7 +1855,7 @@
Nếu bạn chưa đặt chính sách này, thì sẽ là lựa chọn mặc định.
Cho phép thiết bị chạy máy ảo
Bật tính năng báo cáo thông tin hệ thống và nội dung trang để giúp cải thiện tính năng Duyệt web an toàn
-Lịch sử duyệt web
+Nhật ký duyệt web
Tập lệnh người dùng
Không cho phép người dùng bật chế độ Chỉ giao thức HTTPS
Kiểm soát khả năng trình duyệt phát hiện phạm vi chính sách bắt buộc trên .
@@ -3872,7 +3872,7 @@
Nếu bạn đặt chính sách này thành (0) hoặc không đặt, các tiện ích chưa phát hành trên Chrome Web Store sẽ được cho phép.
Nếu bạn đặt chính sách này thành (1) thì các tiện ích chưa phát hành trên Chrome Web Store sẽ bị vô hiệu hoá.
Kiểm soát phím tắt dùng để kích hoạt chế độ cài đặt F11/F12
-Cài đặt trang web
+Chế độ cài đặt trang web
Nếu bạn đặt chính sách này thành Bật, các chính sách không có chung nguồn với các chính sách có độ ưu tiên cao nhất trong một nhóm không thể phân chia sẽ bị bỏ qua.
Nếu bạn đặt chính sách này thành Tắt, sẽ không có chính sách nào bị bỏ qua do vấn đề liên quan đến nguồn nữa. Các chính sách sẽ chỉ bị bỏ qua nếu có xung đột và chính sách này không có mức độ ưu tiên cao nhất.
diff -Nru chromium-121.0.6167.139/components/search/ntp_features.cc chromium-121.0.6167.160/components/search/ntp_features.cc
--- chromium-121.0.6167.139/components/search/ntp_features.cc 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/search/ntp_features.cc 2024-02-06 23:11:31.000000000 +0000
@@ -469,6 +469,7 @@
const char kNtpRealboxWidthBehaviorParam[] = "NtpRealboxWidthBehaviorParam";
const char kNtpTabResumptionModuleDataParam[] =
"NtpTabResumptionModuleDataParam";
+const char kWallpaperSearchHatsDelayParam[] = "WallpaperSearchHatsDelayParam";
base::TimeDelta GetModulesLoadTimeout() {
std::string param_value = base::GetFieldTrialParamValueByFeature(
diff -Nru chromium-121.0.6167.139/components/search/ntp_features.h chromium-121.0.6167.160/components/search/ntp_features.h
--- chromium-121.0.6167.139/components/search/ntp_features.h 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/search/ntp_features.h 2024-02-06 23:11:31.000000000 +0000
@@ -194,6 +194,8 @@
extern const char kNtpHistoryClustersModuleScoreThresholdParam[];
extern const char kNtpRealboxWidthBehaviorParam[];
extern const char kNtpTabResumptionModuleDataParam[];
+// Parameter determining the trigger delay of the Wallpaper Search HaTS survey.
+extern const char kWallpaperSearchHatsDelayParam[];
// Returns the timeout after which the load of a module should be aborted.
base::TimeDelta GetModulesLoadTimeout();
diff -Nru chromium-121.0.6167.139/components/search_engines/search_engine_choice_utils.cc chromium-121.0.6167.160/components/search_engines/search_engine_choice_utils.cc
--- chromium-121.0.6167.139/components/search_engines/search_engine_choice_utils.cc 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/search_engines/search_engine_choice_utils.cc 2024-02-06 23:11:31.000000000 +0000
@@ -70,6 +70,16 @@
return false;
}
+bool IsDefaultSearchProviderSetOrBlockedByPolicy(
+ const TemplateURLService& template_url_service) {
+ const TemplateURL* default_search_engine =
+ template_url_service.GetDefaultSearchProvider();
+
+ return !default_search_engine ||
+ default_search_engine->created_by_policy() ==
+ TemplateURLData::CreatedByPolicy::kDefaultSearchProvider;
+}
+
base::flat_set GetEeaChoiceCountries() {
using country_codes::CountryCharsToCountryID;
@@ -285,7 +295,8 @@
return SearchEngineChoiceScreenConditions::kSearchProviderOverride;
}
- if (!IsSearchEngineChoiceScreenAllowedByPolicy(policy_service)) {
+ if (!IsSearchEngineChoiceScreenAllowedByPolicy(policy_service) ||
+ IsDefaultSearchProviderSetOrBlockedByPolicy(template_url_service)) {
return SearchEngineChoiceScreenConditions::kControlledByPolicy;
}
@@ -300,6 +311,10 @@
return SearchEngineChoiceScreenConditions::kExtensionControlled;
}
+ if (IsDefaultSearchProviderSetOrBlockedByPolicy(template_url_service)) {
+ return SearchEngineChoiceScreenConditions::kControlledByPolicy;
+ }
+
// Don't show the dialog if the user has a custom search engine set as
// default.
const TemplateURL* default_search_engine =
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_ar.xtb chromium-121.0.6167.160/components/strings/components_strings_ar.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_ar.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_ar.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -687,7 +687,7 @@
بهارات وتتبيلات
أقل من . قد يتم تحميل بعض المواقع بشكل أبطأ عند زيارتها في المرة القادمة.
تخصيص أدوات تسهيل الاستخدام في إعدادات نظام التشغيل Chrome
-سيتم توفير أقل من 1 ميغابايت. وقد يتم تحميل بعض المواقع بشكل أبطأ عند زيارتها في المرة القادمة.
+سيتم تفريغ أقل من 1 ميغابايت. وقد يكون تحميل بعض المواقع أبطأ عند زيارتها في المرة القادمة.
يتطلَّب اسم مستخدم وكلمة مرور.
الطابع الزمني لآخر تعديل لهذه السياسة:
منتجات عناية بالوجه
@@ -1580,7 +1580,7 @@
سيبدأ Chrome الآن في إثبات هويتك قبل إدخال طرق الدفع. يمكنك متى شئت تعديل ذلك من خلال .
يعني هذا أنّه من المفترض أن تعمل معظم ميزات الموقع الإلكتروني، ولكنّك ستحظى بمستوى حماية أقل.
أرجواني
-إعدادات المواقع الإلكترونية
+إعدادات الموقع الإلكتروني
عدم السماح
توقيع تحقق سيئ
- -
@@ -2658,7 +2658,7 @@
"لا يتمتَّع اتصالك بالخصوصية" أو "<span class="error-code">NET::ERR_CERT_AUTHORITY_INVALID</span>" أو "<span class="error-code">ERR_CERT_COMMON_NAME_INVALID</span>" أو "<span class="error-code">NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM</span>" أو "خطأ في شهادة طبقة المقابس الآمنة (SSL)"
هذا الموقع مخادع
أحذية رياضية
-إخلاء أقل من . وقد يتم تحميل بعض المواقع الإلكترونية بشكل أبطأ عند زيارتها في المرة القادمة.
+سيتم تفريغ أقل من . وقد يكون تحميل بعض المواقع الإلكترونية أبطأ عند زيارتها في المرة القادمة.
فلترة السياسات حسب الاسم
قيمة غير صالحة ولن يتم استخدامها.
حسب سياسة المشرف، لا يُنصح بأخذ لقطات شاشة أو تسجيل فيديوهات لمحتوى سرّي معروض على الشاشة:
@@ -3100,7 +3100,7 @@
فِرَق تشجيع
إعادة التشغيل وتطبيق السياسات
يجب أيضًا تحديد السمة "vendor_id".
-يوفِّر . قد يتم تحميل بعض المواقع الإلكترونية بشكل أبطأ عند زيارتها في المرة القادمة.
+سيتم تفريغ . وقد يكون تحميل بعض المواقع الإلكترونية أبطأ عند زيارتها في المرة القادمة.
محركات أقراص ووحدات تخزين الكمبيوتر
مراجع
Visa
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_da.xtb chromium-121.0.6167.160/components/strings/components_strings_da.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_da.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_da.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -171,7 +171,7 @@
Legal Extra
Tjek indstillingerne for din sikre DNS
Udfasede funktioner
-Tilgængeligt kampagnetilbud
+Tilgængeligt promoveringstilbud
Dine forældre har ikke sagt, at det er OK endnu
Vis indhold med augmented reality
Bind i højre side
@@ -779,7 +779,7 @@
Du kan bruge gemte adresser i alle Google-produkter. Denne adresse gemmes på din Google-konto, .
Din CVC er på forsiden af dit kort. Det er den 4-cifrede kode øverst til højre over dit kortnummer.
Dette felt må ikke have mere end poster. Alle yderligere poster ignoreres.
-Se oplysninger om kampagnekode
+Se oplysninger om promoveringskode
Åbn en ny inkognitofane for at browse privat
{COUNT,plural, =1{og 1 mere}one{og # mere}other{og # mere}}
Tilføj adresse
@@ -1245,7 +1245,7 @@
Efter gruppe
Ikke nu
Du kan miste adgangen til din Google-konto. Chrome anbefaler, at du skifter din adgangskode nu. Du bliver bedt om at logge ind.
-Påmindelse: En gemt kampagnekode er tilgængelig
+Påmindelse: En gemt promoveringskode er tilgængelig
Bakke 4
Gade
Lastbiler, kassevogne og SUV'er
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_de.xtb chromium-121.0.6167.160/components/strings/components_strings_de.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_de.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_de.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -620,7 +620,7 @@
Diese Website kann keine sichere Verbindung bereitstellen
Die Administratorrichtlinie blockiert das Drucken dieses Inhalts
Dateien mit mehr als 100 MB können nicht heruntergeladen werden
-Adresse in Konto speichern
+Adresse im Konto speichern
Schaltfläche „Chrome aktualisieren“ – aktivieren, um Chrome über die Chrome-Einstellungen zu aktualisieren
Richtlinien
Geschirrspüler
@@ -2768,7 +2768,7 @@
Bluetooth-Suche
Doppelte Lochung links
Kostüme
-Adresse in Konto speichern?
+Adresse im Konto speichern?
Vor Tagen zuletzt besucht
Wiederholen
14 × 17 Zoll
@@ -2831,7 +2831,7 @@
Umschlag (unbedruckt)
Gewünschte Schriftgröße
Schauspiel und Theater
-Aktualisieren…
+Aktualisieren
Die virtuelle Karte ist zurzeit nicht verfügbar, bitte versuche es später noch einmal
Relativ mit Schwarzpunktkompensation
Chrome bietet dir die Möglichkeit, die Karten in deinem Google-Konto zu speichern, weil du angemeldet bist. Du kannst dies in den Einstellungen ändern. Der Name des Karteninhabers stammt aus deinem Konto.
@@ -3187,7 +3187,7 @@
Früherziehung
{0,plural, =1{Dein Gerät startet in 1 Minute neu}other{Dein Gerät startet in # Minuten neu}}
Karte bestätigen
-Adresse aktualisieren
+Aktualisieren
Symbol für die Zahlungsabwicklung
Sicherheitscheck
URL
@@ -3937,7 +3937,7 @@
Kunststoff (Satin)
Nach jeder Seite zuschneiden
Hier werden blockierte Themen angezeigt
-Adresse in Konto speichern?
+Adresse im Konto speichern?
Später erinnern
Umschlag C8
– drücke die Tabulatortaste und dann die Eingabetaste, um Chrome über die Chrome-Einstellungen zu aktualisieren
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_eu.xtb chromium-121.0.6167.160/components/strings/components_strings_eu.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_eu.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_eu.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -1188,7 +1188,7 @@
Errore bat gertatu da errorea analizatzean
Erabili pantailaren blokeoa txartelak bizkorrago berresteko
Errore ezezaguna
-Bezeroaren IDa:
+Bezero-identifikatzailea:
Egiaztatu erosketa
Oraingo lehentasunen ordena
Erakundeak ez dizu eman webgune hau ikusteko baimenik
@@ -1564,7 +1564,7 @@
fitxategi-luzapenaren kudeatzaile bikoiztuei egiten diete erreferentzia darabilten aplikazioek.
Sortu dokumentu bat
Lortu informazio gehiago
-Profilaren IDa:
+Profil-identifikatzailea:
10. erretilua
American Express
Gutun-azal txinatarra 4
@@ -3249,7 +3249,7 @@
Ibilbide profesionalerako baliabideak eta planifikazioa
Eduki hori blokeatuta dago. Jarri harremanetan webgunearen arduradunarekin arazoa konpontzeko.
Iturgintza
-Webgune hori markatuta dauka erakundeak
+Zure erakundeak webgune hori salatu du
Hezkuntza-baliabideak
Chromium-ek ez du gordeko informazio hau:
@@ -3358,7 +3358,7 @@
Identifikatu ezin den gailua
Webgune honetako erasotzaileak zu engainatzen saia litezke, sarea arakatzea oztopatuko dizuten programak instala ditzazun. Besteak beste, hasierako orria alda lezakete edo ikusten dituzun webguneetan iragarki gehiago erakuts litzakete programok.
, posiziotatik garrena.
-{COUNT,plural, =1{Isilpeko gisa markatu diren datuekin gauzatutako ekintzak (ekintza bat saioa hasi denetik). Lortu informazio gehiago}other{Isilpeko gisa markatu diren datuekin gauzatutako ekintzak (# ekintza saioa hasi denetik). Lortu informazio gehiago}}
+{COUNT,plural, =1{Isilpekoak direla salatutako datuekin gauzatutako ekintzak (ekintza bat saioa hasi denetik). Lortu informazio gehiago}other{Isilpekoak direla salatutako datuekin gauzatutako ekintzak (# ekintza saioa hasi denetik). Lortu informazio gehiago}}
6. postontzia
Kudeatu ordainketa-metodoak…
Aurrez ebakitako bereizleak
@@ -3752,7 +3752,7 @@
Gehitu gidalerroa
&Desegin mugitzea
Kamera eta mikrofonoa erabili nahi dituzu?
-Webgune hau markatuta dauka erakundeak
+Zure erakundeak webgune hau salatu du
Rapa eta hip-hopa
Ordenagailu-sareak
Arte eszenikoak
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_fa.xtb chromium-121.0.6167.160/components/strings/components_strings_fa.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_fa.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_fa.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -1315,7 +1315,7 @@
؛ برای اجرای «بررسی ایمنی» در تنظیمات Chrome، کلید «جهش» و سپس «ورود» را فشار دهید
مانیکور و پدیکور
یونیفرم و لباس کار
-پاک کردن دادههای محصول مرور…
+پاک کردن دادههای مرور…
نمایش کل سابقه
برچسب (مات)
{0,plural, =1{خطمشی سرپرست توصیه نمیکند این فایل را به منتقل کنید}one{خطمشی سرپرست توصیه نمیکند این فایل را به منتقل کنید}other{خطمشی سرپرست توصیه نمیکند این فایلها را به منتقل کنید}}
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_fr.xtb chromium-121.0.6167.160/components/strings/components_strings_fr.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_fr.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_fr.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -2833,7 +2833,7 @@
Enveloppe (ordinaire)
Taille de police demandée
Théâtre et arts dramatiques
-Modifier…
+Mettre à jour…
La carte virtuelle n'est pas disponible pour le moment. Veuillez réessayer plus tard.
Valeur relative avec compression des points noirs
Chrome propose d'enregistrer vos cartes dans votre compte Google, car vous êtes connecté. Vous pouvez modifier ce comportement dans les paramètres. Le nom du titulaire de la carte provient de votre compte.
@@ -2869,7 +2869,7 @@
Comptes épargne
chrome://flags
Votre appareil s'est mis en veille.
-Modifier l'adresse ?
+Mettre à jour l'adresse ?
Papier (coton)
JIS B2
Le Gestionnaire de mots de passe de Google a besoin d'accéder au trousseau macOS
@@ -3190,7 +3190,7 @@
Crèches et jardins d'enfants
{0,plural, =1{Votre appareil va redémarrer dans 1 minute}one{Votre appareil va redémarrer dans # minute}other{Votre appareil va redémarrer dans # minutes}}
Valider la carte
-Modifier l'adresse
+Mettre à jour l'adresse
Icône du gestionnaire de paiement
Contrôle de sécurité
URL
@@ -3477,7 +3477,7 @@
, appuyez sur Tabulation, puis sur Entrée pour accéder à la page du contrôle de sécurité de Chrome dans les paramètres
Base pour flexographie
Terrains et terres
-Modifier l'adresse ?
+Mettre à jour l'adresse ?
Revêtement
Saisissez un numéro de téléphone valide
souhaite diffuser un contenu protégé. L'identité de votre appareil sera validée par Google.
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_gl.xtb chromium-121.0.6167.160/components/strings/components_strings_gl.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_gl.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_gl.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -683,7 +683,7 @@
O teu acceso a Internet está bloqueado
Ao activar esta función, os sitios non poden utilizar cookies para seguirte pola Web. As funcións dalgúns sitios poden quedar bloqueadas.
Non se cargou
-Botón para abrir unha ventá do modo de incógnito. Actívao para abrir una nova ventá do modo de incógnito e navegar de forma privada
+Botón para abrir unha ventá do modo de incógnito. Actívao para abrir unha nova ventá do modo de incógnito e navegar de forma privada
Condimentos e aderezos
Menos de . Algúns sitios pode que carguen máis lentamente a próxima vez que os visites.
Personalizar as túas ferramentas de accesibilidade na configuración de Chrome OS
@@ -699,7 +699,7 @@
quere sincronizarse
Réptiles e anfibios
Imaxe que copiaches
-Botón para abrir unha pestana do modo de incógnito. Actívao para abrir una nova pestana do modo de incógnito e navegar de forma privada
+Botón para abrir unha pestana do modo de incógnito. Actívao para abrir unha nova pestana do modo de incógnito e navegar de forma privada
Queres permitir que se use en lugar de para abrir todas as ligazóns de ?
Permítense a cámara e o micrófono
Outros marcadores
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_hi.xtb chromium-121.0.6167.160/components/strings/components_strings_hi.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_hi.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_hi.xtb 2024-02-06 23:11:31.000000000 +0000
@@ -3084,7 +3084,7 @@
आपस में मिला दिया गया
'पते में बदलाव करें' विकल्प चुना गया
{SHIPPING_OPTIONS,plural, =0{}=1{ और अन्य}one{ और अन्य}other{ और अन्य}}
-भुगतान के तरीके सेव करें और भरें
+पेमेंट के तरीके सेव करें और जानकारी भरें
रीफ्रेश करें
गुप्त विंडो खोलें
कोई नीति सेट नहीं की गई है
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_hr.xtb chromium-121.0.6167.160/components/strings/components_strings_hr.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_hr.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_hr.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -1692,7 +1692,7 @@
{COUNT,plural, =1{Istječe sutra}one{Istječe za # dan}few{Istječe za # dana}other{Istječe za # dana}}
Ovaj oglas koristio je previše resursa za vaš uređaj, pa ga je Chrome uklonio.
Uvezi iz JSON-a
-Za ovo računalo nije otkriveno da njime upravlja tvrtka, pa pravilo može samo automatski instalirati proširenja hostirana u Chrome web-trgovini. URL za ažuriranje Chrome Web Storea je "".
+Za ovo računalo nije otkriveno da njime upravlja tvrtka, pa pravilo može samo automatski instalirati proširenja hostirana u Chrome Web Storeu. URL za ažuriranje Chrome Web Storea je "".
Veza s web-lokacijom nije sigurna
Nije moguće dijeljenje povjerljivog sadržaja
Ipak prenesi
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_it.xtb chromium-121.0.6167.160/components/strings/components_strings_it.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_it.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_it.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -3091,7 +3091,7 @@
Cheerleading
Riavvia e applica criteri
È necessario specificare anche l'attributo "vendor_id".
-Consente di liberare . Alcuni siti potrebbero caricarsi più lentamente alla prossima visita.
+Libera . Alcuni siti potrebbero caricarsi più lentamente alla prossima visita.
Unità e dispositivi di archiviazione per computer
Consultazione
Visa
@@ -3380,7 +3380,7 @@
Rock classico e oldies
Al momento hai carte che possono essere utilizzate solo su questo dispositivo. Fai clic su Continua per controllare le carte.
Vuoi aggiornare Google Play Services per AR?
-Nulla
+Nessun dato
Aggiornamento completato con errori
Procedi su (non sicuro)
Disco ottico (lucido)
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_pt-BR.xtb chromium-121.0.6167.160/components/strings/components_strings_pt-BR.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_pt-BR.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_pt-BR.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -3893,7 +3893,7 @@
Envelope B6
Tentar novamente
Tamanho da página:
-Concluído
+Concluir
Código de segurança
Você pode bloquear temas que não quer compartilhar com sites. O Chrome também exclui automaticamente os temas que estão na lista há mais de quatro semanas. Saiba mais
Seu é gerenciado por
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_pt-PT.xtb chromium-121.0.6167.160/components/strings/components_strings_pt-PT.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_pt-PT.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_pt-PT.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -1693,7 +1693,7 @@
{COUNT,plural, =1{Expira amanhã}other{Expira dentro de # dias}}
Uma vez que este anúncio utiliza demasiados recursos para o seu dispositivo, o Chrome removeu-o.
Importar de JSON
-Este computador não é detetado como sendo gerido pela empresa, por isso, a política apenas pode instalar automaticamente extensões alojadas na Chrome Web Store. O URL de atualização da Chrome Web Store é "".
+Este computador não é detetado como sendo gerido pela empresa, por isso, a política apenas pode instalar automaticamente extensões alojadas na Web Store do Chrome. O URL de atualização da Web Store do Chrome é "".
A ligação para não é segura
Não é possível partilhar o conteúdo confidencial
Carregar mesmo assim
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_ru.xtb chromium-121.0.6167.160/components/strings/components_strings_ru.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_ru.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_ru.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -13,7 +13,7 @@
Отзывы о товарах и сравнение цен
Подробнее…
Сайт запрашивает разрешение на постоянное хранение большого объема данных на вашем устройстве.
-{COUNT,plural, =0{Нет сайтов.}=1{С 1 сайта. Вы автоматически выйдете из учетных записей на большинстве сайтов. }one{С # сайта. Вы автоматически выйдете из учетных записей на большинстве сайтов. }few{С # сайтов. Вы автоматически выйдете из учетных записей на большинстве сайтов. }many{С # сайтов. Вы автоматически выйдете из учетных записей на большинстве сайтов. }other{С # сайта. Вы автоматически выйдете из учетных записей на большинстве сайтов. }}
+{COUNT,plural, =0{Нет сайтов.}=1{С 1 сайта. Вы автоматически выйдете из аккаунтов на большинстве сайтов. }one{С # сайта. Вы автоматически выйдете из аккаунтов на большинстве сайтов. }few{С # сайтов. Вы автоматически выйдете из аккаунтов на большинстве сайтов. }many{С # сайтов. Вы автоматически выйдете из аккаунтов на большинстве сайтов. }other{С # сайта. Вы автоматически выйдете из аккаунтов на большинстве сайтов. }}
Режим инкогнито не позволяет скрыть информацию о ваших действиях в интернете:
Сайты и используемые ими сервисы регистрируют посещения.
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_th.xtb chromium-121.0.6167.160/components/strings/components_strings_th.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_th.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_th.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -649,7 +649,7 @@
ไม่มีอินเทอร์เน็ต
เปิดบัตรเสมือนแล้ว
ลงชื่อเข้าใช้เครือข่าย Wi-Fi
-บันทึกที่อยู่นี้ไว้ใน Chrome แล้ว หากต้องการใช้ในผลิตภัณฑ์ต่างๆ ของ Google ให้บันทึกไว้ในบัญชี Google ของคุณ
+บันทึกที่อยู่นี้ไว้ใน Chrome แล้ว หากต้องการใช้ในผลิตภัณฑ์ต่างๆ ของ Google ให้บันทึกไว้ในบัญชี Google
ทางลัดที่ซ้ำกันถูกข้าม:
แผ่นซีดี
บล็อกคุกกี้ของบุคคลที่สามอยู่
@@ -687,7 +687,7 @@
เครื่องปรุงรสและน้ำสลัด
ไม่ถึง บางเว็บไซต์อาจโหลดช้ากว่าเดิมเมื่อคุณเข้าชมครั้งถัดไป
ปรับเปลี่ยนเครื่องมือช่วยเหลือพิเศษในแบบของคุณที่การตั้งค่า Chrome OS
-หากเพิ่มพื้นที่ว่างไม่ถึง 1 MB ไซต์บางแห่งอาจโหลดช้าลงเมื่อคุณเข้าชมครั้งถัดไป
+เพิ่มพื้นที่ว่างไม่ถึง 1 MB เว็บไซต์บางแห่งอาจโหลดช้าลงเมื่อคุณเข้าชมครั้งถัดไป
ต้องใช้ชื่อผู้ใช้และรหัสผ่าน
การประทับเวลาล่าสุดของนโยบาย:
ผลิตภัณฑ์ดูแลผิวหน้า
@@ -755,7 +755,7 @@
กระดาษ (เคลือบ)
เมื่อคุณแก้ไขคำอธิบายประกอบ เอกสารนี้จะกลับไปเป็นมุมมองแบบหน้าเดียวและกลับไปใช้การหมุนแบบเดิม
URL ค้นหาไม่ถูกต้อง
-ในบัญชี Google ที่ใช้อีเมล
+ในบัญชี Google
การแจ้งเตือน
นโยบายเครื่อง
ผู้โจมตีเว็บไซต์ที่คุณพยายามเข้าชมอาจติดตั้งซอฟต์แวร์ที่เป็นอันตรายซึ่งจะขโมยหรือลบข้อมูล เช่น รหัสผ่าน รูปภาพ ข้อความ หรือหมายเลขบัตรเครดิต Chrome ขอแนะนำเป็นอย่างยิ่งให้กลับสู่ความปลอดภัย ดูข้อมูลเพิ่มเติม
@@ -776,7 +776,7 @@
สร้างแบบฟอร์ม
บันทึกไว้เฉพาะในอุปกรณ์นี้
เพิ่มข้อมูลอื่นๆ
-คุณใช้ที่อยู่ที่บันทึกไว้ในผลิตภัณฑ์ต่างๆ ของ Google ได้ ระบบจะบันทึกที่อยู่นี้ไว้ในบัญชี Google ของคุณ
+คุณใช้ที่อยู่ที่บันทึกไว้ในผลิตภัณฑ์ต่างๆ ของ Google ได้ ระบบจะบันทึกที่อยู่นี้ไว้ในบัญชี Google
CVC จะแสดงอยู่บนด้านหน้าของบัตร โดยเป็นรหัส 4 หลักที่ด้านขวาบนเหนือหมายเลขบัตร
ช่องนี้ต้องมีข้อมูลไม่เกิน รายการ ระบบจะไม่สนใจรายการอื่นๆ ทั้งหมด
ดูรายละเอียดรหัสโปรโมชัน
@@ -2413,7 +2413,7 @@
ไม่รู้จัก
คุณไม่ควรป้อนข้อมูลที่ละเอียดอ่อนบนเว็บไซต์นี้ (ตัวอย่างเช่น รหัสผ่านหรือบัตรเครดิต) เนื่องจากผู้โจมตีอาจขโมยข้อมูลดังกล่าวไปได้
คุณใช้ลูกศรซ้าย/ขวาเพื่อตรวจสอบการเปลี่ยนแปลงราคาบนกราฟได้
-ในบัญชี Google ที่ใช้อีเมล
+ในบัญชี Google
บันทึกในบัญชีไหม
แหล่งจ่ายไฟ
รายการแท็บ
@@ -2524,7 +2524,7 @@
คุณไม่สามารถไปที่ ได้ในขณะนี้เนื่องจากเว็บไซต์ใช้การปักหมุดใบรับรอง โดยปกติข้อผิดพลาดของเครือข่ายและการโจมตีจะเกิดขึ้นเพียงชั่วคราว หน้านี้จึงอาจใช้งานได้ในภายหลัง
จำนวนหน้า:
•
-คุณใช้ที่อยู่ที่บันทึกไว้ในผลิตภัณฑ์ต่างๆ ของ Google ได้ ระบบจะบันทึกที่อยู่นี้ไว้ในบัญชี Google ของคุณ
+คุณใช้ที่อยู่ที่บันทึกไว้ในผลิตภัณฑ์ต่างๆ ของ Google ได้ ระบบจะบันทึกที่อยู่นี้ไว้ในบัญชี Google
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Google ปกป้องข้อมูลของคุณในนโยบายความเป็นส่วนตัว
Bottom Sheet ซึ่งแจ้งว่าไม่พบข้อมูลเข้าสู่ระบบที่ตรงกันสำหรับข้อมูลเข้าสู่ระบบการชำระเงินที่ปลอดภัย
ซอง (Archival)
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_vi.xtb chromium-121.0.6167.160/components/strings/components_strings_vi.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_vi.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_vi.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -446,7 +446,7 @@
Bảo vệ mật khẩu bằng phương thức khoá màn hình
ngang
Giáo dục sức khoẻ và đào tạo y khoa
-Xóa dữ liệu duyệt web
+Xoá dữ liệu duyệt web
tự động tải xuống
Yêu cầu hoặc tham số yêu cầu không hợp lệ
Các trang web bạn đã truy cập và thời lượng truy cập các trang web đó
@@ -649,7 +649,7 @@
Không có Internet
Đã bật thẻ ảo
Đăng nhập vào mạng Wi-Fi
-Địa chỉ này hiện được lưu vào Chrome. Để sử dụng địa chỉ này trên các sản phẩm của Google, hãy lưu địa chỉ vào Tài khoản Google của bạn.
+Địa chỉ này hiện được lưu vào Chrome. Để sử dụng địa chỉ này trên các sản phẩm của Google, hãy lưu địa chỉ vào Tài khoản Google của bạn ().
Lối tắt không phải duy nhất đã bị bỏ qua:
Đĩa nén
Đã chặn các cookie bên thứ ba
@@ -1577,7 +1577,7 @@
Từ giờ trở đi, Chrome sẽ xác minh danh tính của bạn trước khi điền phương thức thanh toán. Bạn có thể cập nhật lựa chọn này bất cứ lúc nào trong phần .
Chế độ cài đặt này làm giảm khả năng bảo vệ nhưng hầu hết các tính năng của trang web sẽ hoạt động
Tím
-Cài đặt trang web
+Chế độ cài đặt trang web
Không cho phép
Chữ ký xác minh không hợp lệ
– –
@@ -2214,7 +2214,7 @@
Khay xếp chồng 4
Bạn cần xem xét trước khi chuyển
Vẫn chuyển
-Xóa dữ liệu duyệt web...
+Xoá dữ liệu duyệt web...
Theo dõi giá
{NUM_COOKIES,plural, =0{Không có trang web nào bị chặn}=1{1 trang web bị chặn}other{# trang web bị chặn}}
muốn gửi thông báo cho bạn
@@ -2525,7 +2525,7 @@
Bạn không thể truy cập vào ngay bây giờ do trang web sử dụng tính năng ghim chứng chỉ. Lỗi mạng và các cuộc tấn công mạng thường chỉ là tạm thời nên trang này có thể sẽ hoạt động lại sau.
Số lượng trang:
•
-Bạn có thể sử dụng địa chỉ đã lưu trên các sản phẩm của Google. Địa chỉ này được lưu trong Tài khoản Google của bạn.
+Bạn có thể sử dụng địa chỉ đã lưu trên các sản phẩm của Google. Địa chỉ này được lưu trong Tài khoản Google của bạn ().
Tìm hiểu thêm về cách Google đảm bảo an toàn cho dữ liệu của bạn trong Chính sách quyền riêng tư của chúng tôi.
Thông tin xác thực thanh toán an toàn không khớp với bảng thông tin xác thực
Phong bì (Lưu niệm)
@@ -3353,7 +3353,7 @@
Trang tính trình xử lý thanh toán đang đóng
Khi bạn chỉnh sửa chú thích, tài liệu này sẽ trở về hướng xoay ban đầu
Ẩn cài đặt nâng cao...
-Hủy
+Huỷ
Phong bì Kaku 8
{0,plural, =1{Chính sách của quản trị viên không cho phép tải tệp này lên}other{Chính sách của quản trị viên không cho phép tải # tệp lên}}
Cài đặt được một tiện ích kiểm soát
@@ -3534,7 +3534,7 @@
Đại lý và dịch vụ du lịch
, Nhấn Tab rồi nhấn Enter để đặt Chrome làm trình duyệt mặc định của hệ thống
Những kẻ tấn công trên trang web này có thể đánh lừa bạn làm một việc gì đó nguy hiểm như cài đặt phần mềm hoặc tiết lộ thông tin cá nhân của bạn (ví dụ: mật khẩu, số điện thoại hoặc thẻ tín dụng).
-Xóa dữ liệu duyệt web
+Xoá dữ liệu duyệt web
Khay 15
Nút Chạy quy trình kiểm tra an toàn trên Chrome, hãy nhấn nút này để chạy quy trình kiểm tra an toàn trong phần Cài đặt của Chrome
, nhấn phím Tab rồi nhấn phím Enter để tạo nhanh một biểu mẫu mới trong Google Biểu mẫu
@@ -3776,7 +3776,7 @@
Hiển thị thông tin chi tiết của nhà phát triển
Dập ghim dưới cùng bên trái
quản lý tính năng chống theo dõi
-Địa chỉ này sẽ bị xoá khỏi Tài khoản Google của bạn,
+Địa chỉ này sẽ bị xoá khỏi Tài khoản Google của bạn ()
Áp dụng cho
Khay xếp chồng 10
Giải phóng dung lượng
@@ -4004,7 +4004,7 @@
Lưu thẻ
Đã xảy ra lỗi.
Chứng chỉ của máy chủ đã hết hạn.
-Bao gồm các thông tin như số điện thoại, địa chỉ email và địa chỉ giao hàng
+Kể cả các thông tin như số điện thoại, địa chỉ email và địa chỉ giao hàng
Tên của các tệp mà bạn in
Tính năng Duyệt web an toàn của Google gần đây đã phát hiện dấu hiệu lừa đảo trên . Các trang web lừa đảo sẽ giả mạo các trang web khác để đánh lừa bạn.
Đã tải xong tệp PDF
diff -Nru chromium-121.0.6167.139/components/strings/components_strings_zh-TW.xtb chromium-121.0.6167.160/components/strings/components_strings_zh-TW.xtb
--- chromium-121.0.6167.139/components/strings/components_strings_zh-TW.xtb 2024-01-30 20:24:23.000000000 +0000
+++ chromium-121.0.6167.160/components/strings/components_strings_zh-TW.xtb 2024-02-06 23:11:32.000000000 +0000
@@ -1075,7 +1075,7 @@
目前使用的 Wi-Fi 網路可能會要求您造訪登入網頁。
{NUM_COOKIES,plural, =0{第三方 Cookie,不允許任何網站}=1{第三方 Cookie,已允許 1 個網站}other{第三方 Cookie,已允許 # 個網站}}
無線電設備
-Discover
+探索
房地產服務
網路服務
檢查您的 Proxy 設定,或是與您的網路管理員聯絡
diff -Nru chromium-121.0.6167.139/content/browser/interest_group/interest_group_browsertest.cc chromium-121.0.6167.160/content/browser/interest_group/interest_group_browsertest.cc
--- chromium-121.0.6167.139/content/browser/interest_group/interest_group_browsertest.cc 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/interest_group/interest_group_browsertest.cc 2024-02-06 23:11:33.000000000 +0000
@@ -7007,6 +7007,31 @@
}
IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest,
+ RunAdAuctionInvalidAdditionalBidsMalformattedNonce) {
+ GURL test_url = https_server_->GetURL("a.test", "/echo");
+ url::Origin test_origin = url::Origin::Create(test_url);
+ GURL decision_url = https_server_->GetURL(
+ "a.test", "/interest_group/decision_logic.js");
+ ASSERT_TRUE(NavigateToURL(shell(), test_url));
+
+ const char kAuctionConfigTemplate[] = R"({
+ seller: $1,
+ decisionLogicURL: $2,
+ additionalBids: Promise.resolve([1, 2, 3]),
+ auctionNonce: "invalid",
+ interestGroupBuyers: [$1]
+ })";
+
+ EXPECT_EQ(base::StringPrintf(
+ "TypeError: Failed to execute 'runAdAuction' on 'Navigator': "
+ "auctionNonce for AuctionAdConfig with seller '%s' must be a "
+ "valid UUIDv4, but got, 'invalid'.",
+ test_origin.Serialize().c_str()),
+ RunAuctionAndWait(
+ JsReplace(kAuctionConfigTemplate, test_origin, decision_url)));
+}
+
+IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest,
RunAdAuctionInvalidAdditionalBidsNoInterestGroupBuyers) {
GURL test_url = https_server_->GetURL("a.test", "/echo");
url::Origin test_origin = url::Origin::Create(test_url);
diff -Nru chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_container.cc chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_container.cc
--- chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_container.cc 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_container.cc 2024-02-06 23:11:33.000000000 +0000
@@ -1096,6 +1096,7 @@
}
void PrefetchContainer::OnCookiesChanged() {
+ CHECK_NE(GetPrefetchStatus(), PrefetchStatus::kPrefetchNotUsedCookiesChanged);
SetPrefetchStatus(PrefetchStatus::kPrefetchNotUsedCookiesChanged);
UpdateServingPageMetrics();
CancelStreamingURLLoaderIfNotServing();
diff -Nru chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_service.cc chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_service.cc
--- chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_service.cc 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_service.cc 2024-02-06 23:11:33.000000000 +0000
@@ -1412,6 +1412,28 @@
break;
}
+ if (prefetch_container->IsDecoy()) {
+ DVLOG(1)
+ << "PrefetchService::FindPrefetchContainerToServe: skipped because "
+ "prefetch is a decoy: "
+ << *prefetch_container;
+ return true;
+ }
+
+ // Note: This codepath is only be reached in practice if we create a
+ // second NavigationRequest to this prefetch's URL. The first
+ // NavigationRequest would call GetPrefetch, which might set this
+ // PrefetchContainer's status to kPrefetchNotUsedCookiesChanged.
+ CHECK(prefetch_container->HasPrefetchStatus());
+ if (prefetch_container->GetPrefetchStatus() ==
+ PrefetchStatus::kPrefetchNotUsedCookiesChanged) {
+ DVLOG(1)
+ << "PrefetchService::FindPrefetchContainerToServe: skipped because "
+ "cookies for url have changed since prefetch completed: "
+ << *prefetch_container;
+ return true;
+ }
+
DVLOG(1) << "PrefetchService::FindPrefetchContainerToServe: matched: "
<< *prefetch_container;
return false;
diff -Nru chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_service_unittest.cc chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_service_unittest.cc
--- chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_service_unittest.cc 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_service_unittest.cc 2024-02-06 23:11:33.000000000 +0000
@@ -2330,6 +2330,48 @@
ExpectServingMetricsSuccess();
}
+// Regression test for crbug.com/1491889. Completes a prefetch, and then changes
+// the cookies for the prefetched URL. It then creates two NavigationRequests
+// (to the same URL) and calls GetPrefetchToServe for each request. This can
+// happen in practice when a user clicks on a link to a URL twice).
+TEST_F(PrefetchServiceTest,
+ MultipleNavigationRequestsCallGetPrefetchAfterCookieChange) {
+ MakePrefetchService(
+ std::make_unique>());
+
+ MakePrefetchOnMainFrame(
+ GURL("https://example.com"),
+ PrefetchType(PreloadingTriggerType::kSpeculationRule,
+ /*use_prefetch_proxy=*/true,
+ blink::mojom::SpeculationEagerness::kEager));
+ task_environment()->RunUntilIdle();
+
+ VerifyCommonRequestState(GURL("https://example.com"),
+ {.use_prefetch_proxy = true});
+ MakeResponseAndWait(net::HTTP_OK, net::OK, kHTMLMimeType,
+ /*use_prefetch_proxy=*/true,
+ {{"X-Testing", "Hello World"}}, kHTMLBody);
+
+ // Adding a cookie after the prefetch has started will cause it to fail when
+ // being served.
+ ASSERT_TRUE(SetCookie(GURL("https://example.com"), "testing"));
+ task_environment()->RunUntilIdle();
+
+ Navigate(GURL("https://example.com"));
+ base::test::TestFuture future_1;
+ GetPrefetchToServe(future_1, GURL("https://example.com"));
+ EXPECT_TRUE(future_1.IsReady());
+ // No prefetch should be returned (the example.com prefetch had its cookies
+ // changed).
+ EXPECT_FALSE(future_1.Get().GetPrefetchContainer());
+
+ Navigate(GURL("https://example.com"));
+ base::test::TestFuture future_2;
+ GetPrefetchToServe(future_2, GURL("https://example.com"));
+ EXPECT_TRUE(future_2.IsReady());
+ EXPECT_FALSE(future_2.Get().GetPrefetchContainer());
+}
+
TEST_F(PrefetchServiceTest, NotServeableNavigationInDifferentRenderFrameHost) {
base::HistogramTester histogram_tester;
@@ -2596,6 +2638,31 @@
}
TEST_F(PrefetchServiceAlwaysMakeDecoyRequestTest,
+ NavigateBeforeDecoyResponseReceived) {
+ base::HistogramTester histogram_tester;
+
+ MakePrefetchService(
+ std::make_unique>());
+
+ ASSERT_TRUE(SetCookie(GURL("https://example.com"), "testing"));
+
+ MakePrefetchOnMainFrame(
+ GURL("https://example.com"),
+ PrefetchType(PreloadingTriggerType::kSpeculationRule,
+ /*use_prefetch_proxy=*/true,
+ blink::mojom::SpeculationEagerness::kEager));
+ task_environment()->RunUntilIdle();
+
+ VerifyCommonRequestState(GURL("https://example.com"),
+ {.use_prefetch_proxy = true});
+
+ Navigate(GURL("https://example.com"));
+ EXPECT_FALSE(GetPrefetchToServe(GURL("https://example.com")));
+
+ ExpectCorrectUkmLogs({.outcome = PreloadingTriggeringOutcome::kUnspecified});
+}
+
+TEST_F(PrefetchServiceAlwaysMakeDecoyRequestTest,
NoDecoyRequestDisableDecoysBasedOnUserSettings) {
base::HistogramTester histogram_tester;
diff -Nru chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_url_loader_helper.cc chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_url_loader_helper.cc
--- chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_url_loader_helper.cc 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_url_loader_helper.cc 2024-02-06 23:11:33.000000000 +0000
@@ -225,11 +225,10 @@
break;
}
- if (reader.HaveDefaultContextCookiesChanged()) {
- reader.GetPrefetchContainer()->OnCookiesChanged();
- std::move(get_prefetch_callback).Run({});
- return;
- }
+ // We should not reach here if the cookies have changed; this should have
+ // already been checked in PrefetchService::ReturnPrefetchToServe and this
+ // method should have been called with an empty reader.
+ CHECK(!reader.HaveDefaultContextCookiesChanged());
// TODO(crbug.com/1462206): Should we check for existence of an
// `origin_prober` earlier instead of waiting until we have a matching
diff -Nru chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc
--- chromium-121.0.6167.139/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/preloading/prefetch/prefetch_url_loader_interceptor_unittest.cc 2024-02-06 23:11:33.000000000 +0000
@@ -46,7 +46,6 @@
#include "net/base/isolation_info.h"
#include "net/base/load_timing_info.h"
#include "services/metrics/public/cpp/ukm_builders.h"
-#include "services/network/public/mojom/cookie_manager.mojom.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -246,11 +245,6 @@
web_contents()->GetPrimaryMainFrame()->GetFrameTreeNodeId(),
std::move(prefetch_service));
- browser_context()
- ->GetDefaultStoragePartition()
- ->GetNetworkContext()
- ->GetCookieManager(cookie_manager_.BindNewPipeAndPassReceiver());
-
auto navigation_simulator = NavigationSimulator::CreateBrowserInitiated(
GURL("https://test.com"), web_contents());
navigation_simulator->Start();
@@ -318,44 +312,6 @@
->navigation_request();
}
- bool SetCookie(const GURL& url, const std::string& value) {
- bool result = false;
- base::RunLoop run_loop;
-
- std::unique_ptr cookie(net::CanonicalCookie::Create(
- url, value, base::Time::Now(), /*server_time=*/absl::nullopt,
- /*cookie_partition_key=*/absl::nullopt));
- EXPECT_TRUE(cookie.get());
- EXPECT_TRUE(cookie->IsHostCookie());
-
- net::CookieOptions options;
- options.set_include_httponly();
- options.set_same_site_cookie_context(
- net::CookieOptions::SameSiteCookieContext::MakeInclusive());
-
- cookie_manager_->SetCanonicalCookie(
- *cookie.get(), url, options,
- base::BindOnce(
- [](bool* result, base::RunLoop* run_loop,
- net::CookieAccessResult set_cookie_access_result) {
- *result = set_cookie_access_result.status.IsInclude();
- run_loop->Quit();
- },
- &result, &run_loop));
-
- // This will run until the cookie is set.
- run_loop.Run();
-
- // This will run until the cookie listener gets the cookie change.
- task_environment()->RunUntilIdle();
-
- return result;
- }
-
- network::mojom::CookieManager* cookie_manager() {
- return cookie_manager_.get();
- }
-
const base::HistogramTester& histogram_tester() { return histogram_tester_; }
ScopedMockContentBrowserClient* test_content_browser_client() {
@@ -424,7 +380,6 @@
std::map was_intercepted_;
std::map on_loader_callback_closure_;
- mojo::Remote cookie_manager_;
std::unique_ptr test_content_browser_client_;
std::unique_ptr test_ukm_recorder_;
@@ -843,68 +798,6 @@
PreloadingTriggeringOutcome::kReady);
}
-TEST_P(PrefetchURLLoaderInterceptorTest,
- DISABLE_ASAN(DoNotInterceptNavigationCookiesChanged)) {
- const GURL kTestUrl("https://example.com");
-
- EXPECT_CALL(*test_content_browser_client(), WillCreateURLLoaderFactory)
- .Times(0);
-
- std::unique_ptr prefetch_container =
- std::make_unique(
- main_rfh()->GetGlobalId(), MainDocumentToken(), kTestUrl,
- PrefetchType(PreloadingTriggerType::kSpeculationRule,
- /*use_prefetch_proxy=*/true,
- blink::mojom::SpeculationEagerness::kEager),
- blink::mojom::Referrer(),
- /*no_vary_search_expected=*/absl::nullopt,
-
- /*prefetch_document_manager=*/nullptr);
- prefetch_container->RegisterCookieListener(cookie_manager());
- prefetch_container->SimulateAttemptAtInterceptorForTest();
-
- MakeServableStreamingURLLoaderForTest(prefetch_container.get(),
- network::mojom::URLResponseHead::New(),
- "test body");
-
- // Since the cookies associated with |kTestUrl| have changed, the prefetch can
- // no longer be served.
- ASSERT_TRUE(SetCookie(kTestUrl, "test-cookie"));
-
- interceptor()->AddPrefetch(prefetch_container->GetWeakPtr());
-
- GetPrefetchService()->TakePrefetchOriginProber(
- std::make_unique(
- browser_context(), /*should_probe_origins_response=*/false, kTestUrl,
- PrefetchProbeResult::kNoProbing));
-
- network::ResourceRequest request;
- request.url = kTestUrl;
- request.resource_type =
- static_cast(blink::mojom::ResourceType::kMainFrame);
- request.method = "GET";
-
- interceptor()->MaybeCreateLoader(
- request, browser_context(),
- base::BindOnce(&PrefetchURLLoaderInterceptorTest::LoaderCallback,
- base::Unretained(this), kTestUrl),
- base::BindOnce(UnreachableFallback));
- WaitForCallback(kTestUrl);
-
- EXPECT_TRUE(was_intercepted(kTestUrl).has_value());
- EXPECT_FALSE(was_intercepted(kTestUrl).value());
-
- histogram_tester().ExpectTotalCount(
- "PrefetchProxy.AfterClick.Mainframe.CookieWaitTime", 0);
-
- EXPECT_EQ(GetPrefetchService()->num_probes(), 0);
- ExpectCorrectUkmLogs(GURL("http://Not.Accurate.Trigger/"),
- /*is_accurate_trigger=*/false,
- PreloadingTriggeringOutcome::kFailure,
- ToPreloadingFailureReason(
- PrefetchStatus::kPrefetchNotUsedCookiesChanged));
-}
-
TEST_P(PrefetchURLLoaderInterceptorTest, DISABLE_ASAN(ProbeSuccess)) {
const GURL kTestUrl("https://example.com");
diff -Nru chromium-121.0.6167.139/content/browser/renderer_host/legacy_render_widget_host_win.cc chromium-121.0.6167.160/content/browser/renderer_host/legacy_render_widget_host_win.cc
--- chromium-121.0.6167.139/content/browser/renderer_host/legacy_render_widget_host_win.cc 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/renderer_host/legacy_render_widget_host_win.cc 2024-02-06 23:11:33.000000000 +0000
@@ -139,6 +139,7 @@
// Re-enable flicks for just a moment
base::win::EnableFlicks(hwnd);
+
delete this;
}
@@ -149,25 +150,20 @@
did_return_uia_object_(false) {}
LegacyRenderWidgetHostHWND::~LegacyRenderWidgetHostHWND() {
- // WindowImpl will clean up the hwnd value on WM_NCDESTROY.
- DCHECK(!hwnd());
+ DCHECK(!::IsWindow(hwnd()));
}
bool LegacyRenderWidgetHostHWND::InitOrDeleteSelf(HWND parent) {
// Need to use weak_ptr to guard against `this` from being deleted by
- // Create(), which used to be called in the constructor and caused
+ // Base::Create(), which used to be called in the constructor and caused
// heap-use-after-free crash (https://crbug.com/1194694).
auto weak_ptr = weak_factory_.GetWeakPtr();
-
- set_window_style(WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
- set_window_ex_style(WS_EX_TRANSPARENT);
- set_window_class_name(ui::kLegacyRenderWidgetHostHwnd);
- set_window_name(L"Chrome Legacy Window");
- gfx::Rect rect(0, 0);
- Init(parent, rect);
-
+ RECT rect = {0};
+ Base::Create(parent, rect, L"Chrome Legacy Window",
+ WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
+ WS_EX_TRANSPARENT);
if (!weak_ptr) {
- // Create() runs nested windows message loops that could end up
+ // Base::Create() runs nested windows message loops that could end up
// deleting `this`. Therefore, upon returning false here, `this` is already
// deleted.
return false;
@@ -305,20 +301,22 @@
// with capture changes.
LRESULT LegacyRenderWidgetHostHWND::OnKeyboardRange(UINT message,
WPARAM w_param,
- LPARAM l_param) {
+ LPARAM l_param,
+ BOOL& handled) {
LRESULT ret = 0;
if (GetWindowEventTarget(GetParent())) {
bool msg_handled = false;
ret = GetWindowEventTarget(GetParent())->HandleKeyboardMessage(
message, w_param, l_param, &msg_handled);
- msg_handled_ = msg_handled;
+ handled = msg_handled;
}
return ret;
}
LRESULT LegacyRenderWidgetHostHWND::OnMouseRange(UINT message,
WPARAM w_param,
- LPARAM l_param) {
+ LPARAM l_param,
+ BOOL& handled) {
if (message == WM_MOUSEMOVE) {
if (!mouse_tracking_enabled_) {
mouse_tracking_enabled_ = true;
@@ -348,16 +346,15 @@
bool msg_handled = false;
ret = GetWindowEventTarget(GetParent())->HandleMouseMessage(
message, w_param, l_param, &msg_handled);
-
- msg_handled_ = msg_handled;
+ handled = msg_handled;
// If the parent did not handle non client mouse messages, we call
// DefWindowProc on the message with the parent window handle. This
// ensures that WM_SYSCOMMAND is generated for the parent and we are
// out of the picture.
- if (!msg_handled_ &&
+ if (!handled &&
(message >= WM_NCMOUSEMOVE && message <= WM_NCXBUTTONDBLCLK)) {
ret = ::DefWindowProc(GetParent(), message, w_param, l_param);
- msg_handled_ = TRUE;
+ handled = TRUE;
}
}
return ret;
diff -Nru chromium-121.0.6167.139/content/browser/renderer_host/legacy_render_widget_host_win.h chromium-121.0.6167.160/content/browser/renderer_host/legacy_render_widget_host_win.h
--- chromium-121.0.6167.139/content/browser/renderer_host/legacy_render_widget_host_win.h 2024-01-30 20:24:25.000000000 +0000
+++ chromium-121.0.6167.160/content/browser/renderer_host/legacy_render_widget_host_win.h 2024-02-06 23:11:33.000000000 +0000
@@ -7,6 +7,11 @@
#include "base/memory/raw_ptr.h"
+// Must be included before .
+#include "base/win/atl.h" // NOLINT(build/include_order)
+
+#include
+#include
#include
#include
@@ -18,8 +23,6 @@
#include "ui/base/win/internal_constants.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/native_widget_types.h"
-#include "ui/gfx/win/msg_util.h"
-#include "ui/gfx/win/window_impl.h"
namespace ui {
class AXFragmentRootWin;
@@ -57,9 +60,18 @@
// accessibility client calls ::WindowFromAccessibleObject, they get this
// HWND instead of the DesktopWindowTreeHostWin.
class CONTENT_EXPORT LegacyRenderWidgetHostHWND
- : public gfx::WindowImpl,
+ : public ATL::CWindowImpl>,
public ui::AXFragmentRootDelegateWin {
public:
+ DECLARE_WND_CLASS_EX(ui::kLegacyRenderWidgetHostHwnd, CS_DBLCLKS, 0)
+
+ typedef ATL::CWindowImpl>
+ Base;
+
// Creates and returns an instance of the LegacyRenderWidgetHostHWND class on
// successful creation of a child window parented to the parent window passed
// in.
@@ -73,33 +85,34 @@
// Destroys the HWND managed by this class.
void Destroy();
- CR_BEGIN_MSG_MAP_EX(LegacyRenderWidgetHostHWND)
- CR_MESSAGE_HANDLER_EX(WM_GETOBJECT, OnGetObject)
- CR_MESSAGE_RANGE_HANDLER_EX(WM_KEYFIRST, WM_KEYLAST, OnKeyboardRange)
- CR_MESSAGE_HANDLER_EX(WM_PAINT, OnPaint)
- CR_MESSAGE_HANDLER_EX(WM_NCPAINT, OnNCPaint)
- CR_MESSAGE_HANDLER_EX(WM_ERASEBKGND, OnEraseBkGnd)
- CR_MESSAGE_HANDLER_EX(WM_INPUT, OnInput)
- CR_MESSAGE_RANGE_HANDLER_EX(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
- CR_MESSAGE_HANDLER_EX(WM_MOUSELEAVE, OnMouseLeave)
- CR_MESSAGE_HANDLER_EX(WM_MOUSEACTIVATE, OnMouseActivate)
- CR_MESSAGE_HANDLER_EX(WM_SETCURSOR, OnSetCursor)
- CR_MESSAGE_HANDLER_EX(WM_TOUCH, OnTouch)
- CR_MESSAGE_HANDLER_EX(WM_POINTERDOWN, OnPointer)
- CR_MESSAGE_HANDLER_EX(WM_POINTERUPDATE, OnPointer)
- CR_MESSAGE_HANDLER_EX(WM_POINTERUP, OnPointer)
- CR_MESSAGE_HANDLER_EX(WM_POINTERENTER, OnPointer)
- CR_MESSAGE_HANDLER_EX(WM_POINTERLEAVE, OnPointer)
- CR_MESSAGE_HANDLER_EX(WM_HSCROLL, OnScroll)
- CR_MESSAGE_HANDLER_EX(WM_VSCROLL, OnScroll)
- CR_MESSAGE_HANDLER_EX(WM_NCHITTEST, OnNCHitTest)
- CR_MESSAGE_RANGE_HANDLER_EX(WM_NCMOUSEMOVE, WM_NCXBUTTONDBLCLK,
- OnMouseRange)
- CR_MESSAGE_HANDLER_EX(WM_NCCALCSIZE, OnNCCalcSize)
- CR_MESSAGE_HANDLER_EX(WM_SIZE, OnSize)
- CR_MESSAGE_HANDLER_EX(WM_DESTROY, OnDestroy)
- CR_MESSAGE_HANDLER_EX(DM_POINTERHITTEST, OnPointerHitTest)
- CR_END_MSG_MAP()
+ BEGIN_MSG_MAP_EX(LegacyRenderWidgetHostHWND)
+ MESSAGE_HANDLER_EX(WM_GETOBJECT, OnGetObject)
+ MESSAGE_RANGE_HANDLER(WM_KEYFIRST, WM_KEYLAST, OnKeyboardRange)
+ MESSAGE_HANDLER_EX(WM_PAINT, OnPaint)
+ MESSAGE_HANDLER_EX(WM_NCPAINT, OnNCPaint)
+ MESSAGE_HANDLER_EX(WM_ERASEBKGND, OnEraseBkGnd)
+ MESSAGE_HANDLER_EX(WM_INPUT, OnInput)
+ MESSAGE_RANGE_HANDLER(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
+ MESSAGE_HANDLER_EX(WM_MOUSELEAVE, OnMouseLeave)
+ MESSAGE_HANDLER_EX(WM_MOUSEACTIVATE, OnMouseActivate)
+ MESSAGE_HANDLER_EX(WM_SETCURSOR, OnSetCursor)
+ MESSAGE_HANDLER_EX(WM_TOUCH, OnTouch)
+ MESSAGE_HANDLER_EX(WM_POINTERDOWN, OnPointer)
+ MESSAGE_HANDLER_EX(WM_POINTERUPDATE, OnPointer)
+ MESSAGE_HANDLER_EX(WM_POINTERUP, OnPointer)
+ MESSAGE_HANDLER_EX(WM_POINTERENTER, OnPointer)
+ MESSAGE_HANDLER_EX(WM_POINTERLEAVE, OnPointer)
+ MESSAGE_HANDLER_EX(WM_HSCROLL, OnScroll)
+ MESSAGE_HANDLER_EX(WM_VSCROLL, OnScroll)
+ MESSAGE_HANDLER_EX(WM_NCHITTEST, OnNCHitTest)
+ MESSAGE_RANGE_HANDLER(WM_NCMOUSEMOVE, WM_NCXBUTTONDBLCLK, OnMouseRange)
+ MESSAGE_HANDLER_EX(WM_NCCALCSIZE, OnNCCalcSize)
+ MESSAGE_HANDLER_EX(WM_SIZE, OnSize)
+ MESSAGE_HANDLER_EX(WM_DESTROY, OnDestroy)
+ MESSAGE_HANDLER_EX(DM_POINTERHITTEST, OnPointerHitTest)
+ END_MSG_MAP()
+
+ HWND hwnd() { return m_hWnd; }
// Called when the child window is to be reparented to a new window.
// The |parent| parameter contains the new parent window.
@@ -138,9 +151,15 @@
LRESULT OnEraseBkGnd(UINT message, WPARAM w_param, LPARAM l_param);
LRESULT OnGetObject(UINT message, WPARAM w_param, LPARAM l_param);
LRESULT OnInput(UINT message, WPARAM w_param, LPARAM l_param);
- LRESULT OnKeyboardRange(UINT message, WPARAM w_param, LPARAM l_param);
+ LRESULT OnKeyboardRange(UINT message,
+ WPARAM w_param,
+ LPARAM l_param,
+ BOOL& handled);
LRESULT OnMouseLeave(UINT message, WPARAM w_param, LPARAM l_param);
- LRESULT OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param);
+ LRESULT OnMouseRange(UINT message,
+ WPARAM w_param,
+ LPARAM l_param,
+ BOOL& handled);
LRESULT OnMouseActivate(UINT message, WPARAM w_param, LPARAM l_param);
LRESULT OnPointer(UINT message, WPARAM w_param, LPARAM l_param);
LRESULT OnTouch(UINT message, WPARAM w_param, LPARAM l_param);
@@ -188,8 +207,6 @@
// in Chrome on Windows 10.
std::unique_ptr direct_manipulation_helper_;
- CR_MSG_MAP_CLASS_DECLARATIONS(LegacyRenderWidgetHostHWND)
-
base::WeakPtrFactory weak_factory_{this};
};
diff -Nru chromium-121.0.6167.139/debian/changelog chromium-121.0.6167.160/debian/changelog
--- chromium-121.0.6167.139/debian/changelog 2024-01-31 16:49:10.000000000 +0000
+++ chromium-121.0.6167.160/debian/changelog 2024-02-07 03:41:53.000000000 +0000
@@ -1,3 +1,12 @@
+chromium (121.0.6167.160-1~deb12u1) bookworm-security; urgency=high
+
+ * New upstream security release.
+ - CVE-2024-1284: Use after free in Mojo. Reported by Anonymous.
+ - CVE-2024-1283: Heap buffer overflow in Skia.
+ Reported by Jorge Buzeti (@r3tr074).
+
+ -- Andres Salomon Tue, 06 Feb 2024 22:41:53 -0500
+
chromium (121.0.6167.139-1~deb12u1) bookworm-security; urgency=high
* New upstream security release.
diff -Nru chromium-121.0.6167.139/extensions/browser/api/runtime/runtime_api.cc chromium-121.0.6167.160/extensions/browser/api/runtime/runtime_api.cc
--- chromium-121.0.6167.139/extensions/browser/api/runtime/runtime_api.cc 2024-01-30 20:24:27.000000000 +0000
+++ chromium-121.0.6167.160/extensions/browser/api/runtime/runtime_api.cc 2024-02-06 23:11:35.000000000 +0000
@@ -839,7 +839,9 @@
std::vector active_workers =
process_manager->GetServiceWorkersForExtension(extension()->id());
- CHECK_LE(active_workers.size(), 1u);
+ // TODO(crbug.com/1493391): Upgrade this to a CHECK once multiple active
+ // workers has been resolved.
+ DCHECK_LE(active_workers.size(), 1u);
if (active_workers.empty()) {
return std::nullopt;
diff -Nru chromium-121.0.6167.139/gpu/config/gpu_lists_version.h chromium-121.0.6167.160/gpu/config/gpu_lists_version.h
--- chromium-121.0.6167.139/gpu/config/gpu_lists_version.h 2024-01-30 20:26:37.000000000 +0000
+++ chromium-121.0.6167.160/gpu/config/gpu_lists_version.h 2024-02-06 23:13:51.000000000 +0000
@@ -3,6 +3,6 @@
#ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_
#define GPU_CONFIG_GPU_LISTS_VERSION_H_
-#define GPU_LISTS_VERSION "a5856993c61543d4acbee5f848f1750607e87ba0"
+#define GPU_LISTS_VERSION "8e23a63b5dead78825bec5ef48f4aeb5698ce21a"
#endif // GPU_CONFIG_GPU_LISTS_VERSION_H_
diff -Nru chromium-121.0.6167.139/infra/config/generated/testing/mixins.pyl chromium-121.0.6167.160/infra/config/generated/testing/mixins.pyl
--- chromium-121.0.6167.139/infra/config/generated/testing/mixins.pyl 2024-01-30 20:24:27.000000000 +0000
+++ chromium-121.0.6167.160/infra/config/generated/testing/mixins.pyl 2024-02-06 23:11:35.000000000 +0000
@@ -347,7 +347,7 @@
'cpu': 'x86-64',
'kvm': '1',
'gce': '1',
- 'os': 'Ubuntu-18.04',
+ 'os': 'Ubuntu-22.04',
'pool': 'chrome.tests',
},
'optional_dimensions': {
diff -Nru chromium-121.0.6167.139/infra/config/generated/testing/test_suites.pyl chromium-121.0.6167.160/infra/config/generated/testing/test_suites.pyl
--- chromium-121.0.6167.139/infra/config/generated/testing/test_suites.pyl 2024-01-30 20:24:27.000000000 +0000
+++ chromium-121.0.6167.160/infra/config/generated/testing/test_suites.pyl 2024-02-06 23:11:35.000000000 +0000
@@ -4577,7 +4577,7 @@
],
'swarming': {
'dimensions': {
- 'os': 'Ubuntu-18.04',
+ 'os': 'Ubuntu-22.04',
'cpu': 'x86-64',
'device_os': None,
'device_os_flavor': None,
diff -Nru chromium-121.0.6167.139/infra/config/targets/basic_suites.star chromium-121.0.6167.160/infra/config/targets/basic_suites.star
--- chromium-121.0.6167.139/infra/config/targets/basic_suites.star 2024-01-30 20:24:27.000000000 +0000
+++ chromium-121.0.6167.160/infra/config/targets/basic_suites.star 2024-02-06 23:11:35.000000000 +0000
@@ -5407,7 +5407,7 @@
],
swarming = targets.swarming(
dimensions = {
- "os": "Ubuntu-18.04",
+ "os": "Ubuntu-22.04",
"cpu": "x86-64",
"device_os": None,
"device_os_flavor": None,
diff -Nru chromium-121.0.6167.139/infra/config/targets/mixins.star chromium-121.0.6167.160/infra/config/targets/mixins.star
--- chromium-121.0.6167.139/infra/config/targets/mixins.star 2024-01-30 20:24:27.000000000 +0000
+++ chromium-121.0.6167.160/infra/config/targets/mixins.star 2024-02-06 23:11:35.000000000 +0000
@@ -419,7 +419,7 @@
"cpu": "x86-64",
"kvm": "1",
"gce": "1",
- "os": "Ubuntu-18.04",
+ "os": "Ubuntu-22.04",
"pool": "chrome.tests",
},
optional_dimensions = {
diff -Nru chromium-121.0.6167.139/net/http/transport_security_state_static.pins chromium-121.0.6167.160/net/http/transport_security_state_static.pins
--- chromium-121.0.6167.139/net/http/transport_security_state_static.pins 2024-01-30 20:24:30.000000000 +0000
+++ chromium-121.0.6167.160/net/http/transport_security_state_static.pins 2024-02-06 23:11:39.000000000 +0000
@@ -43,9 +43,9 @@
# hash function for preloaded entries again (we have already done so once).
#
-# Last updated: 2024-01-29 12:55 UTC
+# Last updated: 2024-02-04 12:55 UTC
PinsListTimestamp
-1706532922
+1707051352
TestSPKI
sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff -Nru chromium-121.0.6167.139/net/http/transport_security_state_static_pins.json chromium-121.0.6167.160/net/http/transport_security_state_static_pins.json
--- chromium-121.0.6167.139/net/http/transport_security_state_static_pins.json 2024-01-30 20:24:30.000000000 +0000
+++ chromium-121.0.6167.160/net/http/transport_security_state_static_pins.json 2024-02-06 23:11:39.000000000 +0000
@@ -31,7 +31,7 @@
// the 'static_spki_hashes' and 'bad_static_spki_hashes' fields in 'pinsets'
// refer to, and the timestamp at which the pins list was last updated.
//
-// Last updated: 2024-01-29 12:55 UTC
+// Last updated: 2024-02-04 12:55 UTC
//
{
"pinsets": [
diff -Nru chromium-121.0.6167.139/remoting/resources/remoting_strings_vi.xtb chromium-121.0.6167.160/remoting/resources/remoting_strings_vi.xtb
--- chromium-121.0.6167.139/remoting/resources/remoting_strings_vi.xtb 2024-01-30 20:24:31.000000000 +0000
+++ chromium-121.0.6167.160/remoting/resources/remoting_strings_vi.xtb 2024-02-06 23:11:39.000000000 +0000
@@ -148,7 +148,7 @@
Mở phần Cài đặt ứng dụng mặc định
Nhớ mã PIN của tôi trên thiết bị này.
Trợ giúp
-Hủy
+Huỷ
Thêm tài khoản
Gắn vào bên trái
Làm mới danh sách máy chủ
diff -Nru chromium-121.0.6167.139/testing/buildbot/chrome.json chromium-121.0.6167.160/testing/buildbot/chrome.json
--- chromium-121.0.6167.139/testing/buildbot/chrome.json 2024-01-30 20:24:31.000000000 +0000
+++ chromium-121.0.6167.160/testing/buildbot/chrome.json 2024-02-06 23:11:40.000000000 +0000
@@ -1527,7 +1527,7 @@
"cpu": "x86-64",
"gce": "1",
"kvm": "1",
- "os": "Ubuntu-18.04",
+ "os": "Ubuntu-22.04",
"pool": "chrome.tests"
},
"idempotent": false,
@@ -1567,7 +1567,7 @@
"cpu": "x86-64",
"gce": "1",
"kvm": "1",
- "os": "Ubuntu-18.04",
+ "os": "Ubuntu-22.04",
"pool": "chrome.tests"
},
"idempotent": false,
@@ -1670,7 +1670,7 @@
"swarming": {
"dimensions": {
"cpu": "x86-64",
- "os": "Ubuntu-18.04",
+ "os": "Ubuntu-22.04",
"pool": "chrome.tests"
},
"service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2028,7 +2028,7 @@
"swarming": {
"dimensions": {
"cpu": "x86-64",
- "os": "Ubuntu-18.04",
+ "os": "Ubuntu-22.04",
"pool": "chrome.tests"
},
"service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -2096,7 +2096,7 @@
"swarming": {
"dimensions": {
"cpu": "x86-64",
- "os": "Ubuntu-18.04",
+ "os": "Ubuntu-22.04",
"pool": "chrome.tests"
},
"service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com"
diff -Nru chromium-121.0.6167.139/testing/buildbot/mixins.pyl chromium-121.0.6167.160/testing/buildbot/mixins.pyl
--- chromium-121.0.6167.139/testing/buildbot/mixins.pyl 2024-01-30 20:24:31.000000000 +0000
+++ chromium-121.0.6167.160/testing/buildbot/mixins.pyl 2024-02-06 23:11:40.000000000 +0000
@@ -347,7 +347,7 @@
'cpu': 'x86-64',
'kvm': '1',
'gce': '1',
- 'os': 'Ubuntu-18.04',
+ 'os': 'Ubuntu-22.04',
'pool': 'chrome.tests',
},
'optional_dimensions': {
diff -Nru chromium-121.0.6167.139/testing/buildbot/test_suite_exceptions.pyl chromium-121.0.6167.160/testing/buildbot/test_suite_exceptions.pyl
--- chromium-121.0.6167.139/testing/buildbot/test_suite_exceptions.pyl 2024-01-30 20:24:31.000000000 +0000
+++ chromium-121.0.6167.160/testing/buildbot/test_suite_exceptions.pyl 2024-02-06 23:11:40.000000000 +0000
@@ -1669,7 +1669,7 @@
'swarming': {
'dimensions': {
'cpu': 'x86-64',
- 'os': 'Ubuntu-18.04',
+ 'os': 'Ubuntu-22.04',
},
},
},
@@ -1677,7 +1677,7 @@
'swarming': {
'dimensions': {
'cpu': 'x86-64',
- 'os': 'Ubuntu-18.04',
+ 'os': 'Ubuntu-22.04',
},
},
},
@@ -1685,7 +1685,7 @@
'swarming': {
'dimensions': {
'cpu': 'x86-64',
- 'os': 'Ubuntu-18.04',
+ 'os': 'Ubuntu-22.04',
},
},
},
diff -Nru chromium-121.0.6167.139/testing/buildbot/test_suites.pyl chromium-121.0.6167.160/testing/buildbot/test_suites.pyl
--- chromium-121.0.6167.139/testing/buildbot/test_suites.pyl 2024-01-30 20:24:31.000000000 +0000
+++ chromium-121.0.6167.160/testing/buildbot/test_suites.pyl 2024-02-06 23:11:40.000000000 +0000
@@ -4577,7 +4577,7 @@
],
'swarming': {
'dimensions': {
- 'os': 'Ubuntu-18.04',
+ 'os': 'Ubuntu-22.04',
'cpu': 'x86-64',
'device_os': None,
'device_os_flavor': None,
diff -Nru chromium-121.0.6167.139/testing/variations/fieldtrial_testing_config.json chromium-121.0.6167.160/testing/variations/fieldtrial_testing_config.json
--- chromium-121.0.6167.139/testing/variations/fieldtrial_testing_config.json 2024-01-30 20:24:32.000000000 +0000
+++ chromium-121.0.6167.160/testing/variations/fieldtrial_testing_config.json 2024-02-06 23:11:40.000000000 +0000
@@ -9202,6 +9202,21 @@
]
}
],
+ "IOSTabGridAlwaysBounce": [
+ {
+ "platforms": [
+ "ios"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "TabGridAlwaysBounce"
+ ]
+ }
+ ]
+ }
+ ],
"IOSTabGridCompositionalLayout": [
{
"platforms": [
@@ -10173,6 +10188,24 @@
]
}
]
+ }
+ ],
+ "LegacyTechReportEnableCookieIssueReports": [
+ {
+ "platforms": [
+ "android",
+ "linux",
+ "mac",
+ "windows"
+ ],
+ "experiments": [
+ {
+ "name": "Enabled",
+ "enable_features": [
+ "LegacyTechReportEnableCookieIssueReports"
+ ]
+ }
+ ]
}
],
"LightweightUAFDetector": [
diff -Nru chromium-121.0.6167.139/third_party/blink/renderer/core/layout/svg/layout_svg_filter_primitive.h chromium-121.0.6167.160/third_party/blink/renderer/core/layout/svg/layout_svg_filter_primitive.h
--- chromium-121.0.6167.139/third_party/blink/renderer/core/layout/svg/layout_svg_filter_primitive.h 2024-01-30 20:24:33.000000000 +0000
+++ chromium-121.0.6167.160/third_party/blink/renderer/core/layout/svg/layout_svg_filter_primitive.h 2024-02-06 23:11:42.000000000 +0000
@@ -73,6 +73,10 @@
NOT_DESTROYED();
return gfx::RectF();
}
+ gfx::RectF DecoratedBoundingBox() const override {
+ NOT_DESTROYED();
+ return gfx::RectF();
+ }
};
} // namespace blink
diff -Nru chromium-121.0.6167.139/third_party/blink/renderer/modules/accessibility/ax_object.cc chromium-121.0.6167.160/third_party/blink/renderer/modules/accessibility/ax_object.cc
--- chromium-121.0.6167.139/third_party/blink/renderer/modules/accessibility/ax_object.cc 2024-01-30 20:24:34.000000000 +0000
+++ chromium-121.0.6167.160/third_party/blink/renderer/modules/accessibility/ax_object.cc 2024-02-06 23:11:42.000000000 +0000
@@ -5704,10 +5704,9 @@
return;
}
- CHECK(!AXObjectCache().IsFrozen())
- << "Object should have already had its children updated in "
- "AXObjectCacheImpl::UpdateTreeIfNeeded(): "
- << ToString(true, true);
+ if (AXObjectCache().IsFrozen()) {
+ return;
+ }
UpdateCachedAttributeValuesIfNeeded();
diff -Nru chromium-121.0.6167.139/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc chromium-121.0.6167.160/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc
--- chromium-121.0.6167.139/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc 2024-01-30 20:24:34.000000000 +0000
+++ chromium-121.0.6167.160/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc 2024-02-06 23:11:42.000000000 +0000
@@ -2153,13 +2153,17 @@
ExceptionState& exception_state,
const AuctionAdConfig& input,
mojom::blink::AuctionAdConfig& output) {
- // We don't validate that the UUID parsed successfully here. If it failed,
- // the returned Uuid is an empty string. When we look try to claim it from
- // the AuctionNonceManager, we won't find an empty string, and will fail
- // the auction or component auction then.
if (input.hasAuctionNonce()) {
output.auction_ad_config_non_shared_params->auction_nonce =
base::Uuid::ParseLowercase(input.auctionNonce().Ascii());
+ if (!output.auction_ad_config_non_shared_params->auction_nonce
+ ->is_valid()) {
+ exception_state.ThrowTypeError(String::Format(
+ "auctionNonce for AuctionAdConfig with seller '%s' must "
+ "be a valid UUIDv4, but got, '%s'.",
+ input.seller().Utf8().c_str(), input.auctionNonce().Ascii().c_str()));
+ return false;
+ }
}
return true;
}
diff -Nru chromium-121.0.6167.139/third_party/blink/renderer/platform/blink_platform_unittests_bundle_data.filelist chromium-121.0.6167.160/third_party/blink/renderer/platform/blink_platform_unittests_bundle_data.filelist
--- chromium-121.0.6167.139/third_party/blink/renderer/platform/blink_platform_unittests_bundle_data.filelist 2024-01-30 20:24:34.000000000 +0000
+++ chromium-121.0.6167.160/third_party/blink/renderer/platform/blink_platform_unittests_bundle_data.filelist 2024-02-06 23:11:43.000000000 +0000
@@ -423,6 +423,7 @@
../../web_tests/images/resources/truncated.webp
../../web_tests/images/resources/truncated2.webp
../../web_tests/images/resources/twitter_favicon.ico
+../../web_tests/images/resources/unnecessary-eof.bmp
../../web_tests/images/resources/webp-animated-icc-xmp.webp
../../web_tests/images/resources/webp-animated-large.webp
../../web_tests/images/resources/webp-animated-no-blend.webp
diff -Nru chromium-121.0.6167.139/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_decoder_test.cc chromium-121.0.6167.160/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_decoder_test.cc
--- chromium-121.0.6167.139/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_decoder_test.cc 2024-01-30 20:24:34.000000000 +0000
+++ chromium-121.0.6167.160/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_decoder_test.cc 2024-02-06 23:11:43.000000000 +0000
@@ -98,6 +98,19 @@
decoder->DecodeFrameBufferAtIndex(0);
}
+// Verify that decoding an image with an unnecessary EOF marker does not crash.
+TEST(BMPImageDecoderTest, allowEOFWhenPastEndOfImage) {
+ static constexpr char kBmpFile[] = "/images/resources/unnecessary-eof.bmp";
+ scoped_refptr data = ReadFile(kBmpFile);
+ ASSERT_TRUE(data.get());
+
+ std::unique_ptr decoder = CreateBMPDecoder();
+ decoder->SetData(data.get(), true);
+ ImageFrame* frame = decoder->DecodeFrameBufferAtIndex(0);
+ EXPECT_EQ(ImageFrame::kFrameComplete, frame->GetStatus());
+ EXPECT_FALSE(decoder->Failed());
+}
+
class BMPImageDecoderCorpusTest : public ImageDecoderBaseTest {
public:
BMPImageDecoderCorpusTest() : ImageDecoderBaseTest("bmp") {}
diff -Nru chromium-121.0.6167.139/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.cc chromium-121.0.6167.160/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.cc
--- chromium-121.0.6167.139/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.cc 2024-01-30 20:24:34.000000000 +0000
+++ chromium-121.0.6167.160/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.cc 2024-02-06 23:11:43.000000000 +0000
@@ -860,7 +860,8 @@
// the image.
const uint8_t count = ReadUint8(0);
const uint8_t code = ReadUint8(1);
- if ((count || (code != 1)) && PastEndOfImage(0)) {
+ const bool is_past_end_of_image = PastEndOfImage(0);
+ if ((count || (code != 1)) && is_past_end_of_image) {
return kFailure;
}
@@ -885,7 +886,9 @@
: (coord_.y() > 0))) {
buffer_->SetHasAlpha(true);
}
- ColorCorrectCurrentRow();
+ if (!is_past_end_of_image) {
+ ColorCorrectCurrentRow();
+ }
// There's no need to move |coord_| here to trigger the caller
// to call SetPixelsChanged(). If the only thing that's changed
// is the alpha state, that will be properly written into the
@@ -1110,6 +1113,13 @@
if (!transform) {
return;
}
+ int decoder_width = parent_->Size().width();
+ // Enforce 0 ≤ current row < bitmap height.
+ CHECK_GE(coord_.y(), 0);
+ CHECK_LT(coord_.y(), buffer_->Bitmap().height());
+ // Enforce decoder width == bitmap width exactly. (The bitmap rowbytes might
+ // add a bit of padding, but we are only converting one row at a time.)
+ CHECK_EQ(decoder_width, buffer_->Bitmap().width());
ImageFrame::PixelData* const row = buffer_->GetAddr(0, coord_.y());
const skcms_PixelFormat fmt = XformColorFormat();
const skcms_AlphaFormat alpha =
@@ -1118,7 +1128,7 @@
: skcms_AlphaFormat_Unpremul;
const bool success =
skcms_Transform(row, fmt, alpha, transform->SrcProfile(), row, fmt, alpha,
- transform->DstProfile(), parent_->Size().width());
+ transform->DstProfile(), decoder_width);
DCHECK(success);
buffer_->SetPixelsChanged(true);
}
diff -Nru chromium-121.0.6167.139/third_party/devtools-frontend/src/front_end/entrypoints/main/MainImpl.ts chromium-121.0.6167.160/third_party/devtools-frontend/src/front_end/entrypoints/main/MainImpl.ts
--- chromium-121.0.6167.139/third_party/devtools-frontend/src/front_end/entrypoints/main/MainImpl.ts 2024-01-30 20:25:35.000000000 +0000
+++ chromium-121.0.6167.160/third_party/devtools-frontend/src/front_end/entrypoints/main/MainImpl.ts 2024-02-06 23:12:48.000000000 +0000
@@ -442,7 +442,6 @@
Root.Runtime.ExperimentName.PRELOADING_STATUS_PANEL,
'evaluateExpressionsWithSourceMaps',
...(Root.Runtime.Runtime.queryParam('isChromeForTesting') ? ['protocolMonitor'] : []),
- Root.Runtime.ExperimentName.NETWORK_PANEL_FILTER_BAR_REDESIGN,
]);
Root.Runtime.experiments.setNonConfigurableExperiments([
diff -Nru chromium-121.0.6167.139/third_party/devtools-frontend/src/front_end/panels/console/ConsoleViewMessage.ts chromium-121.0.6167.160/third_party/devtools-frontend/src/front_end/panels/console/ConsoleViewMessage.ts
--- chromium-121.0.6167.139/third_party/devtools-frontend/src/front_end/panels/console/ConsoleViewMessage.ts 2024-01-30 20:25:36.000000000 +0000
+++ chromium-121.0.6167.160/third_party/devtools-frontend/src/front_end/panels/console/ConsoleViewMessage.ts 2024-02-06 23:12:48.000000000 +0000
@@ -1273,7 +1273,7 @@
this.nestingLevelMarkers = [];
for (let i = 0; i < this.nestingLevel(); ++i) {
- this.nestingLevelMarkers.push(this.elementInternal.createChild('div', 'nesting-level-marker'));
+ this.nestingLevelMarkers.push(this.consoleRowWrapper.createChild('div', 'nesting-level-marker'));
}
this.updateCloseGroupDecorations();
elementToMessage.set(this.elementInternal, this);
diff -Nru chromium-121.0.6167.139/third_party/ipcz/src/ipcz/driver_memory.cc chromium-121.0.6167.160/third_party/ipcz/src/ipcz/driver_memory.cc
--- chromium-121.0.6167.139/third_party/ipcz/src/ipcz/driver_memory.cc 2024-01-30 20:24:51.000000000 +0000
+++ chromium-121.0.6167.160/third_party/ipcz/src/ipcz/driver_memory.cc 2024-02-06 23:12:00.000000000 +0000
@@ -30,10 +30,11 @@
: size_(num_bytes) {
ABSL_ASSERT(num_bytes > 0);
IpczDriverHandle handle;
- IpczResult result =
+ const IpczResult result =
driver.AllocateSharedMemory(num_bytes, IPCZ_NO_FLAGS, nullptr, &handle);
- ABSL_ASSERT(result == IPCZ_RESULT_OK);
- memory_ = DriverObject(driver, handle);
+ if (result == IPCZ_RESULT_OK) {
+ memory_ = DriverObject(driver, handle);
+ }
}
DriverMemory::DriverMemory(DriverMemory&& other) = default;
@@ -43,12 +44,14 @@
DriverMemory::~DriverMemory() = default;
DriverMemory DriverMemory::Clone() {
- ABSL_ASSERT(is_valid());
+ ABSL_HARDENING_ASSERT(is_valid());
IpczDriverHandle handle;
- IpczResult result = memory_.driver()->DuplicateSharedMemory(
+ const IpczResult result = memory_.driver()->DuplicateSharedMemory(
memory_.handle(), 0, nullptr, &handle);
- ABSL_ASSERT(result == IPCZ_RESULT_OK);
+ if (result != IPCZ_RESULT_OK) {
+ return DriverMemory();
+ }
return DriverMemory(DriverObject(*memory_.driver(), handle));
}
diff -Nru chromium-121.0.6167.139/third_party/ipcz/src/ipcz/driver_transport.cc chromium-121.0.6167.160/third_party/ipcz/src/ipcz/driver_transport.cc
--- chromium-121.0.6167.139/third_party/ipcz/src/ipcz/driver_transport.cc 2024-01-30 20:24:51.000000000 +0000
+++ chromium-121.0.6167.160/third_party/ipcz/src/ipcz/driver_transport.cc 2024-02-06 23:12:00.000000000 +0000
@@ -68,14 +68,14 @@
IpczDriverHandle target_transport0 = IPCZ_INVALID_DRIVER_HANDLE;
IpczDriverHandle target_transport1 = IPCZ_INVALID_DRIVER_HANDLE;
if (transport0) {
- ABSL_ASSERT(transport1);
+ ABSL_HARDENING_ASSERT(transport1);
target_transport0 = transport0->driver_object().handle();
target_transport1 = transport1->driver_object().handle();
}
IpczResult result = driver.CreateTransports(
target_transport0, target_transport1, IPCZ_NO_FLAGS, nullptr,
&new_transport0, &new_transport1);
- ABSL_ASSERT(result == IPCZ_RESULT_OK);
+ ABSL_HARDENING_ASSERT(result == IPCZ_RESULT_OK);
auto first =
MakeRefCounted(DriverObject(driver, new_transport0));
auto second =
diff -Nru chromium-121.0.6167.139/third_party/ipcz/src/ipcz/node.cc chromium-121.0.6167.160/third_party/ipcz/src/ipcz/node.cc
--- chromium-121.0.6167.139/third_party/ipcz/src/ipcz/node.cc 2024-01-30 20:24:51.000000000 +0000
+++ chromium-121.0.6167.160/third_party/ipcz/src/ipcz/node.cc 2024-02-06 23:12:00.000000000 +0000
@@ -168,9 +168,10 @@
// handling an incoming NodeConnector message, we can err on the side of
// caution (i.e. less re-entrancy in event handlers) by treating every
// case like an API call.
+ const Ref link = it->second.link;
mutex_.Unlock();
const OperationContext context{OperationContext::kAPICall};
- DropConnection(context, *it->second.link);
+ DropConnection(context, *link);
mutex_.Lock();
}
diff -Nru chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_id.xtb chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_id.xtb
--- chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_id.xtb 2024-01-30 20:24:51.000000000 +0000
+++ chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_id.xtb 2024-02-06 23:12:00.000000000 +0000
@@ -17,7 +17,7 @@
Provinsi
Nama
Oblast
-Suburb
+Suburb/Daerah
Negara/Wilayah
Organisasi
Kode PIN
diff -Nru chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_it.xtb chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_it.xtb
--- chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_it.xtb 2024-01-30 20:24:51.000000000 +0000
+++ chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_it.xtb 2024-02-06 23:12:00.000000000 +0000
@@ -32,7 +32,7 @@
District
Contea
Emirato
-Indirizzo civico
+Via
Questo codice ZIP non sembra corrispondere al resto dell'indirizzo.
Questo ZIP non sembra corrispondere al resto di questo indirizzo. Non conosci il tuo ZIP? Trovalo qui.
Prefettura
diff -Nru chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_th.xtb chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_th.xtb
--- chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_th.xtb 2024-01-30 20:24:51.000000000 +0000
+++ chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_th.xtb 2024-02-06 23:12:00.000000000 +0000
@@ -32,7 +32,7 @@
อำเภอ
ประเทศ
เอมิเรต
-ที่อยู่ถนน
+ที่อยู่
ดูเหมือนว่ารหัสไปรษณีย์นี้จะไม่ตรงกับส่วนที่เหลือของที่อยู่นี้
ดูเหมือนว่ารหัสไปรษณีย์นี้จะไม่ตรงกับข้อมูลที่อยู่ส่วนที่เหลือ หากไม่ทราบรหัสไปรษณีย์ ให้ค้นหาที่นี่
เขตปกครอง
diff -Nru chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_vi.xtb chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_vi.xtb
--- chromium-121.0.6167.139/third_party/libaddressinput/chromium/resources/address_input_strings_vi.xtb 2024-01-30 20:24:51.000000000 +0000
+++ chromium-121.0.6167.160/third_party/libaddressinput/chromium/resources/address_input_strings_vi.xtb 2024-02-06 23:12:00.000000000 +0000
@@ -17,7 +17,7 @@
Tỉnh
Tên
Oblast
-Ngoại ô
+Khu vực
Quốc gia/vùng
Tổ chức
Mã PIN
diff -Nru chromium-121.0.6167.139/tools/metrics/histograms/enums.xml chromium-121.0.6167.160/tools/metrics/histograms/enums.xml
--- chromium-121.0.6167.139/tools/metrics/histograms/enums.xml 2024-01-30 20:24:55.000000000 +0000
+++ chromium-121.0.6167.160/tools/metrics/histograms/enums.xml 2024-02-06 23:12:04.000000000 +0000
@@ -42104,6 +42104,7 @@
+
@@ -42172,6 +42173,7 @@
+
diff -Nru chromium-121.0.6167.139/tools/metrics/histograms/metadata/custom_tabs/histograms.xml chromium-121.0.6167.160/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
--- chromium-121.0.6167.139/tools/metrics/histograms/metadata/custom_tabs/histograms.xml 2024-01-30 20:24:55.000000000 +0000
+++ chromium-121.0.6167.160/tools/metrics/histograms/metadata/custom_tabs/histograms.xml 2024-02-06 23:12:04.000000000 +0000
@@ -384,6 +384,26 @@
+
+ sinansahin@google.com
+ chrome-connective-tissue@google.com
+
+ Records the number of times {Exception} was thrown by
+ `Activity#enterPictureInPictureMode` when the said method succeeds. The
+ count includes exceptions seen since the last successful minimize event or
+ since the `CustomTabMinimizationManager` was created. This is recorded at
+ most once per CCT. Android only.
+
+
+
+
+
+
+
+
+
jinsukkim@chromium.org
diff -Nru chromium-121.0.6167.139/tools/metrics/histograms/metadata/new_tab_page/histograms.xml chromium-121.0.6167.160/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
--- chromium-121.0.6167.139/tools/metrics/histograms/metadata/new_tab_page/histograms.xml 2024-01-30 20:24:55.000000000 +0000
+++ chromium-121.0.6167.160/tools/metrics/histograms/metadata/new_tab_page/histograms.xml 2024-02-06 23:12:04.000000000 +0000
@@ -1881,6 +1881,21 @@
+
+ tiborg@chromium.org
+ rtatum@google.com
+ chrome-desktop-ntp@google.com
+
+ Histogram of the time, in milliseconds, it took to set an inspiration
+ Wallpaper Search theme as the current theme. This tracks how long the image
+ processing takes from the time image processing starts for setting an
+ inspiration Wallpaper Search theme to when the profile preference is set to
+ change the background image.
+
+
+
tiborg@chromium.org
diff -Nru chromium-121.0.6167.139/tools/metrics/histograms/metadata/power/histograms.xml chromium-121.0.6167.160/tools/metrics/histograms/metadata/power/histograms.xml
--- chromium-121.0.6167.139/tools/metrics/histograms/metadata/power/histograms.xml 2024-01-30 20:24:55.000000000 +0000
+++ chromium-121.0.6167.160/tools/metrics/histograms/metadata/power/histograms.xml 2024-02-06 23:12:04.000000000 +0000
@@ -306,176 +306,6 @@
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- Details about whether or not it's possible to get coalition resource usage
- data on the system. Only on macOS, recorded once at startup.
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- The IO reads reported by the resource coalition mechanism on macOS. The data
- is reported as the rate per second during this interval with a byte
- granularity. This is recorded every 2 minutes for {UsageScenario} (see
- go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- The IO writes reported by the resource coalition mechanism on macOS. The
- data is reported as the rate per second during this interval with a byte
- granularity. This is recorded every 2 minutes for {UsageScenario} (see
- go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- Average CPU utilization reported by the resource coalition mechanism on
- macOS. The utilization is in the 0-100% range per CPU, which is then summed
- up and multiplied by 100. The histogram is capped at 20000 (equivalent to 2
- cores fully loaded). I.e. 4 cores busy at 25% each will read as 25 * 4 * 100
- = 10000. This is recorded for {UsageScenario10sec} (see
- go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- Average CPU utilization reported by the resource coalition mechanism on
- macOS. The utilization is in the 0-100% range per CPU, which is then summed
- up and multiplied by 100. The histogram is capped at 20000 (equivalent to 2
- cores fully loaded). I.e. 4 cores busy at 25% each will read as 25 * 4 * 100
- = 10000. This is recorded every 2 minutes for {UsageScenario} (see
- go/chrome_power_use_per_scenario).
-
-
-
-
-
- siggi@chromium.org
- catan-team@chromium.org
-
- (Mac only) A synthetic power use estimate, as displayed in macOS Activity
- Monitor and the battery menu. This incorporates CPU utilization, idle
- wakeups, IO, and task QoS level using per-machine-model weights. Divide by
- 100 to match Activity Monitor's scale. Only available on macs with an Intel
- CPU.
-
- This EnergyImpact score is computed from the usage reported by the resource
- coalition mechanism on macOS. It accounts for the resource usage of all
- Chrome processes no matter how short-lived, as well as XPC services running
- on Chrome's behalf.
-
- This is recorded every 2 minutes for {UsageScenario} (see
- go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- Average GPU utilization reported by the resource coalition mechanism on
- macOS. The utilization is in the 0-100% range and is multiplied by 100. The
- histogram is capped at 10000 (equivalent to the GPU being used 100% of the
- time). This is recorded every 2 minutes for {UsageScenario} (see
- go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- The interrupt wakeup rate reported by the resource coalition mechanism on
- macOS. The data is reported as the rate per second during this interval with
- a milliwakeup granularity. This is recorded every 2 minutes for
- {UsageScenario} (see go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- The platform idle wakeup rate reported by the resource coalition mechanism
- on macOS. The data is reported as the rate per second during this interval
- with a milliwakeup granularity. This is recorded every 2 minutes for
- {UsageScenario} (see go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- The power usage reported by the resource coalition mechanism on macOS. Only
- reported on devices with an ARM CPU. This is recorded every 2 minutes for
- {UsageScenario} (see go/chrome_power_use_per_scenario).
-
-
-
-
-
- fdoray@chromium.org
- catan-team@chromium.org
-
- Average CPU time spent in a given QoS level, as reported by the resource
- coalition mechanism on macOS. The utilization is in the 0-100% range and is
- multiplied by 100. The histogram is capped at 10000 (equivalent to the GPU
- being used 100% of the time). This is recorded every 2 minutes for
- {UsageScenario} (see go/chrome_power_use_per_scenario).
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -491,21 +321,6 @@
-
- olivierli@chromium.org
- catan-team@chromium.org
-
- Record the usage scenario that applies to the last 10 seconds of Chrome use.
- Recorded every two minutes on a timer. For more information on user
- scenarios see go/chrome_power_use_per_scenario.
-
- Values in the enum match the variants present in the
- "UsageScenario10Sec" variants.
-
-
-
diff -Nru chromium-121.0.6167.139/tools/traffic_annotation/summary/annotations.xml chromium-121.0.6167.160/tools/traffic_annotation/summary/annotations.xml
--- chromium-121.0.6167.139/tools/traffic_annotation/summary/annotations.xml 2024-01-30 20:24:56.000000000 +0000
+++ chromium-121.0.6167.160/tools/traffic_annotation/summary/annotations.xml 2024-02-06 23:12:05.000000000 +0000
@@ -345,7 +345,7 @@
-
+
@@ -434,7 +434,9 @@
-
+
+
+
@@ -447,9 +449,13 @@
-
+
+
+
+
+
diff -Nru chromium-121.0.6167.139/tools/traffic_annotation/summary/grouping.xml chromium-121.0.6167.160/tools/traffic_annotation/summary/grouping.xml
--- chromium-121.0.6167.139/tools/traffic_annotation/summary/grouping.xml 2024-01-30 20:24:56.000000000 +0000
+++ chromium-121.0.6167.160/tools/traffic_annotation/summary/grouping.xml 2024-02-06 23:12:05.000000000 +0000
@@ -291,7 +291,6 @@
-
@@ -307,6 +306,14 @@
+
+
+
+
+
+
+
+
diff -Nru chromium-121.0.6167.139/ui/accessibility/extensions/strings/accessibility_extensions_strings_vi.xtb chromium-121.0.6167.160/ui/accessibility/extensions/strings/accessibility_extensions_strings_vi.xtb
--- chromium-121.0.6167.139/ui/accessibility/extensions/strings/accessibility_extensions_strings_vi.xtb 2024-01-30 20:24:56.000000000 +0000
+++ chromium-121.0.6167.160/ui/accessibility/extensions/strings/accessibility_extensions_strings_vi.xtb 2024-02-06 23:12:05.000000000 +0000
@@ -60,7 +60,7 @@
Độ tương phản cao đang được bật
Bước 2: Điều chỉnh thanh trượt cho đến khi tất cả ngôi sao hiển thị trong
hàng đã chọn
-Hủy
+Huỷ
Thêm đường viền vào phần tử có thuộc tính aria-describedat hoặc longdesc.
Đỏ
Tùy chọn Duyệt với con nháy
diff -Nru chromium-121.0.6167.139/ui/gfx/win/window_impl.cc chromium-121.0.6167.160/ui/gfx/win/window_impl.cc
--- chromium-121.0.6167.139/ui/gfx/win/window_impl.cc 2024-01-30 20:24:57.000000000 +0000
+++ chromium-121.0.6167.160/ui/gfx/win/window_impl.cc 2024-02-06 23:12:06.000000000 +0000
@@ -36,23 +36,18 @@
// WindowImpl class information used for registering unique windows.
struct ClassInfo {
- ClassInfo(int style, HICON icon, HICON small_icon, const wchar_t* class_name)
- : style(style),
- icon(icon),
- small_icon(small_icon),
- class_name(class_name) {}
+ ClassInfo(int style, HICON icon, HICON small_icon)
+ : style(style), icon(icon), small_icon(small_icon) {}
// Compares two ClassInfos. Returns true if all members match.
bool Equals(const ClassInfo& other) const {
return (other.style == style && other.icon == icon &&
- other.small_icon == small_icon &&
- lstrcmp(other.class_name, class_name) == 0);
+ other.small_icon == small_icon);
}
UINT style;
HICON icon;
HICON small_icon;
- const wchar_t* class_name;
};
// WARNING: this class may be used on multiple threads.
@@ -133,10 +128,8 @@
}
// No class found, need to register one.
- std::wstring name = class_info.class_name
- ? class_info.class_name
- : std::wstring(WindowImpl::kBaseClassName) +
- base::NumberToWString(registered_count_++);
+ std::wstring name = std::wstring(WindowImpl::kBaseClassName) +
+ base::NumberToWString(registered_count_++);
WNDCLASSEX window_class;
base::win::InitializeWindowClass(
@@ -212,8 +205,8 @@
ATOM atom = GetWindowClassAtom();
auto weak_this = weak_factory_.GetWeakPtr();
HWND hwnd = CreateWindowEx(window_ex_style_, reinterpret_cast(atom),
- window_name_, window_style_, x, y, width, height,
- parent, NULL, NULL, this);
+ NULL, window_style_, x, y, width, height, parent,
+ NULL, NULL, this);
const DWORD create_window_error = ::GetLastError();
// First nccalcszie (during CreateWindow) for captioned windows is
@@ -273,10 +266,6 @@
if (!ProcessWindowMessage(hwnd, message, w_param, l_param, result))
result = DefWindowProc(hwnd, message, w_param, l_param);
- if (message == WM_NCDESTROY) {
- OnFinalMessage(hwnd);
- }
-
return result;
}
@@ -315,7 +304,7 @@
ATOM WindowImpl::GetWindowClassAtom() {
HICON icon = GetDefaultWindowIcon();
HICON small_icon = GetSmallWindowIcon();
- ClassInfo class_info(initial_class_style(), icon, small_icon, class_name_);
+ ClassInfo class_info(initial_class_style(), icon, small_icon);
return ClassRegistrar::GetInstance()->RetrieveClassAtom(class_info);
}
diff -Nru chromium-121.0.6167.139/ui/gfx/win/window_impl.h chromium-121.0.6167.160/ui/gfx/win/window_impl.h
--- chromium-121.0.6167.139/ui/gfx/win/window_impl.h 2024-01-30 20:24:57.000000000 +0000
+++ chromium-121.0.6167.160/ui/gfx/win/window_impl.h 2024-02-06 23:12:06.000000000 +0000
@@ -72,10 +72,6 @@
void set_window_ex_style(DWORD style) { window_ex_style_ = style; }
DWORD window_ex_style() const { return window_ex_style_; }
- void set_window_name(const wchar_t* name) { window_name_ = name; }
-
- void set_window_class_name(const wchar_t* name) { class_name_ = name; }
-
// Sets the class style to use. The default is CS_DBLCLKS.
void set_initial_class_style(UINT class_style) {
// We dynamically generate the class name, so don't register it globally!
@@ -90,9 +86,6 @@
// Handles the WndProc callback for this object.
virtual LRESULT OnWndProc(UINT message, WPARAM w_param, LPARAM l_param);
- // Called after receiving the last message (typically WM_NCDESTROY).
- virtual void OnFinalMessage(HWND window) {}
-
// Subclasses must call this method from their destructors to ensure that
// this object is properly disassociated from the HWND during destruction,
// otherwise it's possible this object may still exist while a subclass is
@@ -123,12 +116,6 @@
// Window Extended Styles used when creating the window.
DWORD window_ex_style_ = 0;
- // Name of the windows class to use. Otherwise one will be generated.
- const wchar_t* class_name_ = nullptr;
-
- // Name of the widow to use. Otherwise it will be null.
- const wchar_t* window_name_ = nullptr;
-
// Style of the class to use.
UINT class_style_;
diff -Nru chromium-121.0.6167.139/ui/strings/translations/ui_strings_pt-BR.xtb chromium-121.0.6167.160/ui/strings/translations/ui_strings_pt-BR.xtb
--- chromium-121.0.6167.139/ui/strings/translations/ui_strings_pt-BR.xtb 2024-01-30 20:24:57.000000000 +0000
+++ chromium-121.0.6167.160/ui/strings/translations/ui_strings_pt-BR.xtb 2024-02-06 23:12:06.000000000 +0000
@@ -212,7 +212,7 @@
Arquivo (.)
KB/s
mais
-Concluído
+Concluir
{HOURS,plural, =1{1 h}one{# h}other{# h}}
Padrão
Botão "Voltar"
diff -Nru chromium-121.0.6167.139/ui/strings/translations/ui_strings_vi.xtb chromium-121.0.6167.160/ui/strings/translations/ui_strings_vi.xtb
--- chromium-121.0.6167.139/ui/strings/translations/ui_strings_vi.xtb 2024-01-30 20:24:57.000000000 +0000
+++ chromium-121.0.6167.160/ui/strings/translations/ui_strings_vi.xtb 2024-02-06 23:12:06.000000000 +0000
@@ -183,7 +183,7 @@
TB
Biểu tượng cảm xúc
Đã xóa.
-Hủy
+Huỷ
Hôm qua
Sao &chép
Không chặn