Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from chromium:master #57

Merged
merged 29 commits into from
Oct 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e673a70
Fix an instance of WEB_CONTENTS_USER_DATA_KEY_IMPL missing a semicolon.
zetafunction Oct 2, 2021
fe40ce2
Roll clang llvmorg-14-init-4918-ge787678c-1 : llvmorg-14-init-5410-gd…
nico Oct 2, 2021
1c50fed
Roll Fuchsia AEMU from qQ-T1ygXl... to tAwVUV6hX...
Oct 2, 2021
d1395f9
Import wpt@904652fbaa979e6ac1e3c28b6ca0402b0179f62e
Oct 2, 2021
00bf66f
[WebTransport] Update "certificate hash" option
yutakahirano Oct 2, 2021
8d45ae6
MPArch: Ensure that Prerendering should not update the state of AppBa…
Gyuyoung Oct 2, 2021
1151a28
Roll ANGLE from 12e5a7db66ac to 0d9568093dda (6 revisions)
Oct 2, 2021
c7adbd3
[Frameworks roll] Roll to 400368667 piper revision
Oct 2, 2021
4ced86e
[ntp][modules][photos] Add support to provide fake data
jeremys Oct 2, 2021
56fcb82
[unseasoned-pdf] Queue postMessage() before 'connect'
kmoon-work Oct 2, 2021
bfd1f44
Automatic update for log_list.json
Oct 2, 2021
33a2522
[GMNext] Fix crash in TailSuggestionViewBinder
fsinan Oct 2, 2021
b9404de
Diagnostics: Displays spinner when network is connecting
Oct 2, 2021
59b60c5
webhid: Reset mojo receiver when device is closed
nondebug Oct 2, 2021
aa6070a
Roll Fuchsia SDK from 6.20211001.1.1 to 6.20211001.2.1
Oct 2, 2021
a3ddec7
Roll src/third_party/libavif/src/ f131b7859..0dd3a3a5d (1 commit)
wantehchang Oct 2, 2021
103c775
Roll Skia from 906e9eb53841 to ce22e059ffeb (1 revision)
Oct 2, 2021
2a22ff3
[AutoDark] Mirror site settings with theme settings
fwy423 Oct 2, 2021
df95f79
Device: Remove global ReportBadMessage(),GetMessageCallback()
Oct 2, 2021
e870a76
[ntp][modules][photos] Handle layout for small viewport width
jeremys Oct 2, 2021
a99499a
[lacros skew tests] Refresh skew tests for M96
Oct 2, 2021
3d0fadd
[Frameworks roll] Roll to 400436970 piper revision
Oct 2, 2021
de55370
Remove double precision deadcode on PaintLayerScrollableArea
progers Oct 2, 2021
f89008a
Ensure holding space item view a11y name changes are announced.
Oct 2, 2021
4964823
CodeHealth: Remove uses of Value::CreateDeepCopy()
KimTaeyeon-08 Oct 2, 2021
b57193e
[CrOS Bluetooth] Move bluetooth battery info to cr_components/
Oct 2, 2021
a0ca030
Roll Fuchsia AEMU from tAwVUV6hX... to jkxKGAGO-...
Oct 2, 2021
b3b90e3
app_list: Don't announce page when reordering apps for non-paged grids
Oct 2, 2021
326a023
Roll ANGLE from 0d9568093dda to d3764f080f6c (2 revisions)
Oct 3, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Aaron Randolph <[email protected]>
Aaryaman Vasishta <[email protected]>
Abdu Ameen <[email protected]>
Abhijeet Kandalkar <[email protected]>
Abhinav Vij <[email protected]>
Abhishek Agarwal <[email protected]>
Abhishek Kanike <[email protected]>
Abhishek Singh <[email protected]>
Expand Down Expand Up @@ -1096,6 +1097,7 @@ Taeheon Kim <[email protected]>
Taeho Nam <[email protected]>
Taehoon Lee <[email protected]>
Taeseong Yu <[email protected]>
Taeyeon Kim <[email protected]>
Tae Shin <[email protected]>
Takashi Fujita <[email protected]>
Takeshi Kurosawa <[email protected]>
Expand Down
8 changes: 4 additions & 4 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -235,15 +235,15 @@ vars = {
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling Skia
# and whatever else without interference from each other.
'skia_revision': '906e9eb538417a70f6b0e71a26e58d96b7bdb09e',
'skia_revision': 'ce22e059ffeb82abdff47e0cebdb38544fa53813',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling V8
# and whatever else without interference from each other.
'v8_revision': '8d3b3d88fc6e201a1d56245a871aa55c118d26d0',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling ANGLE
# and whatever else without interference from each other.
'angle_revision': '12e5a7db66ac074d0c76f6e4a44a69a8ad4ccf3c',
'angle_revision': 'd3764f080f6cdf010df34c5c205b4df83cb8c92f',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling SwiftShader
# and whatever else without interference from each other.
Expand Down Expand Up @@ -374,7 +374,7 @@ vars = {
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling libavif
# and whatever else without interference from each other.
'libavif_revision': 'f131b785938e96995e4ef8d8baaefca8f974afb9',
'libavif_revision': '0dd3a3a5d216ff6fcc4f699d32367300b9457928',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling nearby
# and whatever else without interference from each other.
Expand Down Expand Up @@ -1505,7 +1505,7 @@ deps = {
'packages': [
{
'package': 'fuchsia/third_party/aemu/linux-amd64',
'version': 'qQ-T1ygXldsYnGaOzMd-YYJg4yphOVAusLqHm6gmawIC'
'version': 'jkxKGAGO-OJZooKu5kKKrf2YUV66pAJaSUx1yxbkn-sC'
},
],
'condition': 'host_os == "linux" and checkout_fuchsia',
Expand Down
1 change: 1 addition & 0 deletions ash/app_list/paged_view_structure.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ class ASH_EXPORT PagedViewStructure {
return pages_[page_index].size();
}

Mode mode() const { return mode_; }
const Pages& pages() const { return pages_; }

private:
Expand Down
8 changes: 8 additions & 0 deletions ash/app_list/views/app_list_a11y_announcer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,14 @@ void AppListA11yAnnouncer::AnnounceAppsGridReorder(int target_page,
base::NumberToString16(target_column)));
}

void AppListA11yAnnouncer::AnnounceAppsGridReorder(int target_row,
int target_column) {
Announce(l10n_util::GetStringFUTF16(
IDS_APP_LIST_APP_DRAG_ROW_COLUMN_ACCESSIBILE_NAME,
base::NumberToString16(target_row),
base::NumberToString16(target_column)));
}

void AppListA11yAnnouncer::AnnounceFolderOpened() {
Announce(l10n_util::GetStringUTF16(
IDS_APP_LIST_FOLDER_OPEN_FOLDER_ACCESSIBILE_NAME));
Expand Down
3 changes: 3 additions & 0 deletions ash/app_list/views/app_list_a11y_announcer.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ class AppListA11yAnnouncer {
int target_row,
int target_column);

// As above, but does not announce a page. Used for single-page apps grids.
void AnnounceAppsGridReorder(int target_row, int target_column);

// Modifies the announcement view to verbalize that a folder was opened in the
// apps container.
void AnnounceFolderOpened();
Expand Down
9 changes: 8 additions & 1 deletion ash/app_list/views/apps_grid_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "ash/app_list/app_list_view_delegate.h"
#include "ash/app_list/model/app_list_folder_item.h"
#include "ash/app_list/model/app_list_item.h"
#include "ash/app_list/paged_view_structure.h"
#include "ash/app_list/views/app_drag_icon_proxy.h"
#include "ash/app_list/views/app_list_a11y_announcer.h"
#include "ash/app_list/views/app_list_drag_and_drop_host.h"
Expand Down Expand Up @@ -2470,7 +2471,13 @@ void AppsGridView::AnnounceReorder(const GridIndex& target_index) {
const int row =
((target_index.slot - (target_index.slot % cols_)) / cols_) + 1;
const int col = (target_index.slot % cols_) + 1;
a11y_announcer_->AnnounceAppsGridReorder(page, row, col);
if (view_structure_.mode() == PagedViewStructure::Mode::kSinglePage) {
// Don't announce the page for single-page grids (e.g. scrollable grids).
a11y_announcer_->AnnounceAppsGridReorder(row, col);
} else {
// Announce the page for paged grids.
a11y_announcer_->AnnounceAppsGridReorder(page, row, col);
}
}

void AppsGridView::CreateGhostImageView() {
Expand Down
6 changes: 4 additions & 2 deletions ash/public/cpp/holding_space/holding_space_item.cc
Original file line number Diff line number Diff line change
Expand Up @@ -201,11 +201,13 @@ std::u16string HoldingSpaceItem::GetAccessibleName() const {
if (accessible_name_)
return accessible_name_.value();

const std::u16string text = GetText();

if (!secondary_text_)
return GetText();
return text;

return l10n_util::GetStringFUTF16(
IDS_ASH_HOLDING_SPACE_ITEM_A11Y_NAME_AND_TOOLTIP, GetText(),
IDS_ASH_HOLDING_SPACE_ITEM_A11Y_NAME_AND_TOOLTIP, text,
secondary_text_.value());
}

Expand Down
7 changes: 7 additions & 0 deletions ash/public/cpp/holding_space/holding_space_model.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ namespace ash {
HoldingSpaceModel::ScopedItemUpdate::~ScopedItemUpdate() {
uint32_t updated_fields = 0u;

// Cache computed fields.
const std::u16string accessible_name = item_->GetAccessibleName();

// Update accessible name.
if (accessible_name_) {
if (item_->SetAccessibleName(accessible_name_.value())) {
Expand Down Expand Up @@ -62,6 +65,10 @@ HoldingSpaceModel::ScopedItemUpdate::~ScopedItemUpdate() {
if (invalidate_image_)
item_->InvalidateImage();

// Calculate changes to computed fields.
if (accessible_name != item_->GetAccessibleName())
updated_fields |= HoldingSpaceModelObserver::UpdatedField::kAccessibleName;

// Notify observers if and only if an update occurred.
if (updated_fields != 0u) {
for (auto& observer : model_->observers_)
Expand Down
77 changes: 77 additions & 0 deletions ash/public/cpp/holding_space/holding_space_model_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,83 @@ INSTANTIATE_TEST_SUITE_P(All,

// Tests -----------------------------------------------------------------------

// Verifies that updating fields which affect accessible name WAI.
TEST_P(HoldingSpaceModelTest, UpdateItem_AccessibleName) {
ScopedModelObservation observation(&model());

// Verify the `model()` is initially empty.
EXPECT_EQ(model().items().size(), 0u);

// Create a holding space `item`.
auto item = HoldingSpaceItem::CreateFileBackedItem(
/*type=*/GetParam(), base::FilePath("file_path"),
GURL("filesystem::file_system_url"),
HoldingSpaceProgress(/*current_bytes=*/0, /*total_bytes=*/100),
/*image_resolver=*/base::BindOnce(&CreateFakeHoldingSpaceImage));
auto* item_ptr = item.get();

// Add `item` to the `model()`.
model().AddItem(std::move(item));
EXPECT_EQ(model().items().size(), 1u);
EXPECT_EQ(model().items()[0].get(), item_ptr);

// Initially accessible name is the lossy display name of the backing file.
EXPECT_EQ(item_ptr->GetAccessibleName(), u"file_path");

// Update text. Because accessible name is not overridden, this should result
// in an update to the computed accessible name field.
model().UpdateItem(item_ptr->id())->SetText(u"text");
EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
EXPECT_TRUE(observation.TakeLastUpdatedFields() &
UpdatedField::kAccessibleName);
EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
EXPECT_EQ(item_ptr->GetAccessibleName(), u"text");

// Update secondary text. Because accessible name is not overridden, this
// should result in an update to the computed accessible name field.
model().UpdateItem(item_ptr->id())->SetSecondaryText(u"secondary_text");
EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
EXPECT_TRUE(observation.TakeLastUpdatedFields() &
UpdatedField::kAccessibleName);
EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
EXPECT_EQ(item_ptr->GetAccessibleName(), u"text, secondary_text");

// Update accessible name. Note that accessible name field is now overridden
// from its previously computed value.
model().UpdateItem(item_ptr->id())->SetAccessibleName(u"accessible_name");
EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
EXPECT_EQ(observation.TakeLastUpdatedFields(), UpdatedField::kAccessibleName);
EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
EXPECT_EQ(item_ptr->GetAccessibleName(), u"accessible_name");

// Update text. Because accessible name is overridden, this should *not*
// result in an update to the computed accessible name field.
model().UpdateItem(item_ptr->id())->SetText(u"updated_text");
EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
EXPECT_EQ(observation.TakeLastUpdatedFields(), UpdatedField::kText);
EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
EXPECT_EQ(item_ptr->GetAccessibleName(), u"accessible_name");

// Update secondary text. Because accessible name is overridden, this should
// *not* result in an update to the computed accessible name field.
model()
.UpdateItem(item_ptr->id())
->SetSecondaryText(u"updated_secondary_text");
EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
EXPECT_EQ(observation.TakeLastUpdatedFields(), UpdatedField::kSecondaryText);
EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
EXPECT_EQ(item_ptr->GetAccessibleName(), u"accessible_name");

// Update accessible name. Note that accessible name field is no longer being
// overridden from its computed value.
model().UpdateItem(item_ptr->id())->SetAccessibleName(absl::nullopt);
EXPECT_EQ(observation.TakeLastUpdatedItem(), item_ptr);
EXPECT_EQ(observation.TakeLastUpdatedFields(), UpdatedField::kAccessibleName);
EXPECT_EQ(observation.TakeUpdatedItemCount(), 1);
EXPECT_EQ(item_ptr->GetAccessibleName(),
u"updated_text, updated_secondary_text");
}

// Verifies that updating multiple item attributes is atomic.
TEST_P(HoldingSpaceModelTest, UpdateItem_Atomic) {
ScopedModelObservation observation(&model());
Expand Down
13 changes: 10 additions & 3 deletions ash/system/holding_space/holding_space_item_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -296,10 +296,17 @@ void HoldingSpaceItemView::OnThemeChanged() {
void HoldingSpaceItemView::OnHoldingSpaceItemUpdated(
const HoldingSpaceItem* item,
uint32_t updated_fields) {
if (item_ == item) {
GetViewAccessibility().OverrideName(item->GetAccessibleName());
UpdatePrimaryAction();
if (item_ != item)
return;

// Accessibility.
if (updated_fields & UpdatedField::kAccessibleName) {
GetViewAccessibility().OverrideName(item_->GetAccessibleName());
NotifyAccessibilityEvent(ax::mojom::Event::kTextChanged, true);
}

// Primary action.
UpdatePrimaryAction();
}

void HoldingSpaceItemView::StartDrag(const ui::LocatedEvent& event,
Expand Down
1 change: 1 addition & 0 deletions ash/webui/diagnostics_ui/resources/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ js_library("diagnostics_types") {

js_library("diagnostics_network_icon") {
deps = [
"//third_party/polymer/v3_0/components-chromium/paper-spinner:paper-spinner-lite",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
"//ui/webui/resources/cr_components/chromeos/network:network_icon.m",
]
Expand Down
11 changes: 10 additions & 1 deletion ash/webui/diagnostics_ui/resources/diagnostics_network_icon.html
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
<style include="cr-shared-style diagnostics-shared">
<style include="diagnostics-shared">
:host {
--cros-icon-color-primary: var(--google-gray-700);
}

#connectingIcon {
height: 20px;
width: 20px;
}
</style>
<div id="iconContainer" hidden$="[[!network]]">
<network-icon id="networkIcon"
hidden$="[[computeShouldDisplaySpinner_(network.state)]]"
network-state="[[computeNetworkState_(network.*)]]">
</network-icon>
<paper-spinner-lite id="connectingIcon" active
hidden$="[[!computeShouldDisplaySpinner_(network.state)]]">
</paper-spinner-lite>
</div>
13 changes: 13 additions & 0 deletions ash/webui/diagnostics_ui/resources/diagnostics_network_icon.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/network_types.mojom-lite.js';
import 'chrome://resources/cr_components/chromeos/network/network_icon.m.js';
import 'chrome://resources/polymer/v3_0/paper-spinner/paper-spinner-lite.js';
import './diagnostics_shared_css.js';

import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
Expand Down Expand Up @@ -264,6 +265,18 @@ export class DiagnosticsNetworkIconElement extends PolymerElement {

return networkToNetworkStateAdapter(this.network);
}

/**
* @protected
* @return {boolean}
*/
computeShouldDisplaySpinner_() {
if (!this.network) {
return false;
}

return this.network.state === NetworkState.kConnecting;
}
}

customElements.define(
Expand Down
2 changes: 1 addition & 1 deletion build/fuchsia/linux.sdk.sha1
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6.20211001.1.1
6.20211001.2.1
2 changes: 1 addition & 1 deletion build/fuchsia/mac.sdk.sha1
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6.20211001.1.1
6.20211001.2.1
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import org.chromium.components.browser_ui.site_settings.FourStateCookieSettingsPreference.CookieSettingsState;
import org.chromium.components.browser_ui.site_settings.R;
import org.chromium.components.browser_ui.site_settings.SingleCategorySettings;
import org.chromium.components.browser_ui.site_settings.SingleCategorySettings.AutoDarkSiteSettingObserver;
import org.chromium.components.browser_ui.site_settings.SingleWebsiteSettings;
import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
import org.chromium.components.browser_ui.site_settings.TriStateSiteSettingsPreference;
Expand Down Expand Up @@ -92,6 +93,17 @@
public class SiteSettingsTest {
public static final String SITE_SETTINGS_BATCH_NAME = "site_settings";

static class TestAutoDarkObserver implements AutoDarkSiteSettingObserver {
public boolean mDefaultValue;
@Override
public void onDefaultValueChanged(boolean isEnabled) {
mDefaultValue = isEnabled;
}

@Override
public void onSiteExceptionChanged(boolean isAdded) {}
}

@ClassRule
public static PermissionTestRule mPermissionRule = new PermissionTestRule(true);

Expand Down Expand Up @@ -1152,18 +1164,31 @@ public void testBlockIdleDetection() {
@SmallTest
@Feature({"Preferences"})
public void testAllowAutoDark() {
TestAutoDarkObserver observer = new TestAutoDarkObserver();
SingleCategorySettings.setAutoDarkSiteSettingsObserver(observer);

doTestSiteSettingPermissions("AutoDarkWebContent",
SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT,
ContentSettingsType.AUTO_DARK_WEB_CONTENT, true);

Assert.assertTrue("Auto dark should be enabled.", observer.mDefaultValue);
SingleCategorySettings.setAutoDarkSiteSettingsObserver(null);
}

@Test
@SmallTest
@Feature({"Preferences"})
public void testBlockAutoDark() {
TestAutoDarkObserver observer = new TestAutoDarkObserver();
observer.mDefaultValue = true;
SingleCategorySettings.setAutoDarkSiteSettingsObserver(observer);

doTestSiteSettingPermissions("AutoDarkWebContent",
SiteSettingsCategory.Type.AUTO_DARK_WEB_CONTENT,
ContentSettingsType.AUTO_DARK_WEB_CONTENT, false);

Assert.assertFalse("Auto dark should be disabled.", observer.mDefaultValue);
SingleCategorySettings.setAutoDarkSiteSettingsObserver(null);
}

@Test
Expand Down
3 changes: 3 additions & 0 deletions chrome/app/chromeos_strings.grdp
Original file line number Diff line number Diff line change
Expand Up @@ -857,6 +857,9 @@
<message name="IDS_BLUETOOTH_PAIRING_ENTER_PIN" desc="Bluetooth pairing dialog: Message displayed informing the user to enter a PIN in other to complete device pairing.">
Enter PIN to pair with <ph name="DEVICE_NAME">$1<ex>Nexus S</ex></ph>
</message>
<message name="IDS_BLUETOOTH_DEVICE_ITEM_BATTERY_PERCENTAGE" desc="Label for a Bluetooth device in a list that indicates the battery level of the device.">
<ph name="BATTERY_PERCENTAGE">$1<ex>32</ex></ph>%
</message>

<!-- Strings for the OOBE packaged license screen -->
<message name="IDS_OOBE_PACKAGED_LICENSE_TITLE" desc="Title of the screen which advertises use of packaged license.">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f23285cc0b9c7e16fa23e002384b6c7539410213
3 changes: 0 additions & 3 deletions chrome/app/os_settings_strings.grdp
Original file line number Diff line number Diff line change
Expand Up @@ -2103,9 +2103,6 @@ Press an assigned switch or key to remove assignment.
<message name="IDS_SETTINGS_BLUETOOTH_SUMMARY_PAGE_ON" desc="Label for Bluetooth summary page, when Bluetooth is on but no devices are connected.">
On
</message>
<message name="IDS_SETTINGS_BLUETOOTH_PAIRED_DEVICE_ITEM_BATTERY_PERCENTAGE" desc="Label for a paired Bluetooth device in a list that indicates the battery level of the device.">
<ph name="BATTERY_PERCENTAGE">$1<ex>32</ex></ph>%
</message>
<message name="IDS_SETTINGS_BLUETOOTH_PAIRED_DEVICE_ITEM_A11Y_LABEL_TYPE_UNKNOWN" desc="Accessibility label for paired Bluetooth device list item with a device type of unknown.">
Device <ph name="DEVICE_INDEX">$1<ex>1</ex></ph> of <ph name="DEVICE_COUNT">$2<ex>15</ex></ph>, <ph name="DEVICE_NAME">$3<ex>Beats</ex></ph>, Unknown device type
</message>
Expand Down

This file was deleted.

Loading