diff --git a/DEPS b/DEPS index 9ab3b50..8968cef 100644 --- a/DEPS +++ b/DEPS
@@ -167,11 +167,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '634d15032d37902e654fcc39ebcaa23b5fb9df90', + 'skia_revision': '7274850f96f267f272d7336bdac5355de03f6a58', # 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': 'ecd11dd17ccbb4a845c904c7bdb76d24b7008adf', + 'v8_revision': 'be181e241c6da9baa49a424b7d91613c8ebf76f8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -179,11 +179,11 @@ # 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': '0b9ebe58e3802b58953a4ef0884d5fd8f308ed70', + 'angle_revision': '14dd70757eb07a841301395f33e0428925648cd9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '8cde4063d097a1f1631fd4766146ad59b1a630a9', + 'swiftshader_revision': '9097eeb5359bbbe7e116bfa9233863b411a006d7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -230,7 +230,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'b9fad2fbcc499b984d88f4c4aec26d162297efae', + 'catapult_revision': '44806300adbd52cb4193a76c7282a2f6cb7250d0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -862,7 +862,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'ac6afeb999e9691fb643819671c4e68d04375883', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '692ad2ff20beca13272af0b95e939f4b9aabb3b4', 'condition': 'checkout_linux', }, @@ -1532,7 +1532,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@8f91a46b0230ea1b142d33d92c5c4be342174536', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@5f410c266cfad9abcc1a13a6c746ee00ce1556ef', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h index 44c0a0b..f8baf28f 100644 --- a/android_webview/browser/aw_content_browser_client.h +++ b/android_webview/browser/aw_content_browser_client.h
@@ -14,8 +14,10 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/browser/web_contents.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/service_manager/public/cpp/binder_registry.h" +#include "storage/browser/quota/quota_settings.h" namespace content { class RenderFrameHost;
diff --git a/android_webview/browser/aw_download_manager_delegate.cc b/android_webview/browser/aw_download_manager_delegate.cc index 3bf803a3..6d1b422 100644 --- a/android_webview/browser/aw_download_manager_delegate.cc +++ b/android_webview/browser/aw_download_manager_delegate.cc
@@ -51,7 +51,7 @@ bool AwDownloadManagerDelegate::ShouldCompleteDownload( download::DownloadItem* item, - const base::Closure& complete_callback) { + base::OnceClosure complete_callback) { NOTREACHED(); return true; }
diff --git a/android_webview/browser/aw_download_manager_delegate.h b/android_webview/browser/aw_download_manager_delegate.h index 250a4db..351e733 100644 --- a/android_webview/browser/aw_download_manager_delegate.h +++ b/android_webview/browser/aw_download_manager_delegate.h
@@ -30,7 +30,7 @@ download::DownloadItem* item, const content::DownloadTargetCallback& callback) override; bool ShouldCompleteDownload(download::DownloadItem* item, - const base::Closure& complete_callback) override; + base::OnceClosure complete_callback) override; bool ShouldOpenDownload( download::DownloadItem* item, const content::DownloadOpenDelayedCallback& callback) override;
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc index 24dffcf2..a209024 100644 --- a/ash/app_list/app_list_controller_impl_unittest.cc +++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -5,6 +5,7 @@ #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/app_list_metrics.h" +#include "ash/app_list/test/app_list_test_helper.h" #include "ash/app_list/views/app_list_main_view.h" #include "ash/app_list/views/app_list_view.h" #include "ash/app_list/views/contents_view.h" @@ -769,9 +770,7 @@ EXPECT_FALSE(IsTabletMode()); base::RunLoop().RunUntilIdle(); EXPECT_EQ(AppListViewState::kClosed, GetAppListView()->app_list_state()); - EXPECT_FALSE(AshTestBase::GetPrimaryShelf() - ->shelf_layout_manager() - ->is_app_list_visible()); + GetAppListTestHelper()->CheckVisibility(false); // Check metrics initial values. histogram_tester_.ExpectTotalCount(
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc index c24ed7d..3489d10b 100644 --- a/ash/shelf/shelf_layout_manager.cc +++ b/ash/shelf/shelf_layout_manager.cc
@@ -641,12 +641,15 @@ ->home_screen_controller() ->home_launcher_gesture_handler() ->GetActiveWindow()); + const bool app_list_is_visible = + Shell::Get()->app_list_controller() && + Shell::Get()->app_list_controller()->IsVisible(); if (IsTabletModeEnabled()) { // If the home launcher is shown, being animated, or dragged, show the // default background. - if (is_app_list_visible_ || home_launcher_animation_state_ == kShowing) + if (app_list_is_visible || home_launcher_animation_state_ == kShowing) return SHELF_BACKGROUND_DEFAULT; - } else if (is_app_list_visible_) { + } else if (app_list_is_visible) { return maximized ? SHELF_BACKGROUND_MAXIMIZED_WITH_APP_LIST : SHELF_BACKGROUND_APP_LIST; } @@ -820,12 +823,7 @@ return; } - const bool should_update_visibility_state = shown != is_app_list_visible_; - is_app_list_visible_ = shown; - - if (should_update_visibility_state) - UpdateVisibilityState(); - + UpdateVisibilityState(); MaybeUpdateShelfBackground(AnimationChangeType::IMMEDIATE); } @@ -843,21 +841,16 @@ return; HomeLauncherAnimationState new_animation_state; - if (is_app_list_visible_ && !showing) { + if (Shell::Get()->app_list_controller()->IsVisible() && !showing) { new_animation_state = kHiding; - } else if (!is_app_list_visible_ && showing) { + } else if (!Shell::Get()->app_list_controller()->IsVisible() && showing) { new_animation_state = kShowing; } else { // No valid animation state. return; } - const bool should_update_visibility_state = - new_animation_state != home_launcher_animation_state_; - home_launcher_animation_state_ = new_animation_state; - if (should_update_visibility_state) - UpdateVisibilityState(); - + UpdateVisibilityState(); MaybeUpdateShelfBackground(AnimationChangeType::IMMEDIATE); } @@ -873,8 +866,8 @@ if (display_.id() != display_id) return; - const bool should_update_visibility_state = is_app_list_visible_ != shown; - is_app_list_visible_ = shown; + const bool should_update_visibility_state = + Shell::Get()->app_list_controller()->IsVisible() != shown; home_launcher_animation_state_ = HomeLauncherAnimationState::kFinished; if (should_update_visibility_state) @@ -1070,7 +1063,7 @@ case kHiding: return HotseatState::kHidden; case kFinished: - if (is_app_list_visible_) + if (Shell::Get()->app_list_controller()->IsVisible()) return HotseatState::kShown; if (Shell::Get()->overview_controller() && Shell::Get()->overview_controller()->InOverviewSession()) { @@ -1124,7 +1117,8 @@ return HotseatState::kExtended; } case kDragAppListInProgress: - if (is_app_list_visible_ && home_launcher_animation_state_ == kFinished) { + if (Shell::Get()->app_list_controller()->IsVisible() && + home_launcher_animation_state_ == kFinished) { return HotseatState::kShown; } return state_.hotseat_state; @@ -1896,7 +1890,7 @@ drag_status_ = previous_drag_status; } - if (is_app_list_visible_) + if (Shell::Get()->app_list_controller()->IsVisible()) return true; return StartShelfDrag(gesture_in_screen); @@ -2026,9 +2020,9 @@ if (shelf_widget_->hotseat_widget()->IsShowingOverflowBubble()) return false; - // If app list is already opened, swiping up on the shelf should keep the app - // list opened. - if (is_app_list_visible_) + // If the app list is already open, swiping up on the shelf should keep it + // open. + if (Shell::Get()->app_list_controller()->IsVisible()) return false; // Swipes down on shelf should hide the shelf. @@ -2055,7 +2049,8 @@ bool ShelfLayoutManager::StartShelfDrag( const ui::LocatedEvent& event_in_screen) { // Disable the shelf dragging if the fullscreen app list is opened. - if (is_app_list_visible_ && !IsTabletModeEnabled()) + if (Shell::Get()->app_list_controller()->IsVisible() && + !IsTabletModeEnabled()) return false; // Also disable shelf drags until the overflow shelf is closed.
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h index 699941c..b66289e5 100644 --- a/ash/shelf/shelf_layout_manager.h +++ b/ash/shelf/shelf_layout_manager.h
@@ -233,7 +233,6 @@ } bool updating_bounds() const { return updating_bounds_; } - bool is_app_list_visible() const { return is_app_list_visible_; } ShelfAutoHideState auto_hide_state() const { return state_.auto_hide_state; } HotseatState hotseat_state() const { return state_.hotseat_state; } @@ -509,10 +508,6 @@ ShelfWidget* shelf_widget_; Shelf* shelf_; - // Whether the app list is visible. This is maintained by - // OnAppListVisibilityChanged and OnHomeLauncherAnimationComplete. - bool is_app_list_visible_ = false; - enum HomeLauncherAnimationState { kFinished, kShowing,
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc index 009bef7..d523c10 100644 --- a/ash/shelf/shelf_layout_manager_unittest.cc +++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -3252,7 +3252,6 @@ GetAppListTestHelper()->CheckVisibility(true); EXPECT_EQ(HotseatState::kShown, GetShelfLayoutManager()->hotseat_state()); - EXPECT_TRUE(GetShelfLayoutManager()->is_app_list_visible()); } // Tests that the hotseat is kHidden when entering tablet mode with a window. @@ -3267,7 +3266,6 @@ EXPECT_EQ(HotseatState::kHidden, GetShelfLayoutManager()->hotseat_state()); GetAppListTestHelper()->CheckVisibility(false); - EXPECT_FALSE(GetShelfLayoutManager()->is_app_list_visible()); } // Tests that closing a window which was opened prior to entering tablet mode @@ -3286,7 +3284,6 @@ EXPECT_EQ(HotseatState::kShown, GetShelfLayoutManager()->hotseat_state()); GetAppListTestHelper()->CheckVisibility(true); - EXPECT_TRUE(GetShelfLayoutManager()->is_app_list_visible()); } // Tests that a window that is created after going to tablet mode, then closed, @@ -3302,14 +3299,12 @@ EXPECT_EQ(HotseatState::kHidden, GetShelfLayoutManager()->hotseat_state()); GetAppListTestHelper()->CheckVisibility(false); - EXPECT_FALSE(GetShelfLayoutManager()->is_app_list_visible()); // Hide the window, the hotseat should be kShown, and the home launcher should // be visible. window->Hide(); EXPECT_EQ(HotseatState::kShown, GetShelfLayoutManager()->hotseat_state()); - EXPECT_TRUE(GetShelfLayoutManager()->is_app_list_visible()); GetAppListTestHelper()->CheckVisibility(true); } @@ -3326,20 +3321,17 @@ EXPECT_EQ(HotseatState::kExtended, GetShelfLayoutManager()->hotseat_state()); EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, GetPrimaryShelf()->GetAutoHideState()); - EXPECT_FALSE(GetShelfLayoutManager()->is_app_list_visible()); SwipeDownOnShelf(); EXPECT_EQ(HotseatState::kHidden, GetShelfLayoutManager()->hotseat_state()); EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, GetPrimaryShelf()->GetAutoHideState()); - EXPECT_FALSE(GetShelfLayoutManager()->is_app_list_visible()); // Swipe down again, nothing should change. SwipeDownOnShelf(); EXPECT_EQ(HotseatState::kHidden, GetShelfLayoutManager()->hotseat_state()); EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, GetPrimaryShelf()->GetAutoHideState()); - EXPECT_FALSE(GetShelfLayoutManager()->is_app_list_visible()); } // Tests that swiping up on the shelf background shows the home launcher. @@ -3356,7 +3348,6 @@ EXPECT_EQ(HotseatState::kExtended, GetShelfLayoutManager()->hotseat_state()); if (GetParam() == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS) EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, GetPrimaryShelf()->GetAutoHideState()); - EXPECT_FALSE(GetShelfLayoutManager()->is_app_list_visible()); // Swipe up again on the shelf background to show the home launcher. gfx::Rect display_bounds = @@ -3371,7 +3362,6 @@ EXPECT_EQ(HotseatState::kShown, GetShelfLayoutManager()->hotseat_state()); if (GetParam() == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS) EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, GetPrimaryShelf()->GetAutoHideState()); - EXPECT_TRUE(GetShelfLayoutManager()->is_app_list_visible()); } // Tests that swiping up on the hotseat shows the home launcher. @@ -3389,7 +3379,6 @@ EXPECT_EQ(HotseatState::kExtended, GetShelfLayoutManager()->hotseat_state()); if (GetParam() == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS) EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, GetPrimaryShelf()->GetAutoHideState()); - EXPECT_FALSE(GetShelfLayoutManager()->is_app_list_visible()); // Swipe up on the Hotseat (parent of ShelfView) to show the HomeLauncher. gfx::Point start(GetPrimaryShelf() @@ -3406,7 +3395,6 @@ EXPECT_EQ(HotseatState::kShown, GetShelfLayoutManager()->hotseat_state()); if (GetParam() == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS) EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, GetPrimaryShelf()->GetAutoHideState()); - EXPECT_TRUE(GetShelfLayoutManager()->is_app_list_visible()); } // Tests that tapping an active window with an extended hotseat results in a
diff --git a/ash/shell/content/client/shell_content_browser_client.h b/ash/shell/content/client/shell_content_browser_client.h index 86ecef5..6547685 100644 --- a/ash/shell/content/client/shell_content_browser_client.h +++ b/ash/shell/content/client/shell_content_browser_client.h
@@ -11,6 +11,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "content/public/browser/content_browser_client.h" +#include "storage/browser/quota/quota_settings.h" namespace ash { namespace shell {
diff --git a/base/allocator/partition_allocator/partition_alloc_perftest.cc b/base/allocator/partition_allocator/partition_alloc_perftest.cc index 85b782a5..bdd85f0a 100644 --- a/base/allocator/partition_allocator/partition_alloc_perftest.cc +++ b/base/allocator/partition_allocator/partition_alloc_perftest.cc
@@ -2,13 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <atomic> #include <vector> + #include "base/allocator/partition_allocator/partition_alloc.h" +#include "base/threading/platform_thread.h" #include "base/time/time.h" #include "base/timer/lap_timer.h" - #include "build/build_config.h" - #include "testing/gtest/include/gtest/gtest.h" #include "testing/perf/perf_test.h" @@ -28,19 +29,47 @@ // Final size is 24 + (13 * 22) = 310 bytes. constexpr int kMultiBucketRounds = 22; -class MemoryAllocationPerfTest : public testing::Test { +class AllocatingThread : public PlatformThread::Delegate { public: - MemoryAllocationPerfTest() - : timer_(kWarmupRuns, kTimeLimit, kTimeCheckInterval) {} - void SetUp() override { alloc_.init(); } - void TearDown() override { - alloc_.root()->PurgeMemory(PartitionPurgeDecommitEmptyPages | - PartitionPurgeDiscardUnusedSystemPages); + explicit AllocatingThread(PartitionAllocatorGeneric* allocator) + : allocator_(allocator), should_stop_(false) { + PlatformThread::Create(0, this, &thread_handle_); } - LapTimer timer_; - PartitionAllocatorGeneric alloc_; + + ~AllocatingThread() override { + should_stop_ = true; + PlatformThread::Join(thread_handle_); + } + + // Allocates and frees memory in a loop until |should_stop_| becomes true. + void ThreadMain() override { + uint64_t count = 0; + while (true) { + // Only check |should_stop_| every 2^15 iterations, as it is a + // sequentially consistent access, hence expensive. + if (count % (1 << 15) == 0 && should_stop_) + break; + void* data = allocator_->root()->Alloc(10, ""); + allocator_->root()->Free(data); + count++; + } + } + + PartitionAllocatorGeneric* allocator_; + std::atomic<bool> should_stop_; + PlatformThreadHandle thread_handle_; }; +void DisplayResults(const std::string& measurement, + const std::string& modifier, + size_t iterations_per_second) { + perf_test::PrintResult(measurement, modifier, "", iterations_per_second, + "runs/s", true); + perf_test::PrintResult(measurement, modifier, "", + static_cast<size_t>(1e9 / iterations_per_second), + "ns/run", true); +} + class MemoryAllocationPerfNode { public: MemoryAllocationPerfNode* GetNext() const { return next_; } @@ -59,110 +88,169 @@ MemoryAllocationPerfNode* next_ = nullptr; }; -TEST_F(MemoryAllocationPerfTest, SingleBucket) { - timer_.Reset(); - MemoryAllocationPerfNode* first = reinterpret_cast<MemoryAllocationPerfNode*>( - alloc_.root()->Alloc(40, "<testing>")); - MemoryAllocationPerfNode* cur = first; - do { - MemoryAllocationPerfNode* next = +class MemoryAllocationPerfTest : public testing::Test { + public: + MemoryAllocationPerfTest() + : timer_(kWarmupRuns, kTimeLimit, kTimeCheckInterval) {} + void SetUp() override { alloc_.init(); } + void TearDown() override { + alloc_.root()->PurgeMemory(PartitionPurgeDecommitEmptyPages | + PartitionPurgeDiscardUnusedSystemPages); + } + + protected: + void TestSingleBucket() { + MemoryAllocationPerfNode* first = reinterpret_cast<MemoryAllocationPerfNode*>( alloc_.root()->Alloc(40, "<testing>")); - CHECK_NE(next, nullptr); - cur->SetNext(next); - cur = next; - timer_.NextLap(); - } while (!timer_.HasTimeLimitExpired()); - // next_ = nullptr only works if the class constructor is called (it's not - // called in this case because then we can allocate arbitrary-length - // payloads.) - cur->SetNext(nullptr); - MemoryAllocationPerfNode::FreeAll(first, alloc_); + timer_.Reset(); + MemoryAllocationPerfNode* cur = first; + do { + MemoryAllocationPerfNode* next = + reinterpret_cast<MemoryAllocationPerfNode*>( + alloc_.root()->Alloc(40, "<testing>")); + CHECK_NE(next, nullptr); + cur->SetNext(next); + cur = next; + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + // next_ = nullptr only works if the class constructor is called (it's not + // called in this case because then we can allocate arbitrary-length + // payloads.) + cur->SetNext(nullptr); - perf_test::PrintResult("MemoryAllocationPerfTest", - " single bucket allocation (40 bytes)", "", - timer_.LapsPerSecond(), "runs/s", true); + MemoryAllocationPerfNode::FreeAll(first, alloc_); + + DisplayResults("MemoryAllocationPerfTest", + " single bucket allocation (40 bytes)", + timer_.LapsPerSecond()); + } + + void TestSingleBucketWithFree() { + // Allocate an initial element to make sure the bucket stays set up. + void* elem = alloc_.root()->Alloc(40, "<testing>"); + + timer_.Reset(); + do { + void* cur = alloc_.root()->Alloc(40, "<testing>"); + CHECK_NE(cur, nullptr); + alloc_.root()->Free(cur); + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + + alloc_.root()->Free(elem); + DisplayResults("MemoryAllocationPerfTest", + " single bucket allocation + free (40 bytes)", + timer_.LapsPerSecond()); + } + + void TestMultiBucket() { + MemoryAllocationPerfNode* first = + reinterpret_cast<MemoryAllocationPerfNode*>( + alloc_.root()->Alloc(40, "<testing>")); + MemoryAllocationPerfNode* cur = first; + + timer_.Reset(); + do { + for (int i = 0; i < kMultiBucketRounds; i++) { + MemoryAllocationPerfNode* next = + reinterpret_cast<MemoryAllocationPerfNode*>(alloc_.root()->Alloc( + kMultiBucketMinimumSize + (i * kMultiBucketIncrement), + "<testing>")); + CHECK_NE(next, nullptr); + cur->SetNext(next); + cur = next; + } + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + cur->SetNext(nullptr); + + MemoryAllocationPerfNode::FreeAll(first, alloc_); + + DisplayResults("MemoryAllocationPerfTest", " multi-bucket allocation", + timer_.LapsPerSecond() * kMultiBucketRounds); + } + + void TestMultiBucketWithFree() { + std::vector<void*> elems; + elems.reserve(kMultiBucketRounds); + // Do an initial round of allocation to make sure that the buckets stay in + // use (and aren't accidentally released back to the OS). + for (int i = 0; i < kMultiBucketRounds; i++) { + void* cur = alloc_.root()->Alloc( + kMultiBucketMinimumSize + (i * kMultiBucketIncrement), "<testing>"); + CHECK_NE(cur, nullptr); + elems.push_back(cur); + } + + timer_.Reset(); + do { + for (int i = 0; i < kMultiBucketRounds; i++) { + void* cur = alloc_.root()->Alloc( + kMultiBucketMinimumSize + (i * kMultiBucketIncrement), "<testing>"); + CHECK_NE(cur, nullptr); + alloc_.root()->Free(cur); + } + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + + for (void* ptr : elems) { + alloc_.root()->Free(ptr); + } + + DisplayResults("MemoryAllocationPerfTest", + " multi-bucket allocation + free", + timer_.LapsPerSecond() * kMultiBucketRounds); + } + + LapTimer timer_; + PartitionAllocatorGeneric alloc_; +}; + +TEST_F(MemoryAllocationPerfTest, SingleBucket) { + TestSingleBucket(); +} + +TEST_F(MemoryAllocationPerfTest, SingleBucketWithCompetingThread) { + AllocatingThread t(&alloc_); + TestSingleBucket(); } TEST_F(MemoryAllocationPerfTest, SingleBucketWithFree) { - timer_.Reset(); - // Allocate an initial element to make sure the bucket stays set up. - void* elem = alloc_.root()->Alloc(40, "<testing>"); - do { - void* cur = alloc_.root()->Alloc(40, "<testing>"); - CHECK_NE(cur, nullptr); - alloc_.root()->Free(cur); - timer_.NextLap(); - } while (!timer_.HasTimeLimitExpired()); + TestSingleBucketWithFree(); +} - alloc_.root()->Free(elem); - perf_test::PrintResult("MemoryAllocationPerfTest", - " single bucket allocation + free (40 bytes)", "", - timer_.LapsPerSecond(), "runs/s", true); +TEST_F(MemoryAllocationPerfTest, SingleBucketWithFreeWithCompetingThread) { + AllocatingThread t(&alloc_); + TestSingleBucketWithFree(); } // Failing on Nexus5x: crbug.com/949838 #if defined(OS_ANDROID) #define MAYBE_MultiBucket DISABLED_MultiBucket +#define MAYBE_MultiBucketWithCompetingThread \ + DISABLED_MultiBucketWithCompetingThread #else #define MAYBE_MultiBucket MultiBucket +#define MAYBE_MultiBucketWithCompetingThread MultiBucketWithCompetingThread #endif TEST_F(MemoryAllocationPerfTest, MAYBE_MultiBucket) { - timer_.Reset(); - MemoryAllocationPerfNode* first = reinterpret_cast<MemoryAllocationPerfNode*>( - alloc_.root()->Alloc(40, "<testing>")); - MemoryAllocationPerfNode* cur = first; - do { - for (int i = 0; i < kMultiBucketRounds; i++) { - MemoryAllocationPerfNode* next = - reinterpret_cast<MemoryAllocationPerfNode*>(alloc_.root()->Alloc( - kMultiBucketMinimumSize + (i * kMultiBucketIncrement), - "<testing>")); - CHECK_NE(next, nullptr); - cur->SetNext(next); - cur = next; - } - timer_.NextLap(); - } while (!timer_.HasTimeLimitExpired()); - cur->SetNext(nullptr); + TestMultiBucket(); +} - MemoryAllocationPerfNode::FreeAll(first, alloc_); - - perf_test::PrintResult("MemoryAllocationPerfTest", " multi-bucket allocation", - "", timer_.LapsPerSecond() * kMultiBucketRounds, - "runs/s", true); +TEST_F(MemoryAllocationPerfTest, MAYBE_MultiBucketWithCompetingThread) { + AllocatingThread t(&alloc_); + TestMultiBucket(); } TEST_F(MemoryAllocationPerfTest, MultiBucketWithFree) { - timer_.Reset(); - std::vector<void*> elems; - // Do an initial round of allocation to make sure that the buckets stay in use - // (and aren't accidentally released back to the OS). - for (int i = 0; i < kMultiBucketRounds; i++) { - void* cur = alloc_.root()->Alloc( - kMultiBucketMinimumSize + (i * kMultiBucketIncrement), "<testing>"); - CHECK_NE(cur, nullptr); - elems.push_back(cur); - } + TestMultiBucketWithFree(); +} - do { - for (int i = 0; i < kMultiBucketRounds; i++) { - void* cur = alloc_.root()->Alloc( - kMultiBucketMinimumSize + (i * kMultiBucketIncrement), "<testing>"); - CHECK_NE(cur, nullptr); - alloc_.root()->Free(cur); - } - timer_.NextLap(); - } while (!timer_.HasTimeLimitExpired()); - - for (void* ptr : elems) { - alloc_.root()->Free(ptr); - } - - perf_test::PrintResult( - "MemoryAllocationPerfTest", " multi-bucket allocation + free", "", - timer_.LapsPerSecond() * kMultiBucketRounds, "runs/s", true); +TEST_F(MemoryAllocationPerfTest, MultiBucketWithFreeWithCompetingThread) { + AllocatingThread t(&alloc_); + TestMultiBucketWithFree(); } } // anonymous namespace
diff --git a/base/bind.h b/base/bind.h index 7a400af..1d4b3cc 100644 --- a/base/bind.h +++ b/base/bind.h
@@ -191,14 +191,12 @@ struct InvokeFuncImpl; template <typename Invoker> -struct InvokeFuncImpl<true, Invoker> { - static constexpr auto Value = &Invoker::RunOnce; -}; +struct InvokeFuncImpl<true, Invoker> + : std::integral_constant<decltype(&Invoker::RunOnce), &Invoker::RunOnce> {}; template <typename Invoker> -struct InvokeFuncImpl<false, Invoker> { - static constexpr auto Value = &Invoker::Run; -}; +struct InvokeFuncImpl<false, Invoker> + : std::integral_constant<decltype(&Invoker::Run), &Invoker::Run> {}; template <template <typename> class CallbackT, typename Functor, @@ -229,7 +227,7 @@ // InvokeFuncStorage, so that we can ensure its type matches to // PolymorphicInvoke, to which CallbackType will cast back. using PolymorphicInvoke = typename CallbackType::PolymorphicInvoke; - PolymorphicInvoke invoke_func = InvokeFuncImpl<kIsOnce, Invoker>::Value; + PolymorphicInvoke invoke_func = InvokeFuncImpl<kIsOnce, Invoker>::value; using InvokeFuncStorage = internal::BindStateBase::InvokeFuncStorage; return CallbackType(BindState::Create(
diff --git a/base/trace_event/memory_infra_background_whitelist.cc b/base/trace_event/memory_infra_background_whitelist.cc index ac7881f..4c88b5ca 100644 --- a/base/trace_event/memory_infra_background_whitelist.cc +++ b/base/trace_event/memory_infra_background_whitelist.cc
@@ -344,6 +344,8 @@ "sync/0x?/model_type/MANAGED_USER_WHITELIST", "sync/0x?/model_type/MOUNTAIN_SHARE", "sync/0x?/model_type/NIGORI", + "sync/0x?/model_type/OS_PREFERENCE", + "sync/0x?/model_type/OS_PRIORITY_PREFERENCE", "sync/0x?/model_type/PASSWORD", "sync/0x?/model_type/PREFERENCE", "sync/0x?/model_type/PRINTER",
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 6ea1b65..47f8142d 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -8899502756487089920 \ No newline at end of file +8899475862982290896 \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index f17fc2b9..7612fdc 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -8899505638123521760 \ No newline at end of file +8899474127257994368 \ No newline at end of file
diff --git a/build/linux/sysroot_scripts/debian-archive-sid-stable.gpg b/build/linux/sysroot_scripts/debian_archive_unstable.gpg similarity index 64% rename from build/linux/sysroot_scripts/debian-archive-sid-stable.gpg rename to build/linux/sysroot_scripts/debian_archive_unstable.gpg index a282485..388abb5 100644 --- a/build/linux/sysroot_scripts/debian-archive-sid-stable.gpg +++ b/build/linux/sysroot_scripts/debian_archive_unstable.gpg Binary files differ
diff --git a/build/linux/sysroot_scripts/generate_debian_archive_unstable_gpg.sh b/build/linux/sysroot_scripts/generate_debian_archive_unstable_gpg.sh new file mode 100755 index 0000000..27cc100 --- /dev/null +++ b/build/linux/sysroot_scripts/generate_debian_archive_unstable_gpg.sh
@@ -0,0 +1,35 @@ +#!/bin/bash +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +set -o nounset +set -o errexit + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +KEYS=( + # Debian Archive Automatic Signing Key (10/buster) + "DC30D7C23CBBABEE" + # Debian Security Archive Automatic Signing Key (10/buster) + "4DFAB270CAA96DFA" + # Debian Archive Automatic Signing Key (10/buster) + "DC30D7C23CBBABEE" + # Jessie Stable Release Key + "CBF8D6FD518E17E1" + # Debian Archive Automatic Signing Key (7.0/wheezy) + "8B48AD6246925553" + # Debian Archive Automatic Signing Key (8/jessie) + "7638D0442B90D010" + # Debian Security Archive Automatic Signing Key (8/jessie) + "9D6D8F6BC857C906" + # Debian Archive Automatic Signing Key (9/stretch) + "E0B11894F66AEC98" + # Debian Security Archive Automatic Signing Key (9/stretch) + "EDA0D2388AE22BA9" + # Debian Stable Release Key (9/stretch) + "EF0F382A1A7B6500" +) + +gpg --recv-keys ${KEYS[@]} +gpg --output "${SCRIPT_DIR}/debian_archive_unstable.gpg" --export ${KEYS[@]}
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.amd64 b/build/linux/sysroot_scripts/generated_package_lists/sid.amd64 index 91a8d94..9bdd555 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.amd64 +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.amd64
@@ -1,346 +1,337 @@ -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/alsa-lib/libasound2_1.1.7-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/alsa-lib/libasound2-dev_1.1.7-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/atk1.0/libatk1.0-0_2.30.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/atk1.0/libatk1.0-dev_2.30.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.30.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.30.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.30.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.30.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/attr/libattr1_2.4.47-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/audit/libaudit1_2.8.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/b/bluez/libbluetooth3_5.50-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/b/bluez/libbluetooth-dev_5.50-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/b/brltty/libbrlapi0.6_5.6-7+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/b/brltty/libbrlapi-dev_5.6-7+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cairo/libcairo2_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cairo/libcairo2-dev_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/colord/libcolord2_1.4.3-3+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cups/libcups2_2.2.10-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cups/libcups2-dev_2.2.10-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cups/libcupsimage2_2.2.10-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/c/cups/libcupsimage2-dev_2.2.10-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/d/dbus/libdbus-1-3_1.12.12-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/d/dbus/libdbus-1-dev_1.12.12-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/e/e2fsprogs/libcom-err2_1.44.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/e/elfutils/libelf1_0.175-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/e/elfutils/libelf-dev_0.175-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/e/expat/libexpat1_2.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/e/expat/libexpat1-dev_2.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/flac/libflac8_1.3.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/flac/libflac-dev_1.3.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/freetype/libfreetype6_2.9.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/fribidi/libfribidi0_1.0.5-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-6/lib32asan3_6.5.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-6/lib32gcc-6-dev_6.5.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-6/lib32stdc++-6-dev_6.5.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-6/libasan3_6.5.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-6/libgcc-6-dev_6.5.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-6/libstdc++-6-dev_6.5.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-7/lib32cilkrts5_7.4.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-7/lib32ubsan0_7.4.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-7/libcilkrts5_7.4.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-7/libubsan0_7.4.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/lib32atomic1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/lib32gcc1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/lib32gomp1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/lib32itm1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/lib32mpx2_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/lib32quadmath0_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/lib32stdc++6_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libatomic1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libgcc1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libgomp1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libitm1_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/liblsan0_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libmpx2_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libquadmath0_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libstdc++6_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gcc-8/libtsan0_8.2.0-12_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.38.0+dfsg-6_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.38.0+dfsg-6_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/glib2.0/libglib2.0-0_2.58.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/glib2.0/libglib2.0-dev_2.58.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/glibc/libc6_2.28-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/glibc/libc6-dev_2.28-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/glibc/libc6-i386_2.28-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gnutls28/libgnutls30_3.5.19-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/graphite2/libgraphite2-3_1.3.12-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/graphite2/libgraphite2-dev_1.3.12-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/h/harfbuzz/libharfbuzz0b_2.1.1-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.1.1-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.1.1-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.1.1-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/i/icu/libicu57_57.1-9_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/i/icu/libicu60_60.2-6_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/i/icu/libicu63_63.1-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/krb5-multidev_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libgssapi-krb5-2_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libgssrpc4_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libk5crypto3_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libkadm5clnt-mit11_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libkadm5srv-mit11_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libkdb5-9_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libkrb5-3_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libkrb5-dev_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/k/krb5/libkrb5support0_1.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/liba/libasyncns/libasyncns0_0.8-6_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libb/libbsd/libbsd0_0.9.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libc/libcap2/libcap2_2.25-1.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libc/libcap2/libcap-dev_2.25-1.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdrm/libdrm2_2.4.95-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.95-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdrm/libdrm-dev_2.4.95-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdrm/libdrm-intel1_2.4.95-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.95-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.95-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libf/libffi/libffi6_3.2.1-9_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libf/libffi/libffi7_3.3~rc0-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libegl1_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libgl1_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libgles1_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libgles2_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libglx0_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libgpg-error/libgpg-error0_1.32-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libi/libice/libice6_1.0.9-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libi/libidn2/libidn2-0_2.0.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libi/libidn/libidn11_1.33-2.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b6_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libs/libselinux/libselinux1_2.8-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libs/libsm/libsm6_1.2.2-1+b3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.64.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.64.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libt/libthai/libthai0_0.1.28-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libt/libtool/libltdl7_2.4.6-6_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libu/libunistring/libunistring2_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libva/libva2_2.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libva/libva-dev_2.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libva/libva-drm2_2.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libva/libva-glx2_2.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libva/libva-wayland2_2.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libva/libva-x11-2_2.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libvpx/libvpx5_1.7.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libw/libwebp/libwebp6_0.6.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libx11/libx11-6_1.6.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libx11/libx11-dev_1.6.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libx11/libx11-xcb1_1.6.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcursor/libxcursor1_1.1.15-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxi/libxi6_1.7.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxss/libxss1_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxt/libxt6_1.1.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxt/libxt-dev_1.1.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/libz/libzstd/libzstd1_1.3.5+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/l/lcms2/liblcms2-2_2.9-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/l/linux/linux-libc-dev_4.18.20-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/l/lz4/liblz4-1_1.8.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libegl1-mesa_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libegl1-mesa-dev_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libgbm1_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libgbm-dev_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libgl1-mesa-dev_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libgl1-mesa-glx_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libglapi-mesa_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/libwayland-egl1-mesa_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/mesa/mesa-common-dev_18.2.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/minizip/libminizip1_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/n/nettle/libhogweed4_3.4.1~rc1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/n/nettle/libnettle6_3.4.1~rc1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/n/nspr/libnspr4_4.20-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/n/nspr/libnspr4-dev_4.20-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/n/nss/libnss3_3.41-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/n/nss/libnss3-dev_3.41-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/o/openssl1.0/libssl1.0.2_1.0.2q-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/o/openssl/libssl1.1_1.1.1a-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/o/openssl/libssl-dev_1.1.1a-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/o/opus/libopus0_1.3~beta+20180518-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/o/orbit2/liborbit2_2.14.19-4_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/p11-kit/libp11-kit0_0.23.14-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pam/libpam0g_1.1.8-3.8_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-5_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pciutils/libpci3_3.5.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pciutils/libpci-dev_3.5.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pcre3/libpcre16-3_8.39-11_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pcre3/libpcre32-3_8.39-11_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pcre3/libpcre3_8.39-11_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pcre3/libpcre3-dev_8.39-11_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pulseaudio/libpulse0_12.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pulseaudio/libpulse-dev_12.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/r/re2/libre2-4_20180901+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/r/re2/libre2-dev_20180901+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-7_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/sqlite3/libsqlite3-0_3.26.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/systemd/libsystemd0_239-15_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/systemd/libudev1_239-15_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/s/systemd/libudev-dev_239-15_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/t/tiff/libtiff5_4.0.10-3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/u/unbound/libunbound8_1.8.1-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/u/util-linux/libblkid1_2.33-0.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/u/util-linux/libmount1_2.33-0.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/u/util-linux/libuuid1_2.33-0.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/u/util-linux/uuid-dev_2.33-0.2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/w/wayland/libwayland-client0_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/w/wayland/libwayland-cursor0_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/w/wayland/libwayland-dev_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/w/wayland/libwayland-egl1_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/w/wayland/libwayland-server0_1.16.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/z/zlib/lib32z1_1.2.11.dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/z/zlib/lib32z1-dev_1.2.11.dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20181214T150526Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2_1.1.8-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2-dev_1.1.8-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-0_2.34.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-dev_2.34.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.34.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.34.0-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.34.0-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/attr/libattr1_2.4.48-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/audit/libaudit1_2.8.5-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth3_5.50-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth-dev_5.50-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi0.7_6.0+dfsg-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi-dev_6.0+dfsg-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brotli/libbrotli1_1.0.7-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2_1.16.0-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2-dev_1.16.0-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/colord/libcolord2_1.4.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2_2.3.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2-dev_2.3.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2_2.3.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2-dev_2.3.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-3_1.12.16-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-dev_1.12.16-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.45.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/libcom-err2_1.45.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf1_0.176-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf-dev_0.176-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1_2.2.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1-dev_2.2.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac8_1.3.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac-dev_1.3.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6_2.9.1-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi0_1.0.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi-dev_1.0.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libasan4_7.4.0-14_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libcilkrts5_7.4.0-14_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libgcc-7-dev_7.4.0-14_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libstdc++-7-dev_7.4.0-14_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libubsan0_7.4.0-14_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-8/libmpx2_8.3.0-23_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libatomic1_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgcc1_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgomp1_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libitm1_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/liblsan0_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libquadmath0_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libstdc++6_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libtsan0_9.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.40.0+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.40.0+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-0_2.62.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-dev_2.62.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6_2.29-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6-dev_2.29-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls28-dev_3.6.9-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls30_3.6.9-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-dane0_3.6.9-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-openssl27_3.6.9-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutlsxx28_3.6.9-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-3_1.3.13-8_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-dev_1.3.13-8_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.12-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.12-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-0_3.96.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.96.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz0b_2.6.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.6.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.6.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.6.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu/libicu63_63.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/keyutils/libkeyutils1_1.6-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/krb5-multidev_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssapi-krb5-2_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssrpc4_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libk5crypto3_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5clnt-mit11_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5srv-mit11_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkdb5-9_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-3_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-dev_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5support0_1.17-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libb/libbsd/libbsd0_0.10.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap2_2.25-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap-dev_2.25-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm2_2.4.99-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.99-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-dev_2.4.99-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-intel1_2.4.99-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.99-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.99-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi6_3.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi7_3.3~rc0-8_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.5-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libegl1_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgl1_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles1_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles2_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglx0_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error0_1.36-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.36-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libice/libice6_1.0.9-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn2/libidn2-0_2.2.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn/libidn11_1.33-2.2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b8_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1_2.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1-dev_2.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1_2.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1-dev_2.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsm/libsm6_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-6_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.68.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.68.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtasn1-6/libtasn1-6_4.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtool/libltdl7_2.4.6-11_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libu/libunistring/libunistring2_0.9.10-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva2_2.5.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-dev_2.5.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-drm2_2.5.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-glx2_2.5.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-wayland2_2.5.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-x11-2_2.5.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx6_1.8.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx-dev_1.8.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp6_0.6.1-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-6_1.6.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-dev_1.6.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb1_1.6.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi6_1.7.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss1_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt6_1.1.5-1+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt-dev_1.1.5-1+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libz/libzstd/libzstd1_1.4.3+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lcms2/liblcms2-2_2.9-4_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/linux/linux-libc-dev_5.2.17-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lz4/liblz4-1_1.9.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa-dev_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm1_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm-dev_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-dev_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-glx_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libglapi-mesa_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libwayland-egl1-mesa_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/mesa-common-dev_19.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip1_1.1-8+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libhogweed4_3.5.1+really3.4.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libnettle6_3.5.1+really3.4.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4_4.21-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4-dev_4.21-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3_3.45-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3-dev_3.45-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl1.1_1.1.1d-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl-dev_1.1.1d-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus0_1.3-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus-dev_1.3-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/p11-kit/libp11-kit0_0.23.17-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g_1.3.1-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g-dev_1.3.1-5_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci3_3.6.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci-dev_3.6.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-16-0_10.32-5+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-32-0_10.32-5+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-8-0_10.32-5+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-dev_10.32-5+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-posix0_10.32-5+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre16-3_8.39-12+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre32-3_8.39-12+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3_8.39-12+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3-dev_8.39-12+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-12+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse0_13.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-dev_13.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_13.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-5_20190901+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-dev_20190901+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd2_0.9.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.9.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.9.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/sqlite3/libsqlite3-0_3.30.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libsystemd0_242-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev1_242-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev-dev_242-7_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-28_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tiff/libtiff5_4.0.10+git191003-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/unbound/libunbound8_1.9.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid1_2.34-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid-dev_2.34-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount1_2.34-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount-dev_2.34-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libuuid1_2.34-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/uuid-dev_2.34-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/v/vulkan-loader/libvulkan1_1.1.121.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-client0_1.17.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-cursor0_1.17.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-dev_1.17.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-egl1_1.17.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-server0_1.17.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland-protocols/wayland-protocols_1.18-1_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xz-utils/liblzma5_5.2.4-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1+b1_amd64.deb
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.arm b/build/linux/sysroot_scripts/generated_package_lists/sid.arm index c6c86be2..f11fd4d 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.arm +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.arm
@@ -1,327 +1,336 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.30.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.30.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.30.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.30.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.30.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.30.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.4-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.12-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.12-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.12-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.12-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.4.3-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-22_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-22_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-22_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-29_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.38.0+dfsg-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.38.0+dfsg-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.58.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.58.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.12-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.12-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.24.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.9.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.9.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.9.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.9.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_armhf.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-exynos1_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-omap1_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.94-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.5.2-0.3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.5.2-0.3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.5-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.64.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.64.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.3.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.3.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.3.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.3.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.3.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.3.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0-dev_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.4-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.18.6-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.20-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.20-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.39-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.39-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.14-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-1_0.2.3-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.3-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.3-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.2-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.2-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.2-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180901+dfsg-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180901+dfsg-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.25.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-10_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-10_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-10_armhf.deb -http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_armhf.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound8_1.8.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.16.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.16.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.16.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.16.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.16.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2_1.1.8-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2-dev_1.1.8-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-0_2.34.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-dev_2.34.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.34.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.34.0-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.34.0-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/attr/libattr1_2.4.48-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/audit/libaudit1_2.8.5-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth3_5.50-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth-dev_5.50-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi0.7_6.0+dfsg-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi-dev_6.0+dfsg-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brotli/libbrotli1_1.0.7-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2_1.16.0-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2-dev_1.16.0-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/colord/libcolord2_1.4.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2_2.3.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2-dev_2.3.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2_2.3.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2-dev_2.3.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-3_1.12.16-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-dev_1.12.16-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.45.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/libcom-err2_1.45.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf1_0.176-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf-dev_0.176-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1_2.2.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1-dev_2.2.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac8_1.3.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac-dev_1.3.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6_2.9.1-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi0_1.0.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi-dev_1.0.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libasan4_7.4.0-14_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libcilkrts5_7.4.0-14_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libgcc-7-dev_7.4.0-14_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libstdc++-7-dev_7.4.0-14_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libubsan0_7.4.0-14_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libatomic1_9.2.1-9_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgcc1_9.2.1-9_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgomp1_9.2.1-9_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libstdc++6_9.2.1-9_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.40.0+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.40.0+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-0_2.62.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-dev_2.62.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6_2.29-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6-dev_2.29-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls28-dev_3.6.9-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls30_3.6.9-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-dane0_3.6.9-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-openssl27_3.6.9-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutlsxx28_3.6.9-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-3_1.3.13-8_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-dev_1.3.13-8_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.12-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.12-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-0_3.96.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.96.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz0b_2.6.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.6.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.6.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.6.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu/libicu63_63.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/keyutils/libkeyutils1_1.6-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/krb5-multidev_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssapi-krb5-2_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssrpc4_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libk5crypto3_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5clnt-mit11_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5srv-mit11_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkdb5-9_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-3_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-dev_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5support0_1.17-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libb/libbsd/libbsd0_0.10.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap2_2.25-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap-dev_2.25-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm2_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-dev_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-omap1_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.99-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi6_3.2.1-9_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi7_3.3~rc0-8_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.5-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libegl1_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgl1_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles1_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles2_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglx0_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error0_1.36-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.36-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libice/libice6_1.0.9-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn2/libidn2-0_2.2.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn/libidn11_1.33-2.2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b8_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1_2.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1-dev_2.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1_2.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1-dev_2.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsm/libsm6_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-6_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.68.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.68.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtasn1-6/libtasn1-6_4.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtool/libltdl7_2.4.6-11_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libu/libunistring/libunistring2_0.9.10-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva2_2.5.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-dev_2.5.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-drm2_2.5.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-glx2_2.5.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-wayland2_2.5.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-x11-2_2.5.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx6_1.8.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx-dev_1.8.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp6_0.6.1-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-6_1.6.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-dev_1.6.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb1_1.6.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi6_1.7.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss1_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt6_1.1.5-1+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt-dev_1.1.5-1+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libz/libzstd/libzstd1_1.4.3+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lcms2/liblcms2-2_2.9-4_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/linux/linux-libc-dev_5.2.17-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lz4/liblz4-1_1.9.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa-dev_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm1_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm-dev_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-dev_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-glx_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libglapi-mesa_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libwayland-egl1-mesa_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/mesa-common-dev_19.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libhogweed4_3.5.1+really3.4.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libnettle6_3.5.1+really3.4.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4_4.21-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4-dev_4.21-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3_3.45-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3-dev_3.45-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl1.1_1.1.1d-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl-dev_1.1.1d-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus0_1.3-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus-dev_1.3-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/p11-kit/libp11-kit0_0.23.17-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g_1.3.1-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g-dev_1.3.1-5_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci3_3.6.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci-dev_3.6.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-16-0_10.32-5+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-32-0_10.32-5+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-8-0_10.32-5+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-dev_10.32-5+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-posix0_10.32-5+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre16-3_8.39-12+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre32-3_8.39-12+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3_8.39-12+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3-dev_8.39-12+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-12+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse0_13.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-dev_13.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_13.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-5_20190901+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-dev_20190901+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd2_0.9.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.9.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.9.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/sqlite3/libsqlite3-0_3.30.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libsystemd0_242-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev1_242-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev-dev_242-7_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-28_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tiff/libtiff5_4.0.10+git191003-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/unbound/libunbound8_1.9.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid1_2.34-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid-dev_2.34-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount1_2.34-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount-dev_2.34-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libuuid1_2.34-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/uuid-dev_2.34-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/v/vulkan-loader/libvulkan1_1.1.121.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-client0_1.17.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-cursor0_1.17.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-dev_1.17.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-egl1_1.17.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-server0_1.17.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland-protocols/wayland-protocols_1.18-1_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xz-utils/liblzma5_5.2.4-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1+b1_armhf.deb
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.arm64 b/build/linux/sysroot_scripts/generated_package_lists/sid.arm64 index 2ad21f5..d6fc9b9 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.arm64 +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.arm64
@@ -1,328 +1,338 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.30.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.30.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.30.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.30.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.30.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.30.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.4-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.12-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.12-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.12-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.12-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.4.3-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-22_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-22_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-22_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-29_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8.2.0-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.38.0+dfsg-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.38.0+dfsg-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.58.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.58.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.12-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.12-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.24.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.9.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.9.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.9.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.9.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_arm64.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.94-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.5.2-0.3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.5.2-0.3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.5-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.64.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.64.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.3.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.3.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.3.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.3.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.3.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.3.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0-dev_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.4-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.18.6-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.20-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.20-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.39-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.39-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.14-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-1_0.2.3-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.3-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.3-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.2-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.2-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.2-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180901+dfsg-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180901+dfsg-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.25.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-10_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-10_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-10_arm64.deb -http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_arm64.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound8_1.8.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.16.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.16.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.16.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.16.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.16.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2_1.1.8-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2-dev_1.1.8-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-0_2.34.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-dev_2.34.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.34.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.34.0-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.34.0-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/attr/libattr1_2.4.48-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/audit/libaudit1_2.8.5-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth3_5.50-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth-dev_5.50-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi0.7_6.0+dfsg-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi-dev_6.0+dfsg-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brotli/libbrotli1_1.0.7-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2_1.16.0-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2-dev_1.16.0-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/colord/libcolord2_1.4.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2_2.3.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2-dev_2.3.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2_2.3.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2-dev_2.3.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-3_1.12.16-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-dev_1.12.16-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.45.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/libcom-err2_1.45.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf1_0.176-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf-dev_0.176-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1_2.2.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1-dev_2.2.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac8_1.3.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac-dev_1.3.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6_2.9.1-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi0_1.0.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi-dev_1.0.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libasan4_7.4.0-14_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libgcc-7-dev_7.4.0-14_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libstdc++-7-dev_7.4.0-14_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libubsan0_7.4.0-14_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libatomic1_9.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgcc1_9.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgomp1_9.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libitm1_9.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/liblsan0_9.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libstdc++6_9.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libtsan0_9.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.40.0+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.40.0+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-0_2.62.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-dev_2.62.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6_2.29-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6-dev_2.29-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls28-dev_3.6.9-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls30_3.6.9-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-dane0_3.6.9-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-openssl27_3.6.9-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutlsxx28_3.6.9-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-3_1.3.13-8_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-dev_1.3.13-8_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.12-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.12-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-0_3.96.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.96.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz0b_2.6.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.6.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.6.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.6.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu/libicu63_63.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/keyutils/libkeyutils1_1.6-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/krb5-multidev_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssapi-krb5-2_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssrpc4_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libk5crypto3_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5clnt-mit11_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5srv-mit11_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkdb5-9_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-3_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-dev_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5support0_1.17-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libb/libbsd/libbsd0_0.10.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap2_2.25-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap-dev_2.25-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm2_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-dev_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.99-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi6_3.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi7_3.3~rc0-8_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.5-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libegl1_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgl1_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles1_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles2_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglx0_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error0_1.36-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.36-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libice/libice6_1.0.9-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn2/libidn2-0_2.2.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn/libidn11_1.33-2.2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b8_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1_2.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1-dev_2.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1_2.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1-dev_2.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsm/libsm6_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-6_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.68.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.68.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtasn1-6/libtasn1-6_4.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtool/libltdl7_2.4.6-11_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libu/libunistring/libunistring2_0.9.10-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva2_2.5.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-dev_2.5.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-drm2_2.5.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-glx2_2.5.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-wayland2_2.5.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-x11-2_2.5.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx6_1.8.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx-dev_1.8.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp6_0.6.1-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-6_1.6.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-dev_1.6.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb1_1.6.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi6_1.7.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss1_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt6_1.1.5-1+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt-dev_1.1.5-1+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libz/libzstd/libzstd1_1.4.3+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lcms2/liblcms2-2_2.9-4_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/linux/linux-libc-dev_5.2.17-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lz4/liblz4-1_1.9.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa-dev_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm1_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm-dev_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-dev_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-glx_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libglapi-mesa_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libwayland-egl1-mesa_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/mesa-common-dev_19.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip1_1.1-8+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libhogweed4_3.5.1+really3.4.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libnettle6_3.5.1+really3.4.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4_4.21-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4-dev_4.21-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3_3.45-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3-dev_3.45-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl1.1_1.1.1d-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl-dev_1.1.1d-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus0_1.3-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus-dev_1.3-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/p11-kit/libp11-kit0_0.23.17-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g_1.3.1-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g-dev_1.3.1-5_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci3_3.6.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci-dev_3.6.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-16-0_10.32-5+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-32-0_10.32-5+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-8-0_10.32-5+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-dev_10.32-5+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-posix0_10.32-5+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre16-3_8.39-12+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre32-3_8.39-12+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3_8.39-12+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3-dev_8.39-12+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-12+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse0_13.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-dev_13.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_13.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-5_20190901+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-dev_20190901+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd2_0.9.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.9.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.9.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/sqlite3/libsqlite3-0_3.30.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libsystemd0_242-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev1_242-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev-dev_242-7_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-28_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tiff/libtiff5_4.0.10+git191003-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/unbound/libunbound8_1.9.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid1_2.34-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid-dev_2.34-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount1_2.34-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount-dev_2.34-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libuuid1_2.34-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/uuid-dev_2.34-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/v/vulkan-loader/libvulkan1_1.1.121.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-client0_1.17.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-cursor0_1.17.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-dev_1.17.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-egl1_1.17.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-server0_1.17.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland-protocols/wayland-protocols_1.18-1_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xz-utils/liblzma5_5.2.4-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1+b1_arm64.deb
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.armel b/build/linux/sysroot_scripts/generated_package_lists/sid.armel new file mode 100644 index 0000000..b25614c --- /dev/null +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.armel
@@ -0,0 +1,335 @@ +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2_1.1.8-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2-dev_1.1.8-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-0_2.34.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-dev_2.34.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.34.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.34.0-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.34.0-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/attr/libattr1_2.4.48-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/audit/libaudit1_2.8.5-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth3_5.50-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth-dev_5.50-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi0.7_6.0+dfsg-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi-dev_6.0+dfsg-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brotli/libbrotli1_1.0.7-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2_1.16.0-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2-dev_1.16.0-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/colord/libcolord2_1.4.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2_2.3.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2-dev_2.3.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2_2.3.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2-dev_2.3.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-3_1.12.16-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-dev_1.12.16-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.45.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/libcom-err2_1.45.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf1_0.176-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf-dev_0.176-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1_2.2.9-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1-dev_2.2.9-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac8_1.3.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac-dev_1.3.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6_2.9.1-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi0_1.0.7-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi-dev_1.0.7-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libasan4_7.4.0-14_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libcilkrts5_7.4.0-14_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libgcc-7-dev_7.4.0-14_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libstdc++-7-dev_7.4.0-14_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libubsan0_7.4.0-14_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libatomic1_9.2.1-9_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgcc1_9.2.1-9_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgomp1_9.2.1-9_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libstdc++6_9.2.1-9_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.40.0+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.40.0+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-0_2.62.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-dev_2.62.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6_2.29-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6-dev_2.29-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls28-dev_3.6.9-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls30_3.6.9-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-dane0_3.6.9-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-openssl27_3.6.9-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutlsxx28_3.6.9-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-3_1.3.13-8_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-dev_1.3.13-8_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.12-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.12-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-0_3.96.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.96.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz0b_2.6.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.6.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.6.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.6.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu/libicu63_63.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/keyutils/libkeyutils1_1.6-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/krb5-multidev_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssapi-krb5-2_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssrpc4_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libk5crypto3_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5clnt-mit11_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5srv-mit11_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkdb5-9_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-3_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-dev_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5support0_1.17-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libb/libbsd/libbsd0_0.10.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap2_2.25-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap-dev_2.25-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm2_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-dev_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-omap1_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.99-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi6_3.2.1-9_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi7_3.3~rc0-8_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.5-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libegl1_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgl1_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles1_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles2_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglx0_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error0_1.36-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.36-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libice/libice6_1.0.9-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn2/libidn2-0_2.2.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn/libidn11_1.33-2.2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b8_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1_2.9-2+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1-dev_2.9-2+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1_2.9-2+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1-dev_2.9-2+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsm/libsm6_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-6_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.68.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.68.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtasn1-6/libtasn1-6_4.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtool/libltdl7_2.4.6-11_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libu/libunistring/libunistring2_0.9.10-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva2_2.5.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-dev_2.5.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-drm2_2.5.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-glx2_2.5.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-wayland2_2.5.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-x11-2_2.5.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx6_1.8.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx-dev_1.8.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp6_0.6.1-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-6_1.6.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-dev_1.6.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb1_1.6.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi6_1.7.9-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss1_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt6_1.1.5-1+b3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt-dev_1.1.5-1+b3_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libz/libzstd/libzstd1_1.4.3+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lcms2/liblcms2-2_2.9-4_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/linux/linux-libc-dev_5.2.17-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lz4/liblz4-1_1.9.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa-dev_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm1_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm-dev_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-dev_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-glx_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libglapi-mesa_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libwayland-egl1-mesa_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/mesa-common-dev_19.2.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libhogweed4_3.5.1+really3.4.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libnettle6_3.5.1+really3.4.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4_4.21-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4-dev_4.21-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3_3.45-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3-dev_3.45-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl1.1_1.1.1d-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl-dev_1.1.1d-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus0_1.3-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus-dev_1.3-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/p11-kit/libp11-kit0_0.23.17-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g_1.3.1-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g-dev_1.3.1-5_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci3_3.6.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci-dev_3.6.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-16-0_10.32-5+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-32-0_10.32-5+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-8-0_10.32-5+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-dev_10.32-5+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-posix0_10.32-5+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre16-3_8.39-12+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre32-3_8.39-12+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3_8.39-12+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3-dev_8.39-12+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-12+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse0_13.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-dev_13.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_13.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-5_20190901+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-dev_20190901+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd2_0.9.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.9.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.9.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/sqlite3/libsqlite3-0_3.30.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libsystemd0_242-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev1_242-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev-dev_242-7_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-28_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tiff/libtiff5_4.0.10+git191003-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/unbound/libunbound8_1.9.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid1_2.34-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid-dev_2.34-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount1_2.34-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount-dev_2.34-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libuuid1_2.34-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/uuid-dev_2.34-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/v/vulkan-loader/libvulkan1_1.1.121.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-client0_1.17.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-cursor0_1.17.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-dev_1.17.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-egl1_1.17.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-server0_1.17.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland-protocols/wayland-protocols_1.18-1_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xft/libxft2_2.3.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xz-utils/liblzma5_5.2.4-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1+b1_armel.deb
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.i386 b/build/linux/sysroot_scripts/generated_package_lists/sid.i386 index dee9a841..6df787b 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.i386 +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.i386
@@ -1,327 +1,335 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.30.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.30.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.30.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.30.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.30.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.30.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.4-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.12-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.12-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.12-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.12-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.4.3-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.2_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-22_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-22_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-22_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libcilkrts5_7.3.0-29_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-29_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8.2.0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libmpx2_8.2.0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libquadmath0_8.2.0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.38.0+dfsg-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.38.0+dfsg-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.58.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.58.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.12-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.12-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.24.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.9.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.9.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.9.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.9.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_i386.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.94-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.94-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.94-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-intel1_2.4.94-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.94-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.94-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.5.2-0.3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.5.2-0.3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_i386.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.5-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b5_i386.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.64.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.64.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.3.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.3.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.3.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.3.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.3.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.3.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.6-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0-dev_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.4-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.18.10-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.20-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.20-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.39-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.39-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.14-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-1_0.2.3-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.3-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.3-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.2-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.2-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.2-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180901+dfsg-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180901+dfsg-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.25.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-10_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-10_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-10_i386.deb -http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_i386.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound8_1.8.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.16.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.16.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.16.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.16.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.16.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_i386.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2_1.1.8-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2-dev_1.1.8-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-0_2.34.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-dev_2.34.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.34.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.34.0-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.34.0-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/attr/libattr1_2.4.48-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/audit/libaudit1_2.8.5-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth3_5.50-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth-dev_5.50-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi0.7_6.0+dfsg-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi-dev_6.0+dfsg-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brotli/libbrotli1_1.0.7-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2_1.16.0-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2-dev_1.16.0-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/colord/libcolord2_1.4.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2_2.3.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2-dev_2.3.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2_2.3.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2-dev_2.3.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-3_1.12.16-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-dev_1.12.16-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.45.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/libcom-err2_1.45.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf1_0.176-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf-dev_0.176-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1_2.2.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1-dev_2.2.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac8_1.3.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac-dev_1.3.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6_2.9.1-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi0_1.0.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi-dev_1.0.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libasan4_7.4.0-14_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libcilkrts5_7.4.0-14_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libgcc-7-dev_7.4.0-14_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libstdc++-7-dev_7.4.0-14_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libubsan0_7.4.0-14_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-8/libmpx2_8.3.0-23_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libatomic1_9.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgcc1_9.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgomp1_9.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libitm1_9.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libquadmath0_9.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libstdc++6_9.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.40.0+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.40.0+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-0_2.62.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-dev_2.62.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6_2.29-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6-dev_2.29-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls28-dev_3.6.9-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls30_3.6.9-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-dane0_3.6.9-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-openssl27_3.6.9-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutlsxx28_3.6.9-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-3_1.3.13-8_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-dev_1.3.13-8_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.12-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.12-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-0_3.96.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.96.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz0b_2.6.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.6.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.6.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.6.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu/libicu63_63.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/keyutils/libkeyutils1_1.6-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/krb5-multidev_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssapi-krb5-2_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssrpc4_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libk5crypto3_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5clnt-mit11_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5srv-mit11_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkdb5-9_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-3_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-dev_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5support0_1.17-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libb/libbsd/libbsd0_0.10.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap2_2.25-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap-dev_2.25-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm2_2.4.99-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.99-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-dev_2.4.99-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-intel1_2.4.99-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.99-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.99-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi6_3.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi7_3.3~rc0-8_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.5-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libegl1_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgl1_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles1_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles2_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglx0_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error0_1.36-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.36-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libice/libice6_1.0.9-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn2/libidn2-0_2.2.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn/libidn11_1.33-2.2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b8_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1_2.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1-dev_2.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1_2.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1-dev_2.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsm/libsm6_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-6_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.68.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.68.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtasn1-6/libtasn1-6_4.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtool/libltdl7_2.4.6-11_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libu/libunistring/libunistring2_0.9.10-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva2_2.5.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-dev_2.5.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-drm2_2.5.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-glx2_2.5.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-wayland2_2.5.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-x11-2_2.5.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx6_1.8.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx-dev_1.8.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp6_0.6.1-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-6_1.6.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-dev_1.6.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb1_1.6.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi6_1.7.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss1_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt6_1.1.5-1+b3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt-dev_1.1.5-1+b3_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libz/libzstd/libzstd1_1.4.3+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lcms2/liblcms2-2_2.9-4_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/linux/linux-libc-dev_5.2.17-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lz4/liblz4-1_1.9.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa-dev_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm1_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm-dev_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-dev_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-glx_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libglapi-mesa_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libwayland-egl1-mesa_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/mesa-common-dev_19.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip1_1.1-8+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libhogweed4_3.5.1+really3.4.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libnettle6_3.5.1+really3.4.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4_4.21-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4-dev_4.21-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3_3.45-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3-dev_3.45-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl1.1_1.1.1d-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl-dev_1.1.1d-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus0_1.3-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus-dev_1.3-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/p11-kit/libp11-kit0_0.23.17-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g_1.3.1-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g-dev_1.3.1-5_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci3_3.6.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci-dev_3.6.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-16-0_10.32-5+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-32-0_10.32-5+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-8-0_10.32-5+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-dev_10.32-5+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-posix0_10.32-5+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre16-3_8.39-12+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre32-3_8.39-12+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3_8.39-12+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3-dev_8.39-12+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-12+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse0_13.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-dev_13.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_13.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-5_20190901+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-dev_20190901+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd2_0.9.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.9.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.9.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/sqlite3/libsqlite3-0_3.30.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libsystemd0_242-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev1_242-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev-dev_242-7_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-28_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tiff/libtiff5_4.0.10+git191003-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/unbound/libunbound8_1.9.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid1_2.34-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid-dev_2.34-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount1_2.34-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount-dev_2.34-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libuuid1_2.34-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/uuid-dev_2.34-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/v/vulkan-loader/libvulkan1_1.1.121.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-client0_1.17.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-cursor0_1.17.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-dev_1.17.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-egl1_1.17.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-server0_1.17.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland-protocols/wayland-protocols_1.18-1_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xft/libxft2_2.3.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xz-utils/liblzma5_5.2.4-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1+b1_i386.deb
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el b/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el index 825d387..c90f318 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el
@@ -1,320 +1,328 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.30.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.30.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.30.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.30.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.30.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.30.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.4-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.12-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.12-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.12-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.12-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.4.3-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-22_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-22_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.38.0+dfsg-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.38.0+dfsg-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.58.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.58.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.12-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.12-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.24.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.9.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.9.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.9.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.9.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.94-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.94-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.94-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.94-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.94-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.5.2-0.3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.5.2-0.3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.5-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.64.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.64.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.3.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.3.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.3.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.3.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.3.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.3.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.6-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0-dev_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.4-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.18.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.20-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.20-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.39-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.39-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.14-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-1_0.2.3-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.3-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.3-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.2-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.2-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.2-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180901+dfsg-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180901+dfsg-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.25.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-10_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-10_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-10_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound8_1.8.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.16.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.16.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.16.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.16.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.16.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2_1.1.8-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2-dev_1.1.8-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-0_2.34.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-dev_2.34.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.34.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.34.0-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.34.0-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/attr/libattr1_2.4.48-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/audit/libaudit1_2.8.5-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth3_5.50-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth-dev_5.50-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi0.7_6.0+dfsg-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi-dev_6.0+dfsg-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brotli/libbrotli1_1.0.7-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2_1.16.0-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2-dev_1.16.0-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/colord/libcolord2_1.4.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2_2.3.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2-dev_2.3.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2_2.3.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2-dev_2.3.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-3_1.12.16-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-dev_1.12.16-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.45.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/libcom-err2_1.45.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf1_0.176-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf-dev_0.176-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1_2.2.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1-dev_2.2.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac8_1.3.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac-dev_1.3.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6_2.9.1-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi0_1.0.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi-dev_1.0.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libgcc-7-dev_7.4.0-14_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libstdc++-7-dev_7.4.0-14_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libatomic1_9.2.1-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgcc1_9.2.1-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgomp1_9.2.1-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libstdc++6_9.2.1-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.40.0+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.40.0+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-0_2.62.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-dev_2.62.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6_2.29-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6-dev_2.29-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls28-dev_3.6.9-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls30_3.6.9-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-dane0_3.6.9-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-openssl27_3.6.9-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutlsxx28_3.6.9-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-3_1.3.13-8_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-dev_1.3.13-8_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.12-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.12-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-0_3.96.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.96.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz0b_2.6.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.6.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.6.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.6.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu/libicu63_63.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/keyutils/libkeyutils1_1.6-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/krb5-multidev_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssapi-krb5-2_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssrpc4_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libk5crypto3_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5clnt-mit11_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5srv-mit11_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkdb5-9_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-3_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-dev_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5support0_1.17-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libb/libbsd/libbsd0_0.10.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap2_2.25-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap-dev_2.25-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm2_2.4.99-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.99-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-dev_2.4.99-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.99-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.99-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi6_3.2.1-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi7_3.3~rc0-8_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.5-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libegl1_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgl1_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles1_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles2_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglx0_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error0_1.36-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.36-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libice/libice6_1.0.9-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn2/libidn2-0_2.2.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn/libidn11_1.33-2.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b8_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1_2.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1-dev_2.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1_2.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1-dev_2.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsm/libsm6_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.68.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.68.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtasn1-6/libtasn1-6_4.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtool/libltdl7_2.4.6-11_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libu/libunistring/libunistring2_0.9.10-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva2_2.5.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-dev_2.5.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-drm2_2.5.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-glx2_2.5.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-wayland2_2.5.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-x11-2_2.5.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx6_1.8.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx-dev_1.8.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp6_0.6.1-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-6_1.6.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-dev_1.6.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb1_1.6.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi6_1.7.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt6_1.1.5-1+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt-dev_1.1.5-1+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libz/libzstd/libzstd1_1.4.3+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lcms2/liblcms2-2_2.9-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/linux/linux-libc-dev_5.2.17-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lz4/liblz4-1_1.9.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa-dev_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm1_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm-dev_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-dev_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-glx_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libglapi-mesa_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libwayland-egl1-mesa_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/mesa-common-dev_19.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libhogweed4_3.5.1+really3.4.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libnettle6_3.5.1+really3.4.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4_4.21-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4-dev_4.21-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3_3.45-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3-dev_3.45-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl1.1_1.1.1d-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl-dev_1.1.1d-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus0_1.3-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus-dev_1.3-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/p11-kit/libp11-kit0_0.23.17-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g_1.3.1-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g-dev_1.3.1-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci3_3.6.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci-dev_3.6.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-16-0_10.32-5+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-32-0_10.32-5+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-8-0_10.32-5+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-dev_10.32-5+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-posix0_10.32-5+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre16-3_8.39-12+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre32-3_8.39-12+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3_8.39-12+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3-dev_8.39-12+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-12+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse0_13.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-dev_13.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_13.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-5_20190901+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-dev_20190901+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd2_0.9.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.9.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.9.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/sqlite3/libsqlite3-0_3.30.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libsystemd0_242-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev1_242-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev-dev_242-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-28_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tiff/libtiff5_4.0.10+git191003-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/unbound/libunbound8_1.9.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid1_2.34-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid-dev_2.34-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount1_2.34-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount-dev_2.34-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libuuid1_2.34-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/uuid-dev_2.34-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/v/vulkan-loader/libvulkan1_1.1.121.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-client0_1.17.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-cursor0_1.17.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-dev_1.17.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-egl1_1.17.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-server0_1.17.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland-protocols/wayland-protocols_1.18-1_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xz-utils/liblzma5_5.2.4-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1+b1_mips64el.deb
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel b/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel index 8317793..72949454 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel
@@ -1,320 +1,328 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.30.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.30.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.30.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.30.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.30.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.30.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.4-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.12-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.12-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.12-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.12-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.4.3-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-22_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-22_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.38.0+dfsg-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.38.0+dfsg-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.58.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.58.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.12-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.12-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.24.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.9.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.9.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.9.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.9.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.94-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.94-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.94-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.94-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.94-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.5.2-0.3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.5.2-0.3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.5-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.64.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.64.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.3.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.3.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.3.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.3.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.3.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.3.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.6-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0-dev_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.4-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.18.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.20-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.20-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.39-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.39-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.14-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-1_0.2.3-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.3-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.3-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.2-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.2-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.2-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180901+dfsg-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180901+dfsg-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.25.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-10_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-10_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-10_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound8_1.8.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.16.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.16.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.16.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.16.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.16.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2_1.1.8-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/alsa-lib/libasound2-dev_1.1.8-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-0_2.34.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/atk1.0/libatk1.0-dev_2.34.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.34.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.34.0-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.34.0-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/attr/libattr1_2.4.48-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/audit/libaudit1_2.8.5-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-client3_0.7-4+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/a/avahi/libavahi-common3_0.7-4+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth3_5.50-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/bluez/libbluetooth-dev_5.50-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi0.7_6.0+dfsg-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brltty/libbrlapi-dev_6.0+dfsg-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/b/brotli/libbrotli1_1.0.7-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2_1.16.0-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo2-dev_1.16.0-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/colord/libcolord2_1.4.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2_2.3.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcups2-dev_2.3.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2_2.3.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/c/cups/libcupsimage2-dev_2.3.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-3_1.12.16-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/d/dbus/libdbus-1-dev_1.12.16-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.45.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/e2fsprogs/libcom-err2_1.45.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf1_0.176-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/elfutils/libelf-dev_0.176-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1_2.2.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/e/expat/libexpat1-dev_2.2.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac8_1.3.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/flac/libflac-dev_1.3.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6_2.9.1-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/freetype/libfreetype6-dev_2.9.1-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi0_1.0.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/f/fribidi/libfribidi-dev_1.0.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libgcc-7-dev_7.4.0-14_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-7/libstdc++-7-dev_7.4.0-14_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libatomic1_9.2.1-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgcc1_9.2.1-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libgomp1_9.2.1-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gcc-9/libstdc++6_9.2.1-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.40.0+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.40.0+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-0_2.62.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glib2.0/libglib2.0-dev_2.62.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6_2.29-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/glibc/libc6-dev_2.29-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls28-dev_3.6.9-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls30_3.6.9-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-dane0_3.6.9-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutls-openssl27_3.6.9-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gnutls28/libgnutlsxx28_3.6.9-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-3_1.3.13-8_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/graphite2/libgraphite2-dev_1.3.13-8_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.12-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.12-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-0_3.96.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/g/gtk+4.0/libgtk-4-dev_3.96.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz0b_2.6.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.6.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.6.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.6.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/i/icu/libicu63_63.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/keyutils/libkeyutils1_1.6-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/krb5-multidev_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssapi-krb5-2_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libgssrpc4_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libk5crypto3_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5clnt-mit11_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkadm5srv-mit11_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkdb5-9_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-3_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5-dev_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/k/krb5/libkrb5support0_1.17-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libb/libbsd/libbsd0_0.10.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap2_2.25-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap2/libcap-dev_2.25-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr490+repack1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr490+repack1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr490+repack1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm2_2.4.99-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.99-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-dev_2.4.99-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.99-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.99-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy0_1.5.3-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.3-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi6_3.2.1-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi7_3.3~rc0-8_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libf/libffi/libffi-dev_3.2.1-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.5-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libegl1_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgl1_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles1_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libgles2_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd0_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libglx0_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libglvnd/libopengl0_1.1.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error0_1.36-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.36-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libice/libice6_1.0.9-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn2/libidn2-0_2.2.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libidn/libidn11_1.33-2.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b8_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpsl/libpsl5_0.20.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1_2.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libselinux/libselinux1-dev_2.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1_2.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsepol/libsepol1-dev_2.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsm/libsm6_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsndfile/libsndfile1_1.0.28-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.68.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.68.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtasn1-6/libtasn1-6_4.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libthai/libthai0_0.1.28-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libt/libtool/libltdl7_2.4.6-11_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libu/libunistring/libunistring2_0.9.10-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva2_2.5.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-dev_2.5.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-drm2_2.5.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-glx2_2.5.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-wayland2_2.5.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libva/libva-x11-2_2.5.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbis0a_1.3.6-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx6_1.8.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libv/libvpx/libvpx-dev_1.8.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp6_0.6.1-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-6_1.6.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-dev_1.6.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb1_1.6.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libx11/libx11-xcb-dev_1.6.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb1-dev_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-dri3-0_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-present0_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-render0-dev_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-sync1_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcb/libxcb-xfixes0_1.13.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext6_1.3.3-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi6_1.7.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxi/libxi-dev_1.7.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt6_1.1.5-1+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxt/libxt-dev_1.1.5-1+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/libz/libzstd/libzstd1_1.4.3+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lcms2/liblcms2-2_2.9-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/linux/linux-libc-dev_5.2.17-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lz4/liblz4-1_1.9.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/l/lzo2/liblzo2-2_2.10-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libegl1-mesa-dev_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm1_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgbm-dev_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-dev_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libgl1-mesa-glx_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libglapi-mesa_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/libwayland-egl1-mesa_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/mesa/mesa-common-dev_19.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libhogweed4_3.5.1+really3.4.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nettle/libnettle6_3.5.1+really3.4.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4_4.21-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nspr/libnspr4-dev_4.21-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3_3.45-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/n/nss/libnss3-dev_3.45-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl1.1_1.1.1d-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/openssl/libssl-dev_1.1.1d-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus0_1.3-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/o/opus/libopus-dev_1.3-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/p11-kit/libp11-kit0_0.23.17-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g_1.3.1-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pam/libpam0g-dev_1.3.1-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci3_3.6.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pciutils/libpci-dev_3.6.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-16-0_10.32-5+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-32-0_10.32-5+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-8-0_10.32-5+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-dev_10.32-5+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre2/libpcre2-posix0_10.32-5+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre16-3_8.39-12+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre32-3_8.39-12+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3_8.39-12+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcre3-dev_8.39-12+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-12+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-1_0.2.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libpipewire-0.2-dev_0.2.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pipewire/libspa-lib-0.1-dev_0.2.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-0_0.36.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pixman/libpixman-1-dev_0.36.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse0_13.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-dev_13.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_13.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-5_20190901+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/r/re2/libre2-dev_20190901+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/shared-mime-info/shared-mime-info_1.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy1v5_1.1.7-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/snappy/libsnappy-dev_1.1.7-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd2_0.9.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.9.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/speech-dispatcher/speech-dispatcher_0.9.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/sqlite3/libsqlite3-0_3.30.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libsystemd0_242-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev1_242-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/s/systemd/libudev-dev_242-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-28_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/t/tiff/libtiff5_4.0.10+git191003-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/unbound/libunbound8_1.9.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid1_2.34-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libblkid-dev_2.34-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount1_2.34-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libmount-dev_2.34-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/libuuid1_2.34-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/u/util-linux/uuid-dev_2.34-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/v/vulkan-loader/libvulkan1_1.1.121.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-client0_1.17.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-cursor0_1.17.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-dev_1.17.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-egl1_1.17.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland/libwayland-server0_1.17.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/w/wayland-protocols/wayland-protocols_1.18-1_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-fixes-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-input-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-kb-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-randr-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-record-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-render-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/x/xz-utils/liblzma5_5.2.4-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191015T084824Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1+b1_mipsel.deb
diff --git a/build/linux/sysroot_scripts/sysroot-creator-sid.sh b/build/linux/sysroot_scripts/sysroot-creator-sid.sh index d098b75..95531e22 100755 --- a/build/linux/sysroot_scripts/sysroot-creator-sid.sh +++ b/build/linux/sysroot_scripts/sysroot-creator-sid.sh
@@ -14,16 +14,18 @@ # like libc6 would take precedence over the sid (released) versions. While this # may be useful for certain kinds of development, the standard sysroots should # continue to be shipped only with released packages. +# Also keep "stretch" before "sid" and "experimental". For now, it's needed to +# bring back libgnome-keyring-dev which has since been deprecated and removed +# from sid. It will be needed until gnome keyring is removed +# (http://crbug.com/466975 and http://crbug.com/355223). ARCHIVE_URL="https://snapshot.debian.org/archive/debian" -ARCHIVE_TIMESTAMP=20181214T150526Z -APT_SOURCES_LIST="${ARCHIVE_URL}/${ARCHIVE_TIMESTAMP}/ experimental main +ARCHIVE_TIMESTAMP=20191015T084824Z +APT_SOURCES_LIST="${ARCHIVE_URL}/${ARCHIVE_TIMESTAMP}/ stretch main +${ARCHIVE_URL}/${ARCHIVE_TIMESTAMP}/ experimental main ${ARCHIVE_URL}/${ARCHIVE_TIMESTAMP}/ sid main" -# gpg keyring file generated using: -# export KEYS="518E17E1 46925553 2B90D010 C857C906 F66AEC98 8AE22BA9 1A7B6500" -# gpg --recv-keys $KEYS -# gpg --output ./debian-archive-sid-stable.gpg --export $KEYS -KEYRING_FILE="${SCRIPT_DIR}/debian-archive-sid-stable.gpg" +# gpg keyring file generated using generate_debian_archive_unstable.sh +KEYRING_FILE="${SCRIPT_DIR}/debian_archive_unstable.gpg" HAS_ARCH_AMD64=1 HAS_ARCH_I386=1 @@ -57,11 +59,13 @@ libaudit1 libavahi-client3 libavahi-common3 + libblkid-dev libblkid1 libbluetooth-dev libbluetooth3 libbrlapi-dev - libbrlapi0.6 + libbrlapi0.7 + libbrotli1 libbsd0 libc6 libc6-dev @@ -115,7 +119,7 @@ libfribidi0 libgbm-dev libgbm1 - libgcc-6-dev + libgcc-7-dev libgcc1 libgcrypt20 libgcrypt20-dev @@ -162,7 +166,6 @@ libice6 libicu-le-hb0 libicu63 - libicu60 libidl-2-0 libidn11 libidn2-0 @@ -189,6 +192,7 @@ liblzo2-2 libminizip-dev libminizip1 + libmount-dev libmount1 libnettle6 libnspr4 @@ -201,8 +205,6 @@ libopengl0 libopus-dev libopus0 - liborbit-2-0 - liborbit2 libp11-kit0 libpam0g libpam0g-dev @@ -216,6 +218,11 @@ libpci3 libpciaccess0 libpcre16-3 + libpcre2-16-0 + libpcre2-32-0 + libpcre2-8-0 + libpcre2-dev + libpcre2-posix0 libpcre3 libpcre3-dev libpcre32-3 @@ -231,10 +238,13 @@ libpulse-dev libpulse-mainloop-glib0 libpulse0 - libre2-4 + libre2-5 libre2-dev librest-0.7-0 + libselinux1-dev libselinux1 + libsepol1-dev + libsepol1 libsm6 libsnappy-dev libsnappy1v5 @@ -246,9 +256,8 @@ libspeechd2 libsqlite3-0 libssl-dev - libssl1.0.2 libssl1.1 - libstdc++-6-dev + libstdc++-7-dev libstdc++6 libsystemd0 libtasn1-6 @@ -268,7 +277,7 @@ libvorbis0a libvorbisenc2 libvpx-dev - libvpx5 + libvpx6 libvulkan1 libwayland-client0 libwayland-cursor0 @@ -366,7 +375,7 @@ " DEBIAN_PACKAGES_X86=" - libasan3 + libasan4 libcilkrts5 libdrm-intel1 libitm1 @@ -376,7 +385,8 @@ " DEBIAN_PACKAGES_ARM=" - libasan3 + libasan4 + libcilkrts5 libdrm-etnaviv1 libdrm-exynos1 libdrm-freedreno1 @@ -386,18 +396,21 @@ " DEBIAN_PACKAGES_ARM64=" - libasan3 + libasan4 libdrm-etnaviv1 libdrm-freedreno1 libdrm-tegra0 libgmp10 libitm1 + liblsan0 libthai0 + libtsan0 libubsan0 " DEBIAN_PACKAGES_ARMEL=" - libasan3 + libasan4 + libcilkrts5 libdrm-exynos1 libdrm-freedreno1 libdrm-omap1 @@ -405,4 +418,7 @@ libubsan0 " +DEBIAN_PACKAGES_MIPS64EL=" +" + . "${SCRIPT_DIR}/sysroot-creator.sh"
diff --git a/build/linux/sysroot_scripts/sysroot-creator.sh b/build/linux/sysroot_scripts/sysroot-creator.sh index 48513f2..9d47ddb 100644 --- a/build/linux/sysroot_scripts/sysroot-creator.sh +++ b/build/linux/sysroot_scripts/sysroot-creator.sh
@@ -104,7 +104,10 @@ local hash="$(echo "$url" | sha256sum | cut -d' ' -f1)" DownloadOrCopy "${url}" "${dest}.${hash}" - cp "${dest}.${hash}" "$dest" + # cp the file to prevent having to redownload it, but mv it to the + # final location so that it's atomic. + cp "${dest}.${hash}" "${dest}.$$" + mv "${dest}.$$" "${dest}" } DownloadOrCopy() { @@ -119,10 +122,25 @@ SubBanner "downloading from $1 -> $2" # Appending the "$$" shell pid is necessary here to prevent concurrent # instances of sysroot-creator.sh from trying to write to the same file. - # --create-dirs is added in case there are slashes in the filename, as can - # happen with the "debian/security" release class. - curl -L "$1" --create-dirs -o "${2}.partial.$$" - mv "${2}.partial.$$" $2 + local temp_file="${2}.partial.$$" + # curl --retry doesn't retry when the page gives a 4XX error, so we need to + # manually rerun. + for i in {1..10}; do + # --create-dirs is added in case there are slashes in the filename, as can + # happen with the "debian/security" release class. + local http_code=$(curl -L "$1" --create-dirs -o "${temp_file}" \ + -w "%{http_code}") + if [ ${http_code} -eq 200 ]; then + break + fi + echo "Bad HTTP code ${http_code} when downloading $1" + rm -f "${temp_file}" + sleep $i + done + if [ ! -f "${temp_file}" ]; then + exit 1 + fi + mv "${temp_file}" $2 else SubBanner "copying from $1" cp "$1" "$2" @@ -240,7 +258,6 @@ local packages="$3" local dists="${DIST} ${DIST_UPDATES:-}" - local repos="main ${REPO_EXTRA:-}" local list_base="${BUILD_DIR}/Packages.${DIST}_${arch}" > "${list_base}" # Create (or truncate) a zero-length file. @@ -337,12 +354,27 @@ nm -D --defined-only --with-symbol-versions "${libc_so}" | \ "${SCRIPT_DIR}/find_incompatible_glibc_symbols.py" >> "${glob_h}" + # fcntl64() was introduced in glibc 2.28. Make sure to use fcntl() instead. + local fcntl_h="${INSTALL_ROOT}/usr/include/fcntl.h" + sed -i '{N; s/#ifndef \(__USE_FILE_OFFSET64\nextern int fcntl\)/#ifdef \1/}' \ + "${fcntl_h}" + # On i386, fcntl() was updated in glibc 2.28. + nm -D --defined-only --with-symbol-versions "${libc_so}" | \ + "${SCRIPT_DIR}/find_incompatible_glibc_symbols.py" >> "${fcntl_h}" + # This is for chrome's ./build/linux/pkg-config-wrapper # which overwrites PKG_CONFIG_LIBDIR internally SubBanner "Move pkgconfig scripts" mkdir -p ${INSTALL_ROOT}/usr/lib/pkgconfig mv ${INSTALL_ROOT}/usr/lib/${arch}-${os}/pkgconfig/* \ ${INSTALL_ROOT}/usr/lib/pkgconfig + + # Temporary workaround for invalid implicit conversion from void* in pipewire. + # This is already fixed upstream in [1], so this can be removed once it rolls + # into Debian. + # [1] https://github.com/PipeWire/pipewire/commit/371da358d1580dc06218d18a12a99611cac39e4e + local pipewire_utils_h="${INSTALL_ROOT}/usr/include/pipewire/utils.h" + sed -i 's/malloc/(struct spa_pod*)malloc/' "${pipewire_utils_h}" }
diff --git a/build/linux/sysroot_scripts/sysroots.json b/build/linux/sysroot_scripts/sysroots.json index 188909d..a24042d 100644 --- a/build/linux/sysroot_scripts/sysroots.json +++ b/build/linux/sysroot_scripts/sysroots.json
@@ -1,36 +1,36 @@ { "sid_amd64": { - "Sha1Sum": "e7c53f04bd88d29d075bfd1f62b073aeb69cbe09", + "Sha1Sum": "bcc994cc6e5d4d6f0eec8b44e7f0a65f5a1a7b90", "SysrootDir": "debian_sid_amd64-sysroot", "Tarball": "debian_sid_amd64_sysroot.tar.xz" }, "sid_arm": { - "Sha1Sum": "ef5c4f84bcafb7a3796d36bb1db7826317dde51c", + "Sha1Sum": "76e6068f9f6954e2ab1ff98ce5fa236d3d85bcbd", "SysrootDir": "debian_sid_arm-sysroot", "Tarball": "debian_sid_arm_sysroot.tar.xz" }, "sid_arm64": { - "Sha1Sum": "953c2471bc7e71a788309f6c2d2003e8b703305d", + "Sha1Sum": "1b47b4930e197ab92d67c5fad1246cf27fa3b0ab", "SysrootDir": "debian_sid_arm64-sysroot", "Tarball": "debian_sid_arm64_sysroot.tar.xz" }, "sid_armel": { - "Sha1Sum": "07a9da7e88e8b6fa550b053e4338c2caa4db15f0", + "Sha1Sum": "6f2b39bdf73db9d378c5309f4a7ec050b97e771e", "SysrootDir": "debian_sid_armel-sysroot", "Tarball": "debian_sid_armel_sysroot.tar.xz" }, "sid_i386": { - "Sha1Sum": "9e6279438ece6fb42b5333ca90d5e9d0c188a403", + "Sha1Sum": "632bb77cc527cc90b94a302f550d99e99baaab87", "SysrootDir": "debian_sid_i386-sysroot", "Tarball": "debian_sid_i386_sysroot.tar.xz" }, "sid_mips": { - "Sha1Sum": "958731a68a169631c0450efb15410ccc4135ef2a", + "Sha1Sum": "8d58231734ef581d33e3ff620cfa3d6ff7a7d964", "SysrootDir": "debian_sid_mips-sysroot", "Tarball": "debian_sid_mips_sysroot.tar.xz" }, "sid_mips64el": { - "Sha1Sum": "51ca1f4092ac76ad1a1da953f0f3ce1aea947a42", + "Sha1Sum": "2a44ca6e7e1f442ed2f29c84805637c278cbe2a2", "SysrootDir": "debian_sid_mips64el-sysroot", "Tarball": "debian_sid_mips64el_sysroot.tar.xz" }
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index e875848..33770ddc 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -2496,7 +2496,6 @@ "java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java", "java/src/org/chromium/chrome/browser/crash/PureJavaExceptionHandler.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java", - "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java", "java/src/org/chromium/chrome/browser/database/SQLiteCursor.java", "java/src/org/chromium/chrome/browser/device_dialog/BluetoothChooserDialog.java", "java/src/org/chromium/chrome/browser/device_dialog/BluetoothScanningPermissionDialog.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni index f072f9b6..a613b8fb 100644 --- a/chrome/android/chrome_test_java_sources.gni +++ b/chrome/android/chrome_test_java_sources.gni
@@ -122,7 +122,6 @@ "javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModulePostMessageTest.java", "javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleTestUtils.java", "javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java", - "javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetricsTest.java", "javatests/src/org/chromium/chrome/browser/datareduction/DataReductionPromoUtilsTest.java", "javatests/src/org/chromium/chrome/browser/datareduction/DataReductionSavingsMilestonePromoTest.java", "javatests/src/org/chromium/chrome/browser/dependency_injection/ModuleOverridesRule.java",
diff --git a/chrome/android/java/res/layout/ephemeral_tab_caption_view.xml b/chrome/android/java/res/layout/ephemeral_tab_caption_view.xml index fc0ce634..6ff3cd3c 100644 --- a/chrome/android/java/res/layout/ephemeral_tab_caption_view.xml +++ b/chrome/android/java/res/layout/ephemeral_tab_caption_view.xml
@@ -3,14 +3,26 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<!-- Ephemeral Tab caption view where we display 'Open in new tab'. Hidden in - peeked state, and gets visible only when being expanded to maximized state. --> -<FrameLayout +<!-- Ephemeral Tab caption view where we display 'Open in new tab'. Hidden in + peeked state, and gets visible only when being expanded to maximized state. + + In the new layout, we display security level information with URL like in + CCT header. Always visible. --> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/ephemeral_tab_caption_view" + android:orientation="horizontal" + android:gravity="center" style="@style/ContextualSearchTextViewLayout" > + <org.chromium.ui.widget.ChromeImageView + android:id="@+id/security_icon" + android:layout_width="@dimen/preview_tab_security_icon_size" + android:layout_height="@dimen/preview_tab_security_icon_size" + android:layout_marginStart="4dp" + android:visibility="gone" + app:tint="@color/default_icon_color" /> <TextView android:id="@+id/ephemeral_tab_caption" style="@style/ContextualSearchCaptionTextView" /> -</FrameLayout> - +</LinearLayout>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index 9215347..15d58de 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -140,6 +140,7 @@ <!-- Preview tab dimensions --> <dimen name="preview_tab_toolbar_height">70dp</dimen> <dimen name="preview_tab_favicon_size">24dp</dimen> + <dimen name="preview_tab_security_icon_size">16dp</dimen> <!-- Autofill keyboard accessory dimensions --> <dimen name="keyboard_accessory_height_with_shadow">56dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabBarControl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabBarControl.java index 74124a7..97fab76 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabBarControl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabBarControl.java
@@ -8,7 +8,6 @@ import android.view.ViewGroup; import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; /** @@ -37,7 +36,7 @@ public EphemeralTabBarControl(EphemeralTabPanel panel, Context context, ViewGroup container, DynamicResourceLoader loader) { mTitle = new EphemeralTabTitleControl(panel, context, container, loader); - mCaption = panel.canPromoteToNewTab() + mCaption = EphemeralTabPanel.isNewLayout() || panel.canPromoteToNewTab() ? new EphemeralTabCaptionControl(panel, context, container, loader) : null; mTextLayerMinHeight = @@ -66,11 +65,14 @@ * @param percentage The percentage to the more opened state. */ public void updateForCloseOrPeek(float percentage) { - if (ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT)) return; + if (EphemeralTabPanel.isNewLayout()) { + updateForMaximize(SOLID_OPAQUE); + } else { + if (percentage == SOLID_OPAQUE) updateForMaximize(SOLID_TRANSPARENT); - if (percentage == SOLID_OPAQUE) updateForMaximize(SOLID_TRANSPARENT); - // When the panel is completely closed the caption should be hidden. - if (percentage == SOLID_TRANSPARENT && mCaption != null) mCaption.hide(); + // When the panel is completely closed the caption should be hidden. + if (percentage == SOLID_TRANSPARENT && mCaption != null) mCaption.hide(); + } } /** @@ -78,8 +80,6 @@ * @param percentage The percentage to the more opened state. */ public void updateForMaximize(float percentage) { - if (ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT)) return; - if (mCaption != null) mCaption.updatePanelForMaximization(percentage); } @@ -112,7 +112,7 @@ * */ public float getCaptionAnimationPercentage() { - return mCaption != null ? mCaption.getAnimationPercentage() : 0; + return mCaption.getAnimationPercentage(); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCaptionControl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCaptionControl.java index fd7a960..37dad45 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCaptionControl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCaptionControl.java
@@ -7,12 +7,15 @@ import android.content.Context; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.DrawableRes; + +import org.chromium.base.Supplier; import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeFeatureList; -import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel; import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelTextViewInflater; +import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; /** @@ -29,28 +32,32 @@ /** The caption visibility. */ private boolean mIsVisible; + private Supplier<String> mUrl; + /** * The caption animation percentage, which controls how and where to draw. It is * 0 when the Contextual Search bar is peeking and 1 when it is maxmized. */ private float mAnimationPercentage; + private @DrawableRes int mIconId; + private float mIconOpacity; + /** * @param panel The panel. * @param context The Android Context used to inflate the View. * @param container The container View used to inflate the View. * @param resourceLoader The resource loader that will handle the snapshot capturing. */ - public EphemeralTabCaptionControl(OverlayPanel panel, Context context, ViewGroup container, + public EphemeralTabCaptionControl(EphemeralTabPanel panel, Context context, ViewGroup container, DynamicResourceLoader resourceLoader) { super(panel, R.layout.ephemeral_tab_caption_view, R.id.ephemeral_tab_caption_view, context, container, resourceLoader, - (ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT) - ? R.dimen.overlay_panel_end_buttons_width - : R.dimen.overlay_panel_padded_button_width), - (ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT) - ? R.dimen.overlay_panel_end_buttons_width - : R.dimen.overlay_panel_padded_button_width)); + (EphemeralTabPanel.isNewLayout() ? R.dimen.overlay_panel_end_buttons_width + : R.dimen.overlay_panel_padded_button_width), + (EphemeralTabPanel.isNewLayout() ? R.dimen.overlay_panel_end_buttons_width + : R.dimen.overlay_panel_padded_button_width)); + mUrl = panel::getUrl; } /** @@ -65,7 +72,12 @@ if (mCaption == null) { // |mCaption| gets initialized synchronously in |onFinishInflate|. inflate(); - mCaption.setText(R.string.contextmenu_open_in_new_tab); + if (EphemeralTabPanel.isNewLayout()) { + mCaption.setText( + UrlFormatter.formatUrlForSecurityDisplayOmitScheme(mUrl.get())); + } else { + mCaption.setText(R.string.contextmenu_open_in_new_tab); + } } invalidate(); mIsVisible = true; @@ -75,6 +87,28 @@ if (mAnimationPercentage == 0.f) mShowingCaption = false; } + /** Sets the security icon. */ + public void setSecurityIcon(@DrawableRes int resId) { + mIconId = resId; + ImageView securityIcon = (ImageView) getView().findViewById(R.id.security_icon); + securityIcon.setImageResource(resId); + } + + /** @return Security icon resource ID */ + public @DrawableRes int getIconId() { + return mIconId; + } + + /** Sets the security icon opacity. */ + public void setIconOpacity(float opacity) { + mIconOpacity = opacity; + } + + /** @return Security icon opacity. */ + public float getIconOpacity() { + return mIconOpacity; + } + /** * Hides the caption. */ @@ -102,7 +136,7 @@ * @return The current percentage ranging from 0.0 to 1.0. */ public float getAnimationPercentage() { - return mAnimationPercentage; + return EphemeralTabPanel.isNewLayout() ? 1.f : mAnimationPercentage; } /** @@ -127,5 +161,8 @@ View view = getView(); mCaption = (TextView) view.findViewById(R.id.ephemeral_tab_caption); + if (EphemeralTabPanel.isNewLayout()) { + view.findViewById(R.id.security_icon).setVisibility(View.VISIBLE); + } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java index e2009f8..3b362c4d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java
@@ -163,7 +163,7 @@ } @DrawableRes - private static int getSecurityIconResource(@ConnectionSecurityLevel int securityLevel) { + static int getSecurityIconResource(@ConnectionSecurityLevel int securityLevel) { switch (securityLevel) { case ConnectionSecurityLevel.NONE: case ConnectionSecurityLevel.WARNING:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java index f6c31e2..ccfea5a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java
@@ -6,6 +6,7 @@ import android.content.Context; import android.graphics.RectF; +import android.text.TextUtils; import android.view.MotionEvent; import org.chromium.base.SysUtils; @@ -25,6 +26,7 @@ import org.chromium.chrome.browser.compositor.layouts.eventfilter.OverlayPanelEventFilter; import org.chromium.chrome.browser.compositor.scene_layer.EphemeralTabSceneLayer; import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer; +import org.chromium.chrome.browser.ssl.SecurityStateModel; import org.chromium.chrome.browser.tab.SadTab; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabLaunchType; @@ -32,14 +34,12 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver; import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; import org.chromium.chrome.browser.tabmodel.TabSelectionType; +import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.WebContents; import org.chromium.ui.base.PageTransition; import org.chromium.ui.resources.ResourceManager; -import java.net.MalformedURLException; -import java.net.URL; - /** * The panel containing an ephemeral tab. * TODO(jinsukkim): Write tests. @@ -76,10 +76,16 @@ /** Animation effect for favicon display. */ private CompositorAnimator mFaviconAnimation; + + /** Animation effect for security icon display . */ + private CompositorAnimator mCaptionAnimation; + private final AnimatorUpdateListener mFadeInAnimatorListener = animator -> mFaviconOpacity = animator.getAnimatedValue(); private final AnimatorUpdateListener mFadeOutAnimatorListener = animator -> mFaviconOpacity = 1.f - animator.getAnimatedValue(); + private final AnimatorUpdateListener mSecurityIconAnimationListener = animator + -> getBarControl().getCaptionControl().setIconOpacity(animator.getAnimatedValue()); /** * Checks if this feature (a.k.a. "Preview page/image") is supported. @@ -90,6 +96,10 @@ && !SysUtils.isLowEndDevice(); } + static boolean isNewLayout() { + return ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT); + } + /** * @param context The current Android {@link Context}. * @param updateHost The {@link LayoutUpdateHost} used to request updates in the Layout. @@ -125,17 +135,16 @@ private class EphemeralTabPanelContentDelegate extends OverlayContentDelegate { @Override public void onMainFrameLoadStarted(String url, boolean isExternalUrl) { - try { - String newHost = new URL(url).getHost(); - String curHost = new URL(mUrl).getHost(); - if (!newHost.equals(curHost)) { - mUrl = url; - // Resets to default icon if favicon may need updating. - startFaviconAnimation(false); - } - } catch (MalformedURLException e) { - assert false : "Malformed URL should not be passed."; - } + if (TextUtils.equals(mUrl, url)) return; + mUrl = url; + + // Resets to default icon if favicon may need updating. + startFaviconAnimation(false); + } + + @Override + public void onSSLStateUpdated() { + if (isNewLayout()) updateCaption(); } } @@ -257,6 +266,21 @@ mFaviconAnimation.start(); } + private void updateCaption() { + if (mCaptionAnimation != null) mCaptionAnimation.cancel(); + int securityLevel = SecurityStateModel.getSecurityLevelForWebContents(getWebContents()); + EphemeralTabCaptionControl caption = getBarControl().getCaptionControl(); + caption.getTextView().setText(UrlFormatter.formatUrlForSecurityDisplayOmitScheme( + getWebContents().getVisibleUrl())); + caption.setSecurityIcon(EphemeralTabCoordinator.getSecurityIconResource(securityLevel)); + + mCaptionAnimation = new CompositorAnimator(getAnimationHandler()); + mCaptionAnimation.setDuration(BASE_ANIMATION_DURATION_MS); + mCaptionAnimation.removeAllListeners(); + mCaptionAnimation.addUpdateListener(mSecurityIconAnimationListener); + mCaptionAnimation.start(); + } + /** * @return Snaptshot value of the favicon opacity. */ @@ -343,16 +367,12 @@ @Override protected void updatePanelForCloseOrPeek(float percentage) { super.updatePanelForCloseOrPeek(percentage); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT)) return; - getBarControl().updateForCloseOrPeek(percentage); } @Override protected void updatePanelForMaximization(float percentage) { super.updatePanelForMaximization(percentage); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT)) return; - getBarControl().updateForMaximize(percentage); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/EphemeralTabSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/EphemeralTabSceneLayer.java index 6a30f02..4479950 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/EphemeralTabSceneLayer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/EphemeralTabSceneLayer.java
@@ -92,12 +92,16 @@ int titleViewId = title.getViewId(); int captionViewId = 0; + int captionIconId = 0; + float captionIconOpacity = 0.f; float captionAnimationPercentage = 0.f; boolean captionVisible = false; if (caption != null) { captionViewId = caption.getViewId(); captionAnimationPercentage = caption.getAnimationPercentage(); + captionIconOpacity = caption.getIconOpacity(); captionVisible = caption.getIsVisible(); + captionIconId = caption.getIconId(); } boolean isProgressBarVisible = panel.isProgressBarVisible(); float progressBarHeight = panel.getProgressBarHeight(); @@ -107,18 +111,18 @@ WebContents panelWebContents = panel.getWebContents(); EphemeralTabSceneLayerJni.get().update(mNativePtr, EphemeralTabSceneLayer.this, titleViewId, - captionViewId, captionAnimationPercentage, bar.getTextLayerMinHeight(), - bar.getTitleCaptionSpacing(), captionVisible, R.drawable.progress_bar_background, - R.drawable.progress_bar_foreground, mDpToPx, panel.getBasePageBrightness(), - panel.getBasePageY() * mDpToPx, panelWebContents, panel.getOffsetX() * mDpToPx, - panel.getOffsetY() * mDpToPx, panel.getWidth() * mDpToPx, - panel.getHeight() * mDpToPx, panel.getBarBackgroundColor(), - panel.getBarMarginSide() * mDpToPx, panel.getBarMarginTop() * mDpToPx, - panel.getBarHeight() * mDpToPx, panel.isBarBorderVisible(), - panel.getBarBorderHeight() * mDpToPx, panel.getBarShadowVisible(), - panel.getIconColor(), panel.getDragHandlebarColor(), panel.getFaviconOpacity(), - isProgressBarVisible, progressBarHeight * mDpToPx, progressBarOpacity, - progressBarCompletion, separatorLineColor); + captionViewId, captionIconId, captionIconOpacity, captionAnimationPercentage, + bar.getTextLayerMinHeight(), bar.getTitleCaptionSpacing(), captionVisible, + R.drawable.progress_bar_background, R.drawable.progress_bar_foreground, mDpToPx, + panel.getBasePageBrightness(), panel.getBasePageY() * mDpToPx, panelWebContents, + panel.getOffsetX() * mDpToPx, panel.getOffsetY() * mDpToPx, + panel.getWidth() * mDpToPx, panel.getHeight() * mDpToPx, + panel.getBarBackgroundColor(), panel.getBarMarginSide() * mDpToPx, + panel.getBarMarginTop() * mDpToPx, panel.getBarHeight() * mDpToPx, + panel.isBarBorderVisible(), panel.getBarBorderHeight() * mDpToPx, + panel.getBarShadowVisible(), panel.getIconColor(), panel.getDragHandlebarColor(), + panel.getFaviconOpacity(), isProgressBarVisible, progressBarHeight * mDpToPx, + progressBarOpacity, progressBarCompletion, separatorLineColor); } @Override @@ -137,8 +141,9 @@ @Override protected void initializeNative() { - if (mNativePtr == 0) + if (mNativePtr == 0) { mNativePtr = EphemeralTabSceneLayerJni.get().init(EphemeralTabSceneLayer.this); + } assert mNativePtr != 0; } @@ -166,8 +171,9 @@ int barShadowResourceId, int panelIconResourceId, int dragHandlebarResourceId, int openTabIconResourceId, int closeIconResourceId); void update(long nativeEphemeralTabSceneLayer, EphemeralTabSceneLayer caller, - int titleViewId, int captionViewId, float captionAnimationPercentage, - float textLayerMinHeight, float titleCaptionSpacing, boolean captionVisible, + int titleViewId, int captionViewId, int captionIconId, float captionIconOpacity, + float captionAnimationPercentage, float textLayerMinHeight, + float titleCaptionSpacing, boolean captionVisible, int progressBarBackgroundResourceId, int progressBarResourceId, float dpToPx, float basePageBrightness, float basePageYOffset, WebContents webContents, float panelX, float panelY, float panelWidth, float panelHeight,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java index 769cc31..a3d30da8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java
@@ -25,7 +25,6 @@ import org.chromium.base.ObserverList; import org.chromium.base.VisibleForTesting; import org.chromium.base.task.AsyncTask; -import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; import org.chromium.chrome.browser.ChromeApplication; import org.chromium.chrome.browser.ChromeFeatureList; @@ -306,7 +305,6 @@ public void destroyModule(@DestructionReason int reason) { if (mModuleEntryPoint == null) return; - ModuleMetrics.recordCodeMemoryFootprint(mComponentName.getPackageName(), "OnModuleDestroy"); ModuleMetrics.recordDestruction(reason); mModuleEntryPoint.onDestroy(); CrashKeys.getInstance().set(CrashKeyIndex.ACTIVE_DYNAMIC_MODULE, null); @@ -528,12 +526,6 @@ runAndClearCallbacks(); sendAllBundles(); - // Recording the metric may take some time, and this runs on the UI thread, don't - // block the UI thread on it. - PostTask.postTask(TaskTraits.BEST_EFFORT_MAY_BLOCK, () -> { - ModuleMetrics.recordCodeMemoryFootprint( - mComponentName.getPackageName(), "OnModuleLoad"); - }); return; } catch (Exception e) { // No multi-catch below API level 19 for reflection exceptions.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java index cdf137a..17a53e3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java
@@ -10,8 +10,6 @@ import androidx.annotation.StringDef; import org.chromium.base.Log; -import org.chromium.base.annotations.JNINamespace; -import org.chromium.base.annotations.NativeMethods; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.metrics.UmaSessionStats; @@ -21,7 +19,6 @@ /** * Records metrics related to custom tabs dynamic modules. */ -@JNINamespace("customtabs") public final class ModuleMetrics { private ModuleMetrics() {} @@ -168,19 +165,4 @@ public static void registerLifecycleState(@LifecycleState String state) { UmaSessionStats.registerSyntheticFieldTrial(LIFECYCLE_STATE_TRIAL_NAME, state); } - - /** - * Records the size of the memory occupied by a custom tabs dynamic module's code. - * - * @param packageName package name of the module for which the memory footprint is recorded. - * @param suffix Histogram suffix. - */ - public static void recordCodeMemoryFootprint(String packageName, String suffix) { - ModuleMetricsJni.get().recordCodeMemoryFootprint(packageName, suffix); - } - - @NativeMethods - interface Natives { - void recordCodeMemoryFootprint(String packageName, String suffix); - } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetricsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetricsTest.java deleted file mode 100644 index 5c8865f8..0000000 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetricsTest.java +++ /dev/null
@@ -1,69 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.customtabs.dynamicmodule; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import org.chromium.base.library_loader.LibraryLoader; -import org.chromium.base.library_loader.LibraryProcessType; -import org.chromium.base.metrics.RecordHistogram; -import org.chromium.base.test.util.MetricsUtils.HistogramDelta; -import org.chromium.chrome.test.ChromeJUnit4ClassRunner; - -/** - * Test for recording memory footprint for a loaded module - */ - -@RunWith(ChromeJUnit4ClassRunner.class) -public class ModuleMetricsTest { - private static final String PROPORTIONAL_SET_HISTOGRAM_NAME = - "CustomTabs.DynamicModule.ProportionalSet.OnModuleLoad"; - - private static final String RESIDENT_SET_HISTOGRAM_NAME = - "CustomTabs.DynamicModule.ResidentSet.OnModuleLoad"; - - @Before - public void setUp() { - LibraryLoader.getInstance().ensureInitialized(LibraryProcessType.PROCESS_BROWSER); - } - - @Test - @SmallTest - public void testModuleMetrics() { - int samplesRecordedForProportionalSet = - RecordHistogram.getHistogramTotalCountForTesting(PROPORTIONAL_SET_HISTOGRAM_NAME); - - int samplesRecordedForResidentSet = - RecordHistogram.getHistogramTotalCountForTesting(RESIDENT_SET_HISTOGRAM_NAME); - - HistogramDelta histogramProportionalSet = - new HistogramDelta(PROPORTIONAL_SET_HISTOGRAM_NAME, 0); - - HistogramDelta histogramResidentSet = new HistogramDelta(RESIDENT_SET_HISTOGRAM_NAME, 0); - - Context context = InstrumentationRegistry.getInstrumentation() - .getTargetContext() - .getApplicationContext(); - - ModuleMetrics.recordCodeMemoryFootprint(context.getPackageName(), "OnModuleLoad"); - - Assert.assertEquals(samplesRecordedForProportionalSet + 1, - RecordHistogram.getHistogramTotalCountForTesting(PROPORTIONAL_SET_HISTOGRAM_NAME)); - - Assert.assertEquals(0, histogramProportionalSet.getDelta()); - - Assert.assertEquals(samplesRecordedForResidentSet + 1, - RecordHistogram.getHistogramTotalCountForTesting(RESIDENT_SET_HISTOGRAM_NAME)); - - Assert.assertEquals(0, histogramResidentSet.getDelta()); - } -}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java index a5d48f49..1bf85d80 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java
@@ -22,7 +22,6 @@ import android.accounts.Account; -import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -30,10 +29,9 @@ import org.mockito.Mock; import org.robolectric.annotation.Config; -import org.chromium.base.metrics.RecordHistogram; -import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.JniMocker; +import org.chromium.chrome.test.DisableNativeTestRule; import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountTrackerService; import org.chromium.components.signin.identitymanager.CoreAccountId; @@ -50,7 +48,10 @@ @Config(manifest = Config.NONE) public class SigninManagerTest { @Rule - public JniMocker mocker = new JniMocker(); + public final JniMocker mocker = new JniMocker(); + + @Rule + public final DisableNativeTestRule mDisableNative = new DisableNativeTestRule(); @Mock SigninManager.Natives mNativeMock; @@ -63,10 +64,6 @@ @Before public void setUp() { - // TODO(https://crbug.com/1007903): Use DisableNativeTestRule instead. - RecordHistogram.setDisabledForTests(true); - RecordUserAction.setDisabledForTests(true); - initMocks(this); mocker.mock(SigninManagerJni.TEST_HOOKS, mNativeMock); @@ -88,13 +85,6 @@ AccountManagerFacade.createAccountFromName("user@domain.com"), "gaia-id-user"); } - @After - public void tearDown() { - // TODO(https://crbug.com/1007903): Use DisableNativeTestRule instead. - RecordHistogram.setDisabledForTests(false); - RecordUserAction.setDisabledForTests(false); - } - @Test public void signOutFromJavaWithManagedDomain() { // Stub out various native calls. Some of these are verified as never called
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index febf576..116b5fcd 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -1571,6 +1571,14 @@ desc="Message shown in the download shelf when a download is being scanned"> <ph name="FILE_NAME">$1<ex>bla.exe</ex></ph> is being scanned. </message> + <message name="IDS_PROMPT_DOWNLOAD_BLOCKED_TOO_LARGE" + desc="Message shown in the download shelf when a download is blocked for being too large"> + <ph name="FILE_NAME">$1<ex>bla.exe</ex></ph> is too large for cloud scanning and has been blocked from opening. + </message> + <message name="IDS_PROMPT_DOWNLOAD_BLOCKED_PASSWORD_PROTECTED" + desc="Message shown in the download shelf when a download is blocked for being encrypted"> + <ph name="FILE_NAME">$1<ex>bla.exe</ex></ph> is encrypted and has been blocked from opening. + </message> <message name="IDS_BLOCK_REASON_UNCOMMON_DOWNLOAD" desc="Message shown to the user on chrome://downloads page to explain that this download is blocked because it is uncommon."> This file is not commonly downloaded and may be dangerous.
diff --git a/chrome/app/generated_resources_grd/IDS_PROMPT_DOWNLOAD_BLOCKED_PASSWORD_PROTECTED.png.sha1 b/chrome/app/generated_resources_grd/IDS_PROMPT_DOWNLOAD_BLOCKED_PASSWORD_PROTECTED.png.sha1 new file mode 100644 index 0000000..5929039 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_PROMPT_DOWNLOAD_BLOCKED_PASSWORD_PROTECTED.png.sha1
@@ -0,0 +1 @@ +9bc182612f9e3a001fd0526fc87ceaccfb368d92 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_PROMPT_DOWNLOAD_BLOCKED_TOO_LARGE.png.sha1 b/chrome/app/generated_resources_grd/IDS_PROMPT_DOWNLOAD_BLOCKED_TOO_LARGE.png.sha1 new file mode 100644 index 0000000..d693658 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_PROMPT_DOWNLOAD_BLOCKED_TOO_LARGE.png.sha1
@@ -0,0 +1 @@ +226df1af4a62cd6960e464498bf3eac5d9b8c43f \ No newline at end of file
diff --git a/chrome/app_shim/app_shim_controller.h b/chrome/app_shim/app_shim_controller.h index b3f10a9..bf1671c 100644 --- a/chrome/app_shim/app_shim_controller.h +++ b/chrome/app_shim/app_shim_controller.h
@@ -13,7 +13,9 @@ #include "base/mac/scoped_nsobject.h" #include "chrome/common/mac/app_shim.mojom.h" #include "chrome/common/mac/app_shim_param_traits.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/platform/named_platform_channel.h" #include "mojo/public/cpp/system/isolated_connection.h" #include "url/gurl.h" @@ -69,8 +71,9 @@ void ChannelError(uint32_t custom_reason, const std::string& description); void BootstrapChannelError(uint32_t custom_reason, const std::string& description); - void OnShimConnectedResponse(apps::AppShimLaunchResult result, - chrome::mojom::AppShimRequest app_shim_request); + void OnShimConnectedResponse( + apps::AppShimLaunchResult result, + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver); // chrome::mojom::AppShim implementation. void CreateRemoteCocoaApplication( @@ -128,11 +131,11 @@ base::scoped_nsobject<NSRunningApplication> chrome_launched_by_app_; mojo::IsolatedConnection bootstrap_mojo_connection_; - chrome::mojom::AppShimHostBootstrapPtr host_bootstrap_; + mojo::Remote<chrome::mojom::AppShimHostBootstrap> host_bootstrap_; - mojo::Binding<chrome::mojom::AppShim> shim_binding_; - chrome::mojom::AppShimHostPtr host_; - chrome::mojom::AppShimHostRequest host_request_; + mojo::Receiver<chrome::mojom::AppShim> shim_receiver_{this}; + mojo::Remote<chrome::mojom::AppShimHost> host_; + mojo::PendingReceiver<chrome::mojom::AppShimHost> host_receiver_; base::scoped_nsobject<AppShimDelegate> delegate_; bool launch_app_done_;
diff --git a/chrome/app_shim/app_shim_controller.mm b/chrome/app_shim/app_shim_controller.mm index e9ccc98..fb7aaba 100644 --- a/chrome/app_shim/app_shim_controller.mm +++ b/chrome/app_shim/app_shim_controller.mm
@@ -27,13 +27,14 @@ #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/mac/app_mode_common.h" +#include "chrome/common/mac/app_shim.mojom.h" #include "chrome/common/process_singleton_lock_posix.h" #include "chrome/grit/generated_resources.h" #include "components/remote_cocoa/app_shim/application_bridge.h" #include "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h" #include "components/remote_cocoa/common/application.mojom.h" #include "content/public/browser/remote_cocoa.h" -#include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/platform/named_platform_channel.h" #include "mojo/public/cpp/platform/platform_channel.h" #include "ui/accelerated_widget_mac/window_resize_helper_mac.h" @@ -90,8 +91,7 @@ AppShimController::AppShimController(const Params& params) : params_(params), - shim_binding_(this), - host_request_(mojo::MakeRequest(&host_)), + host_receiver_(host_.BindNewPipeAndPassReceiver()), delegate_([[AppShimDelegate alloc] init]), launch_app_done_(false), attention_request_id_(0), @@ -303,9 +303,9 @@ mojo::ScopedMessagePipeHandle message_pipe = bootstrap_mojo_connection_.Connect(std::move(endpoint)); CHECK(message_pipe.is_valid()); - host_bootstrap_ = chrome::mojom::AppShimHostBootstrapPtr( - chrome::mojom::AppShimHostBootstrapPtrInfo(std::move(message_pipe), 0)); - host_bootstrap_.set_connection_error_with_reason_handler(base::BindOnce( + host_bootstrap_.Bind(mojo::PendingRemote<chrome::mojom::AppShimHostBootstrap>( + std::move(message_pipe), 0)); + host_bootstrap_.set_disconnect_with_reason_handler(base::BindOnce( &AppShimController::BootstrapChannelError, base::Unretained(this))); [delegate_ setController:this]; @@ -321,7 +321,7 @@ [delegate_ getFilesToOpenAtStartup:&app_shim_info->files]; host_bootstrap_->OnShimConnected( - std::move(host_request_), std::move(app_shim_info), + std::move(host_receiver_), std::move(app_shim_info), base::BindOnce(&AppShimController::OnShimConnectedResponse, base::Unretained(this))); } @@ -354,14 +354,14 @@ void AppShimController::OnShimConnectedResponse( apps::AppShimLaunchResult result, - chrome::mojom::AppShimRequest app_shim_request) { + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver) { if (result != apps::APP_SHIM_LAUNCH_SUCCESS) { Close(); return; } - shim_binding_.Bind(std::move(app_shim_request), - ui::WindowResizeHelperMac::Get()->task_runner()); - shim_binding_.set_connection_error_with_reason_handler( + shim_receiver_.Bind(std::move(app_shim_receiver), + ui::WindowResizeHelperMac::Get()->task_runner()); + shim_receiver_.set_disconnect_with_reason_handler( base::BindOnce(&AppShimController::ChannelError, base::Unretained(this))); std::vector<base::FilePath> files;
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 44ad6717..b8898714 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -2334,8 +2334,6 @@ "android/customtabs/detached_resource_request.cc", "android/customtabs/detached_resource_request.h", "android/customtabs/detached_resource_request_android.cc", - "android/customtabs/dynamicmodule/module_metrics.cc", - "android/customtabs/dynamicmodule/module_metrics.h", "android/customtabs/origin_verifier.cc", "android/customtabs/origin_verifier.h", "android/devtools_manager_delegate_android.cc",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS index c7689ad..04a70d7 100644 --- a/chrome/browser/DEPS +++ b/chrome/browser/DEPS
@@ -412,7 +412,6 @@ "+third_party/blink/public/mojom", "+third_party/blink/public/platform/web_float_point.h", "+third_party/blink/public/platform/web_gesture_event.h", - "+third_party/blink/public/platform/web_loading_behavior_flag.h", "+third_party/blink/public/platform/web_input_event.h", "+third_party/blink/public/platform/web_mouse_event.h", "+third_party/blink/public/platform/web_mouse_wheel_event.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index e609459..860c4cb 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2387,10 +2387,6 @@ {"enable-tls13-early-data", flag_descriptions::kEnableTLS13EarlyDataName, flag_descriptions::kEnableTLS13EarlyDataDescription, kOsAll, FEATURE_VALUE_TYPE(net::features::kEnableTLS13EarlyData)}, - {"enable-scroll-anchor-serialization", - flag_descriptions::kEnableScrollAnchorSerializationName, - flag_descriptions::kEnableScrollAnchorSerializationDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kScrollAnchorSerialization)}, #if defined(OS_ANDROID) {"interest-feed-content-suggestions", flag_descriptions::kInterestFeedContentSuggestionsName,
diff --git a/chrome/browser/accessibility/image_annotation_browsertest.cc b/chrome/browser/accessibility/image_annotation_browsertest.cc index b658a5a..d3860e2 100644 --- a/chrome/browser/accessibility/image_annotation_browsertest.cc +++ b/chrome/browser/accessibility/image_annotation_browsertest.cc
@@ -29,6 +29,7 @@ #include "services/image_annotation/public/cpp/image_processor.h" #include "services/image_annotation/public/mojom/constants.mojom.h" #include "services/image_annotation/public/mojom/image_annotation.mojom.h" +#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/connector.h" #include "services/service_manager/public/cpp/service.h" #include "services/service_manager/public/cpp/service_binding.h"
diff --git a/chrome/browser/android/compositor/layer/ephemeral_tab_layer.cc b/chrome/browser/android/compositor/layer/ephemeral_tab_layer.cc index 41d9bb0..cccae9c 100644 --- a/chrome/browser/android/compositor/layer/ephemeral_tab_layer.cc +++ b/chrome/browser/android/compositor/layer/ephemeral_tab_layer.cc
@@ -27,7 +27,7 @@ const float bar_margin, const base::RepeatingCallback<void()>& favicon_callback) { const float bounds_width = - android::OverlayPanelLayer::kDefaultIconWidthDp * dp_to_px; + android::EphemeralTabLayer::kFaviconWidthDp * dp_to_px; // Dimension to which favicons are resized - half the size of default icon. const float icon_size = bounds_width / 2.0f; @@ -58,6 +58,8 @@ content::WebContents* web_contents, int title_view_resource_id, int caption_view_resource_id, + int caption_icon_resource_id, + jfloat caption_icon_opacity, jfloat caption_animation_percentage, jfloat text_layer_min_height, jfloat title_caption_spacing, @@ -111,9 +113,11 @@ 1.0f /* icon opacity */, separator_line_color); SetupTextLayer(bar_top, bar_height, text_layer_min_height, - caption_view_resource_id, caption_animation_percentage, - caption_visible, title_view_resource_id, - title_caption_spacing); + caption_view_resource_id, caption_icon_resource_id, + caption_icon_opacity, + + caption_animation_percentage, caption_visible, + title_view_resource_id, title_caption_spacing); OverlayPanelLayer::SetProgressBar( progress_bar_background_resource_id, progress_bar_resource_id, @@ -132,7 +136,9 @@ void EphemeralTabLayer::SetupTextLayer(float bar_top, float bar_height, float text_layer_min_height, - int caption_resource_id, + int caption_view_resource_id, + int caption_icon_resource_id, + float caption_icon_opacity, float animation_percentage, bool caption_visible, int title_resource_id, @@ -158,19 +164,24 @@ if (caption_visible) { // Grabs the dynamic Search Caption resource so we can get a snapshot. caption_resource = resource_manager_->GetResource( - ui::ANDROID_RESOURCE_TYPE_DYNAMIC, caption_resource_id); + ui::ANDROID_RESOURCE_TYPE_DYNAMIC, caption_view_resource_id); } if (animation_percentage != 0.f) { - if (caption_->parent() != text_layer_) { + if (caption_->parent() != text_layer_) text_layer_->AddChild(caption_); - } + + if (security_icon_layer_->parent() != text_layer_) + text_layer_->AddChild(security_icon_layer_); if (caption_resource) { caption_->SetUIResourceId(caption_resource->ui_resource()->id()); caption_->SetBounds(caption_resource->size()); } - } else if (caption_->parent()) { - caption_->RemoveFromParent(); + } else { + if (caption_->parent()) + caption_->RemoveFromParent(); + if (security_icon_layer_->parent()) + security_icon_layer_->RemoveFromParent(); } // --------------------------------------------------------------------------- @@ -229,6 +240,22 @@ title_->SetPosition(gfx::PointF(0.f, title_top)); caption_->SetPosition(gfx::PointF(0.f, caption_top)); + + // Security icon + if (!caption_icon_resource_id) + return; + + float icon_x = bar_margin_side_ + + (kFaviconWidthDp + kSecurityIconMarginStartDp) * dp_to_px_; + float icon_y = title_top_end + title_height; + ui::Resource* security_icon_resource = + resource_manager_->GetStaticResourceWithTint(caption_icon_resource_id, 0); + security_icon_layer_->SetUIResourceId( + security_icon_resource->ui_resource()->id()); + security_icon_layer_->SetBounds(gfx::ScaleToRoundedSize( + security_icon_resource->size(), kSecurityIconScale)); + security_icon_layer_->SetPosition(gfx::PointF(icon_x, icon_y)); + security_icon_layer_->SetOpacity(caption_icon_opacity); } void EphemeralTabLayer::OnFaviconUpdated( @@ -264,11 +291,13 @@ title_(cc::UIResourceLayer::Create()), caption_(cc::UIResourceLayer::Create()), favicon_layer_(cc::UIResourceLayer::Create()), + security_icon_layer_(cc::UIResourceLayer::Create()), text_layer_(cc::UIResourceLayer::Create()) { // Content layer text_layer_->SetIsDrawable(true); title_->SetIsDrawable(true); caption_->SetIsDrawable(true); + security_icon_layer_->SetIsDrawable(true); AddBarTextLayer(text_layer_); text_layer_->AddChild(title_);
diff --git a/chrome/browser/android/compositor/layer/ephemeral_tab_layer.h b/chrome/browser/android/compositor/layer/ephemeral_tab_layer.h index 21e875d..897c861 100644 --- a/chrome/browser/android/compositor/layer/ephemeral_tab_layer.h +++ b/chrome/browser/android/compositor/layer/ephemeral_tab_layer.h
@@ -34,12 +34,24 @@ class EphemeralTabLayer : public OverlayPanelLayer, public favicon::FaviconDriverObserver { public: + static constexpr float kFaviconWidthDp = + OverlayPanelLayer::kDefaultIconWidthDp; + + // Scale factor used to make the security icon size smaller to fit in the + // header. + static constexpr float kSecurityIconScale = 0.8f; + + // Left margin that positions the icon in front of the caption. + static constexpr float kSecurityIconMarginStartDp = 8.f; + static scoped_refptr<EphemeralTabLayer> Create( ui::ResourceManager* resource_manager, base::RepeatingCallback<void()>&& favicon_callback); void SetProperties(content::WebContents* web_contents, int title_view_resource_id, int caption_view_resource_id, + int caption_icon_resource_id, + jfloat caption_icon_opacity, jfloat caption_animation_percentage, jfloat text_layer_min_height, jfloat title_caption_spacing, @@ -70,7 +82,9 @@ void SetupTextLayer(float bar_top, float bar_height, float text_layer_min_height, - int caption_resource_id, + int caption_view_resource_id, + int caption_icon_resource_id, + float caption_icon_opacity, float animation_percentage, bool caption_visible, int context_resource_id, @@ -101,6 +115,7 @@ scoped_refptr<cc::UIResourceLayer> title_; scoped_refptr<cc::UIResourceLayer> caption_; scoped_refptr<cc::UIResourceLayer> favicon_layer_; + scoped_refptr<cc::UIResourceLayer> security_icon_layer_; scoped_refptr<cc::UIResourceLayer> text_layer_; std::unique_ptr<base::CancelableTaskTracker> cancelable_task_tracker_; };
diff --git a/chrome/browser/android/compositor/layer/overlay_panel_layer.cc b/chrome/browser/android/compositor/layer/overlay_panel_layer.cc index bc2fe2c..454095f 100644 --- a/chrome/browser/android/compositor/layer/overlay_panel_layer.cc +++ b/chrome/browser/android/compositor/layer/overlay_panel_layer.cc
@@ -17,9 +17,6 @@ namespace android { -const float OverlayPanelLayer::kDefaultIconWidthDp = 36.0f; -const int OverlayPanelLayer::kInvalidResourceID = -1; - scoped_refptr<cc::Layer> OverlayPanelLayer::GetIconLayer() { if (panel_icon_resource_id_ == kInvalidResourceID) return nullptr;
diff --git a/chrome/browser/android/compositor/layer/overlay_panel_layer.h b/chrome/browser/android/compositor/layer/overlay_panel_layer.h index e0664e6..8aa94fc 100644 --- a/chrome/browser/android/compositor/layer/overlay_panel_layer.h +++ b/chrome/browser/android/compositor/layer/overlay_panel_layer.h
@@ -25,10 +25,10 @@ class OverlayPanelLayer : public Layer { public: // Default width for any icon displayed on an OverlayPanel. - static const float kDefaultIconWidthDp; + static constexpr float kDefaultIconWidthDp = 36.0f; // ID for Invalid resource. - static const int kInvalidResourceID; + static constexpr int kInvalidResourceID = -1; void SetResourceIds(int bar_text_resource_id, int panel_shadow_resource_id,
diff --git a/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.cc index 5cd2611..1ec8e71 100644 --- a/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.cc +++ b/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.cc
@@ -77,6 +77,8 @@ const JavaParamRef<jobject>& object, jint title_view_resource_id, jint caption_view_resource_id, + jint caption_icon_resource_id, + jfloat caption_icon_opacity, jfloat caption_animation_percentage, jfloat text_layer_min_height, jfloat title_caption_spacing, @@ -127,6 +129,7 @@ content_container_->SetPosition(gfx::PointF(0.0f, base_page_offset)); ephemeral_tab_layer_->SetProperties( web_contents, title_view_resource_id, caption_view_resource_id, + caption_icon_resource_id, caption_icon_opacity, caption_animation_percentage, text_layer_min_height, title_caption_spacing, caption_visible, progress_bar_background_resource_id, progress_bar_resource_id, dp_to_px,
diff --git a/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.h b/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.h index 652912b..4d24c69 100644 --- a/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.h +++ b/chrome/browser/android/compositor/scene_layer/ephemeral_tab_scene_layer.h
@@ -45,6 +45,8 @@ const base::android::JavaParamRef<jobject>& object, jint title_view_resource_id, jint caption_view_resource_id, + jint caption_icon_resource_id, + jfloat caption_icon_opacity, jfloat caption_animation_percentage, jfloat text_layer_min_height, jfloat term_caption_spacing,
diff --git a/chrome/browser/android/customtabs/dynamicmodule/module_metrics.cc b/chrome/browser/android/customtabs/dynamicmodule/module_metrics.cc deleted file mode 100644 index 7cb16ce2..0000000 --- a/chrome/browser/android/customtabs/dynamicmodule/module_metrics.cc +++ /dev/null
@@ -1,103 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/android/customtabs/dynamicmodule/module_metrics.h" - -#include <string> -#include <vector> - -#include "base/android/jni_android.h" -#include "base/android/jni_string.h" -#include "base/metrics/histogram_functions.h" -#include "base/process/process_handle.h" -#include "chrome/android/chrome_jni_headers/ModuleMetrics_jni.h" -#include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h" -#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h" - -namespace customtabs { - -namespace { - -const char* kDexCacheName = "[anon:.bss]"; -const char* kFileType[] = {".dex", ".odex", ".vdex", ".oat"}; - -} // namespace - -bool IsValidFileType(const std::string& file_name) { - base::FilePath file_path(file_name); - - for (const char* file_type : kFileType) { - if (file_path.MatchesExtension(file_type)) - return true; - } - return false; -} - -void GetCodeMemoryFootprint(const std::string& package_name, - uint64_t* proportional_set_size_kb, - uint64_t* resident_set_size_kb) { - bool matched = false; - - std::vector<memory_instrumentation::mojom::VmRegionPtr> maps = - memory_instrumentation::OSMetrics::GetProcessMemoryMaps( - base::GetCurrentProcId()); - - for (const auto& region : maps) { - if (IsValidFileType(region->mapped_file) && - region->mapped_file.find(package_name) != std::string::npos) { - matched = true; - *proportional_set_size_kb += region->byte_stats_proportional_resident; - - *resident_set_size_kb += (region->byte_stats_private_dirty_resident + - region->byte_stats_private_clean_resident + - region->byte_stats_shared_dirty_resident + - region->byte_stats_shared_clean_resident); - - } else { - // The first [anon:bss] mapping that immediately follows a matched line - // is the “dex cache” - if (matched && !region->mapped_file.compare(kDexCacheName)) { - *proportional_set_size_kb += region->byte_stats_proportional_resident; - - *resident_set_size_kb += (region->byte_stats_private_dirty_resident + - region->byte_stats_private_clean_resident + - region->byte_stats_shared_dirty_resident + - region->byte_stats_shared_clean_resident); - } - - matched = false; - } - } - - *proportional_set_size_kb /= 1024; - *resident_set_size_kb /= 1024; -} - -void RecordCodeMemoryFootprint(const std::string& package_name, - const std::string& suffix) { - uint64_t proportional_set_size_kb = 0; - uint64_t resident_set_size_kb = 0; - - GetCodeMemoryFootprint(package_name, &proportional_set_size_kb, - &resident_set_size_kb); - - // Not using macros since we don't need caching. - std::string name = "CustomTabs.DynamicModule.ProportionalSet." + suffix; - base::UmaHistogramCounts100000(name, proportional_set_size_kb); - name = "CustomTabs.DynamicModule.ResidentSet." + suffix; - base::UmaHistogramCounts100000(name, resident_set_size_kb); -} - -static void JNI_ModuleMetrics_RecordCodeMemoryFootprint( - JNIEnv* env, - const base::android::JavaParamRef<jstring>& jpackage_name, - const base::android::JavaParamRef<jstring>& jsuffix) { - std::string package_name = - base::android::ConvertJavaStringToUTF8(env, jpackage_name); - std::string suffix = base::android::ConvertJavaStringToUTF8(env, jsuffix); - - RecordCodeMemoryFootprint(package_name, suffix); -} - -} // namespace customtabs
diff --git a/chrome/browser/android/customtabs/dynamicmodule/module_metrics.h b/chrome/browser/android/customtabs/dynamicmodule/module_metrics.h deleted file mode 100644 index 7407420..0000000 --- a/chrome/browser/android/customtabs/dynamicmodule/module_metrics.h +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_ANDROID_CUSTOMTABS_DYNAMICMODULE_MODULE_METRICS_H_ -#define CHROME_BROWSER_ANDROID_CUSTOMTABS_DYNAMICMODULE_MODULE_METRICS_H_ - -#include <string> - -namespace customtabs { - -void RecordCodeMemoryFootprint(const std::string& package_name, - const std::string& suffix); -} // namespace customtabs - -#endif // CHROME_BROWSER_ANDROID_CUSTOMTABS_DYNAMICMODULE_MODULE_METRICS_H_
diff --git a/chrome/browser/android/customtabs/dynamicmodule/module_metrics_unittest.cc b/chrome/browser/android/customtabs/dynamicmodule/module_metrics_unittest.cc deleted file mode 100644 index 1d1aff5..0000000 --- a/chrome/browser/android/customtabs/dynamicmodule/module_metrics_unittest.cc +++ /dev/null
@@ -1,245 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/android/customtabs/dynamicmodule/module_metrics.h" - -#include <string> - -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/test/metrics/histogram_tester.h" -#include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace customtabs { - -namespace { -const char kTestSmaps[] = - "95d75000-ab195000 r--s 00000000 fd:02 294922 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.vdex\n" - "Size: 348288 kB\n" - "Rss: 45328 kB\n" - "Pss: 45328 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 45328 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 45328 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd mr me ms \n" - "ab195000-ab19a000 r-xp 00000000 fd:00 427 /system/bin/app_process32\n" - "Size: 20 kB\n" - "Rss: 12 kB\n" - "Pss: 3 kB\n" - "Shared_Clean: 12 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 0 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 12 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd ex mr mw me dw \n" - "bbfc1000-bc36a000 r--p 00000000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n" - "Size: 3748 kB\n" - "Rss: 2988 kB\n" - "Pss: 2988 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 2988 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 2988 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd mr mw me \n" - "bc36a000-bc397000 r-xp 003a9000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n" - "Size: 180 kB\n" - "Rss: 4 kB\n" - "Pss: 4 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 4 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 4 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd ex mr mw me \n" - "bc397000-becbd000 rw-p 00000000 00:00 0 [anon:.bss]\n" - "Size: 42136 kB\n" - "Rss: 7384 kB\n" - "Pss: 7384 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 0 kB\n" - "Private_Dirty: 7384 kB\n" - "Referenced: 7384 kB\n" - "Anonymous: 7384 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd wr mr mw me ac \n" - "Name: [anon:.bss]\n" - "bc397000-becbd000 rw-p 00000000 00:00 0 [anon:.bss]\n" - "Size: 42136 kB\n" - "Rss: 7384 kB\n" - "Pss: 7384 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 0 kB\n" - "Private_Dirty: 7384 kB\n" - "Referenced: 7384 kB\n" - "Anonymous: 7384 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd wr mr mw me ac \n" - "Name: [anon:.bss]\n" - "becbd000-becbe000 r--p 003d6000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n" - "Size: 4 kB\n" - "Rss: 4 kB\n" - "Pss: 4 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 4 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 4 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd mr mw me \n" - "becbe000-becbf000 rw-p 003d7000 fd:02 294604 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/oat/arm/base.odex\n" - "Size: 4 kB\n" - "Rss: 4 kB\n" - "Pss: 4 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 0 kB\n" - "Private_Dirty: 4 kB\n" - "Referenced: 4 kB\n" - "Anonymous: 4 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd wr mr mw me ac \n" - "becc0000-bece1000 rw-s 00064000 00:0c 11218 /dev/kgsl-3d0\n" - "Size: 132 kB\n" - "Rss: 8 kB\n" - "Pss: 6 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 4 kB\n" - "Private_Clean: 0 kB\n" - "Private_Dirty: 4 kB\n" - "Referenced: 8 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd wr sh mr mw me ms dc de dd \n" - "c1a03000-c2493000 r--s 08654000 fd:02 294358 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/base.apk\n" - "Size: 10816 kB\n" - "Rss: 2124 kB\n" - "Pss: 745 kB\n" - "Shared_Clean: 2008 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 116 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 2124 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd mr me ms \n" - "c2493000-c2d03000 rw-s 00000000 00:08 10519 anon_inode:dmabuf\n" - "Size: 8640 kB\n" - "Rss: 0 kB\n" - "Pss: 0 kB\n" - "Shared_Clean: 0 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 0 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 0 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd wr sh mr mw me ms pf io de dd \n" - "c5355000-c5466000 r--s 0948b000 fd:02 294358 /data/app/com.google.android.googlequicksearchbox-A7cgO6T5LxS1KugchuFVTQ==/base.apk\n" - "Size: 1092 kB\n" - "Rss: 1092 kB\n" - "Pss: 498 kB\n" - "Shared_Clean: 1092 kB\n" - "Shared_Dirty: 0 kB\n" - "Private_Clean: 0 kB\n" - "Private_Dirty: 0 kB\n" - "Referenced: 1092 kB\n" - "Anonymous: 0 kB\n" - "AnonHugePages: 0 kB\n" - "Swap: 0 kB\n" - "SwapPss: 0 kB\n" - "KernelPageSize: 4 kB\n" - "MMUPageSize: 4 kB\n" - "Locked: 0 kB\n" - "VmFlags: rd mr me ms \n"; -} // namespace - -TEST(ModuleMetricsTest, RecordCodeMemoryFootprint) { - base::HistogramTester histogram_tester; - base::FilePath temp_path; - base::ScopedFILE temp_file(CreateAndOpenTemporaryFile(&temp_path)); - ASSERT_TRUE(temp_file); - - ASSERT_TRUE(base::WriteFileDescriptor(fileno(temp_file.get()), kTestSmaps, - strlen(kTestSmaps))); - - memory_instrumentation::OSMetrics::SetProcSmapsForTesting(temp_file.get()); - customtabs::RecordCodeMemoryFootprint( - "com.google.android.googlequicksearchbox", "OnModuleLoad"); - histogram_tester.ExpectUniqueSample( - "CustomTabs.DynamicModule.ProportionalSet.OnModuleLoad", 55712UL, 1); - histogram_tester.ExpectUniqueSample( - "CustomTabs.DynamicModule.ResidentSet.OnModuleLoad", 55712UL, 1); -} - -} // namespace customtabs
diff --git a/chrome/browser/android/vr/arcore_device/arcore_gl.cc b/chrome/browser/android/vr/arcore_device/arcore_gl.cc index b1aba27..1768b2f 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_gl.cc +++ b/chrome/browser/android/vr/arcore_device/arcore_gl.cc
@@ -631,7 +631,7 @@ } void ArCoreGl::SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo) { + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) { // Input eventing is not supported. This call should not // be made on this device. mojo::ReportBadMessage("Input eventing is not supported.");
diff --git a/chrome/browser/android/vr/arcore_device/arcore_gl.h b/chrome/browser/android/vr/arcore_device/arcore_gl.h index fbf7797..78ffff9 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_gl.h +++ b/chrome/browser/android/vr/arcore_device/arcore_gl.h
@@ -19,6 +19,7 @@ #include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/util/fps_meter.h" #include "mojo/public/cpp/bindings/associated_binding.h" +#include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -89,7 +90,8 @@ mojom::XREnvironmentIntegrationProviderAssociatedRequest environment_provider) override; void SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo) override; + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) + override; // XRPresentationProvider void SubmitFrameMissing(int16_t frame_index, const gpu::SyncToken&) override;
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.cc b/chrome/browser/android/vr/gvr_scheduler_delegate.cc index 6ab381f..9a71f50 100644 --- a/chrome/browser/android/vr/gvr_scheduler_delegate.cc +++ b/chrome/browser/android/vr/gvr_scheduler_delegate.cc
@@ -1325,7 +1325,7 @@ } void GvrSchedulerDelegate::SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo) { + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) { // Input eventing is not supported. This call should not // be made on this device. mojo::ReportBadMessage("Input eventing is not supported.");
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.h b/chrome/browser/android/vr/gvr_scheduler_delegate.h index f745fa4..443d0d7 100644 --- a/chrome/browser/android/vr/gvr_scheduler_delegate.h +++ b/chrome/browser/android/vr/gvr_scheduler_delegate.h
@@ -20,6 +20,7 @@ #include "chrome/browser/vr/base_scheduler_delegate.h" #include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/util/sliding_average.h" +#include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "ui/gfx/transform.h" @@ -142,7 +143,8 @@ device::mojom::XREnvironmentIntegrationProviderAssociatedRequest environment_provider) override; void SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo) override; + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) + override; // XRPresentationProvider void SubmitFrameMissing(int16_t frame_index, const gpu::SyncToken&) override;
diff --git a/chrome/browser/apps/app_service/built_in_chromeos_apps.cc b/chrome/browser/apps/app_service/built_in_chromeos_apps.cc index 7a9b028..dd4564bf 100644 --- a/chrome/browser/apps/app_service/built_in_chromeos_apps.cc +++ b/chrome/browser/apps/app_service/built_in_chromeos_apps.cc
@@ -14,7 +14,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/internal_app/internal_app_item.h" #include "chrome/browser/ui/app_list/internal_app/internal_app_metadata.h" -#include "chrome/browser/ui/app_list/search/internal_app_result.h" #include "chrome/services/app_service/public/mojom/types.mojom.h" #include "ui/base/l10n/l10n_util.h" @@ -104,15 +103,6 @@ // TODO(crbug.com/826982): move source of truth for built-in apps from // ui/app_list to here when the AppService feature is enabled by default. for (const auto& internal_app : app_list::GetInternalAppList(profile_)) { - // TODO(crbug.com/826982): support the "continue reading" app? Or leave - // it specifically to the chrome/browser/ui/app_list/search code? If - // moved here, it might mean calling sync_sessions::SessionSyncService's - // SubscribeToForeignSessionsChanged. See also app_search_provider.cc's - // InternalDataSource. - if (internal_app.internal_app_name == BuiltInAppName::kContinueReading) { - continue; - } - apps::mojom::AppPtr app = Convert(internal_app); if (!app.is_null()) { if (hide_settings_app_for_testing_ &&
diff --git a/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.cc b/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.cc index 5b40ba0..ef7484c2 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.cc +++ b/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.cc
@@ -10,7 +10,9 @@ #include "base/bind.h" #include "base/feature_list.h" #include "chrome/common/chrome_features.h" +#include "chrome/common/mac/app_shim.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/message_pipe.h" namespace { @@ -64,9 +66,9 @@ delete this; } -chrome::mojom::AppShimHostRequest -AppShimHostBootstrap::GetAppShimHostRequest() { - return std::move(app_shim_host_request_); +mojo::PendingReceiver<chrome::mojom::AppShimHost> +AppShimHostBootstrap::GetAppShimHostReceiver() { + return std::move(app_shim_host_receiver_); } const std::string& AppShimHostBootstrap::GetAppId() const { @@ -97,7 +99,7 @@ } void AppShimHostBootstrap::OnShimConnected( - chrome::mojom::AppShimHostRequest app_shim_host_request, + mojo::PendingReceiver<chrome::mojom::AppShimHost> app_shim_host_receiver, chrome::mojom::AppShimInfoPtr app_shim_info, OnShimConnectedCallback callback) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -106,7 +108,7 @@ if (app_shim_info_) return; - app_shim_host_request_ = std::move(app_shim_host_request); + app_shim_host_receiver_ = std::move(app_shim_host_receiver); app_shim_info_ = std::move(app_shim_info); shim_connected_callback_ = std::move(callback); @@ -124,16 +126,16 @@ } void AppShimHostBootstrap::OnConnectedToHost( - chrome::mojom::AppShimRequest app_shim_request) { + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver) { std::move(shim_connected_callback_) - .Run(apps::APP_SHIM_LAUNCH_SUCCESS, std::move(app_shim_request)); + .Run(apps::APP_SHIM_LAUNCH_SUCCESS, std::move(app_shim_receiver)); } void AppShimHostBootstrap::OnFailedToConnectToHost( apps::AppShimLaunchResult result) { // Because there will be users of the AppShim interface in failure, just - // return a dummy request. - chrome::mojom::AppShimPtr dummy_ptr; + // return a dummy receiver. + mojo::Remote<chrome::mojom::AppShim> dummy_remote; std::move(shim_connected_callback_) - .Run(result, mojo::MakeRequest(&dummy_ptr)); + .Run(result, dummy_remote.BindNewPipeAndPassReceiver()); }
diff --git a/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.h b/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.h index 839124b..d7799218 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.h +++ b/chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.h
@@ -14,6 +14,7 @@ #include "base/threading/thread_checker.h" #include "chrome/browser/apps/app_shim/app_shim_host_mac.h" #include "chrome/common/mac/app_shim.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/platform/platform_channel_endpoint.h" #include "mojo/public/cpp/system/isolated_connection.h" @@ -47,12 +48,13 @@ // Called in response to connecting (or failing to connect to) an // AppShimHost. - void OnConnectedToHost(chrome::mojom::AppShimRequest app_shim_request); + void OnConnectedToHost( + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver); void OnFailedToConnectToHost(apps::AppShimLaunchResult result); base::ProcessId GetAppShimPid() const { return pid_; } - chrome::mojom::AppShimHostRequest GetAppShimHostRequest(); + mojo::PendingReceiver<chrome::mojom::AppShimHost> GetAppShimHostReceiver(); const std::string& GetAppId() const; const GURL& GetAppURL(); const base::FilePath& GetProfilePath(); @@ -74,9 +76,10 @@ void ChannelError(uint32_t custom_reason, const std::string& description); // chrome::mojom::AppShimHostBootstrap. - void OnShimConnected(chrome::mojom::AppShimHostRequest app_shim_host_request, - chrome::mojom::AppShimInfoPtr app_shim_info, - OnShimConnectedCallback callback) override; + void OnShimConnected( + mojo::PendingReceiver<chrome::mojom::AppShimHost> app_shim_host_receiver, + chrome::mojom::AppShimInfoPtr app_shim_info, + OnShimConnectedCallback callback) override; mojo::IsolatedConnection bootstrap_mojo_connection_; mojo::Receiver<chrome::mojom::AppShimHostBootstrap> host_bootstrap_receiver_{ @@ -86,7 +89,7 @@ // happened yet. The |app_shim_info_| is non-null if and only if a shim has // connected. base::ProcessId pid_ = 0; - chrome::mojom::AppShimHostRequest app_shim_host_request_; + mojo::PendingReceiver<chrome::mojom::AppShimHost> app_shim_host_receiver_; chrome::mojom::AppShimInfoPtr app_shim_info_; OnShimConnectedCallback shim_connected_callback_;
diff --git a/chrome/browser/apps/app_shim/app_shim_host_mac.cc b/chrome/browser/apps/app_shim/app_shim_host_mac.cc index 25d486a..b1267fe 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_mac.cc +++ b/chrome/browser/apps/app_shim/app_shim_host_mac.cc
@@ -22,8 +22,7 @@ const base::FilePath& profile_path, bool uses_remote_views) : client_(client), - host_binding_(this), - app_shim_request_(mojo::MakeRequest(&app_shim_)), + app_shim_receiver_(app_shim_.BindNewPipeAndPassReceiver()), launch_shim_has_been_called_(false), app_id_(app_id), profile_path_(profile_path), @@ -123,11 +122,11 @@ DCHECK(!bootstrap_); bootstrap_ = std::move(bootstrap); - bootstrap_->OnConnectedToHost(std::move(app_shim_request_)); + bootstrap_->OnConnectedToHost(std::move(app_shim_receiver_)); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - host_binding_.Bind(bootstrap_->GetAppShimHostRequest()); - host_binding_.set_connection_error_with_reason_handler( + host_receiver_.Bind(bootstrap_->GetAppShimHostReceiver()); + host_receiver_.set_disconnect_with_reason_handler( base::BindOnce(&AppShimHost::ChannelError, base::Unretained(this))); }
diff --git a/chrome/browser/apps/app_shim/app_shim_host_mac.h b/chrome/browser/apps/app_shim/app_shim_host_mac.h index cfcce208..395e699 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_mac.h +++ b/chrome/browser/apps/app_shim/app_shim_host_mac.h
@@ -14,7 +14,9 @@ #include "base/process/process.h" #include "base/threading/thread_checker.h" #include "chrome/common/mac/app_shim.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" namespace apps { using ShimLaunchedCallback = base::OnceCallback<void(base::Process)>; @@ -114,9 +116,9 @@ // Weak, owns |this|. Client* const client_; - mojo::Binding<chrome::mojom::AppShimHost> host_binding_; - chrome::mojom::AppShimPtr app_shim_; - chrome::mojom::AppShimRequest app_shim_request_; + mojo::Receiver<chrome::mojom::AppShimHost> host_receiver_{this}; + mojo::Remote<chrome::mojom::AppShim> app_shim_; + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver_; // Only allow LaunchShim to have any effect on the first time it is called. If // that launch fails, it will re-launch (requesting that the shim be
diff --git a/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc b/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc index 55c9924..35be3580 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc +++ b/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc
@@ -8,6 +8,7 @@ #include <memory> #include <tuple> +#include <utility> #include <vector> #include "base/bind.h" @@ -18,6 +19,7 @@ #include "base/test/task_environment.h" #include "base/test/test_simple_task_runner.h" #include "chrome/browser/apps/app_shim/app_shim_host_bootstrap_mac.h" +#include "chrome/common/mac/app_shim.mojom.h" #include "chrome/common/mac/app_shim_param_traits.h" #include "ipc/ipc_message.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -46,8 +48,9 @@ } private: - void OnShimConnectedDone(apps::AppShimLaunchResult result, - chrome::mojom::AppShimRequest app_shim_request) { + void OnShimConnectedDone( + apps::AppShimLaunchResult result, + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver) { received_launch_done_result_ = true; launch_done_result_ = result; } @@ -120,7 +123,7 @@ return task_runner_; } AppShimHost* host() { return host_.get(); } - chrome::mojom::AppShimHost* GetMojoHost() { return host_ptr_.get(); } + chrome::mojom::AppShimHost* GetMojoHost() { return host_remote_.get(); } void DoOnShimConnected(apps::AppShimLaunchType launch_type) { auto app_shim_info = chrome::mojom::AppShimInfo::New(); @@ -130,7 +133,7 @@ app_shim_info->launch_type = launch_type; // Ownership of TestingAppShimHostBootstrap will be transferred to its host. (new TestingAppShimHostBootstrap(shim_->GetHostBootstrapReceiver())) - ->OnShimConnected(mojo::MakeRequest(&host_ptr_), + ->OnShimConnected(host_remote_.BindNewPipeAndPassReceiver(), std::move(app_shim_info), shim_->GetOnShimConnectedCallback()); } @@ -140,7 +143,7 @@ return shim_->GetLaunchResult(); } - void SimulateDisconnect() { host_ptr_.reset(); } + void SimulateDisconnect() { host_remote_.reset(); } protected: // AppShimHostBootstrap::Client: @@ -198,7 +201,7 @@ // AppShimHost will destroy itself in AppShimHost::Close, so use a weak // pointer here to avoid lifetime issues. std::unique_ptr<TestingAppShimHost> host_; - chrome::mojom::AppShimHostPtr host_ptr_; + mojo::Remote<chrome::mojom::AppShimHost> host_remote_; DISALLOW_COPY_AND_ASSIGN(AppShimHostTest); };
diff --git a/chrome/browser/apps/app_shim/app_shim_listener_browsertest_mac.mm b/chrome/browser/apps/app_shim/app_shim_listener_browsertest_mac.mm index 1d63a74..b2ea2b5 100644 --- a/chrome/browser/apps/app_shim/app_shim_listener_browsertest_mac.mm +++ b/chrome/browser/apps/app_shim/app_shim_listener_browsertest_mac.mm
@@ -28,7 +28,9 @@ #include "chrome/test/base/in_process_browser_test.h" #include "components/version_info/version_info.h" #include "content/public/test/test_utils.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/platform/named_platform_channel.h" #include "mojo/public/cpp/platform/platform_channel.h" #include "mojo/public/cpp/system/isolated_connection.h" @@ -50,16 +52,15 @@ return AppShimController::ConnectToBrowser(server_name); } - chrome::mojom::AppShimHostRequest GetHostRequest() { - return std::move(host_request_); + mojo::PendingReceiver<chrome::mojom::AppShimHost> GetHostReceiver() { + return std::move(host_receiver_); } OnShimConnectedCallback GetOnShimConnectedCallback() { return base::BindOnce(&TestShimClient::OnShimConnectedDone, base::Unretained(this)); } - chrome::mojom::AppShimHostPtr& host() { return host_; } - chrome::mojom::AppShimHostBootstrapPtr& host_bootstrap() { + mojo::Remote<chrome::mojom::AppShimHostBootstrap>& host_bootstrap() { return host_bootstrap_; } @@ -73,22 +74,23 @@ profile_menu_items) override {} private: - void OnShimConnectedDone(apps::AppShimLaunchResult result, - chrome::mojom::AppShimRequest app_shim_request) { - shim_binding_.Bind(std::move(app_shim_request)); + void OnShimConnectedDone( + apps::AppShimLaunchResult result, + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver) { + shim_receiver_.Bind(std::move(app_shim_receiver)); } mojo::IsolatedConnection mojo_connection_; - mojo::Binding<chrome::mojom::AppShim> shim_binding_; - chrome::mojom::AppShimHostPtr host_; - chrome::mojom::AppShimHostRequest host_request_; - chrome::mojom::AppShimHostBootstrapPtr host_bootstrap_; + mojo::Receiver<chrome::mojom::AppShim> shim_receiver_{this}; + mojo::Remote<chrome::mojom::AppShimHost> host_; + mojo::PendingReceiver<chrome::mojom::AppShimHost> host_receiver_; + mojo::Remote<chrome::mojom::AppShimHostBootstrap> host_bootstrap_; DISALLOW_COPY_AND_ASSIGN(TestShimClient); }; TestShimClient::TestShimClient() - : shim_binding_(this), host_request_(mojo::MakeRequest(&host_)) { + : host_receiver_(host_.BindNewPipeAndPassReceiver()) { base::FilePath user_data_dir; CHECK(base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)); @@ -100,8 +102,9 @@ mojo::ScopedMessagePipeHandle message_pipe = mojo_connection_.Connect(std::move(endpoint)); - host_bootstrap_ = chrome::mojom::AppShimHostBootstrapPtr( - chrome::mojom::AppShimHostBootstrapPtrInfo(std::move(message_pipe), 0)); + host_bootstrap_ = mojo::Remote<chrome::mojom::AppShimHostBootstrap>( + mojo::PendingRemote<chrome::mojom::AppShimHostBootstrap>( + std::move(message_pipe), 0)); } // Browser Test for AppShimListener to test IPC interactions. @@ -109,7 +112,7 @@ public AppShimHostBootstrap::Client, public chrome::mojom::AppShimHost { public: - AppShimListenerBrowserTest() : binding_(this) {} + AppShimListenerBrowserTest() = default; protected: // Wait for OnShimProcessConnected, then send a quit, and wait for the @@ -135,8 +138,8 @@ void ProfileSelectedFromMenu(const base::FilePath& profile_path) override {} std::unique_ptr<base::RunLoop> runner_; - mojo::Binding<chrome::mojom::AppShimHost> binding_; - chrome::mojom::AppShimPtr app_shim_ptr_; + mojo::Receiver<chrome::mojom::AppShimHost> receiver_{this}; + mojo::Remote<chrome::mojom::AppShim> app_shim_; int launch_count_ = 0; @@ -163,11 +166,11 @@ void AppShimListenerBrowserTest::OnShimProcessConnected( std::unique_ptr<AppShimHostBootstrap> bootstrap) { ++launch_count_; - binding_.Bind(bootstrap->GetAppShimHostRequest()); + receiver_.Bind(bootstrap->GetAppShimHostReceiver()); last_launch_type_ = bootstrap->GetLaunchType(); last_launch_files_ = bootstrap->GetLaunchFiles(); - bootstrap->OnConnectedToHost(mojo::MakeRequest(&app_shim_ptr_)); + bootstrap->OnConnectedToHost(app_shim_.BindNewPipeAndPassReceiver()); runner_->Quit(); } @@ -180,7 +183,7 @@ app_shim_info->app_url = kTestAppUrl; app_shim_info->launch_type = apps::APP_SHIM_LAUNCH_NORMAL; test_client_->host_bootstrap()->OnShimConnected( - test_client_->GetHostRequest(), std::move(app_shim_info), + test_client_->GetHostReceiver(), std::move(app_shim_info), test_client_->GetOnShimConnectedCallback()); RunAndExitGracefully(); EXPECT_EQ(apps::APP_SHIM_LAUNCH_NORMAL, last_launch_type_); @@ -196,7 +199,7 @@ app_shim_info->app_url = kTestAppUrl; app_shim_info->launch_type = apps::APP_SHIM_LAUNCH_REGISTER_ONLY; test_client_->host_bootstrap()->OnShimConnected( - test_client_->GetHostRequest(), std::move(app_shim_info), + test_client_->GetHostReceiver(), std::move(app_shim_info), test_client_->GetOnShimConnectedCallback()); RunAndExitGracefully();
diff --git a/chrome/browser/apps/app_shim/app_shim_quit_interactive_uitest_mac.mm b/chrome/browser/apps/app_shim/app_shim_quit_interactive_uitest_mac.mm index 0a5b108de..6971192 100644 --- a/chrome/browser/apps/app_shim/app_shim_quit_interactive_uitest_mac.mm +++ b/chrome/browser/apps/app_shim/app_shim_quit_interactive_uitest_mac.mm
@@ -26,6 +26,8 @@ #include "content/public/test/test_utils.h" #include "extensions/browser/extension_registry.h" #include "extensions/test/extension_test_message_listener.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "ui/events/test/cocoa_test_event_utils.h" using extensions::PlatformAppBrowserTest; @@ -65,14 +67,14 @@ extensions::ExtensionRegistry::Get(profile()); extension_id_ = GetExtensionByPath(registry->enabled_extensions(), app_path_)->id(); - chrome::mojom::AppShimHostPtr host_ptr; + mojo::Remote<chrome::mojom::AppShimHost> host; auto app_shim_info = chrome::mojom::AppShimInfo::New(); app_shim_info->profile_path = profile()->GetPath().BaseName(); app_shim_info->app_id = extension_id_; app_shim_info->app_url = GURL("https://example.com"); app_shim_info->launch_type = apps::APP_SHIM_LAUNCH_REGISTER_ONLY; (new TestAppShimHostBootstrap) - ->OnShimConnected(mojo::MakeRequest(&host_ptr), + ->OnShimConnected(host.BindNewPipeAndPassReceiver(), std::move(app_shim_info), base::BindOnce(&AppShimQuitTest::DoShimLaunchDone, base::Unretained(this))); @@ -83,8 +85,9 @@ content::RunAllPendingInMessageLoop(); } - void DoShimLaunchDone(apps::AppShimLaunchResult result, - chrome::mojom::AppShimRequest app_shim_request) {} + void DoShimLaunchDone( + apps::AppShimLaunchResult result, + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver) {} void SetUpCommandLine(base::CommandLine* command_line) override { PlatformAppBrowserTest::SetUpCommandLine(command_line);
diff --git a/chrome/browser/apps/app_shim/extension_app_shim_handler_mac_unittest.cc b/chrome/browser/apps/app_shim/extension_app_shim_handler_mac_unittest.cc index 1589815..5fbfeab 100644 --- a/chrome/browser/apps/app_shim/extension_app_shim_handler_mac_unittest.cc +++ b/chrome/browser/apps/app_shim/extension_app_shim_handler_mac_unittest.cc
@@ -22,11 +22,14 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/profiles/avatar_menu.h" #include "chrome/common/chrome_features.h" +#include "chrome/common/mac/app_shim.mojom.h" #include "chrome/test/base/testing_profile.h" #include "content/public/browser/notification_service.h" #include "content/public/test/browser_task_environment.h" #include "extensions/common/extension.h" #include "extensions/common/extension_builder.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -188,7 +191,7 @@ weak_factory_(this) {} void DoTestLaunch(apps::AppShimLaunchType launch_type, const std::vector<base::FilePath>& files) { - chrome::mojom::AppShimHostPtr host_ptr; + mojo::Remote<chrome::mojom::AppShimHost> host; auto app_shim_info = chrome::mojom::AppShimInfo::New(); app_shim_info->profile_path = profile_path_; app_shim_info->app_id = app_id_; @@ -197,7 +200,7 @@ app_shim_info->launch_type = launch_type; app_shim_info->files = files; OnShimConnected( - mojo::MakeRequest(&host_ptr), std::move(app_shim_info), + host.BindNewPipeAndPassReceiver(), std::move(app_shim_info), base::BindOnce(&TestingAppShimHostBootstrap::DoTestLaunchDone, launch_result_)); } @@ -205,7 +208,7 @@ static void DoTestLaunchDone( base::Optional<apps::AppShimLaunchResult>* launch_result, apps::AppShimLaunchResult result, - chrome::mojom::AppShimRequest app_shim_request) { + mojo::PendingReceiver<chrome::mojom::AppShim> app_shim_receiver) { if (launch_result) launch_result->emplace(result); }
diff --git a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc index 2871438..cecdbeb 100644 --- a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc
@@ -39,6 +39,7 @@ #include "content/public/browser/render_widget_host_iterator.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/apps/platform_apps/app_browsertest.cc b/chrome/browser/apps/platform_apps/app_browsertest.cc index c8837c8..e2d30da5 100644 --- a/chrome/browser/apps/platform_apps/app_browsertest.cc +++ b/chrome/browser/apps/platform_apps/app_browsertest.cc
@@ -44,6 +44,7 @@ #include "components/web_modal/web_contents_modal_dialog_manager.h" #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/host_zoom_map.h" +#include "content/public/browser/overlay_window.h" #include "content/public/browser/picture_in_picture_window_controller.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_widget_host_view.h"
diff --git a/chrome/browser/ash_service_registry.h b/chrome/browser/ash_service_registry.h index 58e7e25..b3013f2 100644 --- a/chrome/browser/ash_service_registry.h +++ b/chrome/browser/ash_service_registry.h
@@ -7,7 +7,8 @@ #include <string> -#include "content/public/browser/content_browser_client.h" +#include "services/service_manager/public/cpp/service.h" +#include "services/service_manager/public/mojom/service.mojom.h" namespace ash_service_registry {
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index c0a5a82c..37b592d0 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -21,6 +21,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/task/post_task.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/bind_test_util.h" #include "base/test/scoped_feature_list.h" #include "base/test/simple_test_clock.h"
diff --git a/chrome/browser/chrome_browser_main.h b/chrome/browser/chrome_browser_main.h index 23cbce2b..3e288f8c 100644 --- a/chrome/browser/chrome_browser_main.h +++ b/chrome/browser/chrome_browser_main.h
@@ -9,6 +9,7 @@ #include <vector> #include "base/macros.h" +#include "base/run_loop.h" #include "build/build_config.h" #include "chrome/browser/chrome_process_singleton.h" #include "chrome/browser/first_run/first_run.h"
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 3f706706..d32f48c 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -279,6 +279,7 @@ #include "content/public/common/content_descriptors.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" +#include "content/public/common/navigation_policy.h" #include "content/public/common/network_service_util.h" #include "content/public/common/service_manager_connection.h" #include "content/public/common/service_names.mojom.h" @@ -311,6 +312,7 @@ #include "ppapi/buildflags/buildflags.h" #include "ppapi/host/ppapi_host.h" #include "printing/buildflags/buildflags.h" +#include "services/network/public/cpp/features.h" #include "services/network/public/cpp/is_potentially_trustworthy.h" #include "services/network/public/cpp/network_switches.h" #include "services/network/public/cpp/resource_request.h" @@ -319,6 +321,7 @@ #include "services/service_manager/sandbox/switches.h" #include "services/strings/grit/services_strings.h" #include "storage/browser/fileapi/external_mount_points.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h" #include "third_party/blink/public/mojom/renderer_preferences.mojom.h" @@ -1141,6 +1144,8 @@ registry->RegisterBooleanPref(prefs::kAutoplayAllowed, false); registry->RegisterListPref(prefs::kAutoplayWhitelist); #endif + registry->RegisterListPref(prefs::kCorsMitigationList); + registry->RegisterBooleanPref(prefs::kCorsLegacyModeEnabled, false); } // static @@ -2079,6 +2084,12 @@ prefs->GetBoolean(prefs::kAllowSyncXHRInPageDismissal)) { command_line->AppendSwitch(switches::kAllowSyncXHRInPageDismissal); } + + if (profile->ShouldEnableOutOfBlinkCors()) + command_line->AppendSwitch(network::switches::kEnableOutOfBlinkCors); + } else if (base::FeatureList::IsEnabled( + network::features::kOutOfBlinkCors)) { + command_line->AppendSwitch(network::switches::kEnableOutOfBlinkCors); } if (IsAutoReloadEnabled())
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h index 120d9f9..aa67c8e 100644 --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h
@@ -21,6 +21,7 @@ #include "build/build_config.h" #include "chrome/browser/startup_data.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/browser/web_contents.h" #include "content/public/common/previews_state.h" #include "content/public/common/resource_type.h" #include "extensions/buildflags/buildflags.h" @@ -29,6 +30,7 @@ #include "ppapi/buildflags/buildflags.h" #include "services/network/public/mojom/network_context.mojom-forward.h" #include "services/service_manager/public/cpp/binder_registry.h" +#include "storage/browser/quota/quota_settings.h" class ChromeContentBrowserClientParts; class PrefRegistrySimple;
diff --git a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc index 577e91ea..71876584 100644 --- a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc +++ b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
@@ -34,6 +34,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/render_process_host.h" #include "media/mojo/buildflags.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" #include "third_party/widevine/cdm/buildflags.h" #if defined(OS_ANDROID)
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index f721c9bd..3086f63 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -407,6 +407,8 @@ "app_mode/kiosk_app_update_install_gate.h", "app_mode/kiosk_app_update_service.cc", "app_mode/kiosk_app_update_service.h", + "app_mode/kiosk_cryptohome_remover.cc", + "app_mode/kiosk_cryptohome_remover.h", "app_mode/kiosk_diagnosis_runner.cc", "app_mode/kiosk_diagnosis_runner.h", "app_mode/kiosk_external_update_validator.cc", @@ -420,6 +422,8 @@ "app_mode/kiosk_session_plugin_handler.cc", "app_mode/kiosk_session_plugin_handler.h", "app_mode/kiosk_session_plugin_handler_delegate.h", + "app_mode/pref_names.cc", + "app_mode/pref_names.h", "app_mode/startup_app_launcher.cc", "app_mode/startup_app_launcher.h", "app_mode/startup_app_launcher_update_checker.cc",
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.cc b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.cc index 96f9a6d..8d44721 100644 --- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.cc +++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.cc
@@ -5,6 +5,7 @@ #include <chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h> #include <algorithm> +#include <map> #include <utility> #include "base/barrier_closure.h" @@ -14,14 +15,10 @@ #include "base/logging.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h" +#include "chrome/browser/chromeos/app_mode/pref_names.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" -#include "chromeos/cryptohome/async_method_caller.h" -#include "chromeos/cryptohome/cryptohome_parameters.h" -#include "chromeos/cryptohome/cryptohome_util.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" -#include "chromeos/dbus/cryptohome/rpc.pb.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/settings/cros_settings_names.h" #include "components/arc/arc_util.h" #include "components/prefs/pref_registry_simple.h" @@ -29,75 +26,11 @@ #include "components/prefs/scoped_user_pref_update.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" -#include "third_party/cros_system_api/dbus/cryptohome/dbus-constants.h" -#include "third_party/cros_system_api/dbus/service_constants.h" namespace chromeos { namespace { -// Preference for the dictionary of user ids for which cryptohomes have to be -// removed upon browser restart. -constexpr char kArcKioskUsersToRemove[] = "arc-kiosk-users-to-remove"; - -void ScheduleDelayedCryptohomeRemoval(const cryptohome::Identification& id) { - PrefService* const local_state = g_browser_process->local_state(); - ListPrefUpdate list_update(local_state, kArcKioskUsersToRemove); - - list_update->AppendString(id.id()); - local_state->CommitPendingWrite(); -} - -void CancelDelayedCryptohomeRemoval(const cryptohome::Identification& id) { - PrefService* const local_state = g_browser_process->local_state(); - ListPrefUpdate list_update(local_state, kArcKioskUsersToRemove); - list_update->Remove(base::Value(id.id()), nullptr); - local_state->CommitPendingWrite(); -} - -void OnRemoveAppCryptohomeComplete( - const cryptohome::Identification& id, - base::OnceClosure callback, - base::Optional<cryptohome::BaseReply> reply) { - cryptohome::MountError error = BaseReplyToMountError(reply); - if (error == cryptohome::MOUNT_ERROR_NONE) { - CancelDelayedCryptohomeRemoval(id); - } else { - ScheduleDelayedCryptohomeRemoval(id); - LOG(ERROR) << "Remove app cryptohome failed, error: " << error; - } - if (!callback.is_null()) - std::move(callback).Run(); -} - -void PerformDelayedCryptohomeRemovals(bool service_is_available) { - if (!service_is_available) { - LOG(ERROR) << "Crypthomed is not available."; - return; - } - - PrefService* const local_state = g_browser_process->local_state(); - const base::ListValue* const list = - local_state->GetList(kArcKioskUsersToRemove); - for (base::ListValue::const_iterator it = list->begin(); it != list->end(); - ++it) { - std::string entry; - if (!it->GetAsString(&entry)) { - LOG(ERROR) << "List of cryptohome ids is broken"; - continue; - } - const cryptohome::Identification cryptohome_id( - cryptohome::Identification::FromString(entry)); - - cryptohome::AccountIdentifier account_id_proto; - account_id_proto.set_account_id(cryptohome_id.id()); - - CryptohomeClient::Get()->RemoveEx( - account_id_proto, base::BindOnce(&OnRemoveAppCryptohomeComplete, - cryptohome_id, base::OnceClosure())); - } -} - // This class is owned by ChromeBrowserMainPartsChromeos. static ArcKioskAppManager* g_arc_kiosk_app_manager = nullptr; @@ -109,14 +42,6 @@ // static void ArcKioskAppManager::RegisterPrefs(PrefRegistrySimple* registry) { registry->RegisterDictionaryPref(kArcKioskDictionaryName); - registry->RegisterListPref(kArcKioskUsersToRemove); -} - -// static -void ArcKioskAppManager::RemoveObsoleteCryptohomes() { - chromeos::CryptohomeClient* const client = chromeos::CryptohomeClient::Get(); - client->WaitForServiceToBeAvailable( - base::Bind(&PerformDelayedCryptohomeRemovals)); } // static @@ -264,7 +189,7 @@ app_info.action(), account_id, name)); apps_.back()->LoadFromCache(); } - CancelDelayedCryptohomeRemoval(cryptohome::Identification(account_id)); + KioskCryptohomeRemover::CancelDelayedCryptohomeRemoval(account_id); } ClearRemovedApps(old_apps); @@ -276,39 +201,14 @@ void ArcKioskAppManager::ClearRemovedApps( const std::map<std::string, std::unique_ptr<ArcKioskAppData>>& old_apps) { - // Check if currently active user must be deleted. - bool active_user_to_be_deleted = false; - const user_manager::User* active_user = - user_manager::UserManager::Get()->GetActiveUser(); - if (active_user) { - const AccountId active_account_id = active_user->GetAccountId(); - for (const auto& it : old_apps) { - if (it.second->account_id() == active_account_id) { - active_user_to_be_deleted = true; - break; - } - } - } - - // Remove cryptohome + std::vector<AccountId> account_ids_to_remove; + account_ids_to_remove.reserve(old_apps.size()); for (auto& entry : old_apps) { entry.second->ClearCache(); - const cryptohome::Identification cryptohome_id(entry.second->account_id()); - if (active_user_to_be_deleted) { - // Schedule cryptohome removal after active user logout. - ScheduleDelayedCryptohomeRemoval(cryptohome_id); - } else { - cryptohome::AccountIdentifier account_id_proto; - account_id_proto.set_account_id(cryptohome_id.id()); - - CryptohomeClient::Get()->RemoveEx( - account_id_proto, base::BindOnce(&OnRemoveAppCryptohomeComplete, - cryptohome_id, base::OnceClosure())); - } + account_ids_to_remove.push_back(entry.second->account_id()); } - - if (active_user_to_be_deleted) - chrome::AttemptUserExit(); + KioskCryptohomeRemover::RemoveCryptohomesAndExitIfNeeded( + account_ids_to_remove); } } // namespace chromeos
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h index 37693d3..2c6da9d 100644 --- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h +++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h
@@ -46,9 +46,6 @@ // Registers kiosk app entries in local state. static void RegisterPrefs(PrefRegistrySimple* registry); - // Removes cryptohomes which could not be removed during the previous session. - static void RemoveObsoleteCryptohomes(); - // Returns auto launched account id. If there is none, account is invalid, // thus is_valid() returns empty AccountId. const AccountId& GetAutoLaunchAccountId() const;
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc index 762c202..ec8a42f 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc
@@ -26,7 +26,9 @@ #include "chrome/browser/chromeos/app_mode/kiosk_app_data.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_external_loader.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" +#include "chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h" #include "chrome/browser/chromeos/app_mode/kiosk_external_updater.h" +#include "chrome/browser/chromeos/app_mode/pref_names.h" #include "chrome/browser/chromeos/extensions/external_cache_impl.h" #include "chrome/browser/chromeos/login/session/user_session_manager.h" #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" @@ -42,11 +44,6 @@ #include "chrome/common/extensions/extension_constants.h" #include "chromeos/constants/chromeos_paths.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" -#include "chromeos/cryptohome/cryptohome_parameters.h" -#include "chromeos/cryptohome/cryptohome_util.h" -#include "chromeos/dbus/cryptohome/rpc.pb.h" -#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/settings/cros_settings_names.h" #include "components/account_id/account_id.h" #include "components/ownership/owner_key_util.h" @@ -67,10 +64,6 @@ // Domain that is used for kiosk-app account IDs. constexpr char kKioskAppAccountDomain[] = "kiosk-apps"; -// Preference for the dictionary of user ids for which cryptohomes have to be -// removed upon browser restart. -constexpr char kKioskUsersToRemove[] = "kiosk-users-to-remove"; - // Sub directory under DIR_USER_DATA to store cached crx files. constexpr char kCrxCacheDir[] = "kiosk/crx"; @@ -84,68 +77,6 @@ return app_id + '@' + kKioskAppAccountDomain; } -void ScheduleDelayedCryptohomeRemoval(const cryptohome::Identification& id, - const std::string& app_id) { - PrefService* local_state = g_browser_process->local_state(); - DictionaryPrefUpdate dict_update(local_state, kKioskUsersToRemove); - - // We are using cryptohome::Identification here because it cannot change - // before actual removal will take place. (Possible cryptohome migration - // happens only on session start, but deletion should happen before it.) - dict_update->SetKey(id.id(), base::Value(app_id)); - local_state->CommitPendingWrite(); -} - -void CancelDelayedCryptohomeRemoval(const cryptohome::Identification& id) { - PrefService* local_state = g_browser_process->local_state(); - DictionaryPrefUpdate dict_update(local_state, kKioskUsersToRemove); - dict_update->RemoveWithoutPathExpansion(id.id(), nullptr); - local_state->CommitPendingWrite(); -} - -void OnRemoveAppCryptohomeComplete( - const cryptohome::Identification& id, - const std::string& app, - base::OnceClosure callback, - base::Optional<cryptohome::BaseReply> reply) { - cryptohome::MountError error = BaseReplyToMountError(reply); - if (error == cryptohome::MOUNT_ERROR_NONE) { - CancelDelayedCryptohomeRemoval(id); - } else { - ScheduleDelayedCryptohomeRemoval(id, app); - LOG(ERROR) << "Remove cryptohome for " << app << " failed, return code: " - << cryptohome::BaseReplyToMountError(reply.value()); - } - if (callback) - std::move(callback).Run(); -} - -void PerformDelayedCryptohomeRemovals(bool service_is_available) { - if (!service_is_available) { - LOG(ERROR) << "Crypthomed is not available."; - return; - } - - PrefService* local_state = g_browser_process->local_state(); - const base::DictionaryValue* dict = - local_state->GetDictionary(kKioskUsersToRemove); - for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { - const cryptohome::Identification cryptohome_id( - cryptohome::Identification::FromString(it.key())); - std::string app_id; - it.value().GetAsString(&app_id); - VLOG(1) << "Removing obsolete crypthome for " << app_id; - - cryptohome::AccountIdentifier account_id_proto; - account_id_proto.set_account_id(cryptohome_id.id()); - - CryptohomeClient::Get()->RemoveEx( - account_id_proto, - base::BindOnce(&OnRemoveAppCryptohomeComplete, cryptohome_id, app_id, - base::OnceClosure())); - } -} - // Check for presence of machine owner public key file. void CheckOwnerFilePresence(bool *present) { scoped_refptr<ownership::OwnerKeyUtil> util = @@ -240,14 +171,6 @@ // static void KioskAppManager::RegisterPrefs(PrefRegistrySimple* registry) { registry->RegisterDictionaryPref(kKioskDictionaryName); - registry->RegisterDictionaryPref(kKioskUsersToRemove); -} - -// static -void KioskAppManager::RemoveObsoleteCryptohomes() { - chromeos::CryptohomeClient* client = chromeos::CryptohomeClient::Get(); - client->WaitForServiceToBeAvailable( - base::Bind(&PerformDelayedCryptohomeRemovals)); } // static @@ -888,10 +811,10 @@ cached_crx)); apps_.back()->Load(); } - CancelDelayedCryptohomeRemoval(cryptohome::Identification(account_id)); + KioskCryptohomeRemover::CancelDelayedCryptohomeRemoval(account_id); } - ClearRemovedApps(old_apps); + ClearRemovedApps(std::move(old_apps)); UpdateExternalCachePrefs(); RetryFailedAppDataFetch(); @@ -901,37 +824,17 @@ void KioskAppManager::ClearRemovedApps( const std::map<std::string, std::unique_ptr<KioskAppData>>& old_apps) { - base::Closure cryptohomes_barrier_closure; - - const user_manager::User* active_user = - user_manager::UserManager::Get()->GetActiveUser(); - if (active_user) { - const AccountId active_account_id = active_user->GetAccountId(); - for (const auto& it : old_apps) { - if (it.second->account_id() == active_account_id) { - VLOG(1) << "Currently running kiosk app removed from policy, exiting"; - cryptohomes_barrier_closure = BarrierClosure( - old_apps.size(), base::BindOnce(&chrome::AttemptUserExit)); - break; - } - } - } - - // Clears cache and deletes the remaining old data. + std::vector<AccountId> account_ids_to_remove; + account_ids_to_remove.reserve(old_apps.size()); std::vector<std::string> apps_to_remove; + apps_to_remove.reserve(old_apps.size()); for (auto& entry : old_apps) { entry.second->ClearCache(); - const cryptohome::Identification cryptohome_id(entry.second->account_id()); - cryptohome::AccountIdentifier account_id_proto; - account_id_proto.set_account_id(cryptohome_id.id()); - - CryptohomeClient::Get()->RemoveEx( - account_id_proto, - base::BindOnce(&OnRemoveAppCryptohomeComplete, cryptohome_id, - entry.first, cryptohomes_barrier_closure)); - + account_ids_to_remove.push_back(entry.second->account_id()); apps_to_remove.push_back(entry.second->app_id()); } + KioskCryptohomeRemover::RemoveCryptohomesAndExitIfNeeded( + account_ids_to_remove); external_cache_->RemoveExtensions(apps_to_remove); }
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager.h b/chrome/browser/chromeos/app_mode/kiosk_app_manager.h index 40b6fa8..9e29bd9 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.h +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.h
@@ -128,9 +128,6 @@ // Registers kiosk app entries in local state. static void RegisterPrefs(PrefRegistrySimple* registry); - // Removes cryptohomes which could not be removed during the previous session. - static void RemoveObsoleteCryptohomes(); - static bool IsConsumerKioskEnabled(); // Initiates reading of consumer kiosk mode auto-launch status.
diff --git a/chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.cc b/chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.cc new file mode 100644 index 0000000..d94c403 --- /dev/null +++ b/chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.cc
@@ -0,0 +1,179 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h" + +#include <string> +#include <utility> + +#include "base/barrier_closure.h" +#include "base/bind.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/app_mode/pref_names.h" +#include "chrome/browser/lifetime/application_lifetime.h" +#include "chromeos/cryptohome/cryptohome_util.h" +#include "chromeos/dbus/cryptohome/cryptohome_client.h" +#include "components/account_id/account_id.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" +#include "components/prefs/scoped_user_pref_update.h" +#include "components/user_manager/user.h" +#include "components/user_manager/user_manager.h" +#include "third_party/cros_system_api/dbus/cryptohome/dbus-constants.h" + +namespace chromeos { + +namespace { + +void ScheduleDelayedCryptohomeRemoval(const AccountId& account_id) { + PrefService* const local_state = g_browser_process->local_state(); + { + DictionaryPrefUpdate dict_update(local_state, + prefs::kAllKioskUsersToRemove); + dict_update->SetKey(cryptohome::Identification(account_id).id(), + base::Value(account_id.GetUserEmail())); + } + local_state->CommitPendingWrite(); +} + +void UnscheduleDelayedCryptohomeRemoval(const cryptohome::Identification& id) { + PrefService* const local_state = g_browser_process->local_state(); + { + DictionaryPrefUpdate dict_update(local_state, + prefs::kAllKioskUsersToRemove); + dict_update->RemoveWithoutPathExpansion(id.id(), nullptr); + } + local_state->CommitPendingWrite(); +} + +// Functions to deal with legacy prefs -- update the current list from the old +// pref values(dict for regular kiosk and list for arc kiosk). +void UpdateFromDictValue(const char* dict_pref_name) { + PrefService* local_state = g_browser_process->local_state(); + const base::DictionaryValue* const users_to_remove = + local_state->GetDictionary(dict_pref_name); + { + DictionaryPrefUpdate dict_update(local_state, + prefs::kAllKioskUsersToRemove); + for (auto& element : *users_to_remove) { + std::string app_id; + element.second->GetAsString(&app_id); + dict_update->SetKey(element.first, base::Value(app_id)); + } + } + local_state->ClearPref(dict_pref_name); + local_state->CommitPendingWrite(); +} + +void UpdateFromListValue(const std::string& list_pref_name) { + PrefService* local_state = g_browser_process->local_state(); + const base::ListValue* const users_to_remove = + local_state->GetList(list_pref_name); + { + DictionaryPrefUpdate dict_update(local_state, + prefs::kAllKioskUsersToRemove); + for (auto& element : *users_to_remove) { + dict_update->SetKey(element.GetString(), base::Value("")); + } + } + local_state->ClearPref(list_pref_name); + local_state->CommitPendingWrite(); +} + +void OnRemoveAppCryptohomeComplete( + const cryptohome::Identification& id, + base::OnceClosure callback, + base::Optional<cryptohome::BaseReply> reply) { + cryptohome::MountError error = BaseReplyToMountError(reply); + if (error == cryptohome::MOUNT_ERROR_NONE || + error == cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST) { + UnscheduleDelayedCryptohomeRemoval(id); + } + if (callback) + std::move(callback).Run(); +} + +void PerformDelayedCryptohomeRemovals(bool service_is_available) { + if (!service_is_available) { + LOG(ERROR) << "Cryptohome client is not avaiable."; + return; + } + + // Legacy: we need to support cases when the prefs are stored in the old + // format. + // TODO(crbug.com/1014431): Remove this where the migration is + // completed. + UpdateFromDictValue(prefs::kRegularKioskUsersToRemove); + UpdateFromListValue(prefs::kArcKioskUsersToRemove); + + PrefService* local_state = g_browser_process->local_state(); + const base::DictionaryValue* const dict = + local_state->GetDictionary(prefs::kAllKioskUsersToRemove); + for (auto& it : *dict) { + std::string app_id; + it.second->GetAsString(&app_id); + VLOG(1) << "Removing obsolete cryptohome for " << app_id; + + const cryptohome::Identification cryptohome_id( + cryptohome::Identification::FromString(it.first)); + cryptohome::AccountIdentifier account_id_proto; + account_id_proto.set_account_id(cryptohome_id.id()); + + CryptohomeClient::Get()->RemoveEx( + account_id_proto, base::BindOnce(&OnRemoveAppCryptohomeComplete, + cryptohome_id, base::OnceClosure())); + } +} + +} // namespace + +void KioskCryptohomeRemover::RegisterPrefs(PrefRegistrySimple* registry) { + registry->RegisterDictionaryPref(prefs::kAllKioskUsersToRemove); + registry->RegisterListPref(prefs::kArcKioskUsersToRemove); + registry->RegisterDictionaryPref(prefs::kRegularKioskUsersToRemove); +} + +void KioskCryptohomeRemover::RemoveObsoleteCryptohomes() { + chromeos::CryptohomeClient* client = chromeos::CryptohomeClient::Get(); + client->WaitForServiceToBeAvailable( + base::Bind(&PerformDelayedCryptohomeRemovals)); +} + +void KioskCryptohomeRemover::CancelDelayedCryptohomeRemoval( + const AccountId& account_id) {} + +void KioskCryptohomeRemover::RemoveCryptohomesAndExitIfNeeded( + const std::vector<AccountId>& account_ids) { + base::Closure cryptohomes_barrier_closure; + const user_manager::User* active_user = + user_manager::UserManager::Get()->GetActiveUser(); + AccountId active_account_id; + if (active_user) + active_account_id = active_user->GetAccountId(); + if (std::find(account_ids.begin(), account_ids.end(), active_account_id) != + account_ids.end()) { + cryptohomes_barrier_closure = BarrierClosure( + account_ids.size() - 1, base::BindOnce(&chrome::AttemptUserExit)); + } + + // First schedule cryptohome removal in case there is a power failure during + // cryptohome calls. + for (const auto& account_id : account_ids) { + ScheduleDelayedCryptohomeRemoval(account_id); + } + + for (auto& account_id : account_ids) { + if (account_id != active_account_id) { + const cryptohome::Identification cryptohome_id(account_id); + cryptohome::AccountIdentifier account_id_proto; + account_id_proto.set_account_id(cryptohome_id.id()); + CryptohomeClient::Get()->RemoveEx( + account_id_proto, + base::BindOnce(&OnRemoveAppCryptohomeComplete, cryptohome_id, + cryptohomes_barrier_closure)); + } + } +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h b/chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h new file mode 100644 index 0000000..ef3eded --- /dev/null +++ b/chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h
@@ -0,0 +1,36 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_CRYPTOHOME_REMOVER_H_ +#define CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_CRYPTOHOME_REMOVER_H_ + +#include <vector> + +#include "base/macros.h" + +class AccountId; +class PrefRegistrySimple; + +namespace chromeos { + +// Helper functions to remove cryptohomes of no longer existing kiosk apps. +class KioskCryptohomeRemover { + public: + static void RegisterPrefs(PrefRegistrySimple* registry); + // Removes the cryptohomes of kiosks that were removed from policy. + static void RemoveObsoleteCryptohomes(); + // Cancels the scheduled next-startup removal of the kiosk app. + static void CancelDelayedCryptohomeRemoval(const AccountId& id); + // Tries to remove cryptohomes of the list of users. For current active user, + // remembers to do so on next boot and then terminates the session. + static void RemoveCryptohomesAndExitIfNeeded( + const std::vector<AccountId>& account_ids); + + private: + DISALLOW_IMPLICIT_CONSTRUCTORS(KioskCryptohomeRemover); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_CRYPTOHOME_REMOVER_H_
diff --git a/chrome/browser/chromeos/app_mode/pref_names.cc b/chrome/browser/chromeos/app_mode/pref_names.cc new file mode 100644 index 0000000..78adf70a --- /dev/null +++ b/chrome/browser/chromeos/app_mode/pref_names.cc
@@ -0,0 +1,27 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/app_mode/pref_names.h" + +namespace chromeos { +namespace prefs { + +// Dictionary of kiosk cryptohomes scheduled to removed upon next startup. +// Keys are cryptohome ids, values are device local account emails, which +// describe the app this cryptohome is associated to. +const char kAllKioskUsersToRemove[] = "all-kiosk-users-to-remove"; + +// Legacy prefs that will only be set when some cryptohomes were scheduled +// to be removed, but chrome update happened. +// TODO(crbug.com/1014431): Remove these prefs where the migration is +// completed. +// Dictionary that stores the list of Chrome kiosk cryptohomes to +// be deleted along with their app_ids. +const char kRegularKioskUsersToRemove[] = "kiosk-users-to-remove"; +// List of Android kiosk cryptohomes scheduled to be removed upon next +// startup. +const char kArcKioskUsersToRemove[] = "arc-kiosk-users-to-remove"; + +} // namespace prefs +} // namespace chromeos
diff --git a/chrome/browser/chromeos/app_mode/pref_names.h b/chrome/browser/chromeos/app_mode/pref_names.h new file mode 100644 index 0000000..a791f85 --- /dev/null +++ b/chrome/browser/chromeos/app_mode/pref_names.h
@@ -0,0 +1,20 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_APP_MODE_PREF_NAMES_H_ +#define CHROME_BROWSER_CHROMEOS_APP_MODE_PREF_NAMES_H_ + +namespace chromeos { +namespace prefs { + +// --------------------------------------------------------------------------- +// Prefs related to kiosk mode. +// --------------------------------------------------------------------------- +extern const char kAllKioskUsersToRemove[]; +extern const char kRegularKioskUsersToRemove[]; +extern const char kArcKioskUsersToRemove[]; + +} // namespace prefs +} // namespace chromeos +#endif // CHROME_BROWSER_CHROMEOS_APP_MODE_PREF_NAMES_H_
diff --git a/chrome/browser/chromeos/apps/apk_web_app_installer.cc b/chrome/browser/chromeos/apps/apk_web_app_installer.cc index 9cd063a..ae96938 100644 --- a/chrome/browser/chromeos/apps/apk_web_app_installer.cc +++ b/chrome/browser/chromeos/apps/apk_web_app_installer.cc
@@ -143,7 +143,7 @@ void ApkWebAppInstaller::OnImageDecoded(const SkBitmap& decoded_image) { DCHECK(web_app_info_); - WebApplicationInfo::IconInfo icon_info; + WebApplicationIconInfo icon_info; icon_info.data = decoded_image; icon_info.width = decoded_image.width(); icon_info.height = decoded_image.height();
diff --git a/chrome/browser/chromeos/assistant/assistant_util_unittest.cc b/chrome/browser/chromeos/assistant/assistant_util_unittest.cc index 227b810..2266f07 100644 --- a/chrome/browser/chromeos/assistant/assistant_util_unittest.cc +++ b/chrome/browser/chromeos/assistant/assistant_util_unittest.cc
@@ -7,6 +7,7 @@ #include <memory> #include "base/files/scoped_temp_dir.h" +#include "base/strings/utf_string_conversions.h" #include "base/test/scoped_command_line.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager.cc b/chrome/browser/chromeos/login/session/chrome_session_manager.cc index a309d33..af3fd220 100644 --- a/chrome/browser/chromeos/login/session/chrome_session_manager.cc +++ b/chrome/browser/chromeos/login/session/chrome_session_manager.cc
@@ -12,9 +12,9 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part_chromeos.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" +#include "chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h" #include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/boot_times_recorder.h" #include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service_factory.h" @@ -245,8 +245,7 @@ const AccountId login_account_id( cryptohome::Identification::FromString(cryptohome_id).GetAccountId()); - KioskAppManager::RemoveObsoleteCryptohomes(); - ArcKioskAppManager::RemoveObsoleteCryptohomes(); + KioskCryptohomeRemover::RemoveObsoleteCryptohomes(); if (ShouldAutoLaunchKioskApp(parsed_command_line)) { VLOG(1) << "Starting Chrome with kiosk auto launch.";
diff --git a/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc b/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc index a4e91cd..e0b2220 100644 --- a/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc +++ b/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc
@@ -31,6 +31,7 @@ #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_data.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" +#include "chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h" #include "chrome/browser/chromeos/crostini/crostini_pref_names.h" #include "chrome/browser/chromeos/crostini/crostini_registry_service.h" #include "chrome/browser/chromeos/crostini/crostini_registry_service_factory.h" @@ -463,9 +464,10 @@ TestingDeviceStatusCollector::RegisterProfilePrefs( profile_pref_service_.registry()); - // Set up a fake local state for KioskAppManager. + // Set up a fake local state for KioskAppManager and KioskCryptohomeRemover. TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_); chromeos::KioskAppManager::RegisterPrefs(local_state_.registry()); + chromeos::KioskCryptohomeRemover::RegisterPrefs(local_state_.registry()); // Use FakeUpdateEngineClient. std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
diff --git a/chrome/browser/data_saver/subresource_redirect_browsertest.cc b/chrome/browser/data_saver/subresource_redirect_browsertest.cc index 9d79020e2..e00d470 100644 --- a/chrome/browser/data_saver/subresource_redirect_browsertest.cc +++ b/chrome/browser/data_saver/subresource_redirect_browsertest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/metrics/histogram_tester.h" #include "chrome/browser/metrics/subprocess_metrics_provider.h" #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc index 7ecbb77..4d3cfcc0 100644 --- a/chrome/browser/download/chrome_download_manager_delegate.cc +++ b/chrome/browser/download/chrome_download_manager_delegate.cc
@@ -280,6 +280,12 @@ std::move(receiver)); } +bool IsDownloadTooLargeOrEncrypted(download::DownloadDangerType danger_type) { + return (danger_type == download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE || + danger_type == + download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED); +} + } // namespace ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile) @@ -448,7 +454,7 @@ bool ChromeDownloadManagerDelegate::IsDownloadReadyForCompletion( DownloadItem* item, - const base::Closure& internal_complete_callback) { + base::OnceClosure internal_complete_callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); #if BUILDFLAG(FULL_SAFE_BROWSING) if (!download_prefs_->safebrowsing_for_trusted_sources_enabled() && @@ -465,7 +471,7 @@ DVLOG(2) << __func__ << "() Start SB download check for download = " << item->DebugString(false); state = new SafeBrowsingState(); - state->set_callback(internal_complete_callback); + state->set_callback(std::move(internal_complete_callback)); item->SetUserData(&SafeBrowsingState::kSafeBrowsingUserDataKey, base::WrapUnique(state)); service->CheckClientDownload( @@ -499,12 +505,12 @@ download::DOWNLOAD_INTERRUPT_REASON_NONE); } base::PostTask(FROM_HERE, {content::BrowserThread::UI}, - internal_complete_callback); + std::move(internal_complete_callback)); return false; } } else if (!state->is_complete()) { // Don't complete the download until we have an answer. - state->set_callback(internal_complete_callback); + state->set_callback(std::move(internal_complete_callback)); return false; } @@ -514,20 +520,29 @@ void ChromeDownloadManagerDelegate::ShouldCompleteDownloadInternal( uint32_t download_id, - const base::Closure& user_complete_callback) { + base::OnceClosure user_complete_callback) { DownloadItem* item = download_manager_->GetDownload(download_id); if (!item) return; - if (ShouldCompleteDownload(item, user_complete_callback)) - user_complete_callback.Run(); + // This should be called only once. + base::RepeatingClosure callback = base::BindRepeating( + [](base::OnceClosure callback) { std::move(callback).Run(); }, + base::Passed(&user_complete_callback)); + if (ShouldCompleteDownload(item, callback)) { + // |callback| should not have run when ShouldCompleteDownload() returns + // true. + std::move(callback).Run(); + } } bool ChromeDownloadManagerDelegate::ShouldCompleteDownload( DownloadItem* item, - const base::Closure& user_complete_callback) { - return IsDownloadReadyForCompletion(item, base::Bind( - &ChromeDownloadManagerDelegate::ShouldCompleteDownloadInternal, - weak_ptr_factory_.GetWeakPtr(), item->GetId(), user_complete_callback)); + base::OnceClosure user_complete_callback) { + return IsDownloadReadyForCompletion( + item, base::BindOnce( + &ChromeDownloadManagerDelegate::ShouldCompleteDownloadInternal, + weak_ptr_factory_.GetWeakPtr(), item->GetId(), + std::move(user_complete_callback))); } bool ChromeDownloadManagerDelegate::ShouldOpenDownload( @@ -1135,6 +1150,9 @@ case safe_browsing::DownloadCheckResult::BLOCKED_PASSWORD_PROTECTED: danger_type = download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED; break; + case safe_browsing::DownloadCheckResult::BLOCKED_TOO_LARGE: + danger_type = download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE; + break; } DCHECK_NE(danger_type, download::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT); @@ -1151,11 +1169,14 @@ item->OnAsyncScanningCompleted(danger_type); } } else if (ShouldBlockFile(danger_type, item)) { + // Specifying a dangerous type here would take precedence over the + // blocking of the file. For BLOCKED_TOO_LARGE and + // BLOCKED_PASSWORD_PROTECTED, we want to display more clear UX, so + // allow those danger types. + if (!IsDownloadTooLargeOrEncrypted(danger_type)) + danger_type = download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS; item->OnContentCheckCompleted( - // Specifying a dangerous type here would take precedence over the - // blocking of the file. - download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, - download::DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED); + danger_type, download::DOWNLOAD_INTERRUPT_REASON_FILE_BLOCKED); } else { item->OnContentCheckCompleted(danger_type, download::DOWNLOAD_INTERRUPT_REASON_NONE); @@ -1265,6 +1286,9 @@ DownloadPrefs::DownloadRestriction download_restriction = download_prefs_->download_restriction(); + if (IsDownloadTooLargeOrEncrypted(danger_type)) + return true; + if (item && base::FeatureList::IsEnabled(features::kDisallowUnsafeHttpDownloads)) { // Check field trial for an override of the default unsafe mime-type. @@ -1313,17 +1337,6 @@ } } - if (danger_type == download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED) - return true; - -#if BUILDFLAG(FULL_SAFE_BROWSING) - if (item && item->GetTotalBytes() >= 0 && - safe_browsing::BinaryUploadService::ShouldBlockFileSize( - size_t(item->GetTotalBytes()))) { - return true; - } -#endif - switch (download_restriction) { case (DownloadPrefs::DownloadRestriction::NONE): return false;
diff --git a/chrome/browser/download/chrome_download_manager_delegate.h b/chrome/browser/download/chrome_download_manager_delegate.h index bb543502..1dbce4d 100644 --- a/chrome/browser/download/chrome_download_manager_delegate.h +++ b/chrome/browser/download/chrome_download_manager_delegate.h
@@ -87,7 +87,7 @@ const content::DownloadTargetCallback& callback) override; bool ShouldOpenFileBasedOnExtension(const base::FilePath& path) override; bool ShouldCompleteDownload(download::DownloadItem* item, - const base::Closure& complete_callback) override; + base::OnceClosure complete_callback) override; bool ShouldOpenDownload( download::DownloadItem* item, const content::DownloadOpenDelayedCallback& callback) override; @@ -228,10 +228,9 @@ // Internal gateways for ShouldCompleteDownload(). bool IsDownloadReadyForCompletion( download::DownloadItem* item, - const base::Closure& internal_complete_callback); - void ShouldCompleteDownloadInternal( - uint32_t download_id, - const base::Closure& user_complete_callback); + base::OnceClosure internal_complete_callback); + void ShouldCompleteDownloadInternal(uint32_t download_id, + base::OnceClosure user_complete_callback); // Sets the next download id based on download database records, and runs all // cached id callbacks.
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc index b9fe9d10..0f5205f 100644 --- a/chrome/browser/download/download_browsertest.cc +++ b/chrome/browser/download/download_browsertest.cc
@@ -109,6 +109,7 @@ #include "content/public/browser/resource_context.h" #include "content/public/browser/system_connector.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/context_menu_params.h"
diff --git a/chrome/browser/download/download_completion_blocker.cc b/chrome/browser/download/download_completion_blocker.cc index 4570676..5c051a5 100644 --- a/chrome/browser/download/download_completion_blocker.cc +++ b/chrome/browser/download/download_completion_blocker.cc
@@ -21,7 +21,7 @@ if (callback_.is_null()) return; - callback_.Run(); + std::move(callback_).Run(); // |callback_| may delete |this|, so do not rely on |this| after running // |callback_|! }
diff --git a/chrome/browser/download/download_completion_blocker.h b/chrome/browser/download/download_completion_blocker.h index f8fbc75..feb4ee27 100644 --- a/chrome/browser/download/download_completion_blocker.h +++ b/chrome/browser/download/download_completion_blocker.h
@@ -21,9 +21,9 @@ bool is_complete() const { return is_complete_; } - void set_callback(const base::Closure& callback) { + void set_callback(base::OnceClosure callback) { if (!is_complete()) - callback_ = callback; + callback_ = std::move(callback); } // Mark this download item as complete with respect to this blocker. (Other @@ -34,7 +34,7 @@ private: bool is_complete_; - base::Closure callback_; + base::OnceClosure callback_; DISALLOW_COPY_AND_ASSIGN(DownloadCompletionBlocker); };
diff --git a/chrome/browser/download/download_shelf_context_menu.cc b/chrome/browser/download/download_shelf_context_menu.cc index 84fa9e5e..3c15b29c 100644 --- a/chrome/browser/download/download_shelf_context_menu.cc +++ b/chrome/browser/download/download_shelf_context_menu.cc
@@ -6,6 +6,7 @@ #include "build/build_config.h" #include "chrome/grit/generated_resources.h" +#include "components/download/public/common/download_danger_type.h" #include "content/public/common/content_features.h" #include "extensions/common/extension.h" #include "ui/base/l10n/l10n_util.h" @@ -39,18 +40,25 @@ bool is_download = download_->download() != nullptr; - if (download_->IsMalicious()) - model = GetMaliciousMenuModel(is_download); - else if (download_->MightBeMalicious()) - model = GetMaybeMaliciousMenuModel(is_download); - else if (download_->GetState() == download::DownloadItem::COMPLETE) - model = GetFinishedMenuModel(is_download); - else if (download_->GetState() == download::DownloadItem::INTERRUPTED) + if (download_->GetDangerType() == + download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED || + download_->GetDangerType() == + download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE) { model = GetInterruptedMenuModel(is_download); - else if (download_->IsPaused()) + } else if (download_->IsMalicious()) { + model = GetMaliciousMenuModel(is_download); + } else if (download_->MightBeMalicious()) { + model = GetMaybeMaliciousMenuModel(is_download); + } else if (download_->GetState() == download::DownloadItem::COMPLETE) { + model = GetFinishedMenuModel(is_download); + } else if (download_->GetState() == download::DownloadItem::INTERRUPTED) { + model = GetInterruptedMenuModel(is_download); + } else if (download_->IsPaused()) { model = GetInProgressPausedMenuModel(is_download); - else + } else { model = GetInProgressMenuModel(is_download); + } + return model; }
diff --git a/chrome/browser/download/download_ui_model.cc b/chrome/browser/download/download_ui_model.cc index 4b5c344..c234e82 100644 --- a/chrome/browser/download/download_ui_model.cc +++ b/chrome/browser/download/download_ui_model.cc
@@ -293,12 +293,18 @@ return l10n_util::GetStringFUTF16(IDS_PROMPT_DOWNLOAD_CHANGES_SETTINGS, elided_filename); } + case download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE: { + return l10n_util::GetStringFUTF16(IDS_PROMPT_DOWNLOAD_BLOCKED_TOO_LARGE, + elided_filename); + } + case download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED: { + return l10n_util::GetStringFUTF16( + IDS_PROMPT_DOWNLOAD_BLOCKED_PASSWORD_PROTECTED, elided_filename); + } case download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_WARNING: case download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_BLOCK: case download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_SAFE: case download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_OPENED_DANGEROUS: - case download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE: - case download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED: case download::DOWNLOAD_DANGER_TYPE_ASYNC_SCANNING: case download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS: case download::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT:
diff --git a/chrome/browser/download/save_page_browsertest.cc b/chrome/browser/download/save_page_browsertest.cc index cb89784..d30046f7 100644 --- a/chrome/browser/download/save_page_browsertest.cc +++ b/chrome/browser/download/save_page_browsertest.cc
@@ -500,7 +500,7 @@ bool ShouldCompleteDownload( download::DownloadItem* item, - const base::Closure& user_complete_callback) override { + base::OnceClosure user_complete_callback) override { return false; }
diff --git a/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc b/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc index d8f11ebc..1251a3a 100644 --- a/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/ruleset_manager_unittest.cc
@@ -29,6 +29,7 @@ #include "extensions/common/file_util.h" #include "extensions/common/manifest_handlers/background_info.h" #include "extensions/common/url_pattern.h" +#include "net/http/http_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" #include "url/origin.h"
diff --git a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc index 4a4e5e4..26f242b 100644 --- a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc +++ b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
@@ -38,6 +38,7 @@ #include "components/prefs/pref_service.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/notification_service.h" +#include "content/public/browser/overlay_window.h" #include "content/public/browser/picture_in_picture_window_controller.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc index 6316f532..a1b11bc 100644 --- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
@@ -227,7 +227,7 @@ web_app_info->open_as_window = false; if (!image_result.image.IsEmpty()) { - WebApplicationInfo::IconInfo icon; + WebApplicationIconInfo icon; icon.data = image_result.image.AsBitmap(); icon.width = icon.data.width(); icon.height = icon.data.height();
diff --git a/chrome/browser/extensions/api/socket/tls_socket_unittest.cc b/chrome/browser/extensions/api/socket/tls_socket_unittest.cc index 39a43b0..580a81c0 100644 --- a/chrome/browser/extensions/api/socket/tls_socket_unittest.cc +++ b/chrome/browser/extensions/api/socket/tls_socket_unittest.cc
@@ -12,6 +12,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/test/test_storage_partition.h" #include "extensions/browser/api/socket/tls_socket.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/base/address_list.h" #include "net/base/io_buffer.h" @@ -67,14 +68,16 @@ socket->UpgradeToTLS( nullptr /* options */, base::BindLambdaForTesting( - [&](int result, network::mojom::TLSClientSocketPtr tls_socket_ptr, + [&](int result, + mojo::PendingRemote<network::mojom::TLSClientSocket> + pending_tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_handle, mojo::ScopedDataPipeProducerHandle send_handle) { if (net::OK == result) { tls_socket = std::make_unique<TLSSocket>( - std::move(tls_socket_ptr), local_addr, peer_addr, + std::move(pending_tls_socket), local_addr, peer_addr, std::move(receive_handle), std::move(send_handle), FAKE_ID); } run_loop.Quit(); @@ -171,12 +174,12 @@ auto socket = CreateTCPSocket(); // This read will be pending when UpgradeToTLS() is called. socket->Read(1 /* count */, base::DoNothing()); - network::mojom::TLSClientSocketPtr tls_socket_ptr; base::RunLoop run_loop; socket->UpgradeToTLS( nullptr /* options */, base::BindLambdaForTesting( - [&](int result, network::mojom::TLSClientSocketPtr tls_socket_ptr, + [&](int result, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_handle, @@ -204,7 +207,6 @@ mock_client_socket_factory()->AddSSLSocketDataProvider(&ssl_socket); auto socket = CreateTCPSocket(); - network::mojom::TLSClientSocketPtr tls_socket_ptr; api::socket::SecureOptions options; options.tls_version = std::make_unique<api::socket::TLSVersionConstraints>(); options.tls_version->min = std::make_unique<std::string>("tls1.1"); @@ -214,7 +216,8 @@ socket->UpgradeToTLS( &options, base::BindLambdaForTesting( - [&](int result, network::mojom::TLSClientSocketPtr tls_socket_ptr, + [&](int result, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_handle, @@ -245,7 +248,6 @@ mock_client_socket_factory()->AddSSLSocketDataProvider(&ssl_socket); auto socket = CreateTCPSocket(); - network::mojom::TLSClientSocketPtr tls_socket_ptr; api::socket::SecureOptions options; options.tls_version = std::make_unique<api::socket::TLSVersionConstraints>(); options.tls_version->min = std::make_unique<std::string>("tls1.3"); @@ -255,7 +257,8 @@ socket->UpgradeToTLS( &options, base::BindLambdaForTesting( - [&](int result, network::mojom::TLSClientSocketPtr tls_socket_ptr, + [&](int result, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_handle,
diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc index 10b3dd1..98f9962 100644 --- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
@@ -51,6 +51,7 @@ #include "extensions/common/features/feature.h" #include "google_apis/gaia/gaia_urls.h" #include "net/http/http_util.h" +#include "services/network/public/cpp/features.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest-message.h" #include "testing/gtest/include/gtest/gtest.h" @@ -171,14 +172,16 @@ // Create the numerical representation of |values|, strings passed as // extraInfoSpec by the event handler. Returns true on success, otherwise false. -bool GenerateInfoSpec(const std::string& values, int* result) { +bool GenerateInfoSpec(content::BrowserContext* browser_context, + const std::string& values, + int* result) { // Create a base::ListValue of strings. base::ListValue list_value; for (const std::string& cur : base::SplitString(values, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) list_value.AppendString(cur); - return ExtraInfoSpec::InitFromValue(list_value, result); + return ExtraInfoSpec::InitFromValue(browser_context, list_value, result); } } // namespace @@ -230,10 +233,13 @@ namespace { -void TestInitFromValue(const std::string& values, bool expected_return_code, +void TestInitFromValue(content::BrowserContext* browser_context, + const std::string& values, + bool expected_return_code, int expected_extra_info_spec) { int actual_info_spec; - bool actual_return_code = GenerateInfoSpec(values, &actual_info_spec); + bool actual_return_code = + GenerateInfoSpec(browser_context, values, &actual_info_spec); EXPECT_EQ(expected_return_code, actual_return_code); if (expected_return_code) EXPECT_EQ(expected_extra_info_spec, actual_info_spec); @@ -242,43 +248,30 @@ } // namespace TEST_F(ExtensionWebRequestTest, InitFromValue) { - TestInitFromValue(std::string(), true, 0); + TestInitFromValue(&profile_, std::string(), true, 0); // Single valid values. - TestInitFromValue( - "requestHeaders", - true, - ExtraInfoSpec::REQUEST_HEADERS); - TestInitFromValue( - "responseHeaders", - true, - ExtraInfoSpec::RESPONSE_HEADERS); - TestInitFromValue( - "blocking", - true, - ExtraInfoSpec::BLOCKING); - TestInitFromValue( - "asyncBlocking", - true, - ExtraInfoSpec::ASYNC_BLOCKING); - TestInitFromValue( - "requestBody", - true, - ExtraInfoSpec::REQUEST_BODY); + TestInitFromValue(&profile_, "requestHeaders", true, + ExtraInfoSpec::REQUEST_HEADERS); + TestInitFromValue(&profile_, "responseHeaders", true, + ExtraInfoSpec::RESPONSE_HEADERS); + TestInitFromValue(&profile_, "blocking", true, ExtraInfoSpec::BLOCKING); + TestInitFromValue(&profile_, "asyncBlocking", true, + ExtraInfoSpec::ASYNC_BLOCKING); + TestInitFromValue(&profile_, "requestBody", true, + ExtraInfoSpec::REQUEST_BODY); // Multiple valid values are bitwise-or'ed. - TestInitFromValue( - "requestHeaders,blocking", - true, - ExtraInfoSpec::REQUEST_HEADERS | ExtraInfoSpec::BLOCKING); + TestInitFromValue(&profile_, "requestHeaders,blocking", true, + ExtraInfoSpec::REQUEST_HEADERS | ExtraInfoSpec::BLOCKING); // Any invalid values lead to a bad parse. - TestInitFromValue("invalidValue", false, 0); - TestInitFromValue("blocking,invalidValue", false, 0); - TestInitFromValue("invalidValue1,invalidValue2", false, 0); + TestInitFromValue(&profile_, "invalidValue", false, 0); + TestInitFromValue(&profile_, "blocking,invalidValue", false, 0); + TestInitFromValue(&profile_, "invalidValue1,invalidValue2", false, 0); // BLOCKING and ASYNC_BLOCKING are mutually exclusive. - TestInitFromValue("blocking,asyncBlocking", false, 0); + TestInitFromValue(&profile_, "blocking,asyncBlocking", false, 0); } TEST(ExtensionWebRequestHelpersTest, @@ -332,8 +325,8 @@ new_headers_added.SetHeader("key3", "value3"); new_headers_added.SetHeader("key2", "value2"); EventResponseDelta delta_added = CalculateOnBeforeSendHeadersDelta( - "extid", base::Time::Now(), cancel, &old_headers, &new_headers_added, - 0 /* extra_info_spec */); + nullptr /* browser_context */, "extid", base::Time::Now(), cancel, + &old_headers, &new_headers_added, 0 /* extra_info_spec */); EXPECT_TRUE(delta_added.cancel); ASSERT_TRUE(delta_added.modified_request_headers.GetHeader("key3", &value)); EXPECT_EQ("value3", value); @@ -342,8 +335,8 @@ net::HttpRequestHeaders new_headers_deleted; new_headers_deleted.SetHeader("key1", "value1"); EventResponseDelta delta_deleted = CalculateOnBeforeSendHeadersDelta( - "extid", base::Time::Now(), cancel, &old_headers, &new_headers_deleted, - 0 /* extra_info_spec */); + nullptr /* browser_context */, "extid", base::Time::Now(), cancel, + &old_headers, &new_headers_deleted, 0 /* extra_info_spec */); ASSERT_EQ(1u, delta_deleted.deleted_request_headers.size()); ASSERT_EQ("key2", delta_deleted.deleted_request_headers.front()); @@ -352,8 +345,8 @@ new_headers_modified.SetHeader("key1", "value1"); new_headers_modified.SetHeader("key2", "value3"); EventResponseDelta delta_modified = CalculateOnBeforeSendHeadersDelta( - "extid", base::Time::Now(), cancel, &old_headers, &new_headers_modified, - 0 /* extra_info_spec */); + nullptr /* browser_context */, "extid", base::Time::Now(), cancel, + &old_headers, &new_headers_modified, 0 /* extra_info_spec */); EXPECT_TRUE(delta_modified.deleted_request_headers.empty()); ASSERT_TRUE( delta_modified.modified_request_headers.GetHeader("key2", &value)); @@ -367,8 +360,8 @@ new_headers_modified2.SetHeader("key2", "value2"); new_headers_modified2.SetHeader("key2", "value3"); EventResponseDelta delta_modified2 = CalculateOnBeforeSendHeadersDelta( - "extid", base::Time::Now(), cancel, &old_headers, &new_headers_modified, - 0 /* extra_info_spec */); + nullptr /* browser_context */, "extid", base::Time::Now(), cancel, + &old_headers, &new_headers_modified, 0 /* extra_info_spec */); EXPECT_TRUE(delta_modified2.deleted_request_headers.empty()); ASSERT_TRUE( delta_modified2.modified_request_headers.GetHeader("key2", &value)); @@ -386,14 +379,14 @@ net::HttpRequestHeaders new_headers = old_headers; new_headers.SetHeader(name, "value"); EventResponseDelta delta = CalculateOnBeforeSendHeadersDelta( - "extid", base::Time::Now(), false, &old_headers, &new_headers, - 0 /* extra_info_spec */); + nullptr /* browser_context */, "extid", base::Time::Now(), false, + &old_headers, &new_headers, 0 /* extra_info_spec */); EXPECT_FALSE(delta.modified_request_headers.HasHeader(name)); // Test with extra headers in spec. - delta = CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), false, - &old_headers, &new_headers, - ExtraInfoSpec::EXTRA_HEADERS); + delta = CalculateOnBeforeSendHeadersDelta( + nullptr /* browser_context */, "extid", base::Time::Now(), false, + &old_headers, &new_headers, ExtraInfoSpec::EXTRA_HEADERS); std::string value; EXPECT_TRUE(delta.modified_request_headers.GetHeader(name, &value)); EXPECT_EQ("value", value); @@ -402,15 +395,15 @@ new_headers = old_headers; // Add header to old headers, it will be treated as removed. old_headers.SetHeader(name, "value"); - delta = CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), false, - &old_headers, &new_headers, - 0 /* extra_info_spec */); + delta = CalculateOnBeforeSendHeadersDelta( + nullptr /* browser_context */, "extid", base::Time::Now(), false, + &old_headers, &new_headers, 0 /* extra_info_spec */); EXPECT_TRUE(delta.deleted_request_headers.empty()); // Test with extra headers in spec. - delta = CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), false, - &old_headers, &new_headers, - ExtraInfoSpec::EXTRA_HEADERS); + delta = CalculateOnBeforeSendHeadersDelta( + nullptr /* browser_context */, "extid", base::Time::Now(), false, + &old_headers, &new_headers, ExtraInfoSpec::EXTRA_HEADERS); EXPECT_THAT(delta.deleted_request_headers, ElementsAre(name)); } }
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc index c62565180..5e316e3 100644 --- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -618,7 +618,7 @@ WebRequestCORSWithExtraHeaders) { ASSERT_TRUE(StartEmbeddedTestServer()); std::string test = "test_cors.html"; - if (network::features::ShouldEnableOutOfBlinkCors()) + if (network::features::ShouldEnableOutOfBlinkCorsForTesting()) test += "?cors_mode=network_service"; else test += "?cors_mode=blink";
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc index 1c10e92..8b5b0e6 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.cc +++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -539,6 +539,17 @@ return ExtensionsBrowserClient::ShouldSchemeBypassNavigationChecks(scheme); } +bool ChromeExtensionsBrowserClient::ShouldForceWebRequestExtraHeaders( + content::BrowserContext* context) const { + // If OOR-CORS is disabled, we never apply this enforcement. + if (!context->ShouldEnableOutOfBlinkCors()) + return false; + + // Enables the enforcement if the prefs is managed by the enterprise policy. + return Profile::FromBrowserContext(context)->GetPrefs()->IsManagedPreference( + prefs::kCorsMitigationList); +} + // static void ChromeExtensionsBrowserClient::set_did_chrome_update_for_testing( bool did_update) {
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h index 584a7c729..cf44bce 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.h +++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -145,6 +145,8 @@ std::string GetUserAgent() const override; bool ShouldSchemeBypassNavigationChecks( const std::string& scheme) const override; + bool ShouldForceWebRequestExtraHeaders( + content::BrowserContext* context) const override; static void set_did_chrome_update_for_testing(bool did_update);
diff --git a/chrome/browser/extensions/chrome_extensions_interface_registration.cc b/chrome/browser/extensions/chrome_extensions_interface_registration.cc index 17c4d53..49922c9 100644 --- a/chrome/browser/extensions/chrome_extensions_interface_registration.cc +++ b/chrome/browser/extensions/chrome_extensions_interface_registration.cc
@@ -38,7 +38,7 @@ #include "extensions/browser/api/media_perception_private/media_perception_api_delegate.h" #include "media/capture/video/chromeos/camera_app_device_provider_impl.h" #include "media/capture/video/chromeos/mojom/camera_app.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "ui/base/ime/chromeos/extension_ime_util.h" #include "ui/base/ime/chromeos/input_method_manager.h" @@ -94,7 +94,7 @@ // Connects to CameraAppDeviceProvider which could be used to get // CameraAppDevice from video capture service through CameraAppDeviceBridge. void ConnectToCameraAppDeviceProvider( - cros::mojom::CameraAppDeviceProviderRequest request, + mojo::PendingReceiver<cros::mojom::CameraAppDeviceProvider> receiver, content::RenderFrameHost* source) { mojo::PendingRemote<cros::mojom::CameraAppDeviceBridge> device_bridge; auto device_bridge_receiver = device_bridge.InitWithNewPipeAndPassReceiver(); @@ -114,20 +114,21 @@ auto camera_app_device_provider = std::make_unique<media::CameraAppDeviceProviderImpl>( std::move(device_bridge), std::move(mapping_callback)); - mojo::MakeStrongBinding(std::move(camera_app_device_provider), - std::move(request)); + mojo::MakeSelfOwnedReceiver(std::move(camera_app_device_provider), + std::move(receiver)); } // Connects to CameraAppHelper that could handle camera intents. void ConnectToCameraAppHelper( - chromeos_camera::mojom::CameraAppHelperRequest request, + mojo::PendingReceiver<chromeos_camera::mojom::CameraAppHelper> receiver, content::RenderFrameHost* source) { auto handle_result_callback = base::BindRepeating( &HandleCameraResult, source->GetProcess()->GetBrowserContext()); auto camera_app_helper = std::make_unique<chromeos_camera::CameraAppHelperImpl>( std::move(handle_result_callback)); - mojo::MakeStrongBinding(std::move(camera_app_helper), std::move(request)); + mojo::MakeSelfOwnedReceiver(std::move(camera_app_helper), + std::move(receiver)); } #endif
diff --git a/chrome/browser/extensions/convert_web_app_unittest.cc b/chrome/browser/extensions/convert_web_app_unittest.cc index 452ab737..d7f509a0 100644 --- a/chrome/browser/extensions/convert_web_app_unittest.cc +++ b/chrome/browser/extensions/convert_web_app_unittest.cc
@@ -44,8 +44,8 @@ namespace { // Returns an icon info corresponding to a canned icon. -WebApplicationInfo::IconInfo GetIconInfo(const GURL& url, int size) { - WebApplicationInfo::IconInfo result; +WebApplicationIconInfo GetIconInfo(const GURL& url, int size) { + WebApplicationIconInfo result; base::FilePath icon_file; if (!base::PathService::Get(chrome::DIR_TEST_DATA, &icon_file)) {
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc index c837ecc..e32bd3f5 100644 --- a/chrome/browser/extensions/crx_installer_browsertest.cc +++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -131,8 +131,8 @@ return bitmap; } -WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size) { - WebApplicationInfo::IconInfo icon_info; +WebApplicationIconInfo CreateIconInfoWithBitmap(int size) { + WebApplicationIconInfo icon_info; icon_info.width = size; icon_info.height = size; icon_info.data = CreateSquareBitmap(size);
diff --git a/chrome/browser/extensions/extension_sync_service.cc b/chrome/browser/extensions/extension_sync_service.cc index 6af7350..10911598 100644 --- a/chrome/browser/extensions/extension_sync_service.cc +++ b/chrome/browser/extensions/extension_sync_service.cc
@@ -537,7 +537,7 @@ &web_app_info->generated_icon_color); } for (const auto& icon : extension_sync_data.linked_icons()) { - WebApplicationInfo::IconInfo icon_info; + WebApplicationIconInfo icon_info; icon_info.url = icon.url; icon_info.width = icon.size; icon_info.height = icon.size;
diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc index 8b0be6cfe5..17ce8468 100644 --- a/chrome/browser/file_select_helper.cc +++ b/chrome/browser/file_select_helper.cc
@@ -117,6 +117,7 @@ // for PPAPI downloads. case Result::ASYNC_SCANNING: case Result::BLOCKED_PASSWORD_PROTECTED: + case Result::BLOCKED_TOO_LARGE: NOTREACHED(); return true; }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 344d8972..709e2d1 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1638,11 +1638,6 @@ "expiry_milestone": -1 }, { - "name": "enable-scroll-anchor-serialization", - "owners": [ "pnoland" ], - "expiry_milestone": 76 - }, - { "name": "enable-search-box-selection", "owners": [ "ginko", "newcomer" ], "expiry_milestone": 78 @@ -2106,7 +2101,7 @@ { "name": "file-manager-feedback-panel", "owners": [ "adanilo" ], - "expiry_milestone": 78 + "expiry_milestone": 81 }, { // See https://crbug.com/904630, offical builds only.
diff --git a/chrome/browser/invalidation/deprecated_profile_invalidation_provider_factory.cc b/chrome/browser/invalidation/deprecated_profile_invalidation_provider_factory.cc index 67284b1c..cae516d 100644 --- a/chrome/browser/invalidation/deprecated_profile_invalidation_provider_factory.cc +++ b/chrome/browser/invalidation/deprecated_profile_invalidation_provider_factory.cc
@@ -36,6 +36,7 @@ #include "content/public/common/service_manager_connection.h" #include "services/data_decoder/public/cpp/safe_json_parser.h" #include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/mojom/network_context.mojom.h" #if defined(OS_ANDROID) #include "components/invalidation/impl/invalidation_service_android.h"
diff --git a/chrome/browser/media/cast_remoting_connector.cc b/chrome/browser/media/cast_remoting_connector.cc index 95c6b4c0..7e97eedc 100644 --- a/chrome/browser/media/cast_remoting_connector.cc +++ b/chrome/browser/media/cast_remoting_connector.cc
@@ -192,7 +192,6 @@ tab_id_(tab_id), permission_request_callback_(std::move(permission_request_callback)), active_bridge_(nullptr), - deprecated_binding_(this), pref_service_(pref_service) { DCHECK(permission_request_callback_); #if !defined(OS_ANDROID) @@ -224,18 +223,18 @@ } void CastRemotingConnector::ConnectToService( - media::mojom::MirrorServiceRemotingSourceRequest source_request, - media::mojom::MirrorServiceRemoterPtr remoter) { - DCHECK(!deprecated_binding_); + mojo::PendingReceiver<media::mojom::MirrorServiceRemotingSource> + source_receiver, + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> remoter) { DCHECK(!deprecated_remoter_); DCHECK(remoter); DCHECK_CURRENTLY_ON(BrowserThread::UI); - deprecated_binding_.Bind(std::move(source_request)); - deprecated_binding_.set_connection_error_handler(base::BindOnce( + deprecated_receiver_.Bind(std::move(source_receiver)); + deprecated_receiver_.set_disconnect_handler(base::BindOnce( &CastRemotingConnector::OnMirrorServiceStopped, base::Unretained(this))); - deprecated_remoter_ = std::move(remoter); - deprecated_remoter_.set_connection_error_handler(base::BindOnce( + deprecated_remoter_.Bind(std::move(remoter)); + deprecated_remoter_.set_disconnect_handler(base::BindOnce( &CastRemotingConnector::OnMirrorServiceStopped, base::Unretained(this))); } @@ -263,8 +262,7 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); DVLOG(2) << __func__; - if (deprecated_binding_) - deprecated_binding_.Close(); + deprecated_receiver_.reset(); deprecated_remoter_.reset(); receiver_.reset(); remoter_.reset();
diff --git a/chrome/browser/media/cast_remoting_connector.h b/chrome/browser/media/cast_remoting_connector.h index 3035b544..f6992ca 100644 --- a/chrome/browser/media/cast_remoting_connector.h +++ b/chrome/browser/media/cast_remoting_connector.h
@@ -16,7 +16,8 @@ #include "media/mojo/mojom/mirror_service_remoting.mojom.h" #include "media/mojo/mojom/remoting.mojom.h" #include "media/mojo/mojom/remoting_common.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -100,8 +101,9 @@ // call connects the CastRemotingConnector with the MediaRemoter. Remoting // sessions can only be started after this is called. void ConnectToService( - media::mojom::MirrorServiceRemotingSourceRequest source_request, - media::mojom::MirrorServiceRemoterPtr remoter); + mojo::PendingReceiver<media::mojom::MirrorServiceRemotingSource> + source_receiver, + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> remoter); // Called at the start of mirroring to reset the permission. void ResetRemotingPermission(); @@ -234,8 +236,9 @@ RemotingBridge* active_bridge_; // TODO(xjz): Remove these after Mirroring Service is launched. - mojo::Binding<media::mojom::MirrorServiceRemotingSource> deprecated_binding_; - media::mojom::MirrorServiceRemoterPtr deprecated_remoter_; + mojo::Receiver<media::mojom::MirrorServiceRemotingSource> + deprecated_receiver_{this}; + mojo::Remote<media::mojom::MirrorServiceRemoter> deprecated_remoter_; mojo::Receiver<media::mojom::RemotingSource> receiver_{this}; mojo::Remote<media::mojom::Remoter> remoter_;
diff --git a/chrome/browser/media/cast_remoting_connector_unittest.cc b/chrome/browser/media/cast_remoting_connector_unittest.cc index 90bc8e1..3f85e86 100644 --- a/chrome/browser/media/cast_remoting_connector_unittest.cc +++ b/chrome/browser/media/cast_remoting_connector_unittest.cc
@@ -21,7 +21,10 @@ #include "content/public/test/browser_task_environment.h" #include "media/mojo/mojom/mirror_service_remoting.mojom.h" #include "media/mojo/mojom/remoting.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -81,8 +84,9 @@ void OnMediaRemoterCreated( SessionID tab_id, - MirrorServiceRemoterPtr remoter, - MirrorServiceRemotingSourceRequest remoting_source) { + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> remoter, + mojo::PendingReceiver<media::mojom::MirrorServiceRemotingSource> + remoting_source) { if (tab_id != tab_id_) return; @@ -130,16 +134,15 @@ public media::mojom::Remoter { public: // TODO(xjz): Remove this ctor after Mirroring Service is launched. - explicit MockMediaRemoter(FakeMediaRouter* media_router) - : deprecated_binding_(this) { - MirrorServiceRemoterPtr remoter; - deprecated_binding_.Bind(mojo::MakeRequest(&remoter)); - media_router->OnMediaRemoterCreated(kRemotingTabId, std::move(remoter), - mojo::MakeRequest(&deprecated_source_)); + explicit MockMediaRemoter(FakeMediaRouter* media_router) { + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> pending_remoter; + deprecated_receiver_.Bind(pending_remoter.InitWithNewPipeAndPassReceiver()); + media_router->OnMediaRemoterCreated( + kRemotingTabId, std::move(pending_remoter), + deprecated_source_.BindNewPipeAndPassReceiver()); } - explicit MockMediaRemoter(CastRemotingConnector* connector) - : deprecated_binding_(this) { + explicit MockMediaRemoter(CastRemotingConnector* connector) { connector->ConnectWithMediaRemoter(receiver_.BindNewPipeAndPassRemote(), mojo::MakeRequest(&source_)); } @@ -217,8 +220,8 @@ private: // TODO(xjz): Remove these after Mirroring Service is launched. - mojo::Binding<media::mojom::MirrorServiceRemoter> deprecated_binding_; - MirrorServiceRemotingSourcePtr deprecated_source_; + mojo::Receiver<media::mojom::MirrorServiceRemoter> deprecated_receiver_{this}; + mojo::Remote<media::mojom::MirrorServiceRemotingSource> deprecated_source_; mojo::Receiver<media::mojom::Remoter> receiver_{this}; RemotingSourcePtr source_;
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc index 2190bf8..66f8ba2 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
@@ -914,8 +914,9 @@ void MediaRouterMojoImpl::OnMediaRemoterCreated( int32_t tab_id, - media::mojom::MirrorServiceRemoterPtr remoter, - media::mojom::MirrorServiceRemotingSourceRequest source_request) { + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> remoter, + mojo::PendingReceiver<media::mojom::MirrorServiceRemotingSource> + source_receiver) { DVLOG_WITH_INSTANCE(1) << __func__ << ": tab_id = " << tab_id; auto it = remoting_sources_.find(SessionID::FromSerializedValue(tab_id)); @@ -926,7 +927,7 @@ } CastRemotingConnector* connector = it->second; - connector->ConnectToService(std::move(source_request), std::move(remoter)); + connector->ConnectToService(std::move(source_receiver), std::move(remoter)); } void MediaRouterMojoImpl::GetMediaSinkServiceStatus(
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.h b/chrome/browser/media/router/mojo/media_router_mojo_impl.h index 879507d..ca56e579 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.h +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
@@ -342,8 +342,9 @@ std::vector<mojom::RouteMessagePtr> messages) override; void OnMediaRemoterCreated( int32_t tab_id, - media::mojom::MirrorServiceRemoterPtr remoter, - media::mojom::MirrorServiceRemotingSourceRequest source_request) override; + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> remoter, + mojo::PendingReceiver<media::mojom::MirrorServiceRemotingSource> + source_receiver) override; void GetMediaSinkServiceStatus( mojom::MediaRouter::GetMediaSinkServiceStatusCallback callback) override; void GetMirroringServiceHostForTab(
diff --git a/chrome/browser/media/router/test/mock_mojo_media_router.h b/chrome/browser/media/router/test/mock_mojo_media_router.h index 5793955d..8aac4d76 100644 --- a/chrome/browser/media/router/test/mock_mojo_media_router.h +++ b/chrome/browser/media/router/test/mock_mojo_media_router.h
@@ -59,17 +59,20 @@ MOCK_METHOD2(OnRouteMessagesReceived, void(const std::string& route_id, std::vector<mojom::RouteMessagePtr> messages)); - void OnMediaRemoterCreated(int32_t tab_id, - media::mojom::MirrorServiceRemoterPtr remoter, - media::mojom::MirrorServiceRemotingSourceRequest - source_request) override { - OnMediaRemoterCreatedInternal(tab_id, remoter, source_request); + void OnMediaRemoterCreated( + int32_t tab_id, + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> remoter, + mojo::PendingReceiver<media::mojom::MirrorServiceRemotingSource> + source_receiver) override { + OnMediaRemoterCreatedInternal(tab_id, std::move(remoter), + std::move(source_receiver)); } MOCK_METHOD3( OnMediaRemoterCreatedInternal, void(int32_t tab_id, - media::mojom::MirrorServiceRemoterPtr& remoter, - media::mojom::MirrorServiceRemotingSourceRequest& source_request)); + mojo::PendingRemote<media::mojom::MirrorServiceRemoter> remoter, + mojo::PendingReceiver<media::mojom::MirrorServiceRemotingSource> + source_receiver)); void GetMediaSinkServiceStatus( mojom::MediaRouter::GetMediaSinkServiceStatusCallback callback) override { GetMediaSinkServiceStatusInternal(callback);
diff --git a/chrome/browser/media/unified_autoplay_browsertest.cc b/chrome/browser/media/unified_autoplay_browsertest.cc index 9af87f15..7ffbe2f 100644 --- a/chrome/browser/media/unified_autoplay_browsertest.cc +++ b/chrome/browser/media/unified_autoplay_browsertest.cc
@@ -14,6 +14,7 @@ #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/web_preferences.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_frame_navigation_observer.h"
diff --git a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc index 5d92d1f..a064f110 100644 --- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc +++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
@@ -383,6 +383,7 @@ case Result::DANGEROUS_HOST: case Result::POTENTIALLY_UNWANTED: case Result::BLOCKED_PASSWORD_PROTECTED: + case Result::BLOCKED_TOO_LARGE: return ChromeNativeFileSystemPermissionContext::AfterWriteCheckResult:: kBlock;
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc index 344a3d2d2..27880295 100644 --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc
@@ -126,6 +126,36 @@ #endif // defined (OS_CHROMEOS) +void InitializeCorsExtraSafelistedRequestHeaderNamesForProfile( + Profile* profile, + std::vector<std::string>* extra_safelisted_request_header_names) { + PrefService* pref = profile->GetPrefs(); + bool has_managed_mitigation_list = + pref->IsManagedPreference(prefs::kCorsMitigationList); + + // Set default mitigation parameters managed by the server for normal users + // and enterprise users separately. + const char* const feature_param_name = + has_managed_mitigation_list + ? "extra-safelisted-request-headers-for-enterprise" + : "extra-safelisted-request-headers"; + *extra_safelisted_request_header_names = + SplitString(base::GetFieldTrialParamValueByFeature( + features::kExtraSafelistedRequestHeadersForOutOfBlinkCors, + feature_param_name), + ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + + // We trust and append |pref|'s values only when they are set by the managed + // policy. Chrome does not have any interface to set this preference manually. + if (has_managed_mitigation_list) { + for (const auto& header_name_value : + *pref->GetList(prefs::kCorsMitigationList)) { + extra_safelisted_request_header_names->push_back( + header_name_value.GetString()); + } + } +} + } // namespace ProfileNetworkContextService::ProfileNetworkContextService(Profile* profile) @@ -176,6 +206,13 @@ certificate_transparency::prefs::kCTExcludedLegacySPKIs, base::BindRepeating(&ProfileNetworkContextService::ScheduleUpdateCTPolicy, base::Unretained(this))); + + // Reflects CORS mitigation list policy updates dynamically. + pref_change_registrar_.Add( + prefs::kCorsMitigationList, + base::BindRepeating( + &ProfileNetworkContextService::UpdateCorsMitigationList, + base::Unretained(this))); } ProfileNetworkContextService::~ProfileNetworkContextService() {} @@ -335,6 +372,23 @@ &ProfileNetworkContextService::UpdateCTPolicy); } +void ProfileNetworkContextService::UpdateCorsMitigationList() { + std::vector<std::string> cors_extra_safelisted_request_header_names; + InitializeCorsExtraSafelistedRequestHeaderNamesForProfile( + profile_, &cors_extra_safelisted_request_header_names); + + content::BrowserContext::ForEachStoragePartition( + profile_, base::BindRepeating( + [](std::vector<std::string>* + cors_extra_safelisted_request_header_names, + content::StoragePartition* storage_partition) { + storage_partition->GetNetworkContext() + ->SetCorsExtraSafelistedRequestHeaderNames( + *cors_extra_safelisted_request_header_names); + }, + &cors_extra_safelisted_request_header_names)); +} + // static network::mojom::CookieManagerParamsPtr ProfileNetworkContextService::CreateCookieManagerParams( @@ -398,11 +452,10 @@ base::TimeDelta::FromMilliseconds(100); } - network_context_params->cors_extra_safelisted_request_header_names = - SplitString(base::GetFieldTrialParamValueByFeature( - features::kExtraSafelistedRequestHeadersForOutOfBlinkCors, - "extra-safelisted-request-headers"), - ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + InitializeCorsExtraSafelistedRequestHeaderNamesForProfile( + profile_, + &network_context_params->cors_extra_safelisted_request_header_names); + network_context_params->enable_cors = profile_->ShouldEnableOutOfBlinkCors(); // Always enable the HTTP cache. network_context_params->http_cache_enabled = true;
diff --git a/chrome/browser/net/profile_network_context_service.h b/chrome/browser/net/profile_network_context_service.h index e2e7144..4574f59 100644 --- a/chrome/browser/net/profile_network_context_service.h +++ b/chrome/browser/net/profile_network_context_service.h
@@ -104,6 +104,9 @@ void ScheduleUpdateCTPolicy(); + // Update the CORS mitigation list for the all of profiles_'s NetworkContexts. + void UpdateCorsMitigationList(); + // Creates parameters for the NetworkContext. Use |in_memory| instead of // |profile_->IsOffTheRecord()| because sometimes normal profiles want off the // record partitions (e.g. for webview tag).
diff --git a/chrome/browser/net/profile_network_context_service_browsertest.cc b/chrome/browser/net/profile_network_context_service_browsertest.cc index 5f063b2..0aee056 100644 --- a/chrome/browser/net/profile_network_context_service_browsertest.cc +++ b/chrome/browser/net/profile_network_context_service_browsertest.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/net/profile_network_context_service.h" #include "chrome/browser/net/profile_network_context_service_factory.h" +#include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_constants.h" @@ -29,6 +30,7 @@ #include "chrome/common/pref_names.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/policy/policy_constants.h" #include "components/prefs/pref_service.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/content_features.h" @@ -419,16 +421,47 @@ ::testing::Bool()); #endif -class CorsExtraSafelistedHeaderNamesTest : public InProcessBrowserTest { +enum class CorsTestMode { + kWithCorsMitigationListPolicy, + kWithoutCorsMitigationListPolicy, +}; + +class CorsExtraSafelistedHeaderNamesTest + : public policy::PolicyTest, + public ::testing::WithParamInterface<CorsTestMode> { public: CorsExtraSafelistedHeaderNamesTest() { - scoped_feature_list_.InitWithFeaturesAndParameters( - {{network::features::kOutOfBlinkCors, {}}, - {features::kExtraSafelistedRequestHeadersForOutOfBlinkCors, - {{"extra-safelisted-request-headers", "foo,bar"}}}}, - {}); + switch (GetParam()) { + case CorsTestMode::kWithCorsMitigationListPolicy: { + auto list = std::make_unique<base::ListValue>(); + list->AppendString("bar"); + policy::PolicyMap policies; + policies.Set(policy::key::kCorsMitigationList, + policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, + policy::POLICY_SOURCE_CLOUD, std::move(list), nullptr); + provider_.UpdateChromePolicy(policies); + scoped_feature_list_.InitWithFeaturesAndParameters( + {{network::features::kOutOfBlinkCors, {}}, + {features::kExtraSafelistedRequestHeadersForOutOfBlinkCors, + {{"extra-safelisted-request-headers-for-enterprise", "foo"}}}}, + {}); + break; + } + case CorsTestMode::kWithoutCorsMitigationListPolicy: + scoped_feature_list_.InitWithFeaturesAndParameters( + {{network::features::kOutOfBlinkCors, {}}, + {features::kExtraSafelistedRequestHeadersForOutOfBlinkCors, + {{"extra-safelisted-request-headers", "foo,bar"}}}}, + {}); + break; + } } + // Override to avoid conflict between the |scoped_feature_list_| and + // |command_line| that PolicyTest::SetUpCommandLine will introduce. + // TODO(crbug.com/1002483): Remove this workaround. + void SetUpCommandLine(base::CommandLine* command_line) override {} + void SetUpOnMainThread() override { ASSERT_TRUE(embedded_test_server()->Start()); @@ -438,6 +471,8 @@ base::BindRepeating(&CorsExtraSafelistedHeaderNamesTest::HandleRequest, base::Unretained(this))); ASSERT_TRUE(cross_origin_test_server_.Start()); + + PolicyTest::SetUpOnMainThread(); } void LoadAndWait(const GURL& url) { @@ -502,7 +537,7 @@ constexpr char CorsExtraSafelistedHeaderNamesTest::kTestPath[]; -IN_PROC_BROWSER_TEST_F(CorsExtraSafelistedHeaderNamesTest, RequestWithFoo) { +IN_PROC_BROWSER_TEST_P(CorsExtraSafelistedHeaderNamesTest, RequestWithFoo) { GURL url(cross_origin_test_server().GetURL("/hello")); LoadAndWait(embedded_test_server()->GetURL(base::StringPrintf( "%s?url=%s&headers=foo", kTestPath, url.spec().c_str()))); @@ -510,7 +545,15 @@ EXPECT_EQ(1u, get_count()); } -IN_PROC_BROWSER_TEST_F(CorsExtraSafelistedHeaderNamesTest, RequestWithFooBar) { +IN_PROC_BROWSER_TEST_P(CorsExtraSafelistedHeaderNamesTest, RequestWithBar) { + GURL url(cross_origin_test_server().GetURL("/hello")); + LoadAndWait(embedded_test_server()->GetURL(base::StringPrintf( + "%s?url=%s&headers=bar", kTestPath, url.spec().c_str()))); + EXPECT_EQ(0u, options_count()); + EXPECT_EQ(1u, get_count()); +} + +IN_PROC_BROWSER_TEST_P(CorsExtraSafelistedHeaderNamesTest, RequestWithFooBar) { GURL url(cross_origin_test_server().GetURL("/hello")); LoadAndWait(embedded_test_server()->GetURL(base::StringPrintf( "%s?url=%s&headers=foo,bar", kTestPath, url.spec().c_str()))); @@ -518,7 +561,7 @@ EXPECT_EQ(1u, get_count()); } -IN_PROC_BROWSER_TEST_F(CorsExtraSafelistedHeaderNamesTest, RequestWithBaz) { +IN_PROC_BROWSER_TEST_P(CorsExtraSafelistedHeaderNamesTest, RequestWithBaz) { GURL url(cross_origin_test_server().GetURL("/hello")); LoadAndWait(embedded_test_server()->GetURL(base::StringPrintf( "%s?url=%s&headers=baz", kTestPath, url.spec().c_str()))); @@ -526,10 +569,20 @@ EXPECT_EQ(1u, get_count()); } -IN_PROC_BROWSER_TEST_F(CorsExtraSafelistedHeaderNamesTest, RequestWithFooBaz) { +IN_PROC_BROWSER_TEST_P(CorsExtraSafelistedHeaderNamesTest, RequestWithFooBaz) { GURL url(cross_origin_test_server().GetURL("/hello")); LoadAndWait(embedded_test_server()->GetURL(base::StringPrintf( "%s?url=%s&headers=foo,baz", kTestPath, url.spec().c_str()))); EXPECT_EQ(1u, options_count()); EXPECT_EQ(1u, get_count()); } + +INSTANTIATE_TEST_SUITE_P( + WithCorsMitigationListPolicy, + CorsExtraSafelistedHeaderNamesTest, + testing::Values(CorsTestMode::kWithCorsMitigationListPolicy)); + +INSTANTIATE_TEST_SUITE_P( + WithoutCorsMitigationListPolicy, + CorsExtraSafelistedHeaderNamesTest, + testing::Values(CorsTestMode::kWithoutCorsMitigationListPolicy));
diff --git a/chrome/browser/net/proxy_config_monitor.cc b/chrome/browser/net/proxy_config_monitor.cc index 2998cc0..342db7a 100644 --- a/chrome/browser/net/proxy_config_monitor.cc +++ b/chrome/browser/net/proxy_config_monitor.cc
@@ -85,13 +85,13 @@ proxy_config_client.InitWithNewPipeAndPassReceiver(); proxy_config_client_set_.Add(std::move(proxy_config_client)); - poller_binding_set_.AddBinding( - this, - mojo::MakeRequest(&network_context_params->proxy_config_poller_client)); + poller_receiver_set_.Add(this, + network_context_params->proxy_config_poller_client + .InitWithNewPipeAndPassReceiver()); #if BUILDFLAG(ENABLE_EXTENSIONS) - error_binding_set_.AddBinding( - this, mojo::MakeRequest(&network_context_params->proxy_error_client)); + error_receiver_set_.Add(this, network_context_params->proxy_error_client + .InitWithNewPipeAndPassReceiver()); #endif net::ProxyConfigWithAnnotation proxy_config;
diff --git a/chrome/browser/net/proxy_config_monitor.h b/chrome/browser/net/proxy_config_monitor.h index b0810fbc..abffb6db 100644 --- a/chrome/browser/net/proxy_config_monitor.h +++ b/chrome/browser/net/proxy_config_monitor.h
@@ -11,7 +11,7 @@ #include "base/macros.h" #include "build/buildflag.h" #include "extensions/buildflags/buildflags.h" -#include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/receiver_set.h" #include "mojo/public/cpp/bindings/remote_set.h" #include "net/proxy_resolution/proxy_config_service.h" #include "services/network/public/mojom/network_context.mojom-forward.h" @@ -84,12 +84,13 @@ // Monitors global and Profile prefs related to proxy configuration. std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_; - mojo::BindingSet<network::mojom::ProxyConfigPollerClient> poller_binding_set_; + mojo::ReceiverSet<network::mojom::ProxyConfigPollerClient> + poller_receiver_set_; mojo::RemoteSet<network::mojom::ProxyConfigClient> proxy_config_client_set_; #if BUILDFLAG(ENABLE_EXTENSIONS) - mojo::BindingSet<network::mojom::ProxyErrorClient> error_binding_set_; + mojo::ReceiverSet<network::mojom::ProxyErrorClient> error_receiver_set_; Profile* profile_ = nullptr; #endif
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc index 59f49c0..0c766f29a 100644 --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc
@@ -64,6 +64,7 @@ #include "net/third_party/uri_template/uri_template.h" #include "services/network/network_service.h" #include "services/network/public/cpp/cross_thread_shared_url_loader_factory_info.h" +#include "services/network/public/cpp/features.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/mojom/host_resolver.mojom.h" #include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h" @@ -693,6 +694,8 @@ network::mojom::NetworkContextParams::New(); content::UpdateCorsExemptHeader(network_context_params.get()); variations::UpdateCorsExemptHeaderForVariations(network_context_params.get()); + network_context_params->enable_cors = + base::FeatureList::IsEnabled(network::features::kOutOfBlinkCors); network_context_params->enable_brotli = true;
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc index 7af9ff0..c121243 100644 --- a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc +++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
@@ -4,6 +4,7 @@ #include "base/base64.h" #include "base/run_loop.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h"
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc index 920898e0..7d7e40a 100644 --- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc
@@ -230,8 +230,7 @@ return; if ((behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded) == - 0) + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded) == 0) return; auto it = amp_subframe_info_.find(subframe_rfh); @@ -259,8 +258,7 @@ bool should_record = false; if (!observed_amp_main_frame_ && (GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded) != - 0) { + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded) != 0) { builder.SetMainFrameAmpPageLoad(true); observed_amp_main_frame_ = true; should_record = true; @@ -268,8 +266,7 @@ if (!observed_amp_sub_frame_ && (GetDelegate().GetSubframeMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded) != - 0) { + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded) != 0) { builder.SetSubFrameAmpPageLoad(true); observed_amp_sub_frame_ = true; should_record = true;
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h index 6ab1cf6..6ce23d73 100644 --- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.h
@@ -105,7 +105,7 @@ page_load_metrics::PageRenderData render_data; // Whether an AMP document was loaded, based on observed - // WebLoadingBehaviorFlags for this frame. + // LoadingBehaviorFlags for this frame. bool amp_document_loaded = false; };
diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc index 282955f4..988becd 100644 --- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer_unittest.cc
@@ -202,7 +202,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); // Navigate the main frame to trigger metrics recording. @@ -266,7 +266,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); // Navigate the main frame to trigger metrics recording. @@ -317,7 +317,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); page_load_metrics::mojom::PageLoadTiming subframe_timing; @@ -381,7 +381,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); page_load_metrics::mojom::FrameRenderDataUpdate render_data(1.0, 0.5); @@ -421,7 +421,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); page_load_metrics::mojom::PageLoadTiming subframe_timing; @@ -488,7 +488,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); // Navigate the main frame to trigger metrics recording. @@ -530,7 +530,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); tester()->histogram_tester().ExpectTotalCount( @@ -586,7 +586,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe1); tester()->SimulateMetadataUpdate(metadata, subframe2); @@ -691,7 +691,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); // Navigate the main frame to trigger metrics recording. @@ -776,7 +776,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags = - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorAmpDocumentLoaded; + blink::LoadingBehaviorFlag::kLoadingBehaviorAmpDocumentLoaded; tester()->SimulateMetadataUpdate(metadata, subframe); // Navigate the main frame to trigger metrics recording.
diff --git a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc index e38412e..8a45578 100644 --- a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
@@ -7,7 +7,7 @@ #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_recorder.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" namespace internal { const char kHistogramDocWriteBlockFirstContentfulPaint[] = @@ -50,7 +50,7 @@ void DocumentWritePageLoadMetricsObserver::OnFirstContentfulPaintInPage( const page_load_metrics::mojom::PageLoadTiming& timing) { if (GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock) { + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlock) { LogDocumentWriteBlockFirstContentfulPaint(timing); } } @@ -59,7 +59,7 @@ OnFirstMeaningfulPaintInMainFrameDocument( const page_load_metrics::mojom::PageLoadTiming& timing) { if (GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock) { + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlock) { LogDocumentWriteBlockFirstMeaningfulPaint(timing); } } @@ -67,7 +67,7 @@ void DocumentWritePageLoadMetricsObserver::OnParseStop( const page_load_metrics::mojom::PageLoadTiming& timing) { if (GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock) { + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlock) { LogDocumentWriteBlockParseStop(timing); } } @@ -95,19 +95,17 @@ content::RenderFrameHost* rfh, int behavior_flags) { if ((GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag:: - kWebLoadingBehaviorDocumentWriteBlockReload) && + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlockReload) && !doc_write_block_reload_observed_) { - DCHECK(!( - GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock)); + DCHECK(!(GetDelegate().GetMainFrameMetadata().behavior_flags & + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlock)); UMA_HISTOGRAM_COUNTS_1M(internal::kHistogramDocWriteBlockReloadCount, 1); LogLoadingBehaviorMetrics(LOADING_BEHAVIOR_RELOAD, GetDelegate().GetSourceId()); doc_write_block_reload_observed_ = true; } if ((GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock) && + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlock) && !doc_write_block_observed_) { UMA_HISTOGRAM_BOOLEAN(internal::kHistogramDocWriteBlockCount, true); LogLoadingBehaviorMetrics(LOADING_BEHAVIOR_BLOCK, @@ -115,8 +113,8 @@ doc_write_block_observed_ = true; } if ((GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag:: - kWebLoadingBehaviorDocumentWriteBlockDifferentScheme) && + blink::LoadingBehaviorFlag:: + kLoadingBehaviorDocumentWriteBlockDifferentScheme) && !doc_write_same_site_diff_scheme_) { LogLoadingBehaviorMetrics(LOADING_BEHAVIOR_SAME_SITE_DIFF_SCHEME, GetDelegate().GetSourceId());
diff --git a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc index c2dc1200..c0ee9b0 100644 --- a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc
@@ -11,7 +11,7 @@ #include "components/page_load_metrics/browser/page_load_tracker.h" #include "components/page_load_metrics/common/test/page_load_metrics_test_util.h" #include "services/metrics/public/cpp/ukm_builders.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" class DocumentWritePageLoadMetricsObserverTest : public page_load_metrics::PageLoadMetricsObserverTestHarness { @@ -54,7 +54,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags |= - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock; + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlock; NavigateAndCommit(GURL("https://www.google.com/")); tester()->SimulateTimingAndMetadataUpdate(timing, metadata); @@ -102,8 +102,8 @@ PopulateRequiredTimingFields(&timing); page_load_metrics::mojom::PageLoadMetadata metadata; - metadata.behavior_flags |= blink::WebLoadingBehaviorFlag:: - kWebLoadingBehaviorDocumentWriteBlockReload; + metadata.behavior_flags |= + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlockReload; NavigateAndCommit(GURL("https://www.google.com/")); tester()->SimulateTimingAndMetadataUpdate(timing, metadata); @@ -143,7 +143,7 @@ // Another metadata update should not increase reload count. metadata.behavior_flags |= - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; + blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled; tester()->SimulateTimingAndMetadataUpdate(timing, metadata); tester()->histogram_tester().ExpectTotalCount( internal::kHistogramDocWriteBlockReloadCount, 2);
diff --git a/chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer_unittest.cc index a16a96c39..076f2fcd 100644 --- a/chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer_unittest.cc
@@ -15,7 +15,7 @@ #include "components/page_load_metrics/common/page_load_metrics.mojom.h" #include "components/page_load_metrics/common/page_load_timing.h" #include "components/page_load_metrics/common/test/page_load_metrics_test_util.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "url/gurl.h" namespace {
diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc index d4f8b50..04c50393 100644 --- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc
@@ -11,7 +11,7 @@ #include "net/http/http_response_headers.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_recorder.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" namespace internal { @@ -421,6 +421,6 @@ bool ServiceWorkerPageLoadMetricsObserver::IsServiceWorkerControlled() { return (GetDelegate().GetMainFrameMetadata().behavior_flags & - blink::WebLoadingBehaviorFlag:: - kWebLoadingBehaviorServiceWorkerControlled) != 0; + blink::LoadingBehaviorFlag:: + kLoadingBehaviorServiceWorkerControlled) != 0; }
diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc index a4f4f53f..cc6f1098 100644 --- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer_unittest.cc
@@ -173,7 +173,7 @@ NavigateAndCommit(GURL(kDefaultTestUrl)); page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags |= - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; + blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled; tester()->SimulateTimingAndMetadataUpdate(timing, metadata); tester()->histogram_tester().ExpectTotalCount( @@ -250,7 +250,7 @@ page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags |= - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; + blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled; NavigateAndCommit(GURL(kDefaultTestUrl)); tester()->SimulateTimingAndMetadataUpdate(timing, metadata); @@ -306,7 +306,7 @@ NavigateAndCommit(GURL(kInboxTestUrl)); page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags |= - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; + blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled; tester()->SimulateTimingAndMetadataUpdate(timing, metadata); tester()->histogram_tester().ExpectTotalCount( @@ -429,7 +429,7 @@ NavigateAndCommit(GURL(kSearchTestUrl)); page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags |= - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; + blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled; tester()->SimulateTimingAndMetadataUpdate(timing, metadata); tester()->histogram_tester().ExpectTotalCount( @@ -619,7 +619,7 @@ ui::PAGE_TRANSITION_FORWARD_BACK)); page_load_metrics::mojom::PageLoadMetadata metadata; metadata.behavior_flags |= - blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; + blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled; tester()->SimulateTimingAndMetadataUpdate(timing, metadata); tester()->histogram_tester().ExpectTotalCount(
diff --git a/chrome/browser/page_load_metrics/observers/signed_exchange_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/signed_exchange_page_load_metrics_observer.cc index f9b0ef2a..9f53b452 100644 --- a/chrome/browser/page_load_metrics/observers/signed_exchange_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/signed_exchange_page_load_metrics_observer.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/page_load_metrics/observers/signed_exchange_page_load_metrics_observer.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" namespace internal {
diff --git a/chrome/browser/permissions/permission_prompt_android.cc b/chrome/browser/permissions/permission_prompt_android.cc index 2fe5ef5..6ae03b6 100644 --- a/chrome/browser/permissions/permission_prompt_android.cc +++ b/chrome/browser/permissions/permission_prompt_android.cc
@@ -57,10 +57,11 @@ return nullptr; } -bool PermissionPromptAndroid::ShouldDestroyOnTabSwitching() { +PermissionPrompt::TabSwitchingBehavior +PermissionPromptAndroid::GetTabSwitchingBehavior() { if (permission_request_notification_) - return true; - return false; + return permission_request_notification_->GetTabSwitchingBehavior(); + return TabSwitchingBehavior::kKeepPromptAlive; } void PermissionPromptAndroid::Closing() {
diff --git a/chrome/browser/permissions/permission_prompt_android.h b/chrome/browser/permissions/permission_prompt_android.h index 22fa91e..be458112 100644 --- a/chrome/browser/permissions/permission_prompt_android.h +++ b/chrome/browser/permissions/permission_prompt_android.h
@@ -28,7 +28,7 @@ // PermissionPrompt: void UpdateAnchorPosition() override; gfx::NativeWindow GetNativeWindow() override; - bool ShouldDestroyOnTabSwitching() override; + TabSwitchingBehavior GetTabSwitchingBehavior() override; void Closing(); void Accept();
diff --git a/chrome/browser/permissions/permission_request_manager.cc b/chrome/browser/permissions/permission_request_manager.cc index 4a94f59..9c2c275 100644 --- a/chrome/browser/permissions/permission_request_manager.cc +++ b/chrome/browser/permissions/permission_request_manager.cc
@@ -239,8 +239,21 @@ return; if (tab_is_hidden_) { - if (view_ && view_->ShouldDestroyOnTabSwitching()) - DeleteBubble(); + if (view_) { + switch (view_->GetTabSwitchingBehavior()) { + case PermissionPrompt::TabSwitchingBehavior:: + kDestroyPromptButKeepRequestPending: + DeleteBubble(); + break; + case PermissionPrompt::TabSwitchingBehavior:: + kDestroyPromptAndIgnoreRequest: + FinalizeBubble(PermissionAction::IGNORED); + break; + case PermissionPrompt::TabSwitchingBehavior::kKeepPromptAlive: + break; + } + } + return; } @@ -254,7 +267,8 @@ if (view_) { // We switched tabs away and back while a prompt was active. - DCHECK(!view_->ShouldDestroyOnTabSwitching()); + DCHECK_EQ(view_->GetTabSwitchingBehavior(), + PermissionPrompt::TabSwitchingBehavior::kKeepPromptAlive); } else { ShowBubble(/*is_reshow=*/true); }
diff --git a/chrome/browser/permissions/permission_request_notification_android.cc b/chrome/browser/permissions/permission_request_notification_android.cc index fa8acbe..93df7fc 100644 --- a/chrome/browser/permissions/permission_request_notification_android.cc +++ b/chrome/browser/permissions/permission_request_notification_android.cc
@@ -71,6 +71,23 @@ return kNotificationIdPrefix + origin; } +// static +PermissionPrompt::TabSwitchingBehavior +PermissionRequestNotificationAndroid::GetTabSwitchingBehavior() { + if (QuietNotificationsPromptConfig::UIFlavorToUse() == + QuietNotificationsPromptConfig::UIFlavor::QUIET_NOTIFICATION) { + return PermissionPrompt::TabSwitchingBehavior:: + kDestroyPromptButKeepRequestPending; + } else { + // For heads-up notifications finalize the request as "ignored" on tab + // switching. + DCHECK_EQ(QuietNotificationsPromptConfig::UIFlavor::HEADS_UP_NOTIFICATION, + QuietNotificationsPromptConfig::UIFlavorToUse()); + return PermissionPrompt::TabSwitchingBehavior:: + kDestroyPromptAndIgnoreRequest; + } +} + void PermissionRequestNotificationAndroid::Close() { delegate_->Closing(); }
diff --git a/chrome/browser/permissions/permission_request_notification_android.h b/chrome/browser/permissions/permission_request_notification_android.h index 670103b..349f612d 100644 --- a/chrome/browser/permissions/permission_request_notification_android.h +++ b/chrome/browser/permissions/permission_request_notification_android.h
@@ -40,6 +40,9 @@ // Converts an origin string into a notification id. static std::string NotificationIdForOrigin(const std::string& origin); + // The behavior that this notification should have after tab switching. + static PermissionPrompt::TabSwitchingBehavior GetTabSwitchingBehavior(); + private: // PermissionRequestNotificationHandler::Delegate void Close() override;
diff --git a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc index f675bbe..21b3a49 100644 --- a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc +++ b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc
@@ -34,6 +34,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/common/web_preferences.h" #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index 68b0d6e..5be2190 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -1197,6 +1197,12 @@ { key::kTLS13HardeningForLocalAnchorsEnabled, prefs::kTLS13HardeningForLocalAnchorsEnabled, base::Value::Type::BOOLEAN }, + { key::kCorsMitigationList, + prefs::kCorsMitigationList, + base::Value::Type::LIST }, + { key::kCorsLegacyModeEnabled, + prefs::kCorsLegacyModeEnabled, + base::Value::Type::BOOLEAN }, }; // clang-format on
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc index eeb019c9..2cf4e76 100644 --- a/chrome/browser/policy/policy_browsertest.cc +++ b/chrome/browser/policy/policy_browsertest.cc
@@ -209,6 +209,8 @@ #include "services/network/public/cpp/network_switches.h" #include "services/network/public/mojom/network_service.mojom.h" #include "services/network/public/mojom/network_service_test.mojom.h" +#include "services/service_manager/public/cpp/connector.h" +#include "services/service_manager/sandbox/sandbox_type.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h" @@ -5901,4 +5903,66 @@ #endif // defined(OS_WIN) || defined (OS_MACOSX) || (defined(OS_LINUX) && // !defined(OS_CHROMEOS)) +// See CorsExtraSafelistedHeaderNamesTest for more complex end to end tests. +IN_PROC_BROWSER_TEST_F(PolicyTest, CorsMitigationExtraHeadersTest) { + // The list should be initialized as an empty list, but should not be managed. + PrefService* prefs = browser()->profile()->GetPrefs(); + EXPECT_TRUE(prefs->GetList(prefs::kCorsMitigationList)); + EXPECT_TRUE(prefs->GetList(prefs::kCorsMitigationList)->empty()); + EXPECT_FALSE(prefs->IsManagedPreference(prefs::kCorsMitigationList)); + + EXPECT_FALSE(extensions::ExtensionsBrowserClient::Get() + ->ShouldForceWebRequestExtraHeaders(browser()->profile())); + + PolicyMap policies; + policies.Set(key::kCorsMitigationList, POLICY_LEVEL_MANDATORY, + POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, + std::make_unique<base::ListValue>(), nullptr); + UpdateProviderPolicy(policies); + + // Now the list is managed, and it enforces the webRequest API to use the + // extraHeaders option. + EXPECT_TRUE(prefs->GetList(prefs::kCorsMitigationList)); + EXPECT_TRUE(prefs->GetList(prefs::kCorsMitigationList)->empty()); + EXPECT_TRUE(prefs->IsManagedPreference(prefs::kCorsMitigationList)); + + EXPECT_EQ(network::features::ShouldEnableOutOfBlinkCorsForTesting(), + extensions::ExtensionsBrowserClient::Get() + ->ShouldForceWebRequestExtraHeaders(browser()->profile())); +} + +IN_PROC_BROWSER_TEST_F(PolicyTest, CorsLegacyModeEnabledConsistencyTest) { + Profile* profile = browser()->profile(); + PrefService* prefs = profile->GetPrefs(); + bool is_out_of_blink_cors_enabled = profile->ShouldEnableOutOfBlinkCors(); + + // Check initial states. + EXPECT_FALSE(prefs->GetBoolean(prefs::kCorsLegacyModeEnabled)); + EXPECT_FALSE(prefs->IsManagedPreference(prefs::kCorsLegacyModeEnabled)); + + // Check if updated policies are reflected. However, |profile| should keep + // returning a consistent value that returned at the first access. + PolicyMap policies; + policies.Set(key::kCorsLegacyModeEnabled, POLICY_LEVEL_MANDATORY, + POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, + std::make_unique<base::Value>(true), nullptr); + UpdateProviderPolicy(policies); + + EXPECT_TRUE(prefs->GetBoolean(prefs::kCorsLegacyModeEnabled)); + EXPECT_TRUE(prefs->IsManagedPreference(prefs::kCorsLegacyModeEnabled)); + EXPECT_EQ(is_out_of_blink_cors_enabled, + profile->ShouldEnableOutOfBlinkCors()); + + // Flip the value, and check again. + policies.Set(key::kCorsLegacyModeEnabled, POLICY_LEVEL_MANDATORY, + POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, + std::make_unique<base::Value>(false), nullptr); + UpdateProviderPolicy(policies); + + EXPECT_FALSE(prefs->GetBoolean(prefs::kCorsLegacyModeEnabled)); + EXPECT_TRUE(prefs->IsManagedPreference(prefs::kCorsLegacyModeEnabled)); + EXPECT_EQ(is_out_of_blink_cors_enabled, + profile->ShouldEnableOutOfBlinkCors()); +} + } // namespace policy
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index b99be9bc..74c322a 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -238,6 +238,7 @@ #include "ash/public/cpp/ash_prefs.h" #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" +#include "chrome/browser/chromeos/app_mode/kiosk_cryptohome_remover.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_bridge.h" #include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/child_accounts/parent_access_code/parent_access_service.h" @@ -672,6 +673,7 @@ chromeos::HIDDetectionScreenHandler::RegisterPrefs(registry); chromeos::KerberosCredentialsManager::RegisterLocalStatePrefs(registry); chromeos::KioskAppManager::RegisterPrefs(registry); + chromeos::KioskCryptohomeRemover::RegisterPrefs(registry); chromeos::language_prefs::RegisterPrefs(registry); chromeos::MultiProfileUserController::RegisterPrefs(registry); chromeos::NetworkThrottlingObserver::RegisterPrefs(registry);
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc index 8f303468..60fe29c 100644 --- a/chrome/browser/prerender/prerender_browsertest.cc +++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -103,6 +103,7 @@ #include "content/public/browser/tts_platform.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/common/url_constants.h" #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/previews/defer_all_script_priority_browsertest.cc b/chrome/browser/previews/defer_all_script_priority_browsertest.cc index c0d6fde1..72b7fc47 100644 --- a/chrome/browser/previews/defer_all_script_priority_browsertest.cc +++ b/chrome/browser/previews/defer_all_script_priority_browsertest.cc
@@ -9,6 +9,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/run_loop.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h"
diff --git a/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc b/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc index f78523ad..67525a8 100644 --- a/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc +++ b/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc
@@ -21,6 +21,7 @@ #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/bind_test_util.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h"
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc index f960a60..f3ffc0e5 100644 --- a/chrome/browser/profiles/off_the_record_profile_impl.cc +++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -530,6 +530,10 @@ return profile_->GetSharedCorsOriginAccessList(); } +bool OffTheRecordProfileImpl::ShouldEnableOutOfBlinkCors() { + return profile_->ShouldEnableOutOfBlinkCors(); +} + content::NativeFileSystemPermissionContext* OffTheRecordProfileImpl::GetNativeFileSystemPermissionContext() { return NativeFileSystemPermissionContextFactory::GetForProfile(this);
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.h b/chrome/browser/profiles/off_the_record_profile_impl.h index a6dfe97..1f90f19 100644 --- a/chrome/browser/profiles/off_the_record_profile_impl.h +++ b/chrome/browser/profiles/off_the_record_profile_impl.h
@@ -125,6 +125,7 @@ std::vector<network::mojom::CorsOriginPatternPtr> block_patterns, base::OnceClosure closure) override; content::SharedCorsOriginAccessList* GetSharedCorsOriginAccessList() override; + bool ShouldEnableOutOfBlinkCors() override; content::NativeFileSystemPermissionContext* GetNativeFileSystemPermissionContext() override;
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index b242b95..0343e41 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc
@@ -161,6 +161,7 @@ #include "services/identity/identity_service.h" #include "services/image_annotation/image_annotation_service.h" #include "services/image_annotation/public/mojom/constants.mojom.h" +#include "services/network/public/cpp/features.h" #include "services/preferences/public/cpp/in_process_service_factory.h" #include "services/preferences/public/mojom/preferences.mojom.h" #include "services/preferences/public/mojom/tracked_preference_validation_delegate.mojom.h" @@ -1272,6 +1273,20 @@ return shared_cors_origin_access_list_.get(); } +bool ProfileImpl::ShouldEnableOutOfBlinkCors() { + // Obtains the applied policy at most one time per profile, and reuse the + // same value for the whole session so that CORS implementations distributed + // in multi-processes work consistently. Profile-bound renderers and + // NetworkContexts will be initialized based on this returned mode. + if (!cors_legacy_mode_enabled_.has_value()) { + cors_legacy_mode_enabled_ = + GetPrefs()->GetBoolean(prefs::kCorsLegacyModeEnabled); + } + if (cors_legacy_mode_enabled_.value()) + return false; + return base::FeatureList::IsEnabled(network::features::kOutOfBlinkCors); +} + std::unique_ptr<service_manager::Service> ProfileImpl::HandleServiceRequest( const std::string& service_name, service_manager::mojom::ServiceRequest request) {
diff --git a/chrome/browser/profiles/profile_impl.h b/chrome/browser/profiles/profile_impl.h index 5ba6162..10d7388 100644 --- a/chrome/browser/profiles/profile_impl.h +++ b/chrome/browser/profiles/profile_impl.h
@@ -14,6 +14,7 @@ #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/optional.h" #include "base/timer/timer.h" #include "build/build_config.h" #include "chrome/browser/profiles/profile.h" @@ -100,6 +101,7 @@ std::vector<network::mojom::CorsOriginPatternPtr> block_patterns, base::OnceClosure closure) override; content::SharedCorsOriginAccessList* GetSharedCorsOriginAccessList() override; + bool ShouldEnableOutOfBlinkCors() override; std::unique_ptr<service_manager::Service> HandleServiceRequest( const std::string& service_name, service_manager::mojom::ServiceRequest request) override; @@ -339,6 +341,8 @@ scoped_refptr<content::SharedCorsOriginAccessList> shared_cors_origin_access_list_; + base::Optional<bool> cors_legacy_mode_enabled_; + DISALLOW_COPY_AND_ASSIGN(ProfileImpl); };
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index 800135310..db6266e 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//chrome/common/features.gni") +import("//chrome/test/base/js2gtest.gni") import("//tools/grit/grit_rule.gni") import("//tools/grit/repack.gni") @@ -371,3 +372,35 @@ "//chrome/browser/resources/usb_internals:resources", ] } + +# TODO(https://crbug.com/930109): Figure out why this test fails on MAC ASAN. +if (!is_asan || !is_mac) { + js2gtest("resources_unitjs_tests") { + test_type = "webui" + sources = [ + "gaia_auth_host/password_change_authenticator_test.unitjs", + ] + + # This has to be a gen_include, so it doesn't collide with other js2gtests + gen_include_files = [ "//ui/webui/resources/js/cr.js" ] + + # But these have to be extra_js_files, since it uses a native object + # EventTarget, which doesn't work at compile time. + extra_js_files = [ + "//ui/webui/resources/js/cr/event_target.js", + "gaia_auth_host/password_change_authenticator.js", + ] + defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] + } + + source_set("browser_tests") { + testonly = true + deps = [ + ":resources_unitjs_tests", + ] + } +} else { + source_set("browser_tests") { + testonly = true + } +}
diff --git a/chrome/browser/resources/gaia_auth_host/okta_detect_success_injected.js b/chrome/browser/resources/gaia_auth_host/okta_detect_success_injected.js new file mode 100644 index 0000000..d2b13e7 --- /dev/null +++ b/chrome/browser/resources/gaia_auth_host/okta_detect_success_injected.js
@@ -0,0 +1,58 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Intercept Ajax responses, detect responses to the password-change endpoint + * that don't contain any errors. + */ +(function() { +function oktaDetectSuccess() { + const PARENT_ORIGIN = 'chrome://password-change'; + + let messageFromParent; + function onMessageReceived(event) { + if (event.origin == PARENT_ORIGIN) { + messageFromParent = event; + } + } + window.addEventListener('message', onMessageReceived, false); + + function checkResponse(responseUrl, responseData) { + if (responseUrl.includes('/internal_login/password') && + !responseData.match(/"has[A-Za-z]*Errors":true/)) { + console.info('passwordChangeSuccess'); + messageFromParent.source.postMessage( + 'passwordChangeSuccess', PARENT_ORIGIN); + } + } + + const proxied = window.XMLHttpRequest.prototype.send; + + window.XMLHttpRequest.prototype.send = function() { + this.addEventListener('load', function() { + checkResponse(this.responseURL, this.response); + }); + return proxied.apply(this, arguments); + }; +} + +/** Run a script in the window context - not isolated as a content-script. */ +function runInPageContext(jsFn) { + const script = document.createElement('script'); + script.type = 'text/javascript'; + script.innerHTML = '(' + jsFn + ')();'; + document.head.prepend(script); +} + +/** Wait until DOM is loaded, then run oktaDetectSuccess script. */ +function initialize() { + if (document.body && document.head) { + console.info('initialize'); + runInPageContext(oktaDetectSuccess); + } else { + requestIdleCallback(initialize); + } +} +requestIdleCallback(initialize); +})();
diff --git a/chrome/browser/resources/gaia_auth_host/password_change_authenticator.js b/chrome/browser/resources/gaia_auth_host/password_change_authenticator.js index 0f5fa46..7854c1b 100644 --- a/chrome/browser/resources/gaia_auth_host/password_change_authenticator.js +++ b/chrome/browser/resources/gaia_auth_host/password_change_authenticator.js
@@ -12,9 +12,105 @@ cr.define('cr.samlPasswordChange', function() { 'use strict'; + /** @const */ + const oktaInjectedScriptName = 'oktaInjected'; + + /** + * The script to inject into Okta user settings page. + * @type {string} + */ + const oktaInjectedJs = String.raw` + // <include src="okta_detect_success_injected.js"> + `; + const BLANK_PAGE_URL = 'about:blank'; /** + * The different providers of password-change pages that we support, or are + * working on supporting. + * @enum {number} + */ + const PasswordChangePageProvider = { + UNKNOWN: 0, + ADFS: 1, + AZURE: 2, + OKTA: 3, + PING: 4, + }; + + /** + * @param {URL?} url The url of the webpage that is being interacted with. + * @return {PasswordChangePageProvider} The provider of the password change + * page, as detected based on the URL. + */ + function detectProvider_(url) { + if (!url) { + return null; + } + if (url.pathname.match(/\/updatepassword\/?$/)) { + return PasswordChangePageProvider.ADFS; + } + if (url.pathname.endsWith('/ChangePassword.aspx')) { + return PasswordChangePageProvider.AZURE; + } + if (url.host.match(/\.okta\.com$/)) { + return PasswordChangePageProvider.OKTA; + } + if (url.pathname.match('/password/chg/')) { + return PasswordChangePageProvider.PING; + } + return PasswordChangePageProvider.UNKNOWN; + } + + /** + * @param {string?} str A string that should be a valid URL. + * @return {URL?} A valid URL object, or null. + */ + function safeParseUrl_(str) { + try { + return new URL(str); + } catch (error) { + console.error('Invalid url: ' + str); + return null; + } + } + + /** + * @param {Object} details The web-request details. + * @return {boolean} True if we detect that a password change was successful. + */ + function detectPasswordChangeSuccess(details) { + const url = safeParseUrl_(details.url); + if (!url) { + return false; + } + + // We count it as a success whenever "status=0" is in the query params. + // This is what we use for ADFS, but for now, we allow it for every IdP, so + // that an otherwise unsupported IdP can also send it as a success message. + // TODO(https://crbug.com/930109): Consider removing this entirely, or, + // using a more self-documenting parameter like 'passwordChanged=1'. + if (url.searchParams.get('status') == '0') { + return true; + } + + const pageProvider = detectProvider_(url); + // These heuristics work for the following SAML IdPs: + if (pageProvider == PasswordChangePageProvider.ADFS) { + return url.searchParams.get('status') == '0'; + } + if (pageProvider == PasswordChangePageProvider.AZURE) { + return url.searchParams.get('ReturnCode') == '0'; + } + + // We can't currently detect success for Okta or Ping just by inspecting the + // URL or even response headers. To inspect the response body, we need + // to inject scripts onto their page (see okta_detect_success_injected.js). + + return false; + } + + /** * Initializes the authenticator component. */ class Authenticator extends cr.EventTarget { @@ -67,8 +163,27 @@ this.samlHandler_, 'authPageLoaded', this.onAuthPageLoaded_.bind(this)); + // Listen for completed main-frame requests to check for password-change + // success. + this.webviewEventManager_.addWebRequestEventListener( + this.webview_.request.onCompleted, + this.onCompleted_.bind(this), + {urls: ['*://*/*'], types: ['main_frame']}, + ); + + // Inject a custom script for detecting password change success in Okta. + this.webview_.addContentScripts([{ + name: oktaInjectedScriptName, + matches: ['*://*.okta.com/*'], + js: {code: oktaInjectedJs}, + all_frames: true, + run_at: 'document_start' + }]); + + // Okta-detect-success-inject script signals success by posting a message + // that says "passwordChangeSuccess", which we listen for: this.webviewEventManager_.addEventListener( - this.webview_, 'contentload', this.onContentLoad_.bind(this)); + window, 'message', this.onMessageReceived_.bind(this)); } /** @@ -129,7 +244,7 @@ * Sends scraped password and resets the state. * @private */ - completeAuth_() { + onPasswordChangeSuccess_() { const passwordsOnce = this.samlHandler_.getPasswordsScrapedTimes(1); const passwordsTwice = this.samlHandler_.getPasswordsScrapedTimes(2); @@ -151,17 +266,43 @@ } /** - * Invoked when a new document is loaded. + * Invoked when a new document loading completes. + * @param {Object} details The web-request details. * @private */ - onContentLoad_(e) { - const currentUrl = this.webview_.src; - // TODO(rsorokin): Implement more robust check. - if (currentUrl.lastIndexOf('status=0') != -1) { - this.completeAuth_(); + onCompleted_(details) { + if (detectPasswordChangeSuccess(details)) { + this.onPasswordChangeSuccess_(); + } + + // Okta_detect_success_injected.js needs to be contacted by the parent, + // so that it can send messages back to the parent. + const pageProvider = detectProvider_(safeParseUrl_(details.url)); + if (pageProvider == PasswordChangePageProvider.OKTA) { + // Using setTimeout gives the page time to finish initializing. + setTimeout(() => { + this.webview_.contentWindow.postMessage('connect', details.url); + }, 1000); + } + } + + /** + * Invoked when the webview posts a message. + * @param {Object} event The message event. + * @private + */ + onMessageReceived_(event) { + if (event.data == 'passwordChangeSuccess') { + const pageProvider = detectProvider_(safeParseUrl_(event.origin)); + if (pageProvider == PasswordChangePageProvider.OKTA) { + this.onPasswordChangeSuccess_(); + } } } } - return {Authenticator: Authenticator}; + return { + Authenticator: Authenticator, + detectPasswordChangeSuccess: detectPasswordChangeSuccess, + }; });
diff --git a/chrome/browser/resources/gaia_auth_host/password_change_authenticator_test.unitjs b/chrome/browser/resources/gaia_auth_host/password_change_authenticator_test.unitjs new file mode 100644 index 0000000..617677b --- /dev/null +++ b/chrome/browser/resources/gaia_auth_host/password_change_authenticator_test.unitjs
@@ -0,0 +1,76 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +GEN_INCLUDE(['//ui/webui/resources/js/cr.js']); + +const EXAMPLE_ADFS_ENDPOINT = + 'https://example.com/adfs/portal/updatepassword/'; + +const EXAMPLE_AZURE_ENDPOINT = + 'https://example.windowsazure.com/ChangePassword.aspx'; + +const EXAMPLE_OKTA_ENDPOINT = + 'https://example.okta.com/user/profile/internal_login/password'; + +const EXAMPLE_PING_ENDPOINT = + 'https://login.pingone.com/idp/directory/a/12345/password/chg/67890'; + +PasswordChangeAuthenticatorUnitTest = class extends testing.Test { + get browsePreload() { + return DUMMY_URL; + } + + // No need to run these checks - see comment in SamlPasswordAttributesTest. + get runAccessibilityChecks() { + return false; + } + + get extraLibraries() { + return [ + '//ui/webui/resources/js/cr/event_target.js', + 'password_change_authenticator.js', + ]; + } + + assertSuccess(details) { + assertTrue(this.detectSuccess(details)); + } + + assertNotSuccess(details, responseData) { + assertFalse(this.detectSuccess(details)); + } + + detectSuccess(details) { + if (typeof details == 'string') { + details = {'url': details}; + } + return cr.samlPasswordChange.detectPasswordChangeSuccess(details); + } +} + +TEST_F('PasswordChangeAuthenticatorUnitTest', 'DetectAdfsSuccess', function() { + const endpointUrl = EXAMPLE_ADFS_ENDPOINT; + + this.assertNotSuccess(endpointUrl); + this.assertNotSuccess(endpointUrl + '?status=1'); + this.assertSuccess(endpointUrl + '?status=0'); + + // We allow "status=0" to count as success everywhere right now, but this + // should be narrowed down to ADFS - see the TODO in the code. + this.assertSuccess(EXAMPLE_AZURE_ENDPOINT + '?status=0'); +}); + +TEST_F('PasswordChangeAuthenticatorUnitTest', 'DetectAzureSuccess', function() { + const endpointUrl = EXAMPLE_AZURE_ENDPOINT; + const extraParam = 'BrandContextID=O123'; + + this.assertNotSuccess(endpointUrl); + this.assertNotSuccess(endpointUrl + '?' + extraParam); + this.assertNotSuccess(endpointUrl + '?ReturnCode=1&' + extraParam); + this.assertNotSuccess(endpointUrl + '?' + extraParam + '&ReturnCode=1'); + this.assertNotSuccess(EXAMPLE_PING_ENDPOINT + '?ReturnCode=0'); + + this.assertSuccess(endpointUrl + '?ReturnCode=0&' + extraParam); + this.assertSuccess(endpointUrl + '?' + extraParam + '&ReturnCode=0'); +}); \ No newline at end of file
diff --git a/chrome/browser/resources/ntp4/incognito_tab.html b/chrome/browser/resources/ntp4/incognito_tab.html index d1a42daa..e82b93c 100644 --- a/chrome/browser/resources/ntp4/incognito_tab.html +++ b/chrome/browser/resources/ntp4/incognito_tab.html
@@ -35,7 +35,8 @@ <em>$i18n{cookieControlsTitle}</em> $i18n{cookieControlsDescription} </div> - <cr-toggle id="cookie-controls-toggle" dark></cr-toggle> + <cr-toggle id="cookie-controls-toggle" + $i18n{cookieControlsToggleChecked} dark></cr-toggle> </div> <a class="learn-more-button" href="$i18n{learnMoreLink}">$i18n{learnMore}</a> </div>
diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc index f4af9f3..283b4d2 100644 --- a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc +++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
@@ -141,6 +141,7 @@ item->GetTargetFilePath(), item->GetFullPath(), {item->GetTabUrl(), item->GetTabReferrerUrl()}, + item->GetReceivedBytes(), content::DownloadItemUtils::GetBrowserContext(item), callback, service, @@ -282,14 +283,7 @@ bool CheckClientDownloadRequest::ShouldReturnAsynchronousVerdict( DownloadCheckResultReason reason) { - if (!ShouldUploadForDlpScan() && !ShouldUploadForMalwareScan(reason)) - return false; - - Profile* profile = Profile::FromBrowserContext(GetBrowserContext()); - if (!profile) - return false; - - return true; + return ShouldUploadBinary(reason) && ShouldDelayVerdicts(); } bool CheckClientDownloadRequest::ShouldDelayVerdicts() { @@ -299,22 +293,27 @@ delay_delivery == DELAY_UPLOADS_AND_DOWNLOADS); } -void CheckClientDownloadRequest::MaybeUploadBinary( +bool CheckClientDownloadRequest::ShouldUploadBinary( DownloadCheckResultReason reason) { bool upload_for_dlp = ShouldUploadForDlpScan(); bool upload_for_malware = ShouldUploadForMalwareScan(reason); if (!upload_for_dlp && !upload_for_malware) - return; + return false; - Profile* profile = Profile::FromBrowserContext(GetBrowserContext()); - if (!profile) - return; + return !!Profile::FromBrowserContext(GetBrowserContext()); +} +void CheckClientDownloadRequest::UploadBinary( + DownloadCheckResultReason reason) { + bool upload_for_dlp = ShouldUploadForDlpScan(); + bool upload_for_malware = ShouldUploadForMalwareScan(reason); auto request = std::make_unique<DownloadItemRequest>( item_, /*read_immediately=*/true, base::BindOnce(&CheckClientDownloadRequest::OnDeepScanningComplete, weakptr_factory_.GetWeakPtr())); + Profile* profile = Profile::FromBrowserContext(GetBrowserContext()); + if (upload_for_dlp) { DlpDeepScanningClientRequest dlp_request; dlp_request.set_content_source(DlpDeepScanningClientRequest::FILE_DOWNLOAD); @@ -398,14 +397,13 @@ int send_files_for_malware_check = profile->GetPrefs()->GetInteger( prefs::kSafeBrowsingSendFilesForMalwareCheck); if (send_files_for_malware_check != - SendFilesForMalwareCheckValues::SEND_DOWNLOADS) + SendFilesForMalwareCheckValues::SEND_DOWNLOADS && + send_files_for_malware_check != + SendFilesForMalwareCheckValues::SEND_UPLOADS_AND_DOWNLOADS) return false; // If there's no DM token, the upload will fail, so we can skip uploading now. - if (policy::BrowserDMTokenStorage::Get()->RetrieveDMToken().empty()) - return false; - - return true; + return !policy::BrowserDMTokenStorage::Get()->RetrieveDMToken().empty(); } void CheckClientDownloadRequest::OnDeepScanningComplete(
diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request.h b/chrome/browser/safe_browsing/download_protection/check_client_download_request.h index 49a9e16..8d4c77ac 100644 --- a/chrome/browser/safe_browsing/download_protection/check_client_download_request.h +++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request.h
@@ -66,7 +66,8 @@ // Uploads the binary for deep scanning if the reason and policies indicate // it should be. - void MaybeUploadBinary(DownloadCheckResultReason reason) override; + bool ShouldUploadBinary(DownloadCheckResultReason reason) override; + void UploadBinary(DownloadCheckResultReason reason) override; // Called when this request is completed. void NotifyRequestFinished(DownloadCheckResult result,
diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc index 5e38253..e099bfc 100644 --- a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc +++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h" #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h" +#include "chrome/browser/safe_browsing/download_protection/binary_upload_service.h" #include "chrome/browser/safe_browsing/download_protection/download_protection_service.h" #include "chrome/browser/safe_browsing/download_protection/download_protection_util.h" #include "chrome/browser/safe_browsing/download_protection/ppapi_download_request.h" @@ -127,6 +128,7 @@ base::FilePath target_file_path, base::FilePath full_path, TabUrls tab_urls, + size_t file_size, content::BrowserContext* browser_context, CheckDownloadCallback callback, DownloadProtectionService* service, @@ -137,6 +139,7 @@ full_path_(std::move(full_path)), tab_url_(std::move(tab_urls.url)), tab_referrer_url_(std::move(tab_urls.referrer)), + file_size_(file_size), callback_(std::move(callback)), service_(service), binary_feature_extractor_(std::move(binary_feature_extractor)), @@ -202,13 +205,23 @@ reason, REASON_MAX); } + if (ShouldUploadBinary(reason)) { + if (!password_protected_allowed_ && is_password_protected_) { + result = DownloadCheckResult::BLOCKED_PASSWORD_PROTECTED; + reason = DownloadCheckResultReason::REASON_BLOCKED_PASSWORD_PROTECTED; + } else if (BinaryUploadService::ShouldBlockFileSize(file_size_)) { + result = DownloadCheckResult::BLOCKED_TOO_LARGE; + reason = DownloadCheckResultReason::REASON_BLOCKED_TOO_LARGE; + } else { + UploadBinary(reason); + } + } + DVLOG(2) << "SafeBrowsing download verdict for: " << source_url_ << " verdict:" << reason << " result:" << static_cast<int>(result); UMA_HISTOGRAM_ENUMERATION("SBClientDownload.CheckDownloadStats", reason, REASON_MAX); - MaybeUploadBinary(reason); - if (ShouldReturnAsynchronousVerdict(reason)) { std::move(callback_).Run(DownloadCheckResult::ASYNC_SCANNING); timeout_closure_.Cancel(); @@ -331,16 +344,11 @@ return; } - if (!password_protected_allowed_ && - std::any_of(results.archived_binaries.begin(), - results.archived_binaries.end(), - [](const ClientDownloadRequest::ArchivedBinary& binary) { - return binary.is_encrypted(); - })) { - FinishRequest(DownloadCheckResult::BLOCKED_PASSWORD_PROTECTED, - REASON_BLOCKED_PASSWORD_PROTECTED); - return; - } + is_password_protected_ = std::any_of( + results.archived_binaries.begin(), results.archived_binaries.end(), + [](const ClientDownloadRequest::ArchivedBinary& binary) { + return binary.is_encrypted(); + }); // The content checks cannot determine that we decided to sample this file, so // special case that DownloadType.
diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h index d563971..71efa2c 100644 --- a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h +++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h
@@ -53,6 +53,7 @@ base::FilePath target_file_path, base::FilePath full_path, TabUrls tab_urls, + size_t file_size, content::BrowserContext* browser_context, CheckDownloadCallback callback, DownloadProtectionService* service, @@ -133,7 +134,13 @@ DownloadCheckResultReason reason) = 0; // Called after receiving, or failing to receive a response from the server. - virtual void MaybeUploadBinary(DownloadCheckResultReason reason) = 0; + // Returns whether or not the file should be uploaded to Safe Browsing for + // deep scanning. + virtual bool ShouldUploadBinary(DownloadCheckResultReason reason) = 0; + + // If ShouldUploadBinary is true, actually performs the upload to Safe + // Browsing for deep scanning. + virtual void UploadBinary(DownloadCheckResultReason reason) = 0; // Called whenever a request has completed. virtual void NotifyRequestFinished(DownloadCheckResult result, @@ -150,6 +157,9 @@ // URL chain of redirects leading to (but not including) |tab_url|. std::vector<GURL> tab_redirects_; + // The size of the download. + const size_t file_size_; + CheckDownloadCallback callback_; // A cancelable closure used to track the timeout. If we decide to upload the @@ -200,6 +210,8 @@ bool requests_ap_verdicts_ = false; bool password_protected_allowed_ = true; + bool is_password_protected_ = false; + int file_count_; int directory_count_;
diff --git a/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.cc b/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.cc index 833a8db..5f82332 100644 --- a/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.cc +++ b/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.cc
@@ -65,6 +65,7 @@ item->target_file_path, item->full_path, TabUrlsFromWebContents(item->web_contents), + item->size, item->browser_context, std::move(callback), service, @@ -155,7 +156,12 @@ return false; } -void CheckNativeFileSystemWriteRequest::MaybeUploadBinary( +bool CheckNativeFileSystemWriteRequest::ShouldUploadBinary( + DownloadCheckResultReason reason) { + return false; +} + +void CheckNativeFileSystemWriteRequest::UploadBinary( DownloadCheckResultReason reason) {} void CheckNativeFileSystemWriteRequest::NotifyRequestFinished(
diff --git a/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.h b/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.h index 54eed13..11ef4bd 100644 --- a/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.h +++ b/chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.h
@@ -15,6 +15,7 @@ #include "base/memory/ref_counted.h" #include "build/build_config.h" #include "chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h" +#include "chrome/browser/safe_browsing/download_protection/download_protection_util.h" #include "components/download/public/common/download_item.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/native_file_system_write_item.h" @@ -50,7 +51,8 @@ const std::string& response_body) override; bool ShouldReturnAsynchronousVerdict( DownloadCheckResultReason reason) override; - void MaybeUploadBinary(DownloadCheckResultReason reason) override; + bool ShouldUploadBinary(DownloadCheckResultReason reason) override; + void UploadBinary(DownloadCheckResultReason reason) override; void NotifyRequestFinished(DownloadCheckResult result, DownloadCheckResultReason reason) override;
diff --git a/chrome/browser/safe_browsing/download_protection/download_item_request.cc b/chrome/browser/safe_browsing/download_protection/download_item_request.cc index 831dca14..58c8102 100644 --- a/chrome/browser/safe_browsing/download_protection/download_item_request.cc +++ b/chrome/browser/safe_browsing/download_protection/download_item_request.cc
@@ -44,7 +44,10 @@ bool read_immediately, BinaryUploadService::Callback callback) : Request(std::move(callback)), item_(item), weakptr_factory_(this) { - read_immediately ? ReadFile() : item_->AddObserver(this); + if (read_immediately) + ReadFile(); + + item_->AddObserver(this); } DownloadItemRequest::~DownloadItemRequest() { @@ -83,7 +86,8 @@ } void DownloadItemRequest::OnDownloadUpdated(download::DownloadItem* download) { - if (download == item_ && item_->GetFullPath() == item_->GetTargetFilePath()) + if (!is_data_valid_ && download == item_ && + item_->GetFullPath() == item_->GetTargetFilePath()) ReadFile(); }
diff --git a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc index d04cb0ba..23e3fb39 100644 --- a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc +++ b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
@@ -21,6 +21,7 @@ #include "base/location.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/memory/scoped_refptr.h" #include "base/path_service.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" @@ -34,6 +35,8 @@ #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/password_manager/password_store_factory.h" +#include "chrome/browser/policy/browser_dm_token_storage.h" +#include "chrome/browser/policy/fake_browser_dm_token_storage.h" #include "chrome/browser/safe_browsing/download_protection/check_native_file_system_write_request.h" #include "chrome/browser/safe_browsing/download_protection/download_feedback_service.h" #include "chrome/browser/safe_browsing/download_protection/download_protection_util.h" @@ -130,12 +133,13 @@ class FakeSafeBrowsingService : public TestSafeBrowsingService { public: - FakeSafeBrowsingService() + explicit FakeSafeBrowsingService(Profile* profile) : test_shared_loader_factory_( base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( &test_url_loader_factory_)), download_report_count_(0) { services_delegate_ = ServicesDelegate::CreateForTest(this, this); + services_delegate_->CreateBinaryUploadService(profile); mock_database_manager_ = new MockSafeBrowsingDatabaseManager(); } @@ -239,11 +243,13 @@ // Start real threads for the IO and File threads so that the DCHECKs // to test that we're on the correct thread work. - sb_service_ = new StrictMock<FakeSafeBrowsingService>(); + sb_service_ = + base::MakeRefCounted<StrictMock<FakeSafeBrowsingService>>(profile()); sb_service_->Initialize(); TestingBrowserProcess::GetGlobal()->SetSafeBrowsingService( sb_service_.get()); - binary_feature_extractor_ = new StrictMock<MockBinaryFeatureExtractor>(); + binary_feature_extractor_ = + base::MakeRefCounted<StrictMock<MockBinaryFeatureExtractor>>(); ON_CALL(*binary_feature_extractor_, ExtractImageFeatures(_, _, _, _)) .WillByDefault(Return(true)); download_service_ = sb_service_->download_protection_service(); @@ -287,6 +293,9 @@ ->SetTestingFactory( profile(), base::BindRepeating(&BuildSafeBrowsingPrivateEventRouter)); + + storage_.SetClientId("client id"); + storage_.SetDMToken("dm token"); } void TearDown() override { @@ -508,6 +517,16 @@ prefs::kAllowPasswordProtectedFiles, value); } + void SetBlockLargeFilesPref(BlockLargeFileTransferValues value) { + g_browser_process->local_state()->SetInteger(prefs::kBlockLargeFileTransfer, + value); + } + + void SetSendFilesForMalwareCheckPref(SendFilesForMalwareCheckValues value) { + profile()->GetPrefs()->SetInteger( + prefs::kSafeBrowsingSendFilesForMalwareCheck, value); + } + // Helper function to simulate a user gesture, then a link click. // The usual NavigateAndCommit is unsuitable because it creates // browser-initiated navigations, causing us to drop the referrer. @@ -625,6 +644,7 @@ base::ScopedTempDir temp_dir_; extensions::TestEventRouter* test_event_router_; TestingProfileManager testing_profile_manager_; + policy::FakeBrowserDMTokenStorage storage_; }; void DownloadProtectionServiceTest::CheckClientDownloadReportCorruptArchive( @@ -2821,8 +2841,11 @@ content::DownloadItemUtils::AttachInfo(&item, profile(), nullptr); { + SetSendFilesForMalwareCheckPref( + SendFilesForMalwareCheckValues::SEND_DOWNLOADS); SetPasswordProtectedAllowedPref( AllowPasswordProtectedFilesValues::ALLOW_NONE); + PrepareResponse(ClientDownloadResponse::SAFE, net::HTTP_OK, net::OK); RunLoop run_loop; download_service_->CheckClientDownload( @@ -2830,7 +2853,7 @@ base::Unretained(this), run_loop.QuitClosure())); run_loop.Run(); EXPECT_TRUE(IsResult(DownloadCheckResult::BLOCKED_PASSWORD_PROTECTED)); - EXPECT_FALSE(HasClientDownloadRequest()); + EXPECT_TRUE(HasClientDownloadRequest()); } { @@ -2849,6 +2872,55 @@ } } +TEST_F(DownloadProtectionServiceTest, LargeFileBlockedByPreference) { + base::FilePath test_zip; + ASSERT_TRUE(base::PathService::Get(chrome::DIR_TEST_DATA, &test_zip)); + test_zip = test_zip.AppendASCII("safe_browsing") + .AppendASCII("download_protection") + .AppendASCII("encrypted.zip"); + + NiceMockDownloadItem item; + PrepareBasicDownloadItemWithFullPaths( + &item, {"http://www.evil.com/encrypted.zip"}, // url_chain + "http://www.google.com/", // referrer + test_zip, // tmp_path + temp_dir_.GetPath().Append( + FILE_PATH_LITERAL("encrypted.zip"))); // final_path + content::DownloadItemUtils::AttachInfo(&item, profile(), nullptr); + + EXPECT_CALL(item, GetReceivedBytes()) + .WillRepeatedly(Return(100 * 1024 * 1024)); + + { + SetSendFilesForMalwareCheckPref( + SendFilesForMalwareCheckValues::SEND_DOWNLOADS); + SetBlockLargeFilesPref(BlockLargeFileTransferValues::BLOCK_LARGE_DOWNLOADS); + PrepareResponse(ClientDownloadResponse::SAFE, net::HTTP_OK, net::OK); + + RunLoop run_loop; + download_service_->CheckClientDownload( + &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, + base::Unretained(this), run_loop.QuitClosure())); + run_loop.Run(); + EXPECT_TRUE(IsResult(DownloadCheckResult::BLOCKED_TOO_LARGE)); + EXPECT_TRUE(HasClientDownloadRequest()); + } + + { + SetBlockLargeFilesPref(BlockLargeFileTransferValues::BLOCK_NONE); + PrepareResponse(ClientDownloadResponse::SAFE, net::HTTP_OK, net::OK); + + RunLoop run_loop; + download_service_->CheckClientDownload( + &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, + base::Unretained(this), run_loop.QuitClosure())); + run_loop.Run(); + EXPECT_TRUE(IsResult(DownloadCheckResult::SAFE)); + EXPECT_TRUE(HasClientDownloadRequest()); + ClearClientDownloadRequest(); + } +} + TEST_F(DownloadProtectionServiceTest, NativeFileSystemWriteRequest_NotABinary) { auto item = PrepareBasicNativeFileSystemWriteItem( /*tmp_path=*/FILE_PATH_LITERAL("a.txt.crswap"),
diff --git a/chrome/browser/safe_browsing/download_protection/download_protection_util.h b/chrome/browser/safe_browsing/download_protection/download_protection_util.h index 97c872e0..7a01852 100644 --- a/chrome/browser/safe_browsing/download_protection/download_protection_util.h +++ b/chrome/browser/safe_browsing/download_protection/download_protection_util.h
@@ -24,6 +24,7 @@ WHITELISTED_BY_POLICY, ASYNC_SCANNING, BLOCKED_PASSWORD_PROTECTED, + BLOCKED_TOO_LARGE, }; // Enum to keep track why a particular download verdict was chosen. @@ -59,6 +60,7 @@ REASON_VERDICT_UNKNOWN = 27, REASON_DOWNLOAD_DESTROYED = 28, REASON_BLOCKED_PASSWORD_PROTECTED = 29, + REASON_BLOCKED_TOO_LARGE = 30, REASON_MAX // Always add new values before this one. };
diff --git a/chrome/browser/search/instant_service_unittest.cc b/chrome/browser/search/instant_service_unittest.cc index d818ac3..cee285c 100644 --- a/chrome/browser/search/instant_service_unittest.cc +++ b/chrome/browser/search/instant_service_unittest.cc
@@ -8,6 +8,7 @@ #include "base/files/file_util.h" #include "base/path_service.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/chrome_notification_types.h"
diff --git a/chrome/browser/sharing/sharing_device_registration_unittest.cc b/chrome/browser/sharing/sharing_device_registration_unittest.cc index 5a16cfc9..4961d53c 100644 --- a/chrome/browser/sharing/sharing_device_registration_unittest.cc +++ b/chrome/browser/sharing/sharing_device_registration_unittest.cc
@@ -4,15 +4,18 @@ #include "chrome/browser/sharing/sharing_device_registration.h" +#include <stdint.h> #include <map> #include <memory> #include <string> +#include <vector> #include "base/run_loop.h" #include "base/test/bind_test_util.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "build/build_config.h" +#include "chrome/browser/sharing/features.h" #include "chrome/browser/sharing/shared_clipboard/feature_flags.h" #include "chrome/browser/sharing/sharing_constants.h" #include "chrome/browser/sharing/sharing_device_registration_result.h" @@ -22,11 +25,13 @@ #include "components/gcm_driver/instance_id/instance_id_driver.h" #include "components/prefs/pref_registry.h" #include "components/prefs/pref_service_factory.h" +#include "components/sync/driver/test_sync_service.h" #include "components/sync_device_info/device_info.h" #include "components/sync_device_info/fake_device_info_sync_service.h" #include "components/sync_preferences/pref_service_mock_factory.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "content/public/test/browser_task_environment.h" +#include "crypto/ec_private_key.h" #include "google_apis/gcm/engine/account_mapping.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -118,7 +123,7 @@ public: SharingDeviceRegistrationTest() : sync_prefs_(&prefs_, &fake_device_info_sync_service_), - vapid_key_manager_(&sync_prefs_), + vapid_key_manager_(&sync_prefs_, &test_sync_service_), sharing_device_registration_(pref_service_.get(), &sync_prefs_, &mock_instance_id_driver_, @@ -213,6 +218,7 @@ std::unique_ptr<PrefService> pref_service_ = CreatePrefServiceAndRegisterPrefs(); SharingSyncPreference sync_prefs_; + syncer::TestSyncService test_sync_service_; VapidKeyManager vapid_key_manager_; SharingDeviceRegistration sharing_device_registration_; @@ -258,9 +264,14 @@ EXPECT_EQ(expected_sharing_info, synced_sharing_info_); EXPECT_TRUE(fcm_registration_); - // Remove VAPID key to force a re-register, which will return a different FCM + // Change VAPID key to force a re-register, which will return a different FCM // token. - prefs_.RemoveUserPref("sharing.vapid_key"); + auto vapid_key = crypto::ECPrivateKey::Create(); + ASSERT_TRUE(vapid_key); + std::vector<uint8_t> vapid_key_info; + ASSERT_TRUE(vapid_key->ExportPrivateKey(&vapid_key_info)); + sync_prefs_.SetVapidKey(vapid_key_info); + vapid_key_manager_.RefreshCachedKey(); SetInstanceIDFCMToken(kFCMToken2); RegisterDeviceSync();
diff --git a/chrome/browser/sharing/sharing_fcm_sender.cc b/chrome/browser/sharing/sharing_fcm_sender.cc index abd5c15..c9e8841 100644 --- a/chrome/browser/sharing/sharing_fcm_sender.cc +++ b/chrome/browser/sharing/sharing_fcm_sender.cc
@@ -73,6 +73,14 @@ return; } + auto* vapid_key = vapid_key_manager_->GetOrCreateKey(); + if (!vapid_key) { + LOG(ERROR) << "Unable to retrieve VAPID key"; + std::move(callback).Run(SharingSendMessageResult::kInternalError, + base::nullopt); + return; + } + const syncer::DeviceInfo* local_device_info = device_info_provider_->GetLocalDeviceInfo(); message.set_sender_guid(local_device_info->guid()); @@ -92,8 +100,8 @@ gcm_driver_->SendWebPushMessage( kSharingFCMAppID, fcm_registration->authorized_entity, target.p256dh, - target.auth_secret, target.fcm_token, - vapid_key_manager_->GetOrCreateKey(), std::move(web_push_message), + target.auth_secret, target.fcm_token, vapid_key, + std::move(web_push_message), base::BindOnce(&SharingFCMSender::OnMessageSent, weak_ptr_factory_.GetWeakPtr(), std::move(callback))); }
diff --git a/chrome/browser/sharing/sharing_fcm_sender_unittest.cc b/chrome/browser/sharing/sharing_fcm_sender_unittest.cc index e8471d1..e8fb9ad 100644 --- a/chrome/browser/sharing/sharing_fcm_sender_unittest.cc +++ b/chrome/browser/sharing/sharing_fcm_sender_unittest.cc
@@ -76,7 +76,9 @@ class MockVapidKeyManager : public VapidKeyManager { public: - MockVapidKeyManager() : VapidKeyManager(nullptr) {} + MockVapidKeyManager() + : VapidKeyManager(/*sharing_sync_preference=*/nullptr, + /*sync_service=*/nullptr) {} ~MockVapidKeyManager() {} MOCK_METHOD0(GetOrCreateKey, crypto::ECPrivateKey*()); @@ -93,30 +95,92 @@ } protected: - SharingFCMSenderTest() { - // TODO: Used fake GCMDriver - sync_prefs_ = std::make_unique<SharingSyncPreference>( - &prefs_, &fake_device_info_sync_service); - sharing_fcm_sender_ = std::make_unique<SharingFCMSender>( - &fake_gcm_driver_, - fake_device_info_sync_service.GetLocalDeviceInfoProvider(), - sync_prefs_.get(), &vapid_key_manager_); + SharingFCMSenderTest() + : sync_prefs_(&prefs_, &fake_device_info_sync_service), + sharing_fcm_sender_( + &fake_gcm_driver_, + fake_device_info_sync_service.GetLocalDeviceInfoProvider(), + &sync_prefs_, + &vapid_key_manager_) { SharingSyncPreference::RegisterProfilePrefs(prefs_.registry()); } syncer::FakeDeviceInfoSyncService fake_device_info_sync_service; FakeGCMDriver fake_gcm_driver_; - std::unique_ptr<SharingSyncPreference> sync_prefs_; - std::unique_ptr<SharingFCMSender> sharing_fcm_sender_; + SharingSyncPreference sync_prefs_; testing::NiceMock<MockVapidKeyManager> vapid_key_manager_; + SharingFCMSender sharing_fcm_sender_; private: sync_preferences::TestingPrefServiceSyncable prefs_; -}; +}; // namespace } // namespace +TEST_F(SharingFCMSenderTest, NoFcmRegistration) { + sync_prefs_.ClearFCMRegistration(); + syncer::DeviceInfo* local_device_info = + fake_device_info_sync_service.GetLocalDeviceInfoProvider() + ->GetMutableDeviceInfo(); + local_device_info->set_sharing_info(syncer::DeviceInfo::SharingInfo( + kSenderFcmToken, kSenderP256dh, kSenderAuthSecret, + std::set<sync_pb::SharingSpecificFields::EnabledFeatures>())); + fake_device_info_sync_service.GetLocalDeviceInfoProvider()->SetReady(true); + + std::unique_ptr<crypto::ECPrivateKey> vapid_key = + crypto::ECPrivateKey::Create(); + ON_CALL(vapid_key_manager_, GetOrCreateKey()) + .WillByDefault(testing::Return(vapid_key.get())); + + syncer::DeviceInfo::SharingInfo target( + kFcmToken, kP256dh, kAuthSecret, + std::set<sync_pb::SharingSpecificFields::EnabledFeatures>()); + + SharingSendMessageResult result; + base::Optional<std::string> message_id; + chrome_browser_sharing::SharingMessage sharing_message; + sharing_message.mutable_ping_message(); + sharing_fcm_sender_.SendMessageToDevice( + std::move(target), base::TimeDelta::FromSeconds(kTtlSeconds), + std::move(sharing_message), + base::BindOnce(&SharingFCMSenderTest::OnMessageSent, + base::Unretained(this), &result, &message_id)); + + EXPECT_EQ(SharingSendMessageResult::kInternalError, result); +} + +TEST_F(SharingFCMSenderTest, NoVapidKey) { + sync_prefs_.SetFCMRegistration(SharingSyncPreference::FCMRegistration( + kAuthorizedEntity, base::Time::Now())); + syncer::DeviceInfo* local_device_info = + fake_device_info_sync_service.GetLocalDeviceInfoProvider() + ->GetMutableDeviceInfo(); + local_device_info->set_sharing_info(syncer::DeviceInfo::SharingInfo( + kSenderFcmToken, kSenderP256dh, kSenderAuthSecret, + std::set<sync_pb::SharingSpecificFields::EnabledFeatures>())); + fake_device_info_sync_service.GetLocalDeviceInfoProvider()->SetReady(true); + + ON_CALL(vapid_key_manager_, GetOrCreateKey()) + .WillByDefault(testing::Return(nullptr)); + + syncer::DeviceInfo::SharingInfo target( + kFcmToken, kP256dh, kAuthSecret, + std::set<sync_pb::SharingSpecificFields::EnabledFeatures>()); + + SharingSendMessageResult result; + base::Optional<std::string> message_id; + chrome_browser_sharing::SharingMessage sharing_message; + sharing_message.mutable_ping_message(); + sharing_fcm_sender_.SendMessageToDevice( + std::move(target), base::TimeDelta::FromSeconds(kTtlSeconds), + std::move(sharing_message), + base::BindOnce(&SharingFCMSenderTest::OnMessageSent, + base::Unretained(this), &result, &message_id)); + + EXPECT_EQ(SharingSendMessageResult::kInternalError, result); +} + struct SharingFCMSenderResultTestData { const gcm::SendWebPushMessageResult web_push_result; const SharingSendMessageResult expected_result; @@ -158,7 +222,7 @@ public testing::WithParamInterface<SharingFCMSenderResultTestData> {}; TEST_P(SharingFCMSenderResultTest, ResultTest) { - sync_prefs_->SetFCMRegistration(SharingSyncPreference::FCMRegistration( + sync_prefs_.SetFCMRegistration(SharingSyncPreference::FCMRegistration( kAuthorizedEntity, base::Time::Now())); syncer::DeviceInfo* local_device_info = fake_device_info_sync_service.GetLocalDeviceInfoProvider() @@ -183,7 +247,7 @@ base::Optional<std::string> message_id; chrome_browser_sharing::SharingMessage sharing_message; sharing_message.mutable_ping_message(); - sharing_fcm_sender_->SendMessageToDevice( + sharing_fcm_sender_.SendMessageToDevice( std::move(target), base::TimeDelta::FromSeconds(kTtlSeconds), std::move(sharing_message), base::BindOnce(&SharingFCMSenderTest::OnMessageSent,
diff --git a/chrome/browser/sharing/sharing_service.cc b/chrome/browser/sharing/sharing_service.cc index 67ea314..70a4007 100644 --- a/chrome/browser/sharing/sharing_service.cc +++ b/chrome/browser/sharing/sharing_service.cc
@@ -442,6 +442,20 @@ } } +void SharingService::OnSyncCycleCompleted(syncer::SyncService* sync) { + if (!base::FeatureList::IsEnabled(kSharingDeriveVapidKey) || + state_ != State::ACTIVE) { + return; + } + + RefreshVapidKey(); +} + +void SharingService::RefreshVapidKey() { + if (vapid_key_manager_->RefreshCachedKey()) + RegisterDevice(); +} + void SharingService::RegisterDevice() { sharing_device_registration_->RegisterDevice(base::BindOnce( &SharingService::OnDeviceRegistered, weak_ptr_factory_.GetWeakPtr())); @@ -471,10 +485,16 @@ state_ = State::ACTIVE; fcm_handler_->StartListening(); - // Listen for further VAPID key changes for re-registration. - // state_ is kept as State::ACTIVE during re-registration. - sync_prefs_->SetVapidKeyChangeObserver(base::BindRepeating( - &SharingService::RegisterDevice, weak_ptr_factory_.GetWeakPtr())); + if (base::FeatureList::IsEnabled(kSharingDeriveVapidKey)) { + // Refresh VAPID key in case it's changed during registration. + RefreshVapidKey(); + } else { + // Listen for further VAPID key changes for re-registration. + // state_ is kept as State::ACTIVE during re-registration. + sync_prefs_->SetVapidKeyChangeObserver( + base::BindRepeating(&SharingService::RefreshVapidKey, + weak_ptr_factory_.GetWeakPtr())); + } } else if (IsSyncDisabled()) { // In case sync is disabled during registration, unregister it. state_ = State::UNREGISTERING;
diff --git a/chrome/browser/sharing/sharing_service.h b/chrome/browser/sharing/sharing_service.h index 5ac638d..ca435b4 100644 --- a/chrome/browser/sharing/sharing_service.h +++ b/chrome/browser/sharing/sharing_service.h
@@ -130,6 +130,7 @@ // Overrides for syncer::SyncServiceObserver. void OnSyncShutdown(syncer::SyncService* sync) override; void OnStateChanged(syncer::SyncService* sync) override; + void OnSyncCycleCompleted(syncer::SyncService* sync) override; // AckMessageHandler::AckMessageObserver override. void OnAckReceived(const std::string& message_id) override; @@ -137,6 +138,8 @@ // syncer::DeviceInfoTracker::Observer. void OnDeviceInfoChange() override; + void RefreshVapidKey(); + void RegisterDevice(); void UnregisterDevice();
diff --git a/chrome/browser/sharing/sharing_service_factory.cc b/chrome/browser/sharing/sharing_service_factory.cc index 53fa4dc8..5e673c5a 100644 --- a/chrome/browser/sharing/sharing_service_factory.cc +++ b/chrome/browser/sharing/sharing_service_factory.cc
@@ -87,7 +87,7 @@ std::make_unique<SharingSyncPreference>(profile->GetPrefs(), device_info_sync_service); std::unique_ptr<VapidKeyManager> vapid_key_manager = - std::make_unique<VapidKeyManager>(sync_prefs.get()); + std::make_unique<VapidKeyManager>(sync_prefs.get(), sync_service); std::unique_ptr<SharingDeviceRegistration> sharing_device_registration = std::make_unique<SharingDeviceRegistration>( profile->GetPrefs(), sync_prefs.get(), instance_id_service->driver(),
diff --git a/chrome/browser/sharing/sharing_service_unittest.cc b/chrome/browser/sharing/sharing_service_unittest.cc index 17fd9c88..856ca010 100644 --- a/chrome/browser/sharing/sharing_service_unittest.cc +++ b/chrome/browser/sharing/sharing_service_unittest.cc
@@ -30,6 +30,7 @@ #include "components/sync_device_info/local_device_info_provider.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "content/public/test/browser_task_environment.h" +#include "crypto/ec_private_key.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -134,12 +135,15 @@ : SharingDeviceRegistration(pref_service, prefs, instance_id_driver, - vapid_key_manager) {} + vapid_key_manager), + vapid_key_manager_(vapid_key_manager) {} ~FakeSharingDeviceRegistration() override = default; void RegisterDevice( SharingDeviceRegistration::RegistrationCallback callback) override { registration_attempts_++; + // Simulate SharingDeviceRegistration calling GetOrCreateKey. + vapid_key_manager_->GetOrCreateKey(); std::move(callback).Run(result_); } @@ -163,6 +167,7 @@ } private: + VapidKeyManager* vapid_key_manager_; SharingDeviceRegistrationResult result_ = SharingDeviceRegistrationResult::kSuccess; int registration_attempts_ = 0; @@ -175,11 +180,11 @@ SharingServiceTest() { sync_prefs_ = new SharingSyncPreference(&prefs_, &fake_device_info_sync_service); + vapid_key_manager_ = new VapidKeyManager(sync_prefs_, &test_sync_service_); sharing_device_registration_ = new FakeSharingDeviceRegistration( /* pref_service= */ nullptr, sync_prefs_, &mock_instance_id_driver_, vapid_key_manager_, fake_device_info_sync_service.GetLocalDeviceInfoProvider()); - vapid_key_manager_ = new VapidKeyManager(sync_prefs_); fcm_sender_ = new SharingFCMSender( &fake_gcm_driver_, fake_device_info_sync_service.GetLocalDeviceInfoProvider(), sync_prefs_, @@ -515,11 +520,14 @@ EXPECT_EQ(1, sharing_device_registration_->registration_attempts()); EXPECT_EQ(SharingService::State::ACTIVE, GetSharingService()->GetState()); - // Registration will be attempeted as VAPID key is cleared. + auto vapid_key = crypto::ECPrivateKey::Create(); + ASSERT_TRUE(vapid_key); + std::vector<uint8_t> vapid_key_info; + ASSERT_TRUE(vapid_key->ExportPrivateKey(&vapid_key_info)); + + // Registration will be attempeted as VAPID key has changed. EXPECT_CALL(*fcm_handler_, StartListening()).Times(0); - prefs_.SetUserPref("sharing.vapid_key", - base::Value::ToUniquePtrValue( - base::Value(base::Value::Type::DICTIONARY))); + sync_prefs_->SetVapidKey(vapid_key_info); EXPECT_EQ(2, sharing_device_registration_->registration_attempts()); EXPECT_EQ(SharingService::State::ACTIVE, GetSharingService()->GetState()); } @@ -549,6 +557,8 @@ test_sync_service_.SetTransportState( syncer::SyncService::TransportState::ACTIVE); test_sync_service_.SetActiveDataTypes(syncer::DEVICE_INFO); + test_sync_service_.SetExperimentalAuthenticationKey( + crypto::ECPrivateKey::Create()); EXPECT_EQ(SharingService::State::DISABLED, GetSharingService()->GetState()); @@ -559,6 +569,14 @@ test_sync_service_.FireStateChanged(); EXPECT_EQ(1, sharing_device_registration_->registration_attempts()); EXPECT_EQ(SharingService::State::ACTIVE, GetSharingService()->GetState()); + + // Registration will be attempeted as sync auth id has changed. + EXPECT_CALL(*fcm_handler_, StartListening()).Times(0); + test_sync_service_.SetExperimentalAuthenticationKey( + crypto::ECPrivateKey::Create()); + test_sync_service_.FireSyncCycleCompleted(); + EXPECT_EQ(2, sharing_device_registration_->registration_attempts()); + EXPECT_EQ(SharingService::State::ACTIVE, GetSharingService()->GetState()); } TEST_F(SharingServiceTest, DeviceRegistrationTransientError) {
diff --git a/chrome/browser/sharing/vapid_key_manager.cc b/chrome/browser/sharing/vapid_key_manager.cc index 57af35d..8c4b4d609f 100644 --- a/chrome/browser/sharing/vapid_key_manager.cc +++ b/chrome/browser/sharing/vapid_key_manager.cc
@@ -4,41 +4,79 @@ #include "chrome/browser/sharing/vapid_key_manager.h" +#include "base/feature_list.h" +#include "chrome/browser/sharing/features.h" #include "chrome/browser/sharing/sharing_metrics.h" #include "chrome/browser/sharing/sharing_sync_preference.h" +#include "components/sync/driver/sync_service.h" #include "crypto/ec_private_key.h" -VapidKeyManager::VapidKeyManager(SharingSyncPreference* sharing_sync_preference) - : sharing_sync_preference_(sharing_sync_preference) {} +VapidKeyManager::VapidKeyManager(SharingSyncPreference* sharing_sync_preference, + syncer::SyncService* sync_service) + : sharing_sync_preference_(sharing_sync_preference), + sync_service_(sync_service) {} VapidKeyManager::~VapidKeyManager() = default; crypto::ECPrivateKey* VapidKeyManager::GetOrCreateKey() { - base::Optional<std::vector<uint8_t>> stored_key = - sharing_sync_preference_->GetVapidKey(); + if (!vapid_key_) + RefreshCachedKey(); - if (stored_key) { - vapid_key_ = crypto::ECPrivateKey::CreateFromPrivateKeyInfo(*stored_key); - return vapid_key_.get(); + return vapid_key_.get(); +} + +bool VapidKeyManager::RefreshCachedKey() { + if (base::FeatureList::IsEnabled(kSharingDeriveVapidKey)) { + auto derived_key = sync_service_->GetExperimentalAuthenticationKey(); + if (!derived_key) + return InitWithPreference(); + + return UpdateCachedKey(std::move(derived_key)); + } else { + if (InitWithPreference()) + return true; + + if (vapid_key_) + return false; + + auto generated_key = crypto::ECPrivateKey::Create(); + if (!generated_key) { + LogSharingVapidKeyCreationResult( + SharingVapidKeyCreationResult::kGenerateECKeyFailed); + return false; + } + + return UpdateCachedKey(std::move(generated_key)); } +} - vapid_key_ = crypto::ECPrivateKey::Create(); - if (!vapid_key_) { - LogSharingVapidKeyCreationResult( - SharingVapidKeyCreationResult::kGenerateECKeyFailed); - return nullptr; - } - - std::vector<uint8_t> key; - if (!vapid_key_->ExportPrivateKey(&key)) { - LOG(ERROR) << "Could not export vapid key"; - vapid_key_.reset(); +bool VapidKeyManager::UpdateCachedKey( + std::unique_ptr<crypto::ECPrivateKey> new_key) { + std::vector<uint8_t> new_key_info; + if (!new_key->ExportPrivateKey(&new_key_info)) { LogSharingVapidKeyCreationResult( SharingVapidKeyCreationResult::kExportPrivateKeyFailed); - return nullptr; + return false; } - sharing_sync_preference_->SetVapidKey(key); + if (vapid_key_info_ == new_key_info) + return false; + + vapid_key_ = std::move(new_key); + vapid_key_info_ = std::move(new_key_info); + sharing_sync_preference_->SetVapidKey(vapid_key_info_); LogSharingVapidKeyCreationResult(SharingVapidKeyCreationResult::kSuccess); - return vapid_key_.get(); + return true; +} + +bool VapidKeyManager::InitWithPreference() { + base::Optional<std::vector<uint8_t>> preference_key_info = + sharing_sync_preference_->GetVapidKey(); + if (!preference_key_info || vapid_key_info_ == *preference_key_info) + return false; + + vapid_key_ = + crypto::ECPrivateKey::CreateFromPrivateKeyInfo(*preference_key_info); + vapid_key_info_ = std::move(*preference_key_info); + return true; }
diff --git a/chrome/browser/sharing/vapid_key_manager.h b/chrome/browser/sharing/vapid_key_manager.h index 535aca22..a53652d 100644 --- a/chrome/browser/sharing/vapid_key_manager.h +++ b/chrome/browser/sharing/vapid_key_manager.h
@@ -5,7 +5,9 @@ #ifndef CHROME_BROWSER_SHARING_VAPID_KEY_MANAGER_H_ #define CHROME_BROWSER_SHARING_VAPID_KEY_MANAGER_H_ +#include <stdint.h> #include <memory> +#include <vector> #include "base/macros.h" @@ -13,7 +15,12 @@ class ECPrivateKey; } // namespace crypto +namespace syncer { +class SyncService; +} // namespace syncer + class SharingSyncPreference; +enum class SharingVapidKeyCreationResult; // Responsible for creating, storing and managing VAPID key. VAPID key is // shared across all devices for a single user and is used for signing VAPID @@ -22,21 +29,43 @@ // https://developers.google.com/web/fundamentals/push-notifications/web-push-protocol class VapidKeyManager { public: - explicit VapidKeyManager(SharingSyncPreference* sharing_sync_preference); + explicit VapidKeyManager(SharingSyncPreference* sharing_sync_preference, + syncer::SyncService* sync_service); virtual ~VapidKeyManager(); - // Returns the shared VAPID key stored in SharingSyncPreference. If no key is - // found in preferences, it generates a new key and stores in - // SharingSyncPreference before returning this new key. Conflicts between - // different devices generating the shared VAPID key is resolved based on - // creation time. + // Returns the cached key. If absent, first attempts to refresh the cached + // key. May return nullptr if cached key is absent after refresh. virtual crypto::ECPrivateKey* GetOrCreateKey(); + // Attempts to refresh cached key from various source and returns if cached + // key has changed. + // + // If kSharingDeriveVapidKey is enabled: + // 1. Attempts to derive a key from sync secret. If successful, cache it and + // store in sync preference. + // 2. Otherwise, attempts to cache the key stored in sync prefernece. + // + // If kSharingDeriveVapidKey is disabled: + // 1. Attempts to cache the key stored in sync prefernece. + // 2. If failed and cahced key is absent, attempts to generate a new key. If + // successful, cache it and store in sync preference. + bool RefreshCachedKey(); + private: + // Attempts to update cached key if |new_key| is different from cached + // key, and store updated key to sync preferences. Returns true if cached + // key is updated. + bool UpdateCachedKey(std::unique_ptr<crypto::ECPrivateKey> new_key); + + // Attempts to update cached key with key stored in sync preferences. Returns + // true if cached key is updated. + bool InitWithPreference(); + // Used for storing and fetching VAPID key from preferences. SharingSyncPreference* sharing_sync_preference_; - + syncer::SyncService* sync_service_; std::unique_ptr<crypto::ECPrivateKey> vapid_key_; + std::vector<uint8_t> vapid_key_info_; DISALLOW_COPY_AND_ASSIGN(VapidKeyManager); };
diff --git a/chrome/browser/sharing/vapid_key_manager_unittest.cc b/chrome/browser/sharing/vapid_key_manager_unittest.cc index 7808635..7fd06bf 100644 --- a/chrome/browser/sharing/vapid_key_manager_unittest.cc +++ b/chrome/browser/sharing/vapid_key_manager_unittest.cc
@@ -4,11 +4,13 @@ #include "chrome/browser/sharing/vapid_key_manager.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/sharing/features.h" #include "chrome/browser/sharing/sharing_sync_preference.h" +#include "components/sync/driver/test_sync_service.h" #include "components/sync_device_info/fake_device_info_sync_service.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "crypto/ec_private_key.h" -#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -17,30 +19,98 @@ protected: VapidKeyManagerTest() : sharing_sync_preference_(&prefs_, &fake_device_info_sync_service_), - vapid_key_manager_(&sharing_sync_preference_) { + vapid_key_manager_(&sharing_sync_preference_, &test_sync_service_) { SharingSyncPreference::RegisterProfilePrefs(prefs_.registry()); } + base::test::ScopedFeatureList scoped_feature_list_; sync_preferences::TestingPrefServiceSyncable prefs_; syncer::FakeDeviceInfoSyncService fake_device_info_sync_service_; SharingSyncPreference sharing_sync_preference_; + syncer::TestSyncService test_sync_service_; VapidKeyManager vapid_key_manager_; }; } // namespace -TEST_F(VapidKeyManagerTest, GetOrCreateKey) { +TEST_F(VapidKeyManagerTest, CreateKeyFlow) { + scoped_feature_list_.InitAndDisableFeature(kSharingDeriveVapidKey); + // No keys stored in preferences. EXPECT_EQ(base::nullopt, sharing_sync_preference_.GetVapidKey()); // Expected to create new keys and store in preferences. - crypto::ECPrivateKey* key = vapid_key_manager_.GetOrCreateKey(); - std::vector<uint8_t> stored_key; - EXPECT_TRUE(key->ExportPrivateKey(&stored_key)); - EXPECT_EQ(stored_key, sharing_sync_preference_.GetVapidKey()); + crypto::ECPrivateKey* key_1 = vapid_key_manager_.GetOrCreateKey(); + EXPECT_TRUE(key_1); + std::vector<uint8_t> key_info; + EXPECT_TRUE(key_1->ExportPrivateKey(&key_info)); + EXPECT_EQ(key_info, sharing_sync_preference_.GetVapidKey()); - // Expected to return old keys from preferences. - std::vector<uint8_t> temp_key; - EXPECT_TRUE(vapid_key_manager_.GetOrCreateKey()->ExportPrivateKey(&temp_key)); - EXPECT_EQ(temp_key, stored_key); + // Expected to return same key when called again. + crypto::ECPrivateKey* key_2 = vapid_key_manager_.GetOrCreateKey(); + EXPECT_TRUE(key_2); + std::vector<uint8_t> key_info_2; + EXPECT_TRUE(key_2->ExportPrivateKey(&key_info_2)); + EXPECT_EQ(key_info, key_info_2); +} + +TEST_F(VapidKeyManagerTest, ReadFromPreferenceFlow) { + scoped_feature_list_.InitAndDisableFeature(kSharingDeriveVapidKey); + + // VAPID key already stored in preferences. + auto preference_key_1 = crypto::ECPrivateKey::Create(); + ASSERT_TRUE(preference_key_1); + std::vector<uint8_t> preference_key_info_1; + ASSERT_TRUE(preference_key_1->ExportPrivateKey(&preference_key_info_1)); + sharing_sync_preference_.SetVapidKey(preference_key_info_1); + + // Expected to return key stored in preferences. + crypto::ECPrivateKey* key_1 = vapid_key_manager_.GetOrCreateKey(); + EXPECT_TRUE(key_1); + std::vector<uint8_t> key_info_1; + EXPECT_TRUE(key_1->ExportPrivateKey(&key_info_1)); + EXPECT_EQ(preference_key_info_1, key_info_1); + + // Change VAPID key in sync prefernece. + auto preference_key_2 = crypto::ECPrivateKey::Create(); + ASSERT_TRUE(preference_key_2); + std::vector<uint8_t> preference_key_info_2; + ASSERT_TRUE(preference_key_2->ExportPrivateKey(&preference_key_info_2)); + sharing_sync_preference_.SetVapidKey(preference_key_info_2); + + // Refresh local cache with new key in sync preference. + EXPECT_TRUE(vapid_key_manager_.RefreshCachedKey()); + crypto::ECPrivateKey* key_2 = vapid_key_manager_.GetOrCreateKey(); + EXPECT_TRUE(key_2); + std::vector<uint8_t> key_info_2; + EXPECT_TRUE(key_2->ExportPrivateKey(&key_info_2)); + EXPECT_EQ(preference_key_info_2, key_info_2); +} + +TEST_F(VapidKeyManagerTest, DeriveKeyFlow) { + scoped_feature_list_.InitAndEnableFeature(kSharingDeriveVapidKey); + test_sync_service_.SetExperimentalAuthenticationKey( + crypto::ECPrivateKey::Create()); + + // No keys stored in preferences. + EXPECT_EQ(base::nullopt, sharing_sync_preference_.GetVapidKey()); + + // Expected to derive key from sync secret and store in sync preferences. + crypto::ECPrivateKey* key_1 = vapid_key_manager_.GetOrCreateKey(); + EXPECT_TRUE(key_1); + std::vector<uint8_t> key_info_1; + EXPECT_TRUE(key_1->ExportPrivateKey(&key_info_1)); + EXPECT_EQ(key_info_1, sharing_sync_preference_.GetVapidKey()); + + // Change sync secret. + test_sync_service_.SetExperimentalAuthenticationKey( + crypto::ECPrivateKey::Create()); + + // Refresh local cache with new sync secret. + EXPECT_TRUE(vapid_key_manager_.RefreshCachedKey()); + crypto::ECPrivateKey* key_2 = vapid_key_manager_.GetOrCreateKey(); + EXPECT_TRUE(key_2); + std::vector<uint8_t> key_info_2; + EXPECT_TRUE(key_2->ExportPrivateKey(&key_info_2)); + EXPECT_NE(key_info_1, key_info_2); }
diff --git a/chrome/browser/signin/mirror_browsertest.cc b/chrome/browser/signin/mirror_browsertest.cc index 56acfbbd..d5284c2 100644 --- a/chrome/browser/signin/mirror_browsertest.cc +++ b/chrome/browser/signin/mirror_browsertest.cc
@@ -33,6 +33,7 @@ #include "components/signin/core/browser/dice_header_helper.h" #include "components/signin/core/browser/signin_header_helper.h" #include "components/signin/public/base/signin_pref_names.h" +#include "content/public/common/content_client.h" #include "google_apis/gaia/gaia_urls.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h"
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc index eec0fee8..57dbe8f 100644 --- a/chrome/browser/ssl/ssl_browsertest.cc +++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -123,6 +123,7 @@ #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/common/network_service_util.h" #include "content/public/common/page_state.h"
diff --git a/chrome/browser/sync/chrome_sync_client.cc b/chrome/browser/sync/chrome_sync_client.cc index 14f261b3..3e0ed12 100644 --- a/chrome/browser/sync/chrome_sync_client.cc +++ b/chrome/browser/sync/chrome_sync_client.cc
@@ -510,6 +510,11 @@ #if defined(OS_CHROMEOS) case syncer::ARC_PACKAGE: return arc::ArcPackageSyncableService::Get(profile_)->AsWeakPtr(); + case syncer::OS_PREFERENCES: + case syncer::OS_PRIORITY_PREFERENCES: + return PrefServiceSyncableFromProfile(profile_) + ->GetSyncableService(type) + ->AsWeakPtr(); #endif // defined(OS_CHROMEOS) default: // The following datatypes still need to be transitioned to the
diff --git a/chrome/browser/sync/profile_sync_service_factory_unittest.cc b/chrome/browser/sync/profile_sync_service_factory_unittest.cc index 409272c..9e0ff42 100644 --- a/chrome/browser/sync/profile_sync_service_factory_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_factory_unittest.cc
@@ -27,6 +27,7 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chromeos/constants/chromeos_features.h" #endif class ProfileSyncServiceFactoryTest : public testing::Test { @@ -45,7 +46,7 @@ // Returns the collection of default datatypes. std::vector<syncer::ModelType> DefaultDatatypes() { - static_assert(39 == syncer::ModelType::NUM_ENTRIES, + static_assert(41 == syncer::ModelType::NUM_ENTRIES, "When adding a new type, you probably want to add it here as " "well (assuming it is already enabled)."); @@ -89,6 +90,10 @@ #if defined(OS_CHROMEOS) if (arc::IsArcAllowedForProfile(profile())) datatypes.push_back(syncer::ARC_PACKAGE); + if (chromeos::features::IsSplitSettingsSyncEnabled()) { + datatypes.push_back(syncer::OS_PREFERENCES); + datatypes.push_back(syncer::OS_PRIORITY_PREFERENCES); + } datatypes.push_back(syncer::PRINTERS); if (base::FeatureList::IsEnabled(switches::kSyncWifiConfigurations)) { datatypes.push_back(syncer::WIFI_CONFIGURATIONS);
diff --git a/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc b/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc index 30e9088..95497c1 100644 --- a/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc
@@ -13,7 +13,7 @@ #include "components/sync/engine/sync_engine_switches.h" #include "components/sync/nigori/cryptographer.h" #include "content/public/test/test_launcher.h" -#include "crypto/sha2.h" +#include "crypto/ec_private_key.h" #include "testing/gmock/include/gmock/gmock.h" namespace { @@ -38,33 +38,40 @@ using syncer::PassphraseType; using syncer::ProtoPassphraseInt32ToEnum; using syncer::SyncService; +using testing::ElementsAre; using testing::SizeIs; -class DatatypeCommitCountingFakeServerObserver : public FakeServer::Observer { +// Intercepts all bookmark entity names as committed to the FakeServer. +class CommittedBookmarkEntityNameObserver : public FakeServer::Observer { public: - explicit DatatypeCommitCountingFakeServerObserver(FakeServer* fake_server) + explicit CommittedBookmarkEntityNameObserver(FakeServer* fake_server) : fake_server_(fake_server) { fake_server->AddObserver(this); } - void OnCommit(const std::string& committer_id, - ModelTypeSet committed_model_types) override { - for (ModelType type : committed_model_types) { - ++datatype_commit_counts_[type]; - } - } - - int GetCommitCountForDatatype(ModelType type) { - return datatype_commit_counts_[type]; - } - - ~DatatypeCommitCountingFakeServerObserver() override { + ~CommittedBookmarkEntityNameObserver() override { fake_server_->RemoveObserver(this); } + void OnCommit(const std::string& committer_id, + ModelTypeSet committed_model_types) override { + sync_pb::ClientToServerMessage message; + fake_server_->GetLastCommitMessage(&message); + for (const sync_pb::SyncEntity& entity : message.commit().entries()) { + if (syncer::GetModelTypeFromSpecifics(entity.specifics()) == + syncer::BOOKMARKS) { + committed_names_.insert(entity.name()); + } + } + } + + const std::set<std::string> GetCommittedEntityNames() const { + return committed_names_; + } + private: - FakeServer* fake_server_; - std::map<syncer::ModelType, int> datatype_commit_counts_; + FakeServer* const fake_server_; + std::set<std::string> committed_names_; }; // These tests use a gray-box testing approach to verify that the data committed @@ -266,7 +273,7 @@ } IN_PROC_BROWSER_TEST_P(SingleClientCustomPassphraseSyncTestWithUssTests, - ShouldExposeExperimentalAuthenticationId) { + ShouldExposeExperimentalAuthenticationKey) { const std::vector<std::string>& keystore_keys = GetFakeServer()->GetKeystoreKeys(); ASSERT_THAT(keystore_keys, SizeIs(1)); @@ -277,27 +284,38 @@ SetupSyncNoWaitingForCompletion(); ASSERT_TRUE(WaitForPassphraseRequiredState(/*desired_state=*/true)); - // WARNING: Do *NOT* change these values since the authentication ID should be - // stable across different browser versions. + // WARNING: Do *NOT* change these values since the authentication key should + // be stable across different browser versions. // Default birthday determined by LoopbackServer. const std::string kDefaultBirthday = "0"; const std::string kSeparator("|"); std::string base64_encoded_keystore_key; base::Base64Encode(keystore_keys.back(), &base64_encoded_keystore_key); - const std::string authentication_id_before_hashing = + const std::string expected_authentication_secret = std::string("gaia_id_for_user_gmail.com") + kSeparator + kDefaultBirthday + kSeparator + base64_encoded_keystore_key; - EXPECT_EQ(GetSyncService()->GetExperimentalAuthenticationId(), - crypto::SHA256HashString(authentication_id_before_hashing)); + EXPECT_EQ(GetSyncService()->GetExperimentalAuthenticationSecretForTest(), + expected_authentication_secret); + std::unique_ptr<crypto::ECPrivateKey> actual_key_1 = + GetSyncService()->GetExperimentalAuthenticationKey(); + ASSERT_TRUE(actual_key_1); + std::vector<uint8_t> actual_private_key_1; + EXPECT_TRUE(actual_key_1->ExportPrivateKey(&actual_private_key_1)); - // Entering the passphrase should not influence the authentication ID. + // Entering the passphrase should not influence the authentication key. ASSERT_TRUE( GetSyncService()->GetUserSettings()->SetDecryptionPassphrase("hunter2")); ASSERT_TRUE(WaitForPassphraseRequiredState(/*desired_state=*/false)); - EXPECT_EQ(GetSyncService()->GetExperimentalAuthenticationId(), - crypto::SHA256HashString(authentication_id_before_hashing)); + EXPECT_EQ(GetSyncService()->GetExperimentalAuthenticationSecretForTest(), + expected_authentication_secret); + std::unique_ptr<crypto::ECPrivateKey> actual_key_2 = + GetSyncService()->GetExperimentalAuthenticationKey(); + ASSERT_TRUE(actual_key_2); + std::vector<uint8_t> actual_private_key_2; + EXPECT_TRUE(actual_key_2->ExportPrivateKey(&actual_private_key_2)); + EXPECT_EQ(actual_private_key_1, actual_private_key_2); } INSTANTIATE_TEST_SUITE_P(USS, @@ -387,12 +405,15 @@ IN_PROC_BROWSER_TEST_P(SingleClientCustomPassphraseDoNotUseScryptSyncTest, DoesNotLeakUnencryptedData) { SetEncryptionPassphraseForClient(/*index=*/0, "hunter2"); - DatatypeCommitCountingFakeServerObserver observer(GetFakeServer()); - ASSERT_TRUE(SetupSync()); + ASSERT_TRUE(SetupClients()); + // Create local bookmarks before sync is enabled. ASSERT_TRUE(AddURL(/*profile=*/0, "Should be encrypted", GURL("https://google.com/encrypted"))); + CommittedBookmarkEntityNameObserver observer(GetFakeServer()); + ASSERT_TRUE(SetupSync()); + ASSERT_TRUE(WaitForNigori(PassphraseType::kCustomPassphrase)); // If WaitForEncryptedServerBookmarks() succeeds, that means that a // cryptographer initialized with only the key params was able to decrypt the @@ -404,9 +425,7 @@ EXPECT_TRUE(WaitForEncryptedServerBookmarks( {{"Should be encrypted", GURL("https://google.com/encrypted")}}, {KeyDerivationParams::CreateForPbkdf2(), "hunter2"})); - // Initial bookmarks sync would actually create and commit the permanent - // bookmark folders. Therefore, should be 2 commits by now. - EXPECT_EQ(observer.GetCommitCountForDatatype(syncer::BOOKMARKS), 2); + EXPECT_THAT(observer.GetCommittedEntityNames(), ElementsAre("encrypted")); } IN_PROC_BROWSER_TEST_P(SingleClientCustomPassphraseDoNotUseScryptSyncTest,
diff --git a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc index d9aec80..ba7480f2 100644 --- a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
@@ -17,7 +17,7 @@ #include "components/sync/driver/sync_driver_switches.h" #include "components/sync/nigori/cryptographer_impl.h" #include "components/sync/nigori/nigori.h" -#include "crypto/sha2.h" +#include "crypto/ec_private_key.h" #include "testing/gmock/include/gmock/gmock.h" namespace { @@ -199,7 +199,7 @@ } IN_PROC_BROWSER_TEST_P(SingleClientNigoriSyncTestWithUssTests, - ShouldExposeExperimentalAuthenticationId) { + ShouldExposeExperimentalAuthenticationKey) { const std::vector<std::string>& keystore_keys = GetFakeServer()->GetKeystoreKeys(); ASSERT_THAT(keystore_keys, SizeIs(1)); @@ -212,8 +212,8 @@ ASSERT_TRUE(SetupSync()); - // WARNING: Do *NOT* change these values since the authentication ID should be - // stable across different browser versions. + // WARNING: Do *NOT* change these values since the authentication key should + // be stable across different browser versions. // Default birthday determined by LoopbackServer. const std::string kDefaultBirthday = "0"; @@ -224,8 +224,10 @@ std::string("gaia_id_for_user_gmail.com") + kSeparator + kDefaultBirthday + kSeparator + base64_encoded_keystore_key; - EXPECT_EQ(GetSyncService(/*index=*/0)->GetExperimentalAuthenticationId(), - crypto::SHA256HashString(authentication_id_before_hashing)); + EXPECT_EQ( + GetSyncService(/*index=*/0)->GetExperimentalAuthenticationSecretForTest(), + authentication_id_before_hashing); + EXPECT_TRUE(GetSyncService(/*index=*/0)->GetExperimentalAuthenticationKey()); } INSTANTIATE_TEST_SUITE_P(USS,
diff --git a/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc b/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc index 6bc96cde6..37abb92 100644 --- a/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc +++ b/chrome/browser/sync_file_system/local/local_file_sync_service_unittest.cc
@@ -12,6 +12,7 @@ #include "base/run_loop.h" #include "base/stl_util.h" #include "base/task/post_task.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/threading/thread.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h"
diff --git a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc index f6bb08f..9d430a9 100644 --- a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc +++ b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc
@@ -14,6 +14,7 @@ #include "base/stl_util.h" #include "base/synchronization/waitable_event.h" #include "base/task/post_task.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" #include "chrome/browser/sync_file_system/local/local_file_sync_context.h"
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index eca7d00..e0ddff6 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -3694,8 +3694,6 @@ "app_list/search/arc_app_result.h", "app_list/search/crostini_app_result.cc", "app_list/search/crostini_app_result.h", - "app_list/search/internal_app_result.cc", - "app_list/search/internal_app_result.h", "ash/launcher/app_window_base.cc", "ash/launcher/app_window_base.h", "ash/launcher/arc_app_shelf_id.cc",
diff --git a/chrome/browser/ui/app_list/internal_app/internal_app_metadata.cc b/chrome/browser/ui/app_list/internal_app/internal_app_metadata.cc index 728b4164..01c3dcad4 100644 --- a/chrome/browser/ui/app_list/internal_app/internal_app_metadata.cc +++ b/chrome/browser/ui/app_list/internal_app/internal_app_metadata.cc
@@ -314,12 +314,6 @@ return has_recommendation; } -apps::BuiltInAppName GetInternalAppNameByAppId(const std::string& app_id) { - const auto* app = FindInternalApp(app_id); - DCHECK(app); - return app->internal_app_name; -} - size_t GetNumberOfInternalAppsShowInLauncherForTest(std::string* apps_name, const Profile* profile) { size_t num_of_internal_apps_show_in_launcher = 0u;
diff --git a/chrome/browser/ui/app_list/internal_app/internal_app_metadata.h b/chrome/browser/ui/app_list/internal_app/internal_app_metadata.h index 7f49f16b..3a2a33b 100644 --- a/chrome/browser/ui/app_list/internal_app/internal_app_metadata.h +++ b/chrome/browser/ui/app_list/internal_app/internal_app_metadata.h
@@ -93,9 +93,6 @@ GURL* url, sync_sessions::OpenTabsUIDelegate* test_delegate); -// Returns the BuiltInAppName of an internal app. -apps::BuiltInAppName GetInternalAppNameByAppId(const std::string& app_id); - // Returns the number of internal apps which can show in launcher. // If |apps_name| is not nullptr, it will be the concatenated string of these // internal apps' name.
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc index 06e30e5..5a895464 100644 --- a/chrome/browser/ui/app_list/search/app_search_provider.cc +++ b/chrome/browser/ui/app_list/search/app_search_provider.cc
@@ -57,7 +57,6 @@ #include "chrome/browser/ui/app_list/search/arc_app_result.h" #include "chrome/browser/ui/app_list/search/crostini_app_result.h" #include "chrome/browser/ui/app_list/search/extension_app_result.h" -#include "chrome/browser/ui/app_list/search/internal_app_result.h" #include "chrome/browser/ui/app_list/search/search_result_ranker/app_search_result_ranker.h" #include "chrome/browser/ui/app_list/search/search_result_ranker/ranking_item_util.h" #include "chrome/browser/ui/app_list/search/search_utils/fuzzy_tokenized_string_match.h" @@ -285,6 +284,17 @@ if (proxy) { Observe(&proxy->AppRegistryCache()); } + + sync_sessions::SessionSyncService* service = + SessionSyncServiceFactory::GetInstance()->GetForProfile(profile); + if (!service) + return; + // base::Unretained() is safe below because the subscription itself is a + // class member field and handles destruction well. + foreign_session_updated_subscription_ = + service->SubscribeToForeignSessionsChanged(base::BindRepeating( + &AppSearchProvider::RefreshAppsAndUpdateResultsDeferred, + base::Unretained(owner))); } ~AppServiceDataSource() override = default; @@ -298,9 +308,23 @@ } proxy->AppRegistryCache().ForEachApp([this, apps_vector]( const apps::AppUpdate& update) { - if ((update.Readiness() == apps::mojom::Readiness::kUninstalledByUser) || - (update.ShowInSearch() != apps::mojom::OptionalBool::kTrue)) { + if (update.Readiness() == apps::mojom::Readiness::kUninstalledByUser) return; + + if (!std::strcmp(update.AppId().c_str(), + ash::kInternalAppIdContinueReading)) { + // Continue reading depends on the tab of session from other devices. + // This checking can be moved to built_in_app, however, it's more + // reasonable to leave it in search result code, because the status of + // continue reading is not changed. It depends on the session sync + // result to decide whether it should be shown in the recommended + // result, so leave the code in the search result part. + sync_sessions::SessionSyncService* service = + SessionSyncServiceFactory::GetInstance()->GetForProfile(profile()); + if (!service || (!service->GetOpenTabsUIDelegate() && + !owner()->open_tabs_ui_delegate_for_testing())) { + return; + } } // TODO(crbug.com/826982): add the "can load in incognito" concept to @@ -368,6 +392,9 @@ // comments for the apps::IconCache::GarbageCollectionPolicy enum. apps::IconCache icon_cache_; + std::unique_ptr<base::CallbackList<void()>::Subscription> + foreign_session_updated_subscription_; + DISALLOW_COPY_AND_ASSIGN(AppServiceDataSource); }; @@ -661,83 +688,6 @@ DISALLOW_COPY_AND_ASSIGN(ArcDataSource); }; -class InternalDataSource : public AppSearchProvider::DataSource { - public: - InternalDataSource(Profile* profile, - AppSearchProvider* owner, - bool just_suggestion_chips) - : AppSearchProvider::DataSource(profile, owner), - just_suggestion_chips_(just_suggestion_chips) { - sync_sessions::SessionSyncService* service = - SessionSyncServiceFactory::GetInstance()->GetForProfile(profile); - if (!service) - return; - // base::Unretained() is safe below because the subscription itself is a - // class member field and handles destruction well. - foreign_session_updated_subscription_ = - service->SubscribeToForeignSessionsChanged(base::BindRepeating( - &AppSearchProvider::RefreshAppsAndUpdateResultsDeferred, - base::Unretained(owner))); - } - - ~InternalDataSource() override = default; - - // AppSearchProvider::DataSource overrides: - void AddApps(AppSearchProvider::Apps* apps) override { - for (const auto& internal_app : GetInternalAppList(profile())) { - if (just_suggestion_chips_ && !IsSuggestionChip(internal_app.app_id)) { - continue; - } - - if (!std::strcmp(internal_app.app_id, - ash::kInternalAppIdContinueReading)) { - sync_sessions::SessionSyncService* service = - SessionSyncServiceFactory::GetInstance()->GetForProfile(profile()); - if (!service || (!service->GetOpenTabsUIDelegate() && - !owner()->open_tabs_ui_delegate_for_testing())) { - continue; - } - } - - apps->emplace_back(std::make_unique<AppSearchProvider::App>( - this, internal_app.app_id, - l10n_util::GetStringUTF8(internal_app.name_string_resource_id), - base::Time() /* last_launch_time */, base::Time() /* install_time */, - true /* installed_internally */)); - apps->back()->set_recommendable(internal_app.recommendable); - apps->back()->set_searchable(internal_app.searchable); - if (internal_app.searchable_string_resource_id != 0) { - apps->back()->AddSearchableText(l10n_util::GetStringUTF16( - internal_app.searchable_string_resource_id)); - } - } - } - - std::unique_ptr<AppResult> CreateResult( - const std::string& app_id, - AppListControllerDelegate* list_controller, - bool is_recommended) override { - return std::make_unique<InternalAppResult>(profile(), app_id, - list_controller, is_recommended); - } - - private: - // Whether InternalDataSource provides just internal apps that should be - // shown as suggestion chips. If true, other internal apps are provided by - // AppServiceDataSource. - // - // TODO(crbug.com/826982): move the "foreign session updated subscription" - // into the App Service? Or if, in terms of UI, "continue reading" is exposed - // only in the app list search UI, it might make more sense to leave it in - // this code. See also built_in_chromeos_apps.cc. - bool just_suggestion_chips_; - - std::unique_ptr<base::CallbackList<void()>::Subscription> - foreign_session_updated_subscription_; - - DISALLOW_COPY_AND_ASSIGN(InternalDataSource); -}; - class CrostiniDataSource : public IconCachedDataSource, public crostini::CrostiniRegistryService::Observer { public: @@ -849,8 +799,6 @@ std::make_unique<CrostiniDataSource>(profile, this)); } } - data_sources_.emplace_back( - std::make_unique<InternalDataSource>(profile, this, app_service_enabled)); } AppSearchProvider::~AppSearchProvider() {}
diff --git a/chrome/browser/ui/app_list/search/app_service_app_result.cc b/chrome/browser/ui/app_list/search/app_service_app_result.cc index 9d36e2c..7bed7f60 100644 --- a/chrome/browser/ui/app_list/search/app_service_app_result.cc +++ b/chrome/browser/ui/app_list/search/app_service_app_result.cc
@@ -6,13 +6,18 @@ #include "ash/public/cpp/app_list/app_list_config.h" #include "ash/public/cpp/app_list/app_list_types.h" +#include "ash/public/cpp/app_list/internal_app_id_constants.h" #include "base/bind.h" #include "chrome/browser/apps/app_service/app_service_metrics.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" +#include "chrome/browser/chromeos/release_notes/release_notes_storage.h" +#include "chrome/browser/favicon/large_icon_service_factory.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_list_client_impl.h" #include "chrome/browser/ui/app_list/app_service/app_service_app_item.h" -#include "chrome/browser/ui/app_list/search/internal_app_result.h" +#include "chrome/browser/ui/app_list/internal_app/internal_app_metadata.h" +#include "components/favicon/core/large_icon_service.h" #include "extensions/common/extension.h" namespace app_list { @@ -65,6 +70,9 @@ set_id(app_id); break; } + + if (IsSuggestionChip(id())) + HandleSuggestionChip(profile); } AppServiceAppResult::~AppServiceAppResult() = default; @@ -89,6 +97,14 @@ context_menu_->GetMenuModel(std::move(callback)); } +void AppServiceAppResult::OnVisibilityChanged(bool visibility) { + if (id() == ash::kReleaseNotesAppId && visibility) { + DCHECK(chromeos::ReleaseNotesStorage(profile()).ShouldShowSuggestionChip()); + chromeos::ReleaseNotesStorage(profile()) + .DecreaseTimesLeftToShowSuggestionChip(); + } +} + ash::SearchResultType AppServiceAppResult::GetSearchResultType() const { switch (app_type_) { case apps::mojom::AppType::kArc: @@ -116,6 +132,15 @@ void AppServiceAppResult::Launch(int event_flags, apps::mojom::LaunchSource launch_source) { + if (id() == ash::kInternalAppIdContinueReading && + url_for_continuous_reading_.is_valid()) { + apps::RecordAppLaunch(id(), launch_source); + controller()->OpenURL(profile(), url_for_continuous_reading_, + ui::PAGE_TRANSITION_GENERATED, + ui::DispositionFromEventFlags(event_flags)); + return; + } + apps::AppServiceProxy* proxy = apps::AppServiceProxyFactory::GetForProfile(profile()); if (proxy) { @@ -159,4 +184,105 @@ } } +void AppServiceAppResult::HandleSuggestionChip(Profile* profile) { + if (id() == ash::kInternalAppIdContinueReading) { + large_icon_service_ = + LargeIconServiceFactory::GetForBrowserContext(profile); + UpdateContinueReadingFavicon(/*continue_to_google_server=*/true); + } + + // Set these values to make sure that the chip will show up + // in the proper position. + SetDisplayIndex(ash::SearchResultDisplayIndex::kFirstIndex); + SetDisplayLocation( + ash::SearchResultDisplayLocation::kSuggestionChipContainer); + + if (id() == ash::kReleaseNotesAppId) { + SetNotifyVisibilityChange(true); + // Make sure that if both Continue Reading and Release Notes are available, + // Release Notes shows up first in the suggestion chip container. + SetPositionPriority(1.0f); + } +} + +void AppServiceAppResult::UpdateContinueReadingFavicon( + bool continue_to_google_server) { + base::string16 title; + GURL url; + if (app_list::HasRecommendableForeignTab(profile(), &title, &url, + /*test_delegate=*/nullptr)) { + url_for_continuous_reading_ = url; + + // Foreign tab could be updated since the title was set the last time. + // Update the title every time. + // TODO(wutao): If |title| is empty, use default title string. + if (!title.empty()) + SetTitle(title); + + // Desired size of the icon. If not available, a smaller one will be used. + constexpr int min_source_size_in_pixel = 16; + constexpr int desired_size_in_pixel = 32; + large_icon_service_->GetLargeIconImageOrFallbackStyleForPageUrl( + url_for_continuous_reading_, min_source_size_in_pixel, + desired_size_in_pixel, + base::BindRepeating(&AppServiceAppResult::OnGetFaviconFromCacheFinished, + weak_ptr_factory_.GetWeakPtr(), + continue_to_google_server), + &task_tracker_); + } +} + +void AppServiceAppResult::OnGetFaviconFromCacheFinished( + bool continue_to_google_server, + const favicon_base::LargeIconImageResult& image_result) { + if (!image_result.image.IsEmpty()) { + // Continue Reading app will only be shown in suggestion chip. + SetChipIcon(*image_result.image.ToImageSkia()); + // Update the time when the icon was last requested to postpone the + // automatic eviction of the favicon from the favicon database. + large_icon_service_->TouchIconFromGoogleServer(image_result.icon_url); + return; + } + + if (!continue_to_google_server) + return; + + // Try to fetch the favicon from a Google favicon server. + net::NetworkTrafficAnnotationTag traffic_annotation = + net::DefineNetworkTrafficAnnotation("app_suggestion_get_favicon", R"( + semantics { + sender: "App Suggestion" + description: + "Sends a request to a Google server to retrieve the favicon bitmap " + "for an article suggestion on the Launcher (URLs are public and " + "provided by Google)." + trigger: + "A request can be sent if Chrome does not have a favicon for a " + "particular page." + data: "Page URL and desired icon size." + destination: GOOGLE_OWNED_SERVICE + } + policy { + cookies_allowed: NO + setting: "This feature cannot be disabled by settings." + policy_exception_justification: "Not implemented." + })"); + large_icon_service_ + ->GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( + url_for_continuous_reading_, + /*may_page_url_be_private=*/false, + /*should_trim_page_url_path=*/false, traffic_annotation, + base::BindRepeating( + &AppServiceAppResult::OnGetFaviconFromGoogleServerFinished, + weak_ptr_factory_.GetWeakPtr())); +} + +void AppServiceAppResult::OnGetFaviconFromGoogleServerFinished( + favicon_base::GoogleFaviconServerRequestStatus status) { + if (status != favicon_base::GoogleFaviconServerRequestStatus::SUCCESS) + return; + + UpdateContinueReadingFavicon(/*continue_to_google_server=*/false); +} + } // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/app_service_app_result.h b/chrome/browser/ui/app_list/search/app_service_app_result.h index 6fef73ef..d84f1e2a 100644 --- a/chrome/browser/ui/app_list/search/app_service_app_result.h +++ b/chrome/browser/ui/app_list/search/app_service_app_result.h
@@ -9,13 +9,24 @@ #include "ash/public/cpp/app_list/app_list_metrics.h" #include "base/memory/weak_ptr.h" +#include "base/task/cancelable_task_tracker.h" #include "chrome/browser/ui/app_list/search/app_result.h" #include "chrome/services/app_service/public/cpp/icon_cache.h" #include "chrome/services/app_service/public/mojom/types.mojom.h" +#include "components/favicon_base/favicon_types.h" +#include "url/gurl.h" class AppListControllerDelegate; class Profile; +namespace favicon { +class LargeIconService; +} // namespace favicon + +namespace favicon_base { +struct LargeIconImageResult; +} // namespace favicon_base + namespace app_list { class AppServiceAppResult : public AppResult { @@ -31,6 +42,7 @@ // ChromeSearchResult overrides: void Open(int event_flags) override; void GetContextMenuModel(GetMenuModelCallback callback) override; + void OnVisibilityChanged(bool visibility) override; ash::SearchResultType GetSearchResultType() const override; AppContextMenu* GetAppContextMenu() override; @@ -42,6 +54,24 @@ void CallLoadIcon(bool chip, bool allow_placeholder_icon); void OnLoadIcon(bool chip, apps::mojom::IconValuePtr icon_value); + void HandleSuggestionChip(Profile* profile); + + // Get large icon image from servers and update icon for continue reading. + // + // Continue reading is a special app, which uses LargeIconService to load + // icon. Since it is the only app which uses the LargeIconService, leave it in + // search result code, not integrated to the AppService icon cache. + // + // If there is no cache hit on LargeIconService and + // |continue_to_google_server| is true, will try to download the icon from + // Google favicon server. + void UpdateContinueReadingFavicon(bool continue_to_google_server); + void OnGetFaviconFromCacheFinished( + bool continue_to_google_server, + const favicon_base::LargeIconImageResult& image); + void OnGetFaviconFromGoogleServerFinished( + favicon_base::GoogleFaviconServerRequestStatus status); + apps::IconLoader* const icon_loader_; // When non-nullptr, signifies that this object is using the most recent icon @@ -55,6 +85,15 @@ std::unique_ptr<AppContextMenu> context_menu_; + base::CancelableTaskTracker task_tracker_; + + // The url of recommendable foreign tab, which is invalid if there is no + // recommendation. + GURL url_for_continuous_reading_; + + // Used to fetch the favicon of the website |url_for_continuous_reading_|. + favicon::LargeIconService* large_icon_service_ = nullptr; + base::WeakPtrFactory<AppServiceAppResult> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(AppServiceAppResult);
diff --git a/chrome/browser/ui/app_list/search/internal_app_result.cc b/chrome/browser/ui/app_list/search/internal_app_result.cc deleted file mode 100644 index 1c67aed..0000000 --- a/chrome/browser/ui/app_list/search/internal_app_result.cc +++ /dev/null
@@ -1,202 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/app_list/search/internal_app_result.h" - -#include <utility> - -#include "ash/public/cpp/app_list/app_list_config.h" -#include "ash/public/cpp/app_list/internal_app_id_constants.h" -#include "base/bind.h" -#include "base/logging.h" -#include "base/metrics/histogram_macros.h" -#include "chrome/browser/apps/app_service/app_service_metrics.h" -#include "chrome/browser/chromeos/release_notes/release_notes_storage.h" -#include "chrome/browser/favicon/large_icon_service_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/app_list/app_list_controller_delegate.h" -#include "chrome/browser/ui/app_list/internal_app/internal_app_context_menu.h" -#include "chrome/browser/ui/app_list/internal_app/internal_app_metadata.h" -#include "components/favicon/core/large_icon_service.h" -#include "components/favicon_base/fallback_icon_style.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "ui/base/resource/resource_bundle.h" -#include "ui/gfx/image/image_skia_operations.h" - -namespace app_list { - -InternalAppResult::InternalAppResult(Profile* profile, - const std::string& app_id, - AppListControllerDelegate* controller, - bool is_recommendation) - : AppResult(profile, app_id, controller, is_recommendation) { - set_id(app_id); - SetResultType(ResultType::kInternalApp); - SetIcon(GetIconForResourceId( - GetIconResourceIdByAppId(app_id), - ash::AppListConfig::instance().search_tile_icon_dimension())); - if (display_type() == ash::SearchResultDisplayType::kRecommendation) { - SetChipIcon(GetIconForResourceId( - GetIconResourceIdByAppId(app_id), - ash::AppListConfig::instance().suggestion_chip_icon_dimension())); - } - - if (id() == ash::kInternalAppIdContinueReading) { - large_icon_service_ = - LargeIconServiceFactory::GetForBrowserContext(profile); - UpdateContinueReadingFavicon(/*continue_to_google_server=*/true); - } - - if (IsSuggestionChip(id())) { - // Set these values to make sure that the chip will show up - // in the proper position. - SetDisplayIndex(ash::SearchResultDisplayIndex::kFirstIndex); - SetDisplayLocation( - ash::SearchResultDisplayLocation::kSuggestionChipContainer); - } - - if (id() == ash::kReleaseNotesAppId) { - SetNotifyVisibilityChange(true); - // Make sure that if both Continue Reading and Release Notes are available, - // Release Notes shows up first in the suggestion chip container. - SetPositionPriority(1.0f); - } - - apps::RecordBuiltInAppSearchResult(app_id); -} - -InternalAppResult::~InternalAppResult() = default; - -void InternalAppResult::ExecuteLaunchCommand(int event_flags) { - Open(event_flags); -} - -void InternalAppResult::Open(int event_flags) { - apps::RecordAppLaunch(id(), apps::mojom::LaunchSource::kFromAppListQuery); - - if (id() == ash::kInternalAppIdContinueReading && - url_for_continuous_reading_.is_valid()) { - controller()->OpenURL(profile(), url_for_continuous_reading_, - ui::PAGE_TRANSITION_GENERATED, - ui::DispositionFromEventFlags(event_flags)); - return; - } - - OpenInternalApp(id(), profile(), event_flags); -} - -void InternalAppResult::UpdateContinueReadingFavicon( - bool continue_to_google_server) { - base::string16 title; - GURL url; - if (HasRecommendableForeignTab(profile(), &title, &url, - /*test_delegate=*/nullptr)) { - url_for_continuous_reading_ = url; - - // Foreign tab could be updated since the title was set the last time. - // Update the title every time. - // TODO(wutao): If |title| is empty, use default title string. - if (!title.empty()) - SetTitle(title); - - // Desired size of the icon. If not available, a smaller one will be used. - constexpr int min_source_size_in_pixel = 16; - constexpr int desired_size_in_pixel = 32; - large_icon_service_->GetLargeIconImageOrFallbackStyleForPageUrl( - url_for_continuous_reading_, min_source_size_in_pixel, - desired_size_in_pixel, - base::BindRepeating(&InternalAppResult::OnGetFaviconFromCacheFinished, - weak_factory_.GetWeakPtr(), - continue_to_google_server), - &task_tracker_); - } -} - -void InternalAppResult::OnGetFaviconFromCacheFinished( - bool continue_to_google_server, - const favicon_base::LargeIconImageResult& image_result) { - if (!image_result.image.IsEmpty()) { - // Continue Reading app will only be shown in suggestion chip. - SetChipIcon(*image_result.image.ToImageSkia()); - // Update the time when the icon was last requested to postpone the - // automatic eviction of the favicon from the favicon database. - large_icon_service_->TouchIconFromGoogleServer(image_result.icon_url); - return; - } - - if (!continue_to_google_server) - return; - - // Try to fetch the favicon from a Google favicon server. - net::NetworkTrafficAnnotationTag traffic_annotation = - net::DefineNetworkTrafficAnnotation("app_suggestion_get_favicon", R"( - semantics { - sender: "App Suggestion" - description: - "Sends a request to a Google server to retrieve the favicon bitmap " - "for an article suggestion on the Launcher (URLs are public and " - "provided by Google)." - trigger: - "A request can be sent if Chrome does not have a favicon for a " - "particular page." - data: "Page URL and desired icon size." - destination: GOOGLE_OWNED_SERVICE - } - policy { - cookies_allowed: NO - setting: "This feature cannot be disabled by settings." - policy_exception_justification: "Not implemented." - })"); - large_icon_service_ - ->GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( - url_for_continuous_reading_, - /*may_page_url_be_private=*/false, - /*should_trim_page_url_path=*/false, traffic_annotation, - base::BindRepeating( - &InternalAppResult::OnGetFaviconFromGoogleServerFinished, - weak_factory_.GetWeakPtr())); -} - -void InternalAppResult::OnGetFaviconFromGoogleServerFinished( - favicon_base::GoogleFaviconServerRequestStatus status) { - if (status != favicon_base::GoogleFaviconServerRequestStatus::SUCCESS) - return; - - UpdateContinueReadingFavicon(/*continue_to_google_server=*/false); -} - -void InternalAppResult::GetContextMenuModel(GetMenuModelCallback callback) { - const auto* internal_app = FindInternalApp(id()); - DCHECK(internal_app); - if (!internal_app->show_in_launcher) { - std::move(callback).Run(nullptr); - return; - } - - if (!context_menu_) { - context_menu_ = - std::make_unique<InternalAppContextMenu>(profile(), id(), controller()); - } - context_menu_->GetMenuModel(std::move(callback)); -} - -void InternalAppResult::OnVisibilityChanged(bool visibility) { - DCHECK_EQ(id(), ash::kReleaseNotesAppId); - - if (visibility) { - DCHECK(chromeos::ReleaseNotesStorage(profile()).ShouldShowSuggestionChip()); - chromeos::ReleaseNotesStorage(profile()) - .DecreaseTimesLeftToShowSuggestionChip(); - } -} - -ash::SearchResultType InternalAppResult::GetSearchResultType() const { - return ash::INTERNAL_APP; -} - -AppContextMenu* InternalAppResult::GetAppContextMenu() { - return context_menu_.get(); -} - -} // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/internal_app_result.h b/chrome/browser/ui/app_list/search/internal_app_result.h deleted file mode 100644 index 8ce34160..0000000 --- a/chrome/browser/ui/app_list/search/internal_app_result.h +++ /dev/null
@@ -1,87 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_INTERNAL_APP_RESULT_H_ -#define CHROME_BROWSER_UI_APP_LIST_SEARCH_INTERNAL_APP_RESULT_H_ - -#include <memory> -#include <string> - -#include "ash/public/cpp/app_list/app_list_metrics.h" -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "base/task/cancelable_task_tracker.h" -#include "chrome/browser/ui/app_list/search/app_result.h" -#include "components/favicon_base/favicon_types.h" -#include "url/gurl.h" - -class AppListControllerDelegate; -class Profile; - -namespace favicon { -class LargeIconService; -} // namespace favicon - -namespace favicon_base { -struct LargeIconImageResult; -} // namespace favicon_base - -namespace app_list { - -class AppContextMenu; - -class InternalAppResult : public AppResult { - public: - static void RecordShowHistogram(const std::string& app_id); - static void RecordOpenHistogram(const std::string& app_id); - - InternalAppResult(Profile* profile, - const std::string& app_id, - AppListControllerDelegate* controller, - bool is_recommendation); - ~InternalAppResult() override; - - // ChromeSearchResult overrides: - void Open(int event_flags) override; - void GetContextMenuModel(GetMenuModelCallback callback) override; - void OnVisibilityChanged(bool visibility) override; - ash::SearchResultType GetSearchResultType() const override; - - // AppContextMenuDelegate overrides: - void ExecuteLaunchCommand(int event_flags) override; - - private: - // ChromeSearchResult overrides: - AppContextMenu* GetAppContextMenu() override; - - // Get large icon image from servers and update icon for continue reading. - // If there is no cache hit on LargeIconService and - // |continue_to_google_server| is true, will try to download the icon from - // Google favicon server. - void UpdateContinueReadingFavicon(bool continue_to_google_server); - void OnGetFaviconFromCacheFinished( - bool continue_to_google_server, - const favicon_base::LargeIconImageResult& image); - void OnGetFaviconFromGoogleServerFinished( - favicon_base::GoogleFaviconServerRequestStatus status); - - std::unique_ptr<AppContextMenu> context_menu_; - - base::CancelableTaskTracker task_tracker_; - - // The url of recommendable foreign tab, which is invalid if there is no - // recommendation. - GURL url_for_continuous_reading_; - - // Used to fetch the favicon of the website |url_for_continuous_reading_|. - favicon::LargeIconService* large_icon_service_ = nullptr; - - base::WeakPtrFactory<InternalAppResult> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(InternalAppResult); -}; - -} // namespace app_list - -#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_INTERNAL_APP_RESULT_H_
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc index 78646a96..cc01bf7 100644 --- a/chrome/browser/ui/chrome_pages.cc +++ b/chrome/browser/ui/chrome_pages.cc
@@ -55,6 +55,7 @@ #include "net/base/url_util.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/window_open_disposition.h" +#include "url/url_util.h" #if defined(OS_CHROMEOS) #include "chrome/browser/ui/settings_window_manager_chromeos.h"
diff --git a/chrome/browser/ui/hats/hats_service.cc b/chrome/browser/ui/hats/hats_service.cc index 2edb44b..f1b63496 100644 --- a/chrome/browser/ui/hats/hats_service.cc +++ b/chrome/browser/ui/hats/hats_service.cc
@@ -22,6 +22,7 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/version_info/version_info.h" +#include "net/base/network_change_notifier.h" namespace { // Which survey we're triggering
diff --git a/chrome/browser/ui/login/login_tab_helper.cc b/chrome/browser/ui/login/login_tab_helper.cc index c0d6c23..2d18d03 100644 --- a/chrome/browser/ui/login/login_tab_helper.cc +++ b/chrome/browser/ui/login/login_tab_helper.cc
@@ -17,6 +17,7 @@ #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "net/http/http_status_code.h" +#include "services/network/public/mojom/network_context.mojom.h" LoginTabHelper::~LoginTabHelper() {}
diff --git a/chrome/browser/ui/permission_bubble/mock_permission_prompt.cc b/chrome/browser/ui/permission_bubble/mock_permission_prompt.cc index 7a3b658..a88004f 100644 --- a/chrome/browser/ui/permission_bubble/mock_permission_prompt.cc +++ b/chrome/browser/ui/permission_bubble/mock_permission_prompt.cc
@@ -27,11 +27,12 @@ return nullptr; } -bool MockPermissionPrompt::ShouldDestroyOnTabSwitching() { +PermissionPrompt::TabSwitchingBehavior +MockPermissionPrompt::GetTabSwitchingBehavior() { #if defined(OS_ANDROID) - return false; + return TabSwitchingBehavior::kKeepPromptAlive; #else - return true; + return TabSwitchingBehavior::kDestroyPromptButKeepRequestPending; #endif }
diff --git a/chrome/browser/ui/permission_bubble/mock_permission_prompt.h b/chrome/browser/ui/permission_bubble/mock_permission_prompt.h index c3fd7ab..21c7409 100644 --- a/chrome/browser/ui/permission_bubble/mock_permission_prompt.h +++ b/chrome/browser/ui/permission_bubble/mock_permission_prompt.h
@@ -20,7 +20,7 @@ // PermissionPrompt: void UpdateAnchorPosition() override; gfx::NativeWindow GetNativeWindow() override; - bool ShouldDestroyOnTabSwitching() override; + TabSwitchingBehavior GetTabSwitchingBehavior() override; bool IsVisible();
diff --git a/chrome/browser/ui/permission_bubble/permission_prompt.h b/chrome/browser/ui/permission_bubble/permission_prompt.h index 57b9f0c..96c0c5f7 100644 --- a/chrome/browser/ui/permission_bubble/permission_prompt.h +++ b/chrome/browser/ui/permission_bubble/permission_prompt.h
@@ -31,6 +31,20 @@ bool is_origin; }; + // Permission prompt behavior on tab switching. + enum TabSwitchingBehavior { + // The prompt should be kept as-is on tab switching (usually because it's + // part of the containing tab so it will be hidden automatically when + // switching from said tab) + kKeepPromptAlive, + // Destroy the prompt but keep the permission request pending. When the user + // revisits the tab, the permission prompt is re-displayed. + kDestroyPromptButKeepRequestPending, + // Destroy the prompt and treat the permission request as being resolved + // with the PermissionAction::IGNORED result. + kDestroyPromptAndIgnoreRequest, + }; + // The delegate will receive events caused by user action which need to // be persisted in the per-tab UI state. class Delegate { @@ -67,8 +81,9 @@ // TODO(hcarmona): Remove this as part of the bubble API work. virtual gfx::NativeWindow GetNativeWindow() = 0; - // Whether the prompt should be destroyed on tab switching - virtual bool ShouldDestroyOnTabSwitching() = 0; + // Get the behavior of this prompt when the user switches away from the + // associated tab. + virtual TabSwitchingBehavior GetTabSwitchingBehavior() = 0; }; #endif // CHROME_BROWSER_UI_PERMISSION_BUBBLE_PERMISSION_PROMPT_H_
diff --git a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc index 993d7481..16369b8 100644 --- a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc +++ b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/files/file_util.h" +#include "base/strings/utf_string_conversions.h" #include "chrome/browser/policy/browser_signin_policy_handler.h" #include "chrome/browser/prefs/browser_prefs.h" #include "chrome/browser/profile_resetter/profile_resetter_test_base.h"
diff --git a/chrome/browser/ui/views/crostini/crostini_installer_view.cc b/chrome/browser/ui/views/crostini/crostini_installer_view.cc index 925ca6d..ae08f052 100644 --- a/chrome/browser/ui/views/crostini/crostini_installer_view.cc +++ b/chrome/browser/ui/views/crostini/crostini_installer_view.cc
@@ -10,6 +10,7 @@ #include "ash/public/cpp/ash_typography.h" #include "base/bind.h" #include "base/metrics/histogram_functions.h" +#include "base/system/sys_info.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/crostini/crostini_installer.h" #include "chrome/browser/chromeos/crostini/crostini_installer_types.mojom.h"
diff --git a/chrome/browser/ui/views/download/download_item_view.cc b/chrome/browser/ui/views/download/download_item_view.cc index 48a5362..6394e07 100644 --- a/chrome/browser/ui/views/download/download_item_view.cc +++ b/chrome/browser/ui/views/download/download_item_view.cc
@@ -451,7 +451,8 @@ save_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); child_origin.Offset(button_size.width() + kSaveDiscardButtonPadding, 0); } - discard_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); + if (discard_button_) + discard_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); } else if (IsShowingDeepScanning()) { gfx::Point child_origin(kStartPadding + kWarningIconSize + kStartPadding, (height() - deep_scanning_label_->height()) / 2); @@ -970,9 +971,15 @@ this, model_->GetWarningConfirmButtonText()); save_button_ = AddChildView(std::move(save_button)); } - auto discard_button = views::MdTextButton::Create( - this, l10n_util::GetStringUTF16(IDS_DISCARD_DOWNLOAD)); - discard_button_ = AddChildView(std::move(discard_button)); + + if (model_->GetDangerType() != + download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED && + model_->GetDangerType() != + download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED) { + auto discard_button = views::MdTextButton::Create( + this, l10n_util::GetStringUTF16(IDS_DISCARD_DOWNLOAD)); + discard_button_ = AddChildView(std::move(discard_button)); + } base::string16 dangerous_label = model_->GetWarningText(font_list_, kTextWidth); @@ -1008,6 +1015,8 @@ case download::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: case download::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED: case download::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE: + case download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE: + case download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED: return gfx::CreateVectorIcon( vector_icons::kWarningIcon, kWarningIconSize, GetNativeTheme()->GetSystemColor( @@ -1023,8 +1032,6 @@ case download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_BLOCK: case download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_SAFE: case download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_OPENED_DANGEROUS: - case download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE: - case download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED: case download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS: case download::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT: case download::DOWNLOAD_DANGER_TYPE_USER_VALIDATED: @@ -1088,8 +1095,9 @@ } gfx::Size DownloadItemView::GetButtonSize() const { - DCHECK(discard_button_ && (mode_ == MALICIOUS_MODE || save_button_)); - gfx::Size size = discard_button_->GetPreferredSize(); + gfx::Size size; + if (discard_button_) + discard_button_->GetPreferredSize(); if (save_button_) size.SetToMax(save_button_->GetPreferredSize()); return size;
diff --git a/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc b/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc index b341e68..b02a550 100644 --- a/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc +++ b/chrome/browser/ui/views/extensions/pwa_confirmation_bubble_view.cc
@@ -35,7 +35,7 @@ // Returns an ImageView containing the app icon. std::unique_ptr<views::ImageView> CreateIconView( - const std::vector<WebApplicationInfo::IconInfo>& icons) { + const std::vector<WebApplicationIconInfo>& icons) { constexpr int kIconSize = 48; gfx::ImageSkia image( std::make_unique<WebAppInfoImageSource>(kIconSize, icons),
diff --git a/chrome/browser/ui/views/extensions/web_app_info_image_source.cc b/chrome/browser/ui/views/extensions/web_app_info_image_source.cc index f5c8666..fee9fd0 100644 --- a/chrome/browser/ui/views/extensions/web_app_info_image_source.cc +++ b/chrome/browser/ui/views/extensions/web_app_info_image_source.cc
@@ -8,7 +8,7 @@ WebAppInfoImageSource::WebAppInfoImageSource( int dip_size, - const std::vector<WebApplicationInfo::IconInfo>& icons) + const std::vector<WebApplicationIconInfo>& icons) : dip_size_(dip_size), icons_(icons) {} WebAppInfoImageSource::~WebAppInfoImageSource() {}
diff --git a/chrome/browser/ui/views/extensions/web_app_info_image_source.h b/chrome/browser/ui/views/extensions/web_app_info_image_source.h index 972ef7e..bd9d000 100644 --- a/chrome/browser/ui/views/extensions/web_app_info_image_source.h +++ b/chrome/browser/ui/views/extensions/web_app_info_image_source.h
@@ -14,7 +14,7 @@ class WebAppInfoImageSource : public gfx::ImageSkiaSource { public: WebAppInfoImageSource(int dip_size, - const std::vector<WebApplicationInfo::IconInfo>& icons); + const std::vector<WebApplicationIconInfo>& icons); ~WebAppInfoImageSource() override; private: @@ -22,7 +22,7 @@ gfx::ImageSkiaRep GetImageForScale(float scale) override; int dip_size_; - std::vector<WebApplicationInfo::IconInfo> icons_; + std::vector<WebApplicationIconInfo> icons_; DISALLOW_COPY_AND_ASSIGN(WebAppInfoImageSource); };
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.cc b/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.cc index 64d60104..6a6df57 100644 --- a/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.cc +++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.cc
@@ -260,8 +260,10 @@ return nullptr; } -bool PermissionPromptImpl::ShouldDestroyOnTabSwitching() { - return true; +PermissionPrompt::TabSwitchingBehavior +PermissionPromptImpl::GetTabSwitchingBehavior() { + return PermissionPrompt::TabSwitchingBehavior:: + kDestroyPromptButKeepRequestPending; } void PermissionPromptImpl::Closing() {
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.h b/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.h index cc7650d..6684974 100644 --- a/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.h +++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_impl.h
@@ -24,7 +24,7 @@ // PermissionPrompt: void UpdateAnchorPosition() override; gfx::NativeWindow GetNativeWindow() override; - bool ShouldDestroyOnTabSwitching() override; + TabSwitchingBehavior GetTabSwitchingBehavior() override; void Closing(); void Accept();
diff --git a/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.cc b/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.cc index 793d4f2..8d74c31 100644 --- a/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.cc +++ b/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.cc
@@ -170,6 +170,11 @@ layout->SetFlexForView(lower_container_view, 1, true); } +// static +PluginVmLauncherView* PluginVmLauncherView::GetActiveViewForTesting() { + return g_plugin_vm_launcher_view; +} + int PluginVmLauncherView::GetDialogButtons() const { switch (state_) { case State::START_DOWNLOADING: @@ -364,6 +369,11 @@ } } +void PluginVmLauncherView::SetFinishedCallbackForTesting( + base::OnceCallback<void(bool success)> callback) { + finished_callback_for_testing_ = std::move(callback); +} + PluginVmLauncherView::~PluginVmLauncherView() { plugin_vm_image_manager_->RemoveObserver(); g_plugin_vm_launcher_view = nullptr; @@ -407,6 +417,12 @@ DialogModelChanged(); GetWidget()->GetRootView()->Layout(); + + if (state_ == State::FINISHED || state_ == State::ERROR || + state_ == State::NOT_ALLOWED) { + if (finished_callback_for_testing_) + std::move(finished_callback_for_testing_).Run(state_ == State::FINISHED); + } } base::string16 PluginVmLauncherView::GetDownloadProgressMessage(
diff --git a/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.h b/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.h index 8223974..24c1921 100644 --- a/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.h +++ b/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_UI_VIEWS_PLUGIN_VM_PLUGIN_VM_LAUNCHER_VIEW_H_ #define CHROME_BROWSER_UI_VIEWS_PLUGIN_VM_PLUGIN_VM_LAUNCHER_VIEW_H_ +#include "base/callback.h" #include "base/macros.h" #include "chrome/browser/chromeos/plugin_vm/plugin_vm_image_manager.h" #include "ui/views/bubble/bubble_dialog_delegate_view.h" @@ -26,6 +27,8 @@ public: explicit PluginVmLauncherView(Profile* profile); + static PluginVmLauncherView* GetActiveViewForTesting(); + // views::BubbleDialogDelegateView implementation. int GetDialogButtons() const override; base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; @@ -52,7 +55,10 @@ base::string16 GetBigMessage() const; base::string16 GetMessage() const; - protected: + void SetFinishedCallbackForTesting( + base::OnceCallback<void(bool success)> callback); + + private: enum class State { START_DOWNLOADING, // PluginVm image downloading should be started. DOWNLOADING, // PluginVm image downloading is in progress. @@ -62,14 +68,12 @@ NOT_ALLOWED, // PluginVm is disallowed on the device. }; - State state_ = State::START_DOWNLOADING; - ~PluginVmLauncherView() override; - virtual void OnStateUpdated(); + + void OnStateUpdated(); // views::BubbleDialogDelegateView implementation. void AddedToWidget() override; - private: base::string16 GetDownloadProgressMessage(uint64_t downlaoded_bytes, int64_t content_length) const; // Updates the progress bar and shows a time left message if available. @@ -92,6 +96,10 @@ views::ImageView* big_image_ = nullptr; base::TimeTicks setup_start_tick_; + State state_ = State::START_DOWNLOADING; + + base::OnceCallback<void(bool success)> finished_callback_for_testing_; + DISALLOW_COPY_AND_ASSIGN(PluginVmLauncherView); };
diff --git a/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view_browsertest.cc b/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view_browsertest.cc index 2c571f6..c18398e 100644 --- a/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view_browsertest.cc +++ b/chrome/browser/ui/views/plugin_vm/plugin_vm_launcher_view_browsertest.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/chromeos/plugin_vm/plugin_vm_metrics_util.h" #include "chrome/browser/chromeos/plugin_vm/plugin_vm_pref_names.h" #include "chrome/browser/chromeos/plugin_vm/plugin_vm_test_helper.h" +#include "chrome/browser/chromeos/plugin_vm/plugin_vm_util.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" @@ -49,52 +50,8 @@ } // namespace -class PluginVmLauncherViewForTesting : public PluginVmLauncherView { - public: - explicit PluginVmLauncherViewForTesting(Profile* profile) - : PluginVmLauncherView(profile) {} - - void AddSetupIsFinishedCallbackForTesting(base::RepeatingClosure callback) { - setup_is_finished_callback_for_testing_ = callback; - } - - private: - base::RepeatingClosure setup_is_finished_callback_for_testing_; - - void OnStateUpdated() override { - PluginVmLauncherView::OnStateUpdated(); - - if (state_ == State::FINISHED || state_ == State::ERROR || - state_ == State::NOT_ALLOWED) { - if (setup_is_finished_callback_for_testing_) - setup_is_finished_callback_for_testing_.Run(); - } - } -}; - class PluginVmLauncherViewBrowserTest : public DialogBrowserTest { public: - class SetupObserver { - public: - void OnSetupFinished() { - if (closure_) { - base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, - std::move(closure_)); - } - } - - void WaitForSetupToFinish() { - base::RunLoop run_loop; - closure_ = run_loop.QuitClosure(); - run_loop.Run(); - - content::RunAllTasksUntilIdle(); - } - - private: - base::OnceClosure closure_; - }; - PluginVmLauncherViewBrowserTest() = default; void SetUpOnMainThread() override { @@ -110,11 +67,8 @@ // DialogBrowserTest: void ShowUi(const std::string& name) override { - view_ = new PluginVmLauncherViewForTesting(browser()->profile()); - setup_observer_ = new SetupObserver(); - view_->AddSetupIsFinishedCallbackForTesting(base::BindRepeating( - &SetupObserver::OnSetupFinished, base::Unretained(setup_observer_))); - views::DialogDelegate::CreateDialogWidget(view_, nullptr, nullptr); + plugin_vm::ShowPluginVmLauncherView(browser()->profile()); + view_ = PluginVmLauncherView::GetActiveViewForTesting(); } protected: @@ -154,6 +108,16 @@ l10n_util::GetStringUTF16(IDS_PLUGIN_VM_LAUNCHER_NOT_ALLOWED_MESSAGE)); } + void WaitForSetupToFinish() { + base::RunLoop run_loop; + view_->SetFinishedCallbackForTesting( + base::BindOnce(&PluginVmLauncherViewBrowserTest::OnSetupFinished, + run_loop.QuitClosure())); + + run_loop.Run(); + content::RunAllTasksUntilIdle(); + } + void CheckSetupFailed() { EXPECT_TRUE(HasAcceptButton()); EXPECT_TRUE(HasCancelButton()); @@ -176,8 +140,7 @@ chromeos::ScopedStubInstallAttributes scoped_stub_install_attributes_; std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_; - PluginVmLauncherViewForTesting* view_; - SetupObserver* setup_observer_; + PluginVmLauncherView* view_; std::unique_ptr<base::HistogramTester> histogram_tester_; chromeos::FakeConciergeClient* fake_concierge_client_; @@ -206,6 +169,11 @@ std::move(user_manager)); } + static void OnSetupFinished(base::OnceClosure quit_closure, bool success) { + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + std::move(quit_closure)); + } + DISALLOW_COPY_AND_ASSIGN(PluginVmLauncherViewBrowserTest); }; @@ -233,7 +201,7 @@ ShowUi("default"); EXPECT_NE(nullptr, view_); - setup_observer_->WaitForSetupToFinish(); + WaitForSetupToFinish(); CheckSetupIsFinishedSuccessfully(); @@ -252,7 +220,7 @@ ShowUi("default"); EXPECT_NE(nullptr, view_); - setup_observer_->WaitForSetupToFinish(); + WaitForSetupToFinish(); CheckSetupFailed(); @@ -270,7 +238,7 @@ ShowUi("default"); EXPECT_NE(nullptr, view_); - setup_observer_->WaitForSetupToFinish(); + WaitForSetupToFinish(); CheckSetupFailed(); @@ -289,7 +257,7 @@ ShowUi("default"); EXPECT_NE(nullptr, view_); - setup_observer_->WaitForSetupToFinish(); + WaitForSetupToFinish(); CheckSetupFailed(); @@ -300,7 +268,7 @@ // Retry button clicked to retry the download. view_->GetDialogClientView()->AcceptWindow(); - setup_observer_->WaitForSetupToFinish(); + WaitForSetupToFinish(); CheckSetupIsFinishedSuccessfully();
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc index f450f65..c2fa4b7 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -410,6 +410,11 @@ profiles::USER_MANAGER_OPEN_CREATE_USER_PAGE); } +void ProfileMenuView::OnEditProfileButtonClicked() { + RecordClick(ActionableItem::kEditProfileButton); + chrome::ShowSettingsSubPage(browser(), chrome::kManageProfileSubPage); +} + void ProfileMenuView::BuildIdentity() { Profile* profile = browser()->profile(); signin::IdentityManager* identity_manager = @@ -422,8 +427,10 @@ ProfileAttributesEntry* profile_attributes = GetProfileAttributesEntry(profile); + base::string16 heading; + if (account_info.has_value()) { - SetHeading(profile_attributes->GetLocalProfileName()); + heading = profile_attributes->GetLocalProfileName(); SetIdentityInfo(account_info.value().account_image.AsImageSkia(), GetSyncIcon(), base::UTF8ToUTF16(account_info.value().full_name), @@ -434,6 +441,12 @@ profile_attributes->GetName(), l10n_util::GetStringUTF16(IDS_PROFILES_LOCAL_PROFILE_STATE)); } + + SetHeading(heading, + ImageForMenu(vector_icons::kEditIcon, kShortcutIconToImageRatio), + l10n_util::GetStringUTF16(IDS_SETTINGS_EDIT_PERSON), + base::BindRepeating(&ProfileMenuView::OnEditProfileButtonClicked, + base::Unretained(this))); } void ProfileMenuView::BuildGuestIdentity() {
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.h b/chrome/browser/ui/views/profiles/profile_menu_view.h index 39233239..8095e98 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.h +++ b/chrome/browser/ui/views/profiles/profile_menu_view.h
@@ -66,6 +66,7 @@ void OnOtherProfileSelected(const base::FilePath& profile_path); void OnCookiesClearedOnExitLinkClicked(); void OnAddNewProfileButtonClicked(); + void OnEditProfileButtonClicked(); // AvatarMenuObserver: void OnAvatarMenuChanged(AvatarMenu* avatar_menu) override;
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc index e212e83..d2c9a476 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -263,8 +263,11 @@ DCHECK(menu_item_groups_.empty()); } -void ProfileMenuViewBase::SetHeading(const base::string16& heading) { - constexpr int kVerticalPadding = 8; +void ProfileMenuViewBase::SetHeading(const base::string16& heading, + const gfx::ImageSkia& clickable_icon, + const base::string16& tooltip_text, + base::RepeatingClosure action) { + constexpr int kInsidePadding = 4; const SkColor kBackgroundColor = ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor( ui::NativeTheme::kColorId_HighlightedMenuItemBackgroundColor); @@ -272,16 +275,37 @@ views::LayoutProvider::Get()->GetCornerRadiusMetric(views::EMPHASIS_HIGH); heading_container_->RemoveAllChildViews(/*delete_children=*/true); - heading_container_->SetLayoutManager(std::make_unique<views::FillLayout>()); - heading_container_->SetBackground( - views::CreateRoundedRectBackground(kBackgroundColor, kCornerRadius)); + views::BoxLayout* heading_layout = heading_container_->SetLayoutManager( + CreateBoxLayout(views::BoxLayout::Orientation::kHorizontal, + views::BoxLayout::CrossAxisAlignment::kCenter, + gfx::Insets(kInsidePadding))); + if (!heading.empty()) { + heading_container_->SetBackground( + views::CreateRoundedRectBackground(kBackgroundColor, kCornerRadius)); + } + // Add the label even if |heading| is empty. This needs to be done so the icon + // button gets pushed to the right. views::Label* label = heading_container_->AddChildView(std::make_unique<views::Label>( heading, views::style::CONTEXT_LABEL, STYLE_HINT)); label->SetHandlesTooltips(false); + // Stretch the label. + heading_layout->SetFlexForView(label, 1); + + // Add icon button. + views::Button* button = + heading_container_->AddChildView(CreateCircularImageButton( + this, clickable_icon, tooltip_text, /*show_border=*/false)); + // Don't stretch the button, so it only takes the space it needs. + heading_layout->SetFlexForView(button, 0); + RegisterClickAction(button, std::move(action)); + + // Center the label by adding a left padding. + button->SizeToPreferredSize(); + int left_label_padding = button->GetContentsBounds().width(); label->SetBorder( - views::CreateEmptyBorder(gfx::Insets(kVerticalPadding, kMenuEdgeMargin))); + views::CreateEmptyBorder(gfx::Insets(0, left_label_padding, 0, 0))); } void ProfileMenuViewBase::SetIdentityInfo(const gfx::ImageSkia& image,
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.h b/chrome/browser/ui/views/profiles/profile_menu_view_base.h index 5ef742c..d61ba709 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_base.h +++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.h
@@ -63,7 +63,8 @@ kCookiesClearedOnExitLink = 14, kAddNewProfileButton = 15, kSyncSettingsButton = 16, - kMaxValue = kSyncSettingsButton, + kEditProfileButton = 17, + kMaxValue = kEditProfileButton, }; // MenuItems struct keeps the menu items and meta data for a group of items in @@ -119,7 +120,10 @@ virtual void BuildMenu() = 0; // API to build the profile menu. - void SetHeading(const base::string16& heading); + void SetHeading(const base::string16& heading, + const gfx::ImageSkia& clickable_icon, + const base::string16& tooltip_text, + base::RepeatingClosure action); void SetIdentityInfo(const gfx::ImageSkia& image, const gfx::ImageSkia& badge, const base::string16& title,
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc index a7e74ee..56e86e35 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
@@ -760,6 +760,7 @@ // If a new button is added to the menu, it should also be added to this list. constexpr ProfileMenuViewBase::ActionableItem kActionableItems_MultipleProfiles[] = { + ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kPasswordsButton, ProfileMenuViewBase::ActionableItem::kCreditCardsButton, ProfileMenuViewBase::ActionableItem::kAddressesButton, @@ -772,7 +773,7 @@ ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, // The first button is added again to finish the cycle and test that // there are no other buttons at the end. - ProfileMenuViewBase::ActionableItem::kPasswordsButton}; + ProfileMenuViewBase::ActionableItem::kEditProfileButton}; PROFILE_MENU_CLICK_TEST(kActionableItems_MultipleProfiles, ProfileMenuClickTest_MultipleProfiles) { @@ -785,6 +786,7 @@ // List of actionable items in the correct order as they appear in the menu. // If a new button is added to the menu, it should also be added to this list. constexpr ProfileMenuViewBase::ActionableItem kActionableItems_SyncEnabled[] = { + ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kPasswordsButton, ProfileMenuViewBase::ActionableItem::kCreditCardsButton, ProfileMenuViewBase::ActionableItem::kAddressesButton, @@ -796,7 +798,7 @@ ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, // The first button is added again to finish the cycle and test that // there are no other buttons at the end. - ProfileMenuViewBase::ActionableItem::kPasswordsButton}; + ProfileMenuViewBase::ActionableItem::kEditProfileButton}; PROFILE_MENU_CLICK_TEST(kActionableItems_SyncEnabled, ProfileMenuClickTest_SyncEnabled) { @@ -811,6 +813,7 @@ // List of actionable items in the correct order as they appear in the menu. // If a new button is added to the menu, it should also be added to this list. constexpr ProfileMenuViewBase::ActionableItem kActionableItems_SyncError[] = { + ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kPasswordsButton, ProfileMenuViewBase::ActionableItem::kCreditCardsButton, ProfileMenuViewBase::ActionableItem::kAddressesButton, @@ -822,7 +825,7 @@ ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, // The first button is added again to finish the cycle and test that // there are no other buttons at the end. - ProfileMenuViewBase::ActionableItem::kPasswordsButton}; + ProfileMenuViewBase::ActionableItem::kEditProfileButton}; PROFILE_MENU_CLICK_TEST(kActionableItems_SyncError, ProfileMenuClickTest_SyncError) { @@ -838,6 +841,7 @@ // If a new button is added to the menu, it should also be added to this list. constexpr ProfileMenuViewBase::ActionableItem kActionableItems_WithUnconsentedPrimaryAccount[] = { + ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kPasswordsButton, ProfileMenuViewBase::ActionableItem::kCreditCardsButton, ProfileMenuViewBase::ActionableItem::kAddressesButton, @@ -850,7 +854,7 @@ ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, // The first button is added again to finish the cycle and test that // there are no other buttons at the end. - ProfileMenuViewBase::ActionableItem::kPasswordsButton}; + ProfileMenuViewBase::ActionableItem::kEditProfileButton}; // TODO(crbug.com/1012167): Flaky. PROFILE_MENU_CLICK_TEST(
diff --git a/chrome/browser/ui/views/tabs/tab_close_button.cc b/chrome/browser/ui/views/tabs/tab_close_button.cc index b6a584d..0c99bea 100644 --- a/chrome/browser/ui/views/tabs/tab_close_button.cc +++ b/chrome/browser/ui/views/tabs/tab_close_button.cc
@@ -24,9 +24,9 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/views/animation/ink_drop.h" #include "ui/views/animation/ink_drop_mask.h" -#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/layout/layout_provider.h" #include "ui/views/rect_based_targeting_utils.h" +#include "ui/views/view_class_properties.h" #if defined(USE_AURA) #include "ui/aura/env.h" @@ -35,25 +35,6 @@ namespace { constexpr int kGlyphWidth = 16; constexpr int kTouchGlyphWidth = 24; - -class TabCloseButtonHighlightPathGenerator - : public views::HighlightPathGenerator { - public: - TabCloseButtonHighlightPathGenerator() = default; - - // views::HighlightPathGenerator: - SkPath GetHighlightPath(const views::View* view) override { - const gfx::Rect bounds = view->GetContentsBounds(); - const gfx::Point center = bounds.CenterPoint(); - const int radius = views::LayoutProvider::Get()->GetCornerRadiusMetric( - views::EMPHASIS_MAXIMUM, bounds.size()); - return SkPath().addCircle(center.x(), center.y(), radius); - } - - private: - DISALLOW_COPY_AND_ASSIGN(TabCloseButtonHighlightPathGenerator); -}; - } // namespace TabCloseButton::TabCloseButton(views::ButtonListener* listener, @@ -74,8 +55,6 @@ GetInkDrop()->SetHoverHighlightFadeDuration(base::TimeDelta()); SetInstallFocusRingOnFocus(true); - views::HighlightPathGenerator::Install( - this, std::make_unique<TabCloseButtonHighlightPathGenerator>()); } TabCloseButton::~TabCloseButton() {} @@ -141,6 +120,25 @@ return size; } +void TabCloseButton::OnBoundsChanged(const gfx::Rect& previous_bounds) { + ImageButton::OnBoundsChanged(previous_bounds); + auto path = std::make_unique<SkPath>(); + const gfx::Rect bounds = GetContentsBounds(); + const gfx::Point center = bounds.CenterPoint(); + const int radius = views::LayoutProvider::Get()->GetCornerRadiusMetric( + views::EMPHASIS_MAXIMUM, bounds.size()); + path->addCircle(center.x(), center.y(), radius); + SetProperty(views::kHighlightPathKey, path.release()); +} + +std::unique_ptr<views::InkDropMask> TabCloseButton::CreateInkDropMask() const { + const gfx::Rect bounds = GetContentsBounds(); + const int radius = views::LayoutProvider::Get()->GetCornerRadiusMetric( + views::EMPHASIS_MAXIMUM, bounds.size()); + return std::make_unique<views::CircleInkDropMask>( + size(), GetMirroredRect(bounds).CenterPoint(), radius); +} + void TabCloseButton::PaintButtonContents(gfx::Canvas* canvas) { cc::PaintFlags flags; constexpr float kStrokeWidth = 1.5f;
diff --git a/chrome/browser/ui/views/tabs/tab_close_button.h b/chrome/browser/ui/views/tabs/tab_close_button.h index f2252abc..ccf1e6b 100644 --- a/chrome/browser/ui/views/tabs/tab_close_button.h +++ b/chrome/browser/ui/views/tabs/tab_close_button.h
@@ -44,10 +44,12 @@ void OnMouseReleased(const ui::MouseEvent& event) override; void OnMouseMoved(const ui::MouseEvent& event) override; void OnGestureEvent(ui::GestureEvent* event) override; + std::unique_ptr<views::InkDropMask> CreateInkDropMask() const override; protected: // views::ImageButton: gfx::Size CalculatePreferredSize() const override; + void OnBoundsChanged(const gfx::Rect& previous_bounds) override; void PaintButtonContents(gfx::Canvas* canvas) override; private:
diff --git a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc index c5383c86..6d632c7 100644 --- a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc
@@ -42,6 +42,7 @@ #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/google_service_auth_error.h" +#include "services/network/public/mojom/cookie_manager.mojom.h" #include "ui/base/l10n/l10n_util.h" #include "ui/chromeos/devicetype_utils.h"
diff --git a/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc b/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc index 38e1186..673d8f63 100644 --- a/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc +++ b/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc
@@ -22,10 +22,10 @@ void MachineLearningInternalsPageHandler::LoadBuiltinModel( mojom::BuiltinModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, LoadBuiltinModelCallback callback) { ServiceConnection::GetInstance()->LoadBuiltinModel( - std::move(spec), std::move(request), std::move(callback)); + std::move(spec), std::move(receiver), std::move(callback)); } } // namespace machine_learning
diff --git a/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h b/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h index d95f6b4..70c4e963 100644 --- a/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h +++ b/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h
@@ -26,7 +26,7 @@ private: // mojom::PageHandler: void LoadBuiltinModel(mojom::BuiltinModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, LoadBuiltinModelCallback callback) override; mojo::Receiver<mojom::PageHandler> receiver_;
diff --git a/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom b/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom index 19d1e7f..84a76d05d 100644 --- a/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom +++ b/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom
@@ -11,6 +11,6 @@ interface PageHandler { // Loads the specified builtin model by forwarding it to Chrome OS ML // Service. - LoadBuiltinModel(BuiltinModelSpec spec, Model& request) + LoadBuiltinModel(BuiltinModelSpec spec, pending_receiver<Model> receiver) => (LoadModelResult result); -}; \ No newline at end of file +};
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc index 1ed3548..36c8b28 100644 --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -810,7 +810,7 @@ web_app->app_url = install_info->app_url; if (!image_result.image.IsEmpty()) { - WebApplicationInfo::IconInfo icon; + WebApplicationIconInfo icon; icon.data = image_result.image.AsBitmap(); icon.width = icon.data.width(); icon.height = icon.data.height();
diff --git a/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc index f0442439..d2803541 100644 --- a/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc +++ b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
@@ -73,12 +73,13 @@ void CookieControlsHandler::OnCookieControlsChanged() { Profile* profile = Profile::FromWebUI(web_ui()); + FireWebUIListener("cookie-controls-changed", + base::Value(GetToggleCheckedValue(profile))); +} + +bool CookieControlsHandler::GetToggleCheckedValue(const Profile* profile) { int mode = profile->GetPrefs()->GetInteger(prefs::kCookieControlsMode); - base::Value checked( - mode == static_cast<int>(content_settings::CookieControlsMode::kOff) - ? false - : true); - FireWebUIListener("cookie-controls-changed", checked); + return mode != static_cast<int>(content_settings::CookieControlsMode::kOff); } void CookieControlsHandler::OnThirdPartyCookieBlockingChanged() {
diff --git a/chrome/browser/ui/webui/ntp/cookie_controls_handler.h b/chrome/browser/ui/webui/ntp/cookie_controls_handler.h index c78bb94..95d545e 100644 --- a/chrome/browser/ui/webui/ntp/cookie_controls_handler.h +++ b/chrome/browser/ui/webui/ntp/cookie_controls_handler.h
@@ -33,6 +33,8 @@ // Whether cookie controls UI should be hidden in incognito ntp. static bool ShouldHideCookieControlsUI(const Profile* profile); + static bool GetToggleCheckedValue(const Profile* profile); + private: friend class CookieControlsHandlerTest;
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc index bec782e..0d3d7ecf 100644 --- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc +++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
@@ -285,6 +285,8 @@ l10n_util::GetStringUTF8(IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE); replacements["cookieControlsDescription"] = l10n_util::GetStringUTF8(IDS_NEW_TAB_OTR_COOKIE_CONTROLS_DESCRIPTION); + replacements["cookieControlsToggleChecked"] = + CookieControlsHandler::GetToggleCheckedValue(profile_) ? "checked" : ""; const ui::ThemeProvider& tp = ThemeService::GetThemeProviderForProfile(profile_);
diff --git a/chrome/browser/ui/webui/policy_ui_browsertest.cc b/chrome/browser/ui/webui/policy_ui_browsertest.cc index 446224e..1f2578fb 100644 --- a/chrome/browser/ui/webui/policy_ui_browsertest.cc +++ b/chrome/browser/ui/webui/policy_ui_browsertest.cc
@@ -14,6 +14,7 @@ #include "base/json/json_writer.h" #include "base/macros.h" #include "base/run_loop.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/threading/thread_restrictions.h" #include "base/values.h" #include "build/build_config.h"
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index e458e1f39..a30278ea 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -60,6 +60,7 @@ #include "components/sync/driver/sync_service_utils.h" #include "components/sync/driver/sync_user_settings.h" #include "components/unified_consent/feature.h" +#include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h"
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler.cc b/chrome/browser/ui/webui/signin/inline_login_handler.cc index 5994aac2..f370580 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler.cc
@@ -32,6 +32,7 @@ #include "content/public/browser/web_ui.h" #include "google_apis/gaia/gaia_urls.h" #include "net/base/url_util.h" +#include "services/network/public/mojom/cookie_manager.mojom.h" const char kSignInPromoQueryKeyShowAccountManagement[] = "showAccountManagement";
diff --git a/chrome/browser/usb/usb_browsertest.cc b/chrome/browser/usb/usb_browsertest.cc index 739c6c92..885977a 100644 --- a/chrome/browser/usb/usb_browsertest.cc +++ b/chrome/browser/usb/usb_browsertest.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/memory/ref_counted.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/profiles/profile.h" @@ -20,6 +21,7 @@ #include "chrome/test/base/ui_test_utils.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_navigation_observer.h"
diff --git a/chrome/browser/web_applications/components/web_app_data_retriever_unittest.cc b/chrome/browser/web_applications/components/web_app_data_retriever_unittest.cc index fdefdc1fa..b7b1dfd2 100644 --- a/chrome/browser/web_applications/components/web_app_data_retriever_unittest.cc +++ b/chrome/browser/web_applications/components/web_app_data_retriever_unittest.cc
@@ -99,7 +99,7 @@ } void GetIconsCallback(base::OnceClosure quit_closure, - std::vector<WebApplicationInfo::IconInfo> icons) { + std::vector<WebApplicationIconInfo> icons) { icons_ = std::move(icons); std::move(quit_closure).Run(); } @@ -134,12 +134,12 @@ return web_app_info_.value(); } - const std::vector<WebApplicationInfo::IconInfo>& icons() { return icons_; } + const std::vector<WebApplicationIconInfo>& icons() { return icons_; } private: FakeChromeRenderFrame fake_chrome_render_frame_; base::Optional<std::unique_ptr<WebApplicationInfo>> web_app_info_; - std::vector<WebApplicationInfo::IconInfo> icons_; + std::vector<WebApplicationIconInfo> icons_; DISALLOW_COPY_AND_ASSIGN(WebAppDataRetrieverTest); };
diff --git a/chrome/browser/web_applications/components/web_app_install_utils.cc b/chrome/browser/web_applications/components/web_app_install_utils.cc index e0d23f52..1f6bcc3 100644 --- a/chrome/browser/web_applications/components/web_app_install_utils.cc +++ b/chrome/browser/web_applications/components/web_app_install_utils.cc
@@ -40,7 +40,7 @@ void FilterSquareIconsFromInfo(const WebApplicationInfo& web_app_info, std::vector<BitmapAndSource>* square_icons) { // Add all existing icons from WebApplicationInfo. - for (const WebApplicationInfo::IconInfo& icon_info : web_app_info.icons) { + for (const WebApplicationIconInfo& icon_info : web_app_info.icons) { const SkBitmap& icon = icon_info.data; if (!icon.drawsNothing() && icon.width() == icon.height()) square_icons->push_back(BitmapAndSource(icon_info.url, icon)); @@ -67,7 +67,7 @@ // Populate the icon data into the WebApplicationInfo we are using to // install the bookmark app. for (const auto& size_and_icon : size_map) { - WebApplicationInfo::IconInfo icon_info; + WebApplicationIconInfo icon_info; icon_info.data = size_and_icon.second.bitmap; icon_info.url = size_and_icon.second.source_url; icon_info.width = icon_info.data.width(); @@ -95,7 +95,7 @@ // Now add in any icons from the updated list that don't have URLs. for (const auto& pair : size_map) { if (pair.second.source_url.is_empty()) { - WebApplicationInfo::IconInfo icon_info; + WebApplicationIconInfo icon_info; icon_info.data = pair.second.bitmap; icon_info.width = pair.first; icon_info.height = pair.first; @@ -129,7 +129,7 @@ // Create the WebApplicationInfo icons list *outside* of |web_app_info|, so // that we can decide later whether or not to replace the existing icons array // (conditionally on whether there were any that didn't have purpose ANY). - std::vector<WebApplicationInfo::IconInfo> web_app_icons; + std::vector<WebApplicationIconInfo> web_app_icons; for (const auto& icon : manifest.icons) { // An icon's purpose vector should never be empty (the manifest parser // should have added ANY if there was no purpose specified in the manifest). @@ -141,7 +141,7 @@ } // TODO(benwells): Take the declared icon density and sizes into account. - WebApplicationInfo::IconInfo info; + WebApplicationIconInfo info; info.url = icon.src; web_app_icons.push_back(info); }
diff --git a/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc b/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc index 7278055..fabd63de 100644 --- a/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc +++ b/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc
@@ -27,7 +27,7 @@ WebApplicationInfo web_app_info; web_app_info.title = base::UTF8ToUTF16(kAlternativeAppTitle); web_app_info.app_url = kAlternativeAppUrl; - WebApplicationInfo::IconInfo info; + WebApplicationIconInfo info; info.url = kAppIcon1; web_app_info.icons.push_back(info);
diff --git a/chrome/browser/web_applications/components/web_app_shortcut.cc b/chrome/browser/web_applications/components/web_app_shortcut.cc index 408fedd..fe752990 100644 --- a/chrome/browser/web_applications/components/web_app_shortcut.cc +++ b/chrome/browser/web_applications/components/web_app_shortcut.cc
@@ -7,29 +7,42 @@ #include <functional> #include "base/bind.h" +#include "base/callback.h" #include "base/i18n/file_util_icu.h" #include "base/strings/utf_string_conversions.h" #include "base/task/post_task.h" #include "build/build_config.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/common/chrome_constants.h" +#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" using content::BrowserThread; +namespace web_app { + namespace { -void DeleteShortcutInfoOnUIThread( - std::unique_ptr<web_app::ShortcutInfo> shortcut_info, - base::OnceClosure callback) { +void DeleteShortcutInfoOnUIThread(std::unique_ptr<ShortcutInfo> shortcut_info, + base::OnceClosure callback) { shortcut_info.reset(); if (callback) std::move(callback).Run(); } -} // namespace +void CreatePlatformShortcutsAndPostCallback( + const base::FilePath& shortcut_data_path, + const ShortcutLocations& creation_locations, + ShortcutCreationReason creation_reason, + CreateShortcutsCallback callback, + const ShortcutInfo& shortcut_info) { + bool shortcut_created = internals::CreatePlatformShortcuts( + shortcut_data_path, creation_locations, creation_reason, shortcut_info); + base::PostTask(FROM_HERE, {BrowserThread::UI}, + base::BindOnce(std::move(callback), shortcut_created)); +} -namespace web_app { +} // namespace ShortcutInfo::ShortcutInfo() = default; @@ -85,6 +98,20 @@ base::OnceClosure()); } +void ScheduleCreatePlatformShortcuts( + const base::FilePath& shortcut_data_path, + const ShortcutLocations& creation_locations, + ShortcutCreationReason reason, + std::unique_ptr<ShortcutInfo> shortcut_info, + CreateShortcutsCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + PostShortcutIOTask(base::BindOnce(&CreatePlatformShortcutsAndPostCallback, + shortcut_data_path, creation_locations, + reason, std::move(callback)), + std::move(shortcut_info)); +} + void PostShortcutIOTaskAndReply( base::OnceCallback<void(const ShortcutInfo&)> task, std::unique_ptr<ShortcutInfo> shortcut_info,
diff --git a/chrome/browser/web_applications/components/web_app_shortcut.h b/chrome/browser/web_applications/components/web_app_shortcut.h index 416a3e3..82ac21d 100644 --- a/chrome/browser/web_applications/components/web_app_shortcut.h +++ b/chrome/browser/web_applications/components/web_app_shortcut.h
@@ -5,6 +5,9 @@ #ifndef CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_SHORTCUT_H_ #define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_SHORTCUT_H_ +#include <memory> + +#include "base/callback_forward.h" #include "base/files/file_path.h" #include "base/macros.h" #include "base/sequence_checker.h" @@ -94,6 +97,11 @@ const std::string& extension_id, const GURL& url); +// Callback made when CreateShortcuts has finished trying to create the +// platform shortcuts indicating whether or not they were successfully +// created. +using CreateShortcutsCallback = base::OnceCallback<void(bool shortcut_created)>; + namespace internals { // Implemented for each platform, does the platform specific parts of creating @@ -102,11 +110,22 @@ // shortcut, and is also used as the UserDataDir for platform app shortcuts. // |shortcut_info| contains info about the shortcut to create, and // |creation_locations| contains information about where to create them. +// Performs blocking IO operations. bool CreatePlatformShortcuts(const base::FilePath& shortcut_data_path, const ShortcutLocations& creation_locations, ShortcutCreationReason creation_reason, const ShortcutInfo& shortcut_info); +// Schedules a call to |CreatePlatformShortcuts| on the Shortcut IO thread and +// invokes |callback| when complete. This function must be called from the UI +// thread. +void ScheduleCreatePlatformShortcuts( + const base::FilePath& shortcut_data_path, + const ShortcutLocations& creation_locations, + ShortcutCreationReason reason, + std::unique_ptr<ShortcutInfo> shortcut_info, + CreateShortcutsCallback callback); + // Delete all the shortcuts we have added for this extension. This is the // platform specific implementation of the DeleteAllShortcuts function, and // is executed on the FILE thread.
diff --git a/chrome/browser/web_applications/extensions/install_manager_bookmark_app_unittest.cc b/chrome/browser/web_applications/extensions/install_manager_bookmark_app_unittest.cc index c947bf2..0de9001 100644 --- a/chrome/browser/web_applications/extensions/install_manager_bookmark_app_unittest.cc +++ b/chrome/browser/web_applications/extensions/install_manager_bookmark_app_unittest.cc
@@ -72,8 +72,8 @@ return bitmap; } -WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) { - WebApplicationInfo::IconInfo icon_info; +WebApplicationIconInfo CreateIconInfoWithBitmap(int size, SkColor color) { + WebApplicationIconInfo icon_info; icon_info.width = size; icon_info.height = size; icon_info.data = CreateSquareBitmapWithColor(size, color);
diff --git a/chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc b/chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc index c63e3ae..17450e2 100644 --- a/chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc +++ b/chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc
@@ -96,36 +96,11 @@ base::FilePath shortcut_data_dir = internals::GetShortcutDataDir(*shortcut_info); internals::PostShortcutIOTaskAndReply( - base::BindOnce(&internals::UpdatePlatformShortcuts, shortcut_data_dir, - old_app_title), + base::BindOnce(&internals::UpdatePlatformShortcuts, + std::move(shortcut_data_dir), old_app_title), std::move(shortcut_info), std::move(callback)); } -void CreatePlatformShortcutsAndPostCallback( - const base::FilePath& shortcut_data_path, - const ShortcutLocations& creation_locations, - ShortcutCreationReason creation_reason, - CreateShortcutsCallback callback, - const ShortcutInfo& shortcut_info) { - bool shortcut_created = internals::CreatePlatformShortcuts( - shortcut_data_path, creation_locations, creation_reason, shortcut_info); - base::PostTask(FROM_HERE, {BrowserThread::UI}, - base::BindOnce(std::move(callback), shortcut_created)); -} - -void ScheduleCreatePlatformShortcut( - ShortcutCreationReason reason, - const ShortcutLocations& locations, - CreateShortcutsCallback callback, - std::unique_ptr<ShortcutInfo> shortcut_info) { - base::FilePath shortcut_data_dir = - internals::GetShortcutDataDir(*shortcut_info); - internals::PostShortcutIOTask( - base::BindOnce(&CreatePlatformShortcutsAndPostCallback, shortcut_data_dir, - locations, reason, std::move(callback)), - std::move(shortcut_info)); -} - } // namespace void CreateShortcutsWithInfo(ShortcutCreationReason reason, @@ -163,8 +138,11 @@ } } - ScheduleCreatePlatformShortcut(reason, locations, std::move(callback), - std::move(shortcut_info)); + base::FilePath shortcut_data_dir = + internals::GetShortcutDataDir(*shortcut_info); + internals::ScheduleCreatePlatformShortcuts(shortcut_data_dir, locations, + reason, std::move(shortcut_info), + std::move(callback)); } void GetShortcutInfoForApp(const extensions::Extension* extension,
diff --git a/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h b/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h index a92e234..78b7eac6 100644 --- a/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h +++ b/chrome/browser/web_applications/extensions/web_app_extension_shortcut.h
@@ -21,10 +21,6 @@ namespace web_app { -// Callback made when CreateShortcuts has finished trying to create the -// platform shortcuts indicating whether or not they were successfully created. -using CreateShortcutsCallback = base::OnceCallback<void(bool shortcut_created)>; - // Called by GetShortcutInfoForApp after fetching the ShortcutInfo. using ShortcutInfoCallback = base::OnceCallback<void(std::unique_ptr<ShortcutInfo>)>;
diff --git a/chrome/browser/web_applications/proto/web_app.proto b/chrome/browser/web_applications/proto/web_app.proto index e4846fd8..e07bbf3 100644 --- a/chrome/browser/web_applications/proto/web_app.proto +++ b/chrome/browser/web_applications/proto/web_app.proto
@@ -48,7 +48,7 @@ optional string scope = 5; required SourcesProto sources = 6; required bool is_locally_installed = 7; - optional bool is_sync_placeholder = 8; + optional bool is_in_sync_install = 8; // A list of icon infos. repeated WebAppIconInfoProto icons = 9; }
diff --git a/chrome/browser/web_applications/test/web_app_icon_test_utils.cc b/chrome/browser/web_applications/test/web_app_icon_test_utils.cc index 803020afe..2d725e8 100644 --- a/chrome/browser/web_applications/test/web_app_icon_test_utils.cc +++ b/chrome/browser/web_applications/test/web_app_icon_test_utils.cc
@@ -18,10 +18,10 @@ return bitmap; } -WebApplicationInfo::IconInfo GenerateIconInfo(const GURL& url, - int size_px, - SkColor solid_color) { - WebApplicationInfo::IconInfo icon_info; +WebApplicationIconInfo GenerateIconInfo(const GURL& url, + int size_px, + SkColor solid_color) { + WebApplicationIconInfo icon_info; icon_info.url = url; icon_info.width = size_px; icon_info.height = size_px;
diff --git a/chrome/browser/web_applications/test/web_app_icon_test_utils.h b/chrome/browser/web_applications/test/web_app_icon_test_utils.h index 95448c5..b32154fe 100644 --- a/chrome/browser/web_applications/test/web_app_icon_test_utils.h +++ b/chrome/browser/web_applications/test/web_app_icon_test_utils.h
@@ -16,9 +16,9 @@ SkBitmap CreateSquareIcon(int size_px, SkColor solid_color); -WebApplicationInfo::IconInfo GenerateIconInfo(const GURL& url, - int size_px, - SkColor solid_color); +WebApplicationIconInfo GenerateIconInfo(const GURL& url, + int size_px, + SkColor solid_color); void AddIconToIconsMap(const GURL& icon_url, int size_px,
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc index 3b43e41..dc23d8d 100644 --- a/chrome/browser/web_applications/web_app.cc +++ b/chrome/browser/web_applications/web_app.cc
@@ -70,8 +70,8 @@ is_locally_installed_ = is_locally_installed; } -void WebApp::SetIsSyncPlaceholder(bool is_sync_placeholder) { - is_sync_placeholder_ = is_sync_placeholder; +void WebApp::SetIsInSyncInstall(bool is_in_sync_install) { + is_in_sync_install_ = is_in_sync_install; } void WebApp::SetIcons(Icons icons) { @@ -102,7 +102,7 @@ const std::string display_mode = blink::DisplayModeToString(app.display_mode_); const bool is_locally_installed = app.is_locally_installed_; - const bool is_sync_placeholder = app.is_sync_placeholder_; + const bool is_in_sync_install = app.is_in_sync_install_; return out << "app_id: " << app.app_id_ << std::endl << " name: " << app.name_ << std::endl @@ -112,7 +112,7 @@ << " display_mode: " << display_mode << std::endl << " sources: " << app.sources_.to_string() << std::endl << " is_locally_installed: " << is_locally_installed << std::endl - << " is_sync_placeholder: " << is_sync_placeholder << std::endl + << " is_in_sync_install: " << is_in_sync_install << std::endl << " sync_data.name: " << app.sync_data_.name << std::endl << " sync_data.theme_color: " << sync_theme_color << std::endl << " description: " << app.description_; @@ -134,11 +134,11 @@ return std::tie(app1.app_id_, app1.sources_, app1.name_, app1.launch_url_, app1.description_, app1.scope_, app1.theme_color_, app1.icons_, app1.display_mode_, app1.is_locally_installed_, - app1.is_sync_placeholder_, app1.sync_data_) == + app1.is_in_sync_install_, app1.sync_data_) == std::tie(app2.app_id_, app2.sources_, app2.name_, app2.launch_url_, app2.description_, app2.scope_, app2.theme_color_, app2.icons_, app2.display_mode_, app2.is_locally_installed_, - app2.is_sync_placeholder_, app2.sync_data_); + app2.is_in_sync_install_, app2.sync_data_); } bool operator!=(const WebApp& app1, const WebApp& app2) {
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h index 3f0e59b..d027472 100644 --- a/chrome/browser/web_applications/web_app.h +++ b/chrome/browser/web_applications/web_app.h
@@ -44,12 +44,12 @@ // If app isn't locally installed, it is excluded from UIs and only listed as // a part of user's app library. bool is_locally_installed() const { return is_locally_installed_; } - // Sync-initiated installation produces a sync placeholder app awaiting for - // full installation process. The sync placeholder app has only app_id, + // Sync-initiated installation produces a stub app awaiting for full + // installation process. The |is_in_sync_install| app has only app_id, // launch_url and sync_data fields defined, no icons. If online install // succeeds, icons get downloaded and all the fields get their values. If // install fails, icons get generated using |sync_data| fields. - bool is_sync_placeholder() const { return is_sync_placeholder_; } + bool is_in_sync_install() const { return is_in_sync_install_; } struct IconInfo { GURL url; @@ -89,7 +89,7 @@ void SetThemeColor(base::Optional<SkColor> theme_color); void SetDisplayMode(blink::mojom::DisplayMode display_mode); void SetIsLocallyInstalled(bool is_locally_installed); - void SetIsSyncPlaceholder(bool is_sync_placeholder); + void SetIsInSyncInstall(bool is_in_sync_install); void SetIcons(Icons icons); void SetSyncData(SyncData sync_data); @@ -114,7 +114,7 @@ base::Optional<SkColor> theme_color_; blink::mojom::DisplayMode display_mode_; bool is_locally_installed_ = true; - bool is_sync_placeholder_ = false; + bool is_in_sync_install_ = false; Icons icons_; SyncData sync_data_;
diff --git a/chrome/browser/web_applications/web_app_database.cc b/chrome/browser/web_applications/web_app_database.cc index 5ccdbf8..9de044ea 100644 --- a/chrome/browser/web_applications/web_app_database.cc +++ b/chrome/browser/web_applications/web_app_database.cc
@@ -115,7 +115,7 @@ if (web_app.theme_color().has_value()) local_data->set_theme_color(web_app.theme_color().value()); - local_data->set_is_sync_placeholder(web_app.is_sync_placeholder()); + local_data->set_is_in_sync_install(web_app.is_in_sync_install()); // Set sync_data to sync proto. sync_data->set_name(web_app.sync_data().name); @@ -207,8 +207,8 @@ if (local_data.has_theme_color()) web_app->SetThemeColor(local_data.theme_color()); - if (local_data.has_is_sync_placeholder()) - web_app->SetIsSyncPlaceholder(local_data.is_sync_placeholder()); + if (local_data.has_is_in_sync_install()) + web_app->SetIsInSyncInstall(local_data.is_in_sync_install()); // Parse sync_data from sync proto. WebApp::SyncData parsed_sync_data;
diff --git a/chrome/browser/web_applications/web_app_database_unittest.cc b/chrome/browser/web_applications/web_app_database_unittest.cc index 9c5008e..bc672c4 100644 --- a/chrome/browser/web_applications/web_app_database_unittest.cc +++ b/chrome/browser/web_applications/web_app_database_unittest.cc
@@ -71,7 +71,7 @@ app->SetScope(GURL(scope)); app->SetThemeColor(theme_color); app->SetIsLocallyInstalled(!(suffix & 2)); - app->SetIsSyncPlaceholder(!(suffix & 4)); + app->SetIsInSyncInstall(!(suffix & 4)); app->SetDisplayMode((suffix & 1) ? blink::mojom::DisplayMode::kBrowser : blink::mojom::DisplayMode::kStandalone); @@ -271,7 +271,7 @@ EXPECT_TRUE(app->scope().is_empty()); EXPECT_FALSE(app->theme_color().has_value()); EXPECT_TRUE(app->icons().empty()); - EXPECT_FALSE(app->is_sync_placeholder()); + EXPECT_FALSE(app->is_in_sync_install()); EXPECT_TRUE(app->sync_data().name.empty()); EXPECT_FALSE(app->sync_data().theme_color.has_value()); controller().RegisterApp(std::move(app)); @@ -299,7 +299,7 @@ EXPECT_TRUE(app_copy->scope().is_empty()); EXPECT_FALSE(app_copy->theme_color().has_value()); EXPECT_TRUE(app_copy->icons().empty()); - EXPECT_FALSE(app_copy->is_sync_placeholder()); + EXPECT_FALSE(app_copy->is_in_sync_install()); EXPECT_TRUE(app_copy->sync_data().name.empty()); EXPECT_FALSE(app_copy->sync_data().theme_color.has_value()); }
diff --git a/chrome/browser/web_applications/web_app_icon_manager.cc b/chrome/browser/web_applications/web_app_icon_manager.cc index 0809b49c..f983eb9 100644 --- a/chrome/browser/web_applications/web_app_icon_manager.cc +++ b/chrome/browser/web_applications/web_app_icon_manager.cc
@@ -60,7 +60,7 @@ bool WriteIcon(FileUtilsWrapper* utils, const base::FilePath& icons_dir, - const WebApplicationInfo::IconInfo& icon_info) { + const WebApplicationIconInfo& icon_info) { base::FilePath icon_file = icons_dir.AppendASCII(base::StringPrintf("%i.png", icon_info.width)); @@ -91,7 +91,7 @@ return false; } - for (const WebApplicationInfo::IconInfo& icon_info : web_app_info.icons) { + for (const WebApplicationIconInfo& icon_info : web_app_info.icons) { // Skip unfetched bitmaps. if (icon_info.data.colorType() == kUnknown_SkColorType) continue;
diff --git a/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc b/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc index eb16b5f..e754b0de 100644 --- a/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc +++ b/chrome/browser/web_applications/web_app_icon_manager_browsertest.cc
@@ -68,7 +68,7 @@ web_application_info->open_as_window = true; { - WebApplicationInfo::IconInfo info; + WebApplicationIconInfo info; info.width = icon_size::k32; info.height = icon_size::k32; info.data.allocN32Pixels(info.width, info.height, true);
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc index f572d327f..5cf695d 100644 --- a/chrome/browser/web_applications/web_app_install_finalizer.cc +++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -67,7 +67,7 @@ void SetIcons(const WebApplicationInfo& web_app_info, WebApp* web_app) { WebApp::Icons web_app_icons; - for (const WebApplicationInfo::IconInfo& icon_info : web_app_info.icons) { + for (const WebApplicationIconInfo& icon_info : web_app_info.icons) { // Skip unfetched bitmaps. if (icon_info.data.colorType() == kUnknown_SkColorType) continue; @@ -130,7 +130,7 @@ SetIcons(web_app_info, web_app.get()); - web_app->SetIsSyncPlaceholder(false); + web_app->SetIsInSyncInstall(false); WebApp::SyncData sync_data; sync_data.name = base::UTF16ToUTF8(web_app_info.title); sync_data.theme_color = web_app_info.theme_color;
diff --git a/chrome/browser/web_applications/web_app_install_manager_unittest.cc b/chrome/browser/web_applications/web_app_install_manager_unittest.cc index 760697d..7c242806 100644 --- a/chrome/browser/web_applications/web_app_install_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
@@ -61,7 +61,7 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfo(const GURL& url) { auto web_app_info = std::make_unique<WebApplicationInfo>(); web_app_info->app_url = url; - WebApplicationInfo::IconInfo icon_info; + WebApplicationIconInfo icon_info; icon_info.url = kIconUrl; icon_info.width = icon_size::k256; web_app_info->icons.push_back(std::move(icon_info));
diff --git a/chrome/browser/web_applications/web_app_install_task_unittest.cc b/chrome/browser/web_applications/web_app_install_task_unittest.cc index c9d21e20..3fe7279e 100644 --- a/chrome/browser/web_applications/web_app_install_task_unittest.cc +++ b/chrome/browser/web_applications/web_app_install_task_unittest.cc
@@ -82,7 +82,7 @@ for (int size_px : kIconSizes) { int num_icons_for_size = std::count_if(web_app_info.icons.begin(), web_app_info.icons.end(), - [&size_px](const WebApplicationInfo::IconInfo& icon) { + [&size_px](const WebApplicationIconInfo& icon) { return icon.width == size_px && icon.height == size_px; }); if (num_icons_for_size != 1) @@ -558,7 +558,7 @@ // Make sure that icons have been generated for all sub sizes. EXPECT_TRUE(ContainsOneIconOfEachSize(*web_app_info)); - for (const WebApplicationInfo::IconInfo& icon : web_app_info->icons) { + for (const WebApplicationIconInfo& icon : web_app_info->icons) { EXPECT_FALSE(icon.data.drawsNothing()); EXPECT_EQ(color, icon.data.getColor(0, 0)); @@ -587,7 +587,7 @@ // Make sure that icons have been generated for all sizes. EXPECT_TRUE(ContainsOneIconOfEachSize(*web_app_info)); - for (const WebApplicationInfo::IconInfo& icon : web_app_info->icons) { + for (const WebApplicationIconInfo& icon : web_app_info->icons) { EXPECT_FALSE(icon.data.drawsNothing()); // Since all icons are generated, they should have an empty url. EXPECT_TRUE(icon.url.is_empty()); @@ -610,7 +610,7 @@ // Generate one icon as if it was fetched from renderer. { - WebApplicationInfo::IconInfo icon_info = GenerateIconInfo( + WebApplicationIconInfo icon_info = GenerateIconInfo( GURL("https://example.com/app.ico"), original_icon_size_px, color); data_retriever_->web_app_info().icons.push_back(std::move(icon_info)); } @@ -841,7 +841,7 @@ bitmap.allocN32Pixels(icon_size::k256, icon_size::k128); bitmap.eraseColor(SK_ColorRED); - WebApplicationInfo::IconInfo icon_info; + WebApplicationIconInfo icon_info; icon_info.url = GURL("https://example.com/path/bad.ico"); icon_info.width = icon_size::k256; icon_info.height = icon_size::k128; @@ -863,7 +863,7 @@ EXPECT_TRUE(ContainsOneIconOfEachSize(*final_web_app_info)); // Make sure no red non-square icons, only square yellow ones. - for (const WebApplicationInfo::IconInfo& icon : + for (const WebApplicationIconInfo& icon : final_web_app_info->icons) { EXPECT_FALSE(icon.data.drawsNothing()); EXPECT_EQ(SK_ColorYELLOW, icon.data.getColor(0, 0)); @@ -895,12 +895,12 @@ auto web_app_info = std::make_unique<WebApplicationInfo>(); web_app_info->app_url = url; - WebApplicationInfo::IconInfo icon1_info; + WebApplicationIconInfo icon1_info; icon1_info.url = icon1_url; icon1_info.width = icon_size::k128; web_app_info->icons.push_back(std::move(icon1_info)); - WebApplicationInfo::IconInfo icon2_info; + WebApplicationIconInfo icon2_info; icon2_info.url = icon2_url; icon2_info.width = icon_size::k256; web_app_info->icons.push_back(std::move(icon2_info)); @@ -979,7 +979,7 @@ // Make sure that icons have been generated for all sub sizes. EXPECT_TRUE(ContainsOneIconOfEachSize(*final_web_app_info)); - for (const WebApplicationInfo::IconInfo& icon : + for (const WebApplicationIconInfo& icon : final_web_app_info->icons) { EXPECT_FALSE(icon.data.drawsNothing()); EXPECT_TRUE(icon.url.is_empty()); @@ -1012,7 +1012,7 @@ // Make sure that icons have been generated for all sub sizes. EXPECT_TRUE(ContainsOneIconOfEachSize(*final_web_app_info)); - for (const WebApplicationInfo::IconInfo& icon : + for (const WebApplicationIconInfo& icon : final_web_app_info->icons) { EXPECT_FALSE(icon.data.drawsNothing()); EXPECT_TRUE(icon.url.is_empty());
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.cc b/chrome/browser/web_applications/web_app_sync_bridge.cc index 851a3ee0..adabeb6e 100644 --- a/chrome/browser/web_applications/web_app_sync_bridge.cc +++ b/chrome/browser/web_applications/web_app_sync_bridge.cc
@@ -374,9 +374,9 @@ // storage. auto web_app = std::make_unique<WebApp>(app_id); - // Request a followup sync-initiated install for this placeholder to fetch + // Request a followup sync-initiated install for this stub app to fetch // full local data and all the icons. - web_app->SetIsSyncPlaceholder(true); + web_app->SetIsInSyncInstall(true); ApplySyncDataToApp(specifics, web_app.get());
diff --git a/chrome/common/mac/app_shim.mojom b/chrome/common/mac/app_shim.mojom index 6ae2987..6a437e4 100644 --- a/chrome/common/mac/app_shim.mojom +++ b/chrome/common/mac/app_shim.mojom
@@ -102,9 +102,9 @@ // process is requesting to be associated with the given profile and app_id. // Once the profile and app_id are stored, and all future messages from the // app shim relate to this app. - OnShimConnected(AppShimHost& host_request, + OnShimConnected(pending_receiver<AppShimHost> host_receiver, AppShimInfo app_shim_info) => (AppShimLaunchResult launch_result, - AppShim& app_shim_request); + pending_receiver<AppShim> app_shim_receiver); };
diff --git a/chrome/common/media_router/mojom/media_router.mojom b/chrome/common/media_router/mojom/media_router.mojom index d0a17b4..db71313 100644 --- a/chrome/common/media_router/mojom/media_router.mojom +++ b/chrome/common/media_router/mojom/media_router.mojom
@@ -573,8 +573,11 @@ // can be used to access the MediaRemoter to control a media remoting session // and send RPC messages to the remote device. |remoting_source| is bound to // receive the updates/messages from MediaRemoter. - OnMediaRemoterCreated(int32 tab_id, media.mojom.MirrorServiceRemoter remoter, - media.mojom.MirrorServiceRemotingSource& remoting_source); + OnMediaRemoterCreated( + int32 tab_id, + pending_remote<media.mojom.MirrorServiceRemoter> remoter, + pending_receiver<media.mojom.MirrorServiceRemotingSource> + remoting_source); // Returns current status of media sink service in JSON format. GetMediaSinkServiceStatus() => (string status);
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 7452ee3..0a1f468a 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -2812,4 +2812,9 @@ const char kHatsSurveyMetadata[] = "hats.survey_metadata"; #endif // !defined(OS_ANDROID) +// TODO(crbug.com/1000977, crbug.com/1000984): Remove this during M81:83. +const char kCorsMitigationList[] = "cors.mitigation.list"; +// TODO(crbug.com/1001450): Remove this once we fully shipped OOR-CORS. +const char kCorsLegacyModeEnabled[] = "cors.legacy_mode.enabled"; + } // namespace prefs
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index cb9d628..f0b5d5b 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -994,6 +994,9 @@ extern const char kHatsSurveyMetadata[]; #endif // !defined(OS_ANDROID) +extern const char kCorsMitigationList[]; +extern const char kCorsLegacyModeEnabled[]; + } // namespace prefs #endif // CHROME_COMMON_PREF_NAMES_H_
diff --git a/chrome/common/web_application_info.cc b/chrome/common/web_application_info.cc index 40406c71..340eeb36 100644 --- a/chrome/common/web_application_info.cc +++ b/chrome/common/web_application_info.cc
@@ -4,11 +4,9 @@ #include "chrome/common/web_application_info.h" -WebApplicationInfo::IconInfo::IconInfo() : width(0), height(0) { -} +WebApplicationIconInfo::WebApplicationIconInfo() : width(0), height(0) {} -WebApplicationInfo::IconInfo::~IconInfo() { -} +WebApplicationIconInfo::~WebApplicationIconInfo() = default; WebApplicationInfo::WebApplicationInfo() : mobile_capable(MOBILE_CAPABLE_UNSPECIFIED), @@ -18,5 +16,4 @@ WebApplicationInfo::WebApplicationInfo(const WebApplicationInfo& other) = default; -WebApplicationInfo::~WebApplicationInfo() { -} +WebApplicationInfo::~WebApplicationInfo() = default;
diff --git a/chrome/common/web_application_info.h b/chrome/common/web_application_info.h index a270efc..1d75589 100644 --- a/chrome/common/web_application_info.h +++ b/chrome/common/web_application_info.h
@@ -17,18 +17,18 @@ #include "ui/gfx/geometry/size.h" #include "url/gurl.h" +struct WebApplicationIconInfo { + WebApplicationIconInfo(); + ~WebApplicationIconInfo(); + + GURL url; + int width; + int height; + SkBitmap data; +}; + // Structure used when installing a web page as an app. struct WebApplicationInfo { - struct IconInfo { - IconInfo(); - ~IconInfo(); - - GURL url; - int width; - int height; - SkBitmap data; - }; - enum MobileCapable { MOBILE_CAPABLE_UNSPECIFIED, MOBILE_CAPABLE, @@ -52,7 +52,7 @@ GURL scope; // Set of available icons. - std::vector<IconInfo> icons; + std::vector<WebApplicationIconInfo> icons; // Whether the page is marked as mobile-capable, including apple specific meta // tag.
diff --git a/chrome/common/web_application_info_provider_param_traits.h b/chrome/common/web_application_info_provider_param_traits.h index 509d8a9..f23ff91 100644 --- a/chrome/common/web_application_info_provider_param_traits.h +++ b/chrome/common/web_application_info_provider_param_traits.h
@@ -2,13 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// NOLINT(build/header_guard) +// no-include-guard-because-multiply-included + #include "chrome/common/web_application_info.h" #include "ipc/ipc_message_macros.h" IPC_ENUM_TRAITS_MAX_VALUE(WebApplicationInfo::MobileCapable, WebApplicationInfo::MOBILE_CAPABLE_APPLE) -IPC_STRUCT_TRAITS_BEGIN(WebApplicationInfo::IconInfo) +IPC_STRUCT_TRAITS_BEGIN(WebApplicationIconInfo) IPC_STRUCT_TRAITS_MEMBER(url) IPC_STRUCT_TRAITS_MEMBER(width) IPC_STRUCT_TRAITS_MEMBER(height)
diff --git a/chrome/renderer/web_apps.cc b/chrome/renderer/web_apps.cc index 2be769c..b79fb0c6 100644 --- a/chrome/renderer/web_apps.cc +++ b/chrome/renderer/web_apps.cc
@@ -32,7 +32,7 @@ namespace { void AddInstallIcon(const WebElement& link, - std::vector<WebApplicationInfo::IconInfo>* icons) { + std::vector<WebApplicationIconInfo>* icons) { WebString href = link.GetAttribute("href"); if (href.IsNull() || href.IsEmpty()) return; @@ -42,7 +42,7 @@ if (!url.is_valid()) return; - WebApplicationInfo::IconInfo icon_info; + WebApplicationIconInfo icon_info; if (link.HasAttribute("sizes")) { blink::WebVector<blink::WebSize> icon_sizes = blink::WebIconSizesParser::ParseIconSizes(link.GetAttribute("sizes"));
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 8ae0d968..cfeeefc 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -667,6 +667,7 @@ "//chrome/browser/devtools:test_support", "//chrome/browser/notifications/scheduler/test:test_support", "//chrome/browser/profiling_host:profiling_browsertests", + "//chrome/browser/resources:browser_tests", "//chrome/browser/web_applications:browser_tests", "//chrome/browser/web_applications/extensions:browser_tests", "//chrome/renderer", @@ -3608,7 +3609,6 @@ if (is_android) { sources += [ - "../browser/android/customtabs/dynamicmodule/module_metrics_unittest.cc", "../browser/android/search_permissions/search_permissions_service_unittest.cc", "../browser/autofill/address_accessory_controller_impl_unittest.cc", "../browser/autofill/autofill_credit_card_filling_infobar_delegate_mobile_unittest.cc",
diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn index e275db6..d439726b 100644 --- a/chrome/test/android/BUILD.gn +++ b/chrome/test/android/BUILD.gn
@@ -100,8 +100,10 @@ "javatests/src/org/chromium/chrome/test/ChromeJUnit4ClassRunner.java", "javatests/src/org/chromium/chrome/test/ChromeJUnit4RunnerDelegate.java", "javatests/src/org/chromium/chrome/test/ChromeTabbedActivityTestRule.java", + "javatests/src/org/chromium/chrome/test/DisableNativeTestRule.java", "javatests/src/org/chromium/chrome/test/gcore/MockChromeGoogleApiClient.java", "javatests/src/org/chromium/chrome/test/invalidation/IntentSavingContext.java", + "javatests/src/org/chromium/chrome/test/LoadNative.java", "javatests/src/org/chromium/chrome/test/MultiActivityTestRule.java", "javatests/src/org/chromium/chrome/test/omaha/AttributeFinder.java", "javatests/src/org/chromium/chrome/test/omaha/MockRequestGenerator.java", @@ -110,10 +112,8 @@ "javatests/src/org/chromium/chrome/test/ReducedModeNativeTestRule.java", "javatests/src/org/chromium/chrome/test/TestContentProvider.java", "javatests/src/org/chromium/chrome/test/ui/DisableAnimationsTestRule.java", - "javatests/src/org/chromium/chrome/test/ui/DisableNativeTestRule.java", "javatests/src/org/chromium/chrome/test/ui/DummyUiActivity.java", "javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java", - "javatests/src/org/chromium/chrome/test/ui/LoadNative.java", "javatests/src/org/chromium/chrome/test/util/ActivityUtils.java", "javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java", "javatests/src/org/chromium/chrome/test/util/BookmarkTestUtil.java",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/DisableNativeTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/DisableNativeTestRule.java similarity index 97% rename from chrome/test/android/javatests/src/org/chromium/chrome/test/ui/DisableNativeTestRule.java rename to chrome/test/android/javatests/src/org/chromium/chrome/test/DisableNativeTestRule.java index a3707c0..b339676e 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/DisableNativeTestRule.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/DisableNativeTestRule.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.test.ui; +package org.chromium.chrome.test; import org.junit.rules.TestRule; import org.junit.runner.Description;
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/LoadNative.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/LoadNative.java similarity index 93% rename from chrome/test/android/javatests/src/org/chromium/chrome/test/ui/LoadNative.java rename to chrome/test/android/javatests/src/org/chromium/chrome/test/LoadNative.java index 99bf901..24724662 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/LoadNative.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/LoadNative.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.test.ui; +package org.chromium.chrome.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention;
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java index 2d83273..eaa3af83 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java
@@ -13,6 +13,8 @@ import org.junit.runner.Description; import org.junit.runners.model.Statement; +import org.chromium.chrome.test.DisableNativeTestRule; + /** * Test case to instrument DummyUiActivity for UI testing scenarios. * Recommend to use setUpTest() and tearDownTest() to setup and tear down instead of @Before and
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc index d2b1e6c..b524cddd 100644 --- a/chrome/test/base/testing_profile.cc +++ b/chrome/test/base/testing_profile.cc
@@ -121,6 +121,7 @@ #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_test_util.h" +#include "services/network/public/cpp/features.h" #include "services/network/test/test_network_connection_tracker.h" #include "services/service_manager/public/cpp/service.h" #include "testing/gmock/include/gmock/gmock.h" @@ -1006,6 +1007,10 @@ start_time_ = creation_time; } +bool TestingProfile::ShouldEnableOutOfBlinkCors() { + return network::features::ShouldEnableOutOfBlinkCorsForTesting(); +} + PrefService* TestingProfile::GetOffTheRecordPrefs() { return nullptr; }
diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h index 2e354ad..3c127cc7 100644 --- a/chrome/test/base/testing_profile.h +++ b/chrome/test/base/testing_profile.h
@@ -45,6 +45,10 @@ #endif // !defined(OS_ANDROID) } // namespace content +namespace net { +class CookieStore; +} + namespace policy { class PolicyService; class ProfilePolicyConnector; @@ -374,6 +378,7 @@ GURL GetHomePage() override; void SetCreationTimeForTesting(base::Time creation_time) override; + bool ShouldEnableOutOfBlinkCors() override; PrefService* GetOffTheRecordPrefs() override;
diff --git a/chrome/test/base/web_ui_browser_test.cc b/chrome/test/base/web_ui_browser_test.cc index 0cceb38..611dd7d 100644 --- a/chrome/test/base/web_ui_browser_test.cc +++ b/chrome/test/base/web_ui_browser_test.cc
@@ -34,6 +34,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_message_handler.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/common/url_constants.h" #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 1418b1f..c402b88c 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -5295,5 +5295,21 @@ "pref_mappings": [ { "pref": "ssl.tls13_hardening_for_local_anchors", "local_state": true } ] + }, + + "CorsMitigationList": { + "os": ["win", "linux", "mac", "chromeos", "android"], + "test_policy": { "CorsMitigationList": ["x-googapps-allowed-domains", "youtube-restrict"] }, + "pref_mappings": [ + { "pref": "cors.mitigation.list" } + ] + }, + + "CorsLegacyModeEnabled": { + "os": ["win", "linux", "mac", "chromeos", "android"], + "test_policy": { "CorsLegacyModeEnabled": true }, + "pref_mappings": [ + { "pref": "cors.legacy_mode.enabled" } + ] } }
diff --git a/chrome/test/ppapi/ppapi_browsertest.cc b/chrome/test/ppapi/ppapi_browsertest.cc index 88ca3ffc..cc77a991 100644 --- a/chrome/test/ppapi/ppapi_browsertest.cc +++ b/chrome/test/ppapi/ppapi_browsertest.cc
@@ -439,8 +439,7 @@ network::mojom::NetworkContext::CreateTCPConnectedSocketCallback callback) : tcp_failure_type_(tcp_failure_type), observer_(std::move(observer)), - receiver_(this, std::move(receiver)), - tls_client_socket_binding_(this) { + receiver_(this, std::move(receiver)) { if (tcp_failure_type_ == TCPFailureType::kConnectError) { std::move(callback).Run( net::ERR_FAILED, base::nullopt /* local_addr */, @@ -473,8 +472,7 @@ network::mojom::TCPServerSocket::AcceptCallback callback) : tcp_failure_type_(tcp_failure_type), observer_(std::move(observer)), - receiver_(this), - tls_client_socket_binding_(this) { + receiver_(this) { if (tcp_failure_type_ == TCPFailureType::kAcceptError) { std::move(callback).Run( net::ERR_FAILED, base::nullopt /* remote_addr */, @@ -510,7 +508,7 @@ const net::HostPortPair& host_port_pair, network::mojom::TLSClientSocketOptionsPtr socket_options, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - network::mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<network::mojom::TLSClientSocket> receiver, mojo::PendingRemote<network::mojom::SocketObserver> observer, network::mojom::TCPConnectedSocket::UpgradeToTLSCallback callback) override { @@ -519,7 +517,7 @@ // Succeed or fail, keep these pipes open (Their state shouldn't matter when // checking for failures). observer_.Bind(std::move(observer)); - tls_client_socket_binding_.Bind(std::move(request)); + tls_client_socket_receiver_.Bind(std::move(receiver)); if (tcp_failure_type_ == TCPFailureType::kUpgradeToTLSClosePipe) { receiver_.reset(); @@ -632,7 +630,8 @@ mojo::ScopedDataPipeConsumerHandle send_pipe_handle_; mojo::Receiver<network::mojom::TCPConnectedSocket> receiver_; - mojo::Binding<network::mojom::TLSClientSocket> tls_client_socket_binding_; + mojo::Receiver<network::mojom::TLSClientSocket> tls_client_socket_receiver_{ + this}; DISALLOW_COPY_AND_ASSIGN(MockTCPConnectedSocket); };
diff --git a/chromecast/browser/DEPS b/chromecast/browser/DEPS index 294a171..8854a67 100644 --- a/chromecast/browser/DEPS +++ b/chromecast/browser/DEPS
@@ -53,6 +53,7 @@ "+services/network/public/cpp", "+services/service_manager/public", "+services/service_manager/embedder", + "+storage/browser/quota/quota_settings.h", "+third_party/blink/public/common", "+third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h", "+third_party/blink/public/mojom/messaging",
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc index b36acd6..63b7d07 100644 --- a/chromecast/browser/cast_browser_main_parts.cc +++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -21,6 +21,7 @@ #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/stl_util.h" +#include "base/strings/string_split.h" #include "base/task/post_task.h" #include "base/threading/thread.h" #include "base/threading/thread_task_runner_handle.h"
diff --git a/chromecast/browser/cast_content_browser_client.h b/chromecast/browser/cast_content_browser_client.h index b270694c..9ad95ee 100644 --- a/chromecast/browser/cast_content_browser_client.h +++ b/chromecast/browser/cast_content_browser_client.h
@@ -20,8 +20,10 @@ #include "content/public/browser/certificate_request_result_type.h" #include "content/public/browser/content_browser_client.h" #include "media/mojo/mojom/renderer.mojom.h" +#include "net/url_request/url_request_context.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/mojom/interface_provider.mojom-forward.h" +#include "storage/browser/quota/quota_settings.h" class PrefService;
diff --git a/chromecast/browser/cast_download_manager_delegate.cc b/chromecast/browser/cast_download_manager_delegate.cc index 553f730..4363f03e1 100644 --- a/chromecast/browser/cast_download_manager_delegate.cc +++ b/chromecast/browser/cast_download_manager_delegate.cc
@@ -43,7 +43,7 @@ bool CastDownloadManagerDelegate::ShouldCompleteDownload( download::DownloadItem* item, - const base::Closure& callback) { + base::OnceClosure callback) { return false; }
diff --git a/chromecast/browser/cast_download_manager_delegate.h b/chromecast/browser/cast_download_manager_delegate.h index 9d978996..da4d875 100644 --- a/chromecast/browser/cast_download_manager_delegate.h +++ b/chromecast/browser/cast_download_manager_delegate.h
@@ -25,7 +25,7 @@ const content::DownloadTargetCallback& callback) override; bool ShouldOpenFileBasedOnExtension(const base::FilePath& path) override; bool ShouldCompleteDownload(download::DownloadItem* item, - const base::Closure& complete_callback) override; + base::OnceClosure complete_callback) override; bool ShouldOpenDownload( download::DownloadItem* item, const content::DownloadOpenDelayedCallback& callback) override;
diff --git a/chromecast/browser/cast_network_contexts.cc b/chromecast/browser/cast_network_contexts.cc index 633697e..07841fdc 100644 --- a/chromecast/browser/cast_network_contexts.cc +++ b/chromecast/browser/cast_network_contexts.cc
@@ -250,9 +250,9 @@ proxy_config_client.InitWithNewPipeAndPassReceiver(); proxy_config_client_set_.Add(std::move(proxy_config_client)); - poller_binding_set_.AddBinding( - this, - mojo::MakeRequest(&network_context_params->proxy_config_poller_client)); + poller_receiver_set_.Add(this, + network_context_params->proxy_config_poller_client + .InitWithNewPipeAndPassReceiver()); net::ProxyConfigWithAnnotation proxy_config; net::ProxyConfigService::ConfigAvailability availability =
diff --git a/chromecast/browser/cast_network_contexts.h b/chromecast/browser/cast_network_contexts.h index 89498402..18ffe830 100644 --- a/chromecast/browser/cast_network_contexts.h +++ b/chromecast/browser/cast_network_contexts.h
@@ -11,7 +11,7 @@ #include "base/memory/scoped_refptr.h" #include "content/public/browser/browser_thread.h" -#include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/receiver_set.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote_set.h" #include "net/proxy_resolution/proxy_config_service.h" @@ -122,7 +122,8 @@ // Monitors prefs related to proxy configuration. std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_impl_; - mojo::BindingSet<network::mojom::ProxyConfigPollerClient> poller_binding_set_; + mojo::ReceiverSet<network::mojom::ProxyConfigPollerClient> + poller_receiver_set_; mojo::RemoteSet<network::mojom::ProxyConfigClient> proxy_config_client_set_; DISALLOW_COPY_AND_ASSIGN(CastNetworkContexts);
diff --git a/chromecast/browser/url_request_context_factory.h b/chromecast/browser/url_request_context_factory.h index 92d7bcf5..15d9afa 100644 --- a/chromecast/browser/url_request_context_factory.h +++ b/chromecast/browser/url_request_context_factory.h
@@ -25,6 +25,7 @@ class HttpUserAgentSettings; class NetLog; class ProxyConfigService; +class URLRequestContextGetter; class URLRequestJobFactory; } // namespace net
diff --git a/chromecast/tracing/tracing_service_main.cc b/chromecast/tracing/tracing_service_main.cc index 21bc2847..9af57694 100644 --- a/chromecast/tracing/tracing_service_main.cc +++ b/chromecast/tracing/tracing_service_main.cc
@@ -20,6 +20,7 @@ #include "base/message_loop/message_pump_type.h" #include "base/posix/eintr_wrapper.h" #include "base/posix/unix_domain_socket.h" +#include "base/run_loop.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/task/single_thread_task_executor.h"
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc index 8a19b21..98c4fd547 100644 --- a/chromeos/constants/chromeos_features.cc +++ b/chromeos/constants/chromeos_features.cc
@@ -212,6 +212,12 @@ const base::Feature kSplitSettings{"SplitSettings", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enables separate sync controls for OS settings (display, keyboard, etc.). +// For example, the user could choose to sync OS settings but not browser +// settings. +const base::Feature kSplitSettingsSync{"SplitSettingsSync", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables the updated cellular activation UI; see go/cros-cellular-design. const base::Feature kUpdatedCellularActivationUi{ "UpdatedCellularActivationUi", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -265,6 +271,10 @@ return base::FeatureList::IsEnabled(kSplitSettings); } +bool IsSplitSettingsSyncEnabled() { + return base::FeatureList::IsEnabled(kSplitSettingsSync); +} + bool ShouldShowPlayStoreInDemoMode() { return base::FeatureList::IsEnabled(kShowPlayInDemoMode); }
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h index fe144ca..b5aca653 100644 --- a/chromeos/constants/chromeos_features.h +++ b/chromeos/constants/chromeos_features.h
@@ -100,6 +100,8 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kSplitSettings; COMPONENT_EXPORT(CHROMEOS_CONSTANTS) +extern const base::Feature kSplitSettingsSync; +COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kUpdatedCellularActivationUi; COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kUseMessagesGoogleComDomain; @@ -121,6 +123,7 @@ bool IsInstantTetheringBackgroundAdvertisingSupported(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsParentalControlsSettingsEnabled(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsSplitSettingsEnabled(); +COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsSplitSettingsSyncEnabled(); // TODO(michaelpg): Remove after M71 branch to re-enable Play Store by default. COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool ShouldShowPlayStoreInDemoMode();
diff --git a/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc b/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc index 860107a..16d5c6d7 100644 --- a/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc +++ b/chromeos/services/machine_learning/public/cpp/fake_service_connection.cc
@@ -16,17 +16,17 @@ void FakeServiceConnectionImpl::LoadBuiltinModel( mojom::BuiltinModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadBuiltinModelCallback callback) { - model_bindings_.AddBinding(this, std::move(request)); + model_receivers_.Add(this, std::move(receiver)); std::move(callback).Run(mojom::LoadModelResult::OK); } void FakeServiceConnectionImpl::LoadFlatBufferModel( mojom::FlatBufferModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadFlatBufferModelCallback callback) { - model_bindings_.AddBinding(this, std::move(request)); + model_receivers_.Add(this, std::move(receiver)); std::move(callback).Run(mojom::LoadModelResult::OK); }
diff --git a/chromeos/services/machine_learning/public/cpp/fake_service_connection.h b/chromeos/services/machine_learning/public/cpp/fake_service_connection.h index 34ae28b6..9c49768 100644 --- a/chromeos/services/machine_learning/public/cpp/fake_service_connection.h +++ b/chromeos/services/machine_learning/public/cpp/fake_service_connection.h
@@ -14,6 +14,8 @@ #include "chromeos/services/machine_learning/public/mojom/model.mojom.h" #include "chromeos/services/machine_learning/public/mojom/tensor.mojom.h" #include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver_set.h" namespace chromeos { namespace machine_learning { @@ -31,14 +33,14 @@ ~FakeServiceConnectionImpl() override; // It's safe to execute LoadBuiltinModel and LoadFlatBufferModel for multi - // times, but all the requests will be bound to the same instance. + // times, but all the receivers will be bound to the same instance. void LoadBuiltinModel(mojom::BuiltinModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadBuiltinModelCallback callback) override; void LoadFlatBufferModel( mojom::FlatBufferModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadFlatBufferModelCallback callback) override; @@ -58,7 +60,7 @@ const std::vector<double>& value); private: - mojo::BindingSet<mojom::Model> model_bindings_; + mojo::ReceiverSet<mojom::Model> model_receivers_; mojo::BindingSet<mojom::GraphExecutor> graph_bindings_; mojom::TensorPtr execute_result_;
diff --git a/chromeos/services/machine_learning/public/cpp/service_connection.cc b/chromeos/services/machine_learning/public/cpp/service_connection.cc index 6c05db3..3955cb8b 100644 --- a/chromeos/services/machine_learning/public/cpp/service_connection.cc +++ b/chromeos/services/machine_learning/public/cpp/service_connection.cc
@@ -28,13 +28,13 @@ ~ServiceConnectionImpl() override = default; void LoadBuiltinModel(mojom::BuiltinModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadBuiltinModelCallback result_callback) override; void LoadFlatBufferModel( mojom::FlatBufferModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadFlatBufferModelCallback result_callback) override; @@ -60,23 +60,23 @@ void ServiceConnectionImpl::LoadBuiltinModel( mojom::BuiltinModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadBuiltinModelCallback result_callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); BindMachineLearningServiceIfNeeded(); machine_learning_service_->LoadBuiltinModel( - std::move(spec), std::move(request), std::move(result_callback)); + std::move(spec), std::move(receiver), std::move(result_callback)); } void ServiceConnectionImpl::LoadFlatBufferModel( mojom::FlatBufferModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadFlatBufferModelCallback result_callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); BindMachineLearningServiceIfNeeded(); machine_learning_service_->LoadFlatBufferModel( - std::move(spec), std::move(request), std::move(result_callback)); + std::move(spec), std::move(receiver), std::move(result_callback)); } void ServiceConnectionImpl::BindMachineLearningServiceIfNeeded() {
diff --git a/chromeos/services/machine_learning/public/cpp/service_connection.h b/chromeos/services/machine_learning/public/cpp/service_connection.h index d7837fd..51ef37f4 100644 --- a/chromeos/services/machine_learning/public/cpp/service_connection.h +++ b/chromeos/services/machine_learning/public/cpp/service_connection.h
@@ -6,6 +6,7 @@ #define CHROMEOS_SERVICES_MACHINE_LEARNING_PUBLIC_CPP_SERVICE_CONNECTION_H_ #include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" namespace chromeos { namespace machine_learning { @@ -13,16 +14,16 @@ // Encapsulates a connection to the Chrome OS ML Service daemon via its Mojo // interface. // Usage for Built-in models: -// chromeos::machine_learning::mojom::ModelPtr model; +// mojo::Remote<chromeos::machine_learning::mojom::Model> model; // chromeos::machine_learning::mojom::BuiltinModelSpecPtr spec = // chromeos::machine_learning::mojom::BuiltinModelSpec::New(); // spec->id = ...; // chromeos::machine_learning::ServiceConnection::GetInstance() -// ->LoadBuiltinModel(std::move(spec), mojom::MakeRequest(&model), +// ->LoadBuiltinModel(std::move(spec), model.BindNewPipeAndPassReceiver(), // base::BindOnce(&MyCallBack)); // // Use |model| or wait for |MyCallBack|. // Usage for Flatbuffer models: -// chromeos::machine_learning::mojom::ModelPtr model; +// mojo::Remote<chromeos::machine_learning::mojom::Model> model; // chromeos::machine_learning::mojom::FlatBufferModelSpecPtr spec = // chromeos::machine_learning::mojom::FlatBufferModelSpec::New(); // spec->model_string = ...; @@ -30,7 +31,8 @@ // spec->outputs = ...; // spec->metrics_model_name = ...; // chromeos::machine_learning::ServiceConnection::GetInstance() -// ->LoadFlatBufferModel(std::move(spec), mojom::MakeRequest(&model), +// ->LoadFlatBufferModel(std::move(spec), +// model.BindNewPipeAndPassReceiver(), // base::BindOnce(&MyCallBack)); // // Sequencing: Must be used on a single sequence (may be created on another). @@ -43,20 +45,20 @@ ServiceConnection* fake_service_connection); // Instruct ML daemon to load the builtin model specified in |spec|, binding a - // Model implementation to |request|. Bootstraps the initial Mojo connection + // Model implementation to |receiver|. Bootstraps the initial Mojo connection // to the daemon if necessary. virtual void LoadBuiltinModel( mojom::BuiltinModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadBuiltinModelCallback result_callback) = 0; // Instruct ML daemon to load the flatbuffer model specified in |spec|, - // binding a Model implementation to |request|. Bootstraps the initial Mojo + // binding a Model implementation to |receiver|. Bootstraps the initial Mojo // connection to the daemon if necessary. virtual void LoadFlatBufferModel( mojom::FlatBufferModelSpecPtr spec, - mojom::ModelRequest request, + mojo::PendingReceiver<mojom::Model> receiver, mojom::MachineLearningService::LoadFlatBufferModelCallback result_callback) = 0;
diff --git a/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc b/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc index fd685dc..a6ddfbc 100644 --- a/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc +++ b/chromeos/services/machine_learning/public/cpp/service_connection_unittest.cc
@@ -22,6 +22,7 @@ #include "mojo/core/embedder/embedder.h" #include "mojo/core/embedder/scoped_ipc_support.h" #include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/public/cpp/bindings/remote.h" #include "testing/gtest/include/gtest/gtest.h" namespace chromeos { @@ -55,27 +56,27 @@ // Tests that LoadBuiltinModel runs OK (no crash) in a basic Mojo // environment. TEST_F(ServiceConnectionTest, LoadBuiltinModel) { - mojom::ModelPtr model; + mojo::Remote<mojom::Model> model; mojom::BuiltinModelSpecPtr spec = mojom::BuiltinModelSpec::New(mojom::BuiltinModelId::TEST_MODEL); ServiceConnection::GetInstance()->LoadBuiltinModel( - std::move(spec), mojo::MakeRequest(&model), + std::move(spec), model.BindNewPipeAndPassReceiver(), base::BindOnce([](mojom::LoadModelResult result) {})); } // Tests that LoadFlatBufferModel runs OK (no crash) in a basic Mojo // environment. TEST_F(ServiceConnectionTest, LoadFlatBufferModel) { - mojom::ModelPtr model; + mojo::Remote<mojom::Model> model; mojom::FlatBufferModelSpecPtr spec = mojom::FlatBufferModelSpec::New(); ServiceConnection::GetInstance()->LoadFlatBufferModel( - std::move(spec), mojo::MakeRequest(&model), + std::move(spec), model.BindNewPipeAndPassReceiver(), base::BindOnce([](mojom::LoadModelResult result) {})); } // Tests the fake ML service for builtin model. TEST_F(ServiceConnectionTest, FakeServiceConnectionForBuiltinModel) { - mojom::ModelPtr model; + mojo::Remote<mojom::Model> model; bool callback_done = false; FakeServiceConnectionImpl fake_service_connection; ServiceConnection::UseFakeServiceConnectionForTesting( @@ -86,7 +87,7 @@ std::vector<double>{expected_value}); ServiceConnection::GetInstance()->LoadBuiltinModel( mojom::BuiltinModelSpec::New(mojom::BuiltinModelId::TEST_MODEL), - mojo::MakeRequest(&model), + model.BindNewPipeAndPassReceiver(), base::BindOnce( [](bool* callback_done, mojom::LoadModelResult result) { EXPECT_EQ(result, mojom::LoadModelResult::OK); @@ -136,7 +137,7 @@ // Tests the fake ML service for flatbuffer model. TEST_F(ServiceConnectionTest, FakeServiceConnectionForFlatBufferModel) { - mojom::ModelPtr model; + mojo::Remote<mojom::Model> model; bool callback_done = false; FakeServiceConnectionImpl fake_service_connection; ServiceConnection::UseFakeServiceConnectionForTesting( @@ -147,7 +148,7 @@ std::vector<double>{expected_value}); ServiceConnection::GetInstance()->LoadFlatBufferModel( - mojom::FlatBufferModelSpec::New(), mojo::MakeRequest(&model), + mojom::FlatBufferModelSpec::New(), model.BindNewPipeAndPassReceiver(), base::BindOnce( [](bool* callback_done, mojom::LoadModelResult result) { EXPECT_EQ(result, mojom::LoadModelResult::OK);
diff --git a/components/browser_sync/BUILD.gn b/components/browser_sync/BUILD.gn index bd6a0ef..e4e68ef8 100644 --- a/components/browser_sync/BUILD.gn +++ b/components/browser_sync/BUILD.gn
@@ -35,6 +35,10 @@ "//components/version_info", "//components/version_info:generate_version_info", ] + + if (is_chromeos) { + deps += [ "//chromeos/constants" ] + } } source_set("unit_tests") {
diff --git a/components/browser_sync/DEPS b/components/browser_sync/DEPS index f18aa14b..0ac7b8ae 100644 --- a/components/browser_sync/DEPS +++ b/components/browser_sync/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+chromeos/constants", "+components/autofill/core", "+components/bookmarks/browser", "+components/bookmarks/managed",
diff --git a/components/browser_sync/profile_sync_components_factory_impl.cc b/components/browser_sync/profile_sync_components_factory_impl.cc index 8b4002e..8c20b5cb 100644 --- a/components/browser_sync/profile_sync_components_factory_impl.cc +++ b/components/browser_sync/profile_sync_components_factory_impl.cc
@@ -48,6 +48,10 @@ #include "components/sync_sessions/session_sync_service.h" #include "components/sync_user_events/user_event_model_type_controller.h" +#if defined(OS_CHROMEOS) +#include "chromeos/constants/chromeos_features.h" +#endif + using base::FeatureList; using bookmarks::BookmarkModel; using sync_bookmarks::BookmarkChangeProcessor; @@ -329,6 +333,25 @@ } #if defined(OS_CHROMEOS) + if (chromeos::features::IsSplitSettingsSyncEnabled()) { + if (!disabled_types.Has(syncer::OS_PREFERENCES)) { + controllers.push_back( + std::make_unique<SyncableServiceBasedModelTypeController>( + syncer::OS_PREFERENCES, + sync_client_->GetModelTypeStoreService()->GetStoreFactory(), + sync_client_->GetSyncableServiceForType(syncer::OS_PREFERENCES), + dump_stack)); + } + if (!disabled_types.Has(syncer::OS_PRIORITY_PREFERENCES)) { + controllers.push_back( + std::make_unique<SyncableServiceBasedModelTypeController>( + syncer::OS_PRIORITY_PREFERENCES, + sync_client_->GetModelTypeStoreService()->GetStoreFactory(), + sync_client_->GetSyncableServiceForType( + syncer::OS_PRIORITY_PREFERENCES), + dump_stack)); + } + } if (!disabled_types.Has(syncer::PRINTERS)) { controllers.push_back( CreateModelTypeControllerForModelRunningOnUIThread(syncer::PRINTERS)); @@ -342,7 +365,7 @@ ->GetControllerDelegateForModelType(syncer::WIFI_CONFIGURATIONS) .get()))); } -#endif +#endif // defined(OS_CHROMEOS) // Reading list sync is enabled by default only on iOS. Register unless // Reading List or Reading List Sync is explicitly disabled.
diff --git a/components/cast_channel/cast_socket.cc b/components/cast_channel/cast_socket.cc index 46211e5..7255853c 100644 --- a/components/cast_channel/cast_socket.cc +++ b/components/cast_channel/cast_socket.cc
@@ -421,7 +421,7 @@ tcp_socket_->UpgradeToTLS( host_port_pair, std::move(options), net::MutableNetworkTrafficAnnotationTag(GetNetworkTrafficAnnotationTag()), - mojo::MakeRequest(&socket_), mojo::NullRemote() /* observer */, + socket_.BindNewPipeAndPassReceiver(), mojo::NullRemote() /* observer */, base::BindOnce(&CastSocketImpl::OnUpgradeToTLS, weak_factory_.GetWeakPtr()));
diff --git a/components/cast_channel/cast_socket.h b/components/cast_channel/cast_socket.h index b49482b..6c8ce3f 100644 --- a/components/cast_channel/cast_socket.h +++ b/components/cast_channel/cast_socket.h
@@ -351,8 +351,8 @@ // Owned remote to the underlying TCP socket. mojo::Remote<network::mojom::TCPConnectedSocket> tcp_socket_; - // Owned ptr to the underlying SSL socket. - network::mojom::TLSClientSocketPtr socket_; + // Owned remote to the underlying SSL socket. + mojo::Remote<network::mojom::TLSClientSocket> socket_; // Helper class to write to the SSL socket. std::unique_ptr<MojoDataPump> mojo_data_pump_;
diff --git a/components/crash/content/browser/crash_memory_metrics_collector_android.h b/components/crash/content/browser/crash_memory_metrics_collector_android.h index d8ae25a..2c69ddf 100644 --- a/components/crash/content/browser/crash_memory_metrics_collector_android.h +++ b/components/crash/content/browser/crash_memory_metrics_collector_android.h
@@ -5,6 +5,7 @@ #ifndef COMPONENTS_CRASH_CONTENT_BROWSER_CRASH_MEMORY_METRICS_COLLECTOR_ANDROID_H_ #define COMPONENTS_CRASH_CONTENT_BROWSER_CRASH_MEMORY_METRICS_COLLECTOR_ANDROID_H_ +#include "base/supports_user_data.h" #include "components/crash/content/browser/child_exit_observer_android.h" #include "content/public/browser/content_browser_client.h" #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/components/download/internal/common/download_item_impl.cc b/components/download/internal/common/download_item_impl.cc index 6405bed..f19cfe9b 100644 --- a/components/download/internal/common/download_item_impl.cc +++ b/components/download/internal/common/download_item_impl.cc
@@ -947,7 +947,9 @@ danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT || danger_type_ == DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT || danger_type_ == DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST || - danger_type_ == DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED); + danger_type_ == DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED || + danger_type_ == DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE || + danger_type_ == DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED); } DownloadDangerType DownloadItemImpl::GetDangerType() const {
diff --git a/components/download/internal/common/download_worker.cc b/components/download/internal/common/download_worker.cc index 40b211e..3960aae 100644 --- a/components/download/internal/common/download_worker.cc +++ b/components/download/internal/common/download_worker.cc
@@ -114,7 +114,7 @@ URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr url_loader_factory_provider, UrlDownloadHandler* downloader, - const DownloadUrlParameters::OnStartedCallback& callback) { + DownloadUrlParameters::OnStartedCallback callback) { // |callback| is not used in subsequent requests. DCHECK(callback.is_null());
diff --git a/components/download/internal/common/download_worker.h b/components/download/internal/common/download_worker.h index 28e5b05f..bb91af9 100644 --- a/components/download/internal/common/download_worker.h +++ b/components/download/internal/common/download_worker.h
@@ -61,7 +61,7 @@ URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr url_loader_factory_provider, UrlDownloadHandler* downloader, - const DownloadUrlParameters::OnStartedCallback& callback) override; + DownloadUrlParameters::OnStartedCallback callback) override; void OnUrlDownloadStopped(UrlDownloadHandler* downloader) override; void OnUrlDownloadHandlerCreated( UrlDownloadHandler::UniqueUrlDownloadHandlerPtr downloader) override;
diff --git a/components/download/internal/common/in_progress_download_manager.cc b/components/download/internal/common/in_progress_download_manager.cc index c5d09e1..d9ac5f6 100644 --- a/components/download/internal/common/in_progress_download_manager.cc +++ b/components/download/internal/common/in_progress_download_manager.cc
@@ -223,12 +223,12 @@ URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr url_loader_factory_provider, UrlDownloadHandler* downloader, - const DownloadUrlParameters::OnStartedCallback& callback) { + DownloadUrlParameters::OnStartedCallback callback) { StartDownload(std::move(download_create_info), std::move(input_stream), std::move(url_loader_factory_provider), base::BindOnce(&InProgressDownloadManager::CancelUrlDownload, weak_factory_.GetWeakPtr(), downloader), - callback); + std::move(callback)); } void InProgressDownloadManager::OnUrlDownloadStopped( @@ -436,7 +436,7 @@ URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr url_loader_factory_provider, DownloadJob::CancelRequestCallback cancel_request_callback, - const DownloadUrlParameters::OnStartedCallback& on_started) { + DownloadUrlParameters::OnStartedCallback on_started) { DCHECK(info); if (info->is_new_download && @@ -471,7 +471,7 @@ // DownloadItem. if (delegate_ && !GetDownloadByGuid(info->guid)) { delegate_->StartDownloadItem( - std::move(info), on_started, + std::move(info), std::move(on_started), base::BindOnce(&InProgressDownloadManager::StartDownloadWithItem, weak_factory_.GetWeakPtr(), std::move(stream), std::move(url_loader_factory_provider),
diff --git a/components/download/internal/common/resource_downloader.cc b/components/download/internal/common/resource_downloader.cc index 1744d06f..0b728af5 100644 --- a/components/download/internal/common/resource_downloader.cc +++ b/components/download/internal/common/resource_downloader.cc
@@ -145,7 +145,7 @@ std::unique_ptr<DownloadUrlParameters> download_url_parameters, bool is_parallel_request, bool is_background_mode) { - callback_ = download_url_parameters->callback(); + callback_ = std::move(download_url_parameters->callback()); upload_callback_ = download_url_parameters->upload_callback(); guid_ = download_url_parameters->guid(); is_content_initiated_ = download_url_parameters->content_initiated(); @@ -240,7 +240,7 @@ URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr( new URLLoaderFactoryProvider(url_loader_factory_), base::OnTaskRunnerDeleter(base::ThreadTaskRunnerHandle::Get())), - this, callback_)); + this, std::move(callback_))); } void ResourceDownloader::OnReceiveRedirect() {
diff --git a/components/download/public/common/download_url_parameters.h b/components/download/public/common/download_url_parameters.h index 6ae1a4b..2ff0908 100644 --- a/components/download/public/common/download_url_parameters.h +++ b/components/download/public/common/download_url_parameters.h
@@ -57,7 +57,7 @@ // are not created when a resource throttle or a resource handler blocks the // download request. I.e. the download triggered a warning of some sort and // the user chose to not to proceed with the download as a result. - typedef base::Callback<void(DownloadItem*, DownloadInterruptReason)> + typedef base::OnceCallback<void(DownloadItem*, DownloadInterruptReason)> OnStartedCallback; typedef std::pair<std::string, std::string> RequestHeadersNameValuePair; @@ -155,7 +155,9 @@ void set_post_id(int64_t post_id) { post_id_ = post_id; } // See OnStartedCallback above. - void set_callback(const OnStartedCallback& callback) { callback_ = callback; } + void set_callback(OnStartedCallback callback) { + callback_ = std::move(callback); + } // If not empty, specifies the full target path for the download. This value // overrides the filename suggested by a Content-Disposition headers. It @@ -259,7 +261,7 @@ network_isolation_key_ = network_isolation_key; } - const OnStartedCallback& callback() const { return callback_; } + OnStartedCallback& callback() { return callback_; } bool content_initiated() const { return content_initiated_; } const std::string& last_modified() const { return last_modified_; } const std::string& etag() const { return etag_; }
diff --git a/components/download/public/common/in_progress_download_manager.h b/components/download/public/common/in_progress_download_manager.h index 366dbe2e..42b2f5a5 100644 --- a/components/download/public/common/in_progress_download_manager.h +++ b/components/download/public/common/in_progress_download_manager.h
@@ -76,7 +76,7 @@ // create the DownloadItem from in-progress cache. virtual void StartDownloadItem( std::unique_ptr<DownloadCreateInfo> info, - const DownloadUrlParameters::OnStartedCallback& on_started, + DownloadUrlParameters::OnStartedCallback on_started, StartDownloadItemCallback callback) {} }; @@ -124,13 +124,12 @@ std::unique_ptr<network::SharedURLLoaderFactoryInfo> url_loader_factory_info); - void StartDownload( - std::unique_ptr<DownloadCreateInfo> info, - std::unique_ptr<InputStream> stream, - URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr - url_loader_factory_provider, - DownloadJob::CancelRequestCallback cancel_request_callback, - const DownloadUrlParameters::OnStartedCallback& on_started); + void StartDownload(std::unique_ptr<DownloadCreateInfo> info, + std::unique_ptr<InputStream> stream, + URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr + url_loader_factory_provider, + DownloadJob::CancelRequestCallback cancel_request_callback, + DownloadUrlParameters::OnStartedCallback on_started); // Shutting down the manager and stop all downloads. void ShutDown(); @@ -213,7 +212,7 @@ URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr url_loader_factory_provider, UrlDownloadHandler* downloader, - const DownloadUrlParameters::OnStartedCallback& callback) override; + DownloadUrlParameters::OnStartedCallback callback) override; void OnUrlDownloadStopped(UrlDownloadHandler* downloader) override; void OnUrlDownloadHandlerCreated( UrlDownloadHandler::UniqueUrlDownloadHandlerPtr downloader) override;
diff --git a/components/download/public/common/url_download_handler.h b/components/download/public/common/url_download_handler.h index c2d5149..3f4a9d1 100644 --- a/components/download/public/common/url_download_handler.h +++ b/components/download/public/common/url_download_handler.h
@@ -28,7 +28,7 @@ URLLoaderFactoryProvider::URLLoaderFactoryProviderPtr url_loader_factory_provider, UrlDownloadHandler* downloader, - const DownloadUrlParameters::OnStartedCallback& callback) = 0; + DownloadUrlParameters::OnStartedCallback callback) = 0; // Called after the connection is cancelled or finished. virtual void OnUrlDownloadStopped(UrlDownloadHandler* downloader) = 0;
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc index 33f2cea..82f407d 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -17,6 +17,7 @@ #include "components/page_load_metrics/browser/page_load_tracker.h" #include "components/page_load_metrics/browser/test_metrics_web_contents_observer_embedder.h" #include "content/public/browser/navigation_handle.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/resource_load_info.mojom.h" #include "content/public/test/navigation_simulator.h"
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc index 7d9a745a..9de8d573c 100644 --- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc +++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
@@ -225,8 +225,8 @@ matched_bits.Set(TimingField::kFirstContentfulPaint); if (timing.paint_timing->first_meaningful_paint) matched_bits.Set(TimingField::kFirstMeaningfulPaint); - if (metadata.behavior_flags & blink::WebLoadingBehaviorFlag:: - kWebLoadingBehaviorDocumentWriteBlockReload) + if (metadata.behavior_flags & + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlockReload) matched_bits.Set(TimingField::kDocumentWriteBlockReload); return matched_bits;
diff --git a/components/page_load_metrics/browser/page_load_metrics_util.cc b/components/page_load_metrics/browser/page_load_metrics_util.cc index ba8c06b2..9e33a8c8 100644 --- a/components/page_load_metrics/browser/page_load_metrics_util.cc +++ b/components/page_load_metrics/browser/page_load_metrics_util.cc
@@ -162,7 +162,7 @@ bool DidObserveLoadingBehaviorInAnyFrame( const PageLoadMetricsObserverDelegate& delegate, - blink::WebLoadingBehaviorFlag behavior) { + blink::LoadingBehaviorFlag behavior) { const int all_frame_loading_behavior_flags = delegate.GetMainFrameMetadata().behavior_flags | delegate.GetSubframeMetadata().behavior_flags;
diff --git a/components/page_load_metrics/browser/page_load_metrics_util.h b/components/page_load_metrics/browser/page_load_metrics_util.h index d7013c33..bee6462 100644 --- a/components/page_load_metrics/browser/page_load_metrics_util.h +++ b/components/page_load_metrics/browser/page_load_metrics_util.h
@@ -10,7 +10,7 @@ #include "base/time/time.h" #include "components/page_load_metrics/browser/page_load_metrics_observer.h" #include "components/page_load_metrics/common/page_load_metrics_util.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" // Up to 10 minutes, with 100 buckets. #define PAGE_LOAD_HISTOGRAM(name, sample) \
diff --git a/components/page_load_metrics/common/page_load_metrics.mojom b/components/page_load_metrics/common/page_load_metrics.mojom index 6ccfaf4..2c1e211 100644 --- a/components/page_load_metrics/common/page_load_metrics.mojom +++ b/components/page_load_metrics/common/page_load_metrics.mojom
@@ -152,7 +152,7 @@ }; struct PageLoadMetadata { - // These are packed blink::WebLoadingBehaviorFlag enums. + // These are packed blink::LoadingBehaviorFlag enums. int32 behavior_flags = 0; };
diff --git a/components/page_load_metrics/common/page_load_timing.h b/components/page_load_metrics/common/page_load_timing.h index b7dfc99..6dbfb67 100644 --- a/components/page_load_metrics/common/page_load_timing.h +++ b/components/page_load_metrics/common/page_load_timing.h
@@ -8,7 +8,7 @@ #include "base/optional.h" #include "base/time/time.h" #include "components/page_load_metrics/common/page_load_metrics.mojom.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" namespace page_load_metrics {
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc index 20ccb34..9a071df5 100644 --- a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc +++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
@@ -81,7 +81,7 @@ } void MetricsRenderFrameObserver::DidObserveLoadingBehavior( - blink::WebLoadingBehaviorFlag behavior) { + blink::LoadingBehaviorFlag behavior) { if (page_timing_metrics_sender_) page_timing_metrics_sender_->DidObserveLoadingBehavior(behavior); }
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.h b/components/page_load_metrics/renderer/metrics_render_frame_observer.h index 790c84e..6f2a362 100644 --- a/components/page_load_metrics/renderer/metrics_render_frame_observer.h +++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.h
@@ -14,7 +14,7 @@ #include "components/page_load_metrics/renderer/page_resource_data_use.h" #include "components/subresource_filter/content/renderer/ad_resource_tracker.h" #include "content/public/renderer/render_frame_observer.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/web/web_local_frame_client.h" class GURL; @@ -43,8 +43,7 @@ // RenderFrameObserver implementation void DidChangePerformanceTiming() override; void DidChangeCpuTiming(base::TimeDelta time) override; - void DidObserveLoadingBehavior( - blink::WebLoadingBehaviorFlag behavior) override; + void DidObserveLoadingBehavior(blink::LoadingBehaviorFlag behavior) override; void DidObserveNewFeatureUsage(blink::mojom::WebFeature feature) override; void DidObserveNewCssPropertyUsage(blink::mojom::CSSSampleId css_property, bool is_animated) override;
diff --git a/components/page_load_metrics/renderer/page_timing_metrics_sender.cc b/components/page_load_metrics/renderer/page_timing_metrics_sender.cc index 5657c17b..10214b8 100644 --- a/components/page_load_metrics/renderer/page_timing_metrics_sender.cc +++ b/components/page_load_metrics/renderer/page_timing_metrics_sender.cc
@@ -62,7 +62,7 @@ } void PageTimingMetricsSender::DidObserveLoadingBehavior( - blink::WebLoadingBehaviorFlag behavior) { + blink::LoadingBehaviorFlag behavior) { if (behavior & metadata_->behavior_flags) { return; }
diff --git a/components/page_load_metrics/renderer/page_timing_metrics_sender.h b/components/page_load_metrics/renderer/page_timing_metrics_sender.h index b7fc35b..5875409a 100644 --- a/components/page_load_metrics/renderer/page_timing_metrics_sender.h +++ b/components/page_load_metrics/renderer/page_timing_metrics_sender.h
@@ -14,9 +14,9 @@ #include "components/page_load_metrics/common/page_load_timing.h" #include "components/page_load_metrics/renderer/page_resource_data_use.h" #include "content/public/common/previews_state.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/mojom/use_counter/css_property_id.mojom-shared.h" #include "third_party/blink/public/mojom/web_feature/web_feature.mojom-shared.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/public/web/web_local_frame_client.h" class GURL; @@ -45,7 +45,7 @@ std::unique_ptr<PageResourceDataUse> initial_request); ~PageTimingMetricsSender(); - void DidObserveLoadingBehavior(blink::WebLoadingBehaviorFlag behavior); + void DidObserveLoadingBehavior(blink::LoadingBehaviorFlag behavior); void DidObserveNewFeatureUsage(blink::mojom::WebFeature feature); void DidObserveNewCssPropertyUsage(blink::mojom::CSSSampleId css_property, bool is_animated);
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc index a57d98e..f9aac53a 100644 --- a/components/password_manager/core/browser/password_manager_unittest.cc +++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -1441,9 +1441,7 @@ // Tests whether two submissions to the same origin but different schemes // result in only saving the first submission, which has a secure scheme. -// TODO(crbug.com/1008818): reenable this test after addressing the linked bug. -TEST_F(PasswordManagerTest, - DISABLED_AttemptedSavePasswordSameOriginInsecureScheme) { +TEST_F(PasswordManagerTest, AttemptedSavePasswordSameOriginInsecureScheme) { PasswordForm secure_form(MakeSimpleForm()); secure_form.origin = GURL("https://example.com/login"); secure_form.action = GURL("https://example.com/login"); @@ -1452,9 +1450,17 @@ secure_form.signon_realm = "https://example.com/"; PasswordForm insecure_form(MakeSimpleForm()); + // If all inputs of |secure_form| and |insecure_form| are the same, then + // |insecure_form| is considered as reappearing of |secure_form| and the + // submission is considered to be failed. insecure_form.username_element += ASCIIToUTF16("1"); + FormFieldData& username_field = insecure_form.form_data.fields[0]; + username_field.name = insecure_form.username_element; insecure_form.username_value = ASCIIToUTF16("compromised_user"); + username_field.value = insecure_form.username_value; insecure_form.password_value = ASCIIToUTF16("C0mpr0m1s3d_P4ss"); + FormFieldData& password_field = insecure_form.form_data.fields[1]; + password_field.value = insecure_form.password_value; insecure_form.origin = GURL("http://example.com/home"); insecure_form.action = GURL("http://example.com/home"); insecure_form.form_data.url = insecure_form.origin;
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index fae88cc..ea68a2b 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -18420,6 +18420,57 @@ This leaves users open to security risks related to running the audio stack unsandboxed. If this policy is not set, the default configuration for the audio sandbox will be used, which may differ per platform. This policy is intended to give enterprises flexibility to disable the audio sandbox if they use security software setups that interfere with the sandbox.''' + }, + { + 'name': 'CorsMitigationList', + 'owners': ['toyoshim@chromium.org', 'yhirano@chromium.org', 'kinuko@chromium.org'], + 'type': 'list', + 'schema': { + 'type': 'array', + 'items': { 'type': 'string' }, + }, + 'supported_on': ['chrome.*:79-', 'chrome_os:79-'], + 'features': { + 'dynamic_refresh': True, + 'per_profile': True, + }, + 'example_value': ['x-googapps-allowed-domains', 'youtube-restrict'], + 'id': 629, + 'caption': '''Enable <ph name="CORS">CORS</ph> check mitigations in the new <ph name="CORS">CORS</ph> implementation''', + 'tags': [], + 'desc': '''Enable <ph name="CORS">CORS</ph> check mitigations in the new <ph name="CORS">CORS</ph> implementation, allowing Extensions to keep compatible behavior, and allowing <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to send specified headers without <ph name="CORS">CORS</ph> checks. + + If this list is set to empty, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> tries to run Extensions in compatible manners, and does not introduce <ph name="API">API</ph> changes for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 79 as explained at <ph name="WEB_REQUEST_API_MANUAL">https://developer.chrome.com/extensions/webRequest</ph>. + + If this list is set to have <ph name="HTTP">HTTP</ph> request header names, <ph name="CORS">CORS</ph> inspection will ignore the listed headers in addition to enable the mitigation for Extensions. + + If this list is not set, both mitigations explained above are not applied. + + For details on <ph name="CORS">CORS</ph>, visit: <ph name="CORS_HELP_URL">https://www.chromestatus.com/feature/5768642492891136</ph>.''' + }, + { + 'name': 'CorsLegacyModeEnabled', + 'owners': ['toyoshim@chromium.org', 'yhirano@chromium.org', 'kinuko@chromium.org'], + 'type': 'main', + 'schema': { 'type': 'boolean' }, + 'supported_on': ['chrome.*:79-', 'chrome_os:79-'], + 'features': { + 'dynamic_refresh': False, + 'per_profile': True, + }, + 'example_value': False, + 'id': 630, + 'caption': '''Use the legacy <ph name="CORS">CORS</ph> implementation rather than new <ph name="CORS">CORS</ph>''', + 'tags': [], + 'desc': '''Use the legacy <ph name="CORS">CORS</ph> implementation rather than new <ph name="CORS">CORS</ph>. + + If this setting is set to True, the legacy implementation is used that should be compatibile with previous versions. + + If this setting is set to False, or is not set, the new implementation is used that might cause enterprise specific compatibility issues potentially. + + This policy will be removed after a couple of milestones. + + For details on <ph name="CORS">CORS</ph>, visit: <ph name="CORS_HELP_URL">https://www.chromestatus.com/feature/5768642492891136</ph>.''' } ], @@ -19242,6 +19293,6 @@ ], 'placeholders': [], 'deleted_policy_ids': [412, 546, 562, 569], - 'highest_id_currently_used': 628, + 'highest_id_currently_used': 630, 'highest_atomic_group_id_currently_used': 38 }
diff --git a/components/pref_registry/pref_registry_syncable.h b/components/pref_registry/pref_registry_syncable.h index b2f630a4..8405db2 100644 --- a/components/pref_registry/pref_registry_syncable.h +++ b/components/pref_registry/pref_registry_syncable.h
@@ -16,8 +16,7 @@ // TODO(tfarina): Change this namespace to pref_registry. namespace user_prefs { -// A PrefRegistry that forces users to choose whether each registered -// preference is syncable or not. +// A PrefRegistry for syncable prefs. // // Classes or components that want to register such preferences should // define a static function named RegisterUserPrefs that takes a @@ -49,6 +48,14 @@ // a passphrase. // -- they are preferred for receiving server-provided data. SYNCABLE_PRIORITY_PREF = 1 << 1, + +#if defined(OS_CHROMEOS) + // As above, but the pref is for an OS settings (e.g. keyboard layout). + // This distinction allows OS pref sync to be controlled independently from + // browser pref sync in the UI. + SYNCABLE_OS_PREF = 1 << 2, + SYNCABLE_OS_PRIORITY_PREF = 1 << 3, +#endif }; typedef base::Callback<void(const std::string& path, uint32_t flags)>
diff --git a/components/sync/base/data_type_histogram.h b/components/sync/base/data_type_histogram.h index 066cf46..1358ae3 100644 --- a/components/sync/base/data_type_histogram.h +++ b/components/sync/base/data_type_histogram.h
@@ -155,6 +155,12 @@ case ::syncer::WIFI_CONFIGURATIONS: \ PER_DATA_TYPE_MACRO("WifiConfigurations"); \ break; \ + case ::syncer::OS_PREFERENCES: \ + PER_DATA_TYPE_MACRO("OsPreferences"); \ + break; \ + case ::syncer::OS_PRIORITY_PREFERENCES: \ + PER_DATA_TYPE_MACRO("OsPriorityPreferences"); \ + break; \ default: \ NOTREACHED() << "Unknown datatype " \ << ::syncer::ModelTypeToString(datatype); \
diff --git a/components/sync/base/model_type.cc b/components/sync/base/model_type.cc index 7fdb224..8546885 100644 --- a/components/sync/base/model_type.cc +++ b/components/sync/base/model_type.cc
@@ -168,6 +168,13 @@ {WEB_APPS, "WEB_APP", "web_apps", "Web Apps", sync_pb::EntitySpecifics::kWebAppFieldNumber, ModelTypeForHistograms::kWebApps}, + {OS_PREFERENCES, "OS_PREFERENCE", "os_preferences", "OS Preferences", + sync_pb::EntitySpecifics::kOsPreferenceFieldNumber, + ModelTypeForHistograms::kOsPreferences}, + {OS_PRIORITY_PREFERENCES, "OS_PRIORITY_PREFERENCE", + "os_priority_preferences", "OS Priority Preferences", + sync_pb::EntitySpecifics::kOsPriorityPreferenceFieldNumber, + ModelTypeForHistograms::kOsPriorityPreferences}, // ---- Proxy types ---- {PROXY_TABS, "", "", "Tabs", -1, ModelTypeForHistograms::kProxyTabs}, // ---- Control Types ---- @@ -182,11 +189,11 @@ static_assert(base::size(kModelTypeInfoMap) == ModelType::NUM_ENTRIES, "kModelTypeInfoMap should have ModelType::NUM_ENTRIES elements"); -static_assert(39 == syncer::ModelType::NUM_ENTRIES, +static_assert(41 == syncer::ModelType::NUM_ENTRIES, "When adding a new type, update enum SyncModelTypes in enums.xml " "and suffix SyncModelType in histograms.xml."); -static_assert(39 == syncer::ModelType::NUM_ENTRIES, +static_assert(41 == syncer::ModelType::NUM_ENTRIES, "When adding a new type, update kAllocatorDumpNameWhitelist in " "base/trace_event/memory_infra_background_whitelist.cc."); @@ -307,6 +314,12 @@ case WIFI_CONFIGURATIONS: specifics->mutable_wifi_configuration(); break; + case OS_PREFERENCES: + specifics->mutable_os_preference(); + break; + case OS_PRIORITY_PREFERENCES: + specifics->mutable_os_priority_preference(); + break; case ModelType::NUM_ENTRIES: NOTREACHED() << "No default field value for " << ModelTypeToString(type); break; @@ -349,7 +362,7 @@ } ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics) { - static_assert(39 == ModelType::NUM_ENTRIES, + static_assert(41 == ModelType::NUM_ENTRIES, "When adding new protocol types, the following type lookup " "logic must be updated."); if (specifics.has_bookmark()) @@ -424,12 +437,16 @@ return WEB_APPS; if (specifics.has_wifi_configuration()) return WIFI_CONFIGURATIONS; + if (specifics.has_os_preference()) + return OS_PREFERENCES; + if (specifics.has_os_priority_preference()) + return OS_PRIORITY_PREFERENCES; return UNSPECIFIED; } ModelTypeSet EncryptableUserTypes() { - static_assert(39 == ModelType::NUM_ENTRIES, + static_assert(41 == ModelType::NUM_ENTRIES, "If adding an unencryptable type, remove from " "encryptable_user_types below."); ModelTypeSet encryptable_user_types = UserTypes(); @@ -443,6 +460,9 @@ // Priority preferences are not encrypted because they might be synced before // encryption is ready. encryptable_user_types.Remove(PRIORITY_PREFERENCES); + // OS priority preferences are not encrypted because they might be synced + // before encryption is ready. + encryptable_user_types.Remove(OS_PRIORITY_PREFERENCES); // Supervised user settings are not encrypted since they are set server-side. encryptable_user_types.Remove(SUPERVISED_USER_SETTINGS); // Supervised user whitelists are not encrypted since they are managed
diff --git a/components/sync/base/model_type.h b/components/sync/base/model_type.h index 4f42df2..2f87a9b 100644 --- a/components/sync/base/model_type.h +++ b/components/sync/base/model_type.h
@@ -135,6 +135,10 @@ WIFI_CONFIGURATIONS, // A web app object. WEB_APPS, + // OS-specific preferences (a.k.a. "OS settings"). Chrome OS only. + OS_PREFERENCES, + // Synced before other user types. Never encrypted. Chrome OS only. + OS_PRIORITY_PREFERENCES, // ---- Proxy types ---- // Proxy types are excluded from the sync protocol, but are still considered @@ -223,7 +227,9 @@ kSecurityEvents = 43, kWifiConfigurations = 44, kWebApps = 45, - kMaxValue = kWebApps + kOsPreferences = 46, + kOsPriorityPreferences = 47, + kMaxValue = kOsPriorityPreferences }; // Used to mark the type of EntitySpecifics that has no actual data. @@ -253,7 +259,8 @@ SUPERVISED_USER_SETTINGS, APP_LIST, SUPERVISED_USER_WHITELISTS, ARC_PACKAGE, PRINTERS, READING_LIST, USER_EVENTS, NIGORI, DEPRECATED_EXPERIMENTS, MOUNTAIN_SHARES, USER_CONSENTS, SEND_TAB_TO_SELF, - SECURITY_EVENTS, WEB_APPS, WIFI_CONFIGURATIONS); + SECURITY_EVENTS, WEB_APPS, WIFI_CONFIGURATIONS, OS_PREFERENCES, + OS_PRIORITY_PREFERENCES); } // These are the normal user-controlled types. This is to distinguish from @@ -273,7 +280,8 @@ // types are synced before other user types and are never encrypted. constexpr ModelTypeSet PriorityUserTypes() { return ModelTypeSet(DEVICE_INFO, PRIORITY_PREFERENCES, - SUPERVISED_USER_SETTINGS, SUPERVISED_USER_WHITELISTS); + SUPERVISED_USER_SETTINGS, SUPERVISED_USER_WHITELISTS, + OS_PRIORITY_PREFERENCES); } // Proxy types are placeholder types for handling implicitly enabling real
diff --git a/components/sync/driver/fake_sync_service.cc b/components/sync/driver/fake_sync_service.cc index 1fafb89..0b110d14 100644 --- a/components/sync/driver/fake_sync_service.cc +++ b/components/sync/driver/fake_sync_service.cc
@@ -9,6 +9,7 @@ #include "components/sync/driver/sync_token_status.h" #include "components/sync/engine/cycle/sync_cycle_snapshot.h" #include "components/sync/syncable/user_share.h" +#include "crypto/ec_private_key.h" namespace syncer { @@ -94,8 +95,9 @@ return false; } -std::string FakeSyncService::GetExperimentalAuthenticationId() const { - return std::string(); +std::unique_ptr<crypto::ECPrivateKey> +FakeSyncService::GetExperimentalAuthenticationKey() const { + return nullptr; } UserShare* FakeSyncService::GetUserShare() const {
diff --git a/components/sync/driver/fake_sync_service.h b/components/sync/driver/fake_sync_service.h index 84a6cfc..bda0069 100644 --- a/components/sync/driver/fake_sync_service.h +++ b/components/sync/driver/fake_sync_service.h
@@ -46,7 +46,8 @@ GoogleServiceAuthError GetAuthError() const override; base::Time GetAuthErrorTime() const override; bool RequiresClientUpgrade() const override; - std::string GetExperimentalAuthenticationId() const override; + std::unique_ptr<crypto::ECPrivateKey> GetExperimentalAuthenticationKey() + const override; UserShare* GetUserShare() const override; void DataTypePreconditionChanged(syncer::ModelType type) override; SyncTokenStatus GetSyncTokenStatusForDebugging() const override;
diff --git a/components/sync/driver/mock_sync_service.h b/components/sync/driver/mock_sync_service.h index 54199bb..0cb24b7 100644 --- a/components/sync/driver/mock_sync_service.h +++ b/components/sync/driver/mock_sync_service.h
@@ -14,6 +14,7 @@ #include "components/sync/driver/sync_token_status.h" #include "components/sync/driver/sync_user_settings_mock.h" #include "components/sync/engine/cycle/sync_cycle_snapshot.h" +#include "crypto/ec_private_key.h" #include "testing/gmock/include/gmock/gmock.h" namespace syncer { @@ -40,7 +41,8 @@ MOCK_CONST_METHOD0(GetAuthError, GoogleServiceAuthError()); MOCK_CONST_METHOD0(GetAuthErrorTime, base::Time()); MOCK_CONST_METHOD0(RequiresClientUpgrade, bool()); - MOCK_CONST_METHOD0(GetExperimentalAuthenticationId, std::string()); + MOCK_CONST_METHOD0(GetExperimentalAuthenticationKey, + std::unique_ptr<crypto::ECPrivateKey>()); MOCK_METHOD0(GetSetupInProgressHandle, std::unique_ptr<SyncSetupInProgressHandle>());
diff --git a/components/sync/driver/model_association_manager.cc b/components/sync/driver/model_association_manager.cc index 8d2bec1..134b6cba 100644 --- a/components/sync/driver/model_association_manager.cc +++ b/components/sync/driver/model_association_manager.cc
@@ -38,6 +38,10 @@ AUTOFILL_WALLET_METADATA, EXTENSION_SETTINGS, APP_SETTINGS, TYPED_URLS, HISTORY_DELETE_DIRECTIVES, + // Chrome OS settings affect the initial desktop appearance before the + // browser window opens, so start them before browser data types. + OS_PRIORITY_PREFERENCES, OS_PREFERENCES, + // UI thread data types. BOOKMARKS, PREFERENCES, PRIORITY_PREFERENCES, EXTENSIONS, APPS, APP_LIST, ARC_PACKAGE, READING_LIST, THEMES, SEARCH_ENGINES, SESSIONS, DICTIONARY,
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc index fed83bb..0f1a3c1 100644 --- a/components/sync/driver/profile_sync_service.cc +++ b/components/sync/driver/profile_sync_service.cc
@@ -14,6 +14,7 @@ #include "base/files/file_path.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" +#include "base/strings/strcat.h" #include "components/invalidation/public/invalidation_service.h" #include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/identity_manager/account_info.h" @@ -41,7 +42,7 @@ #include "components/sync/model/sync_error.h" #include "components/sync/syncable/user_share.h" #include "components/version_info/version_info_values.h" -#include "crypto/sha2.h" +#include "crypto/ec_private_key.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace syncer { @@ -1119,24 +1120,15 @@ return last_actionable_error_.action == UPGRADE_CLIENT; } -std::string ProfileSyncService::GetExperimentalAuthenticationId() const { - // Dependent fields are first populated when the sync engine is initialized, - // when usually all except keystore keys are guaranteed to be available. - // Keystore keys are usually available initially too, but in rare cases they - // should arrive in later sync cycles. - if (last_keystore_key_.empty()) { - return std::string(); +std::unique_ptr<crypto::ECPrivateKey> +ProfileSyncService::GetExperimentalAuthenticationKey() const { + std::string secret = GetExperimentalAuthenticationSecret(); + if (secret.empty()) { + return nullptr; } - // A separator is not strictly needed but it's adopted here as good practice. - const std::string kSeparator("|"); - const std::string gaia_id = GetAuthenticatedAccountInfo().gaia; - const std::string birthday = sync_prefs_.GetBirthday(); - DCHECK(!gaia_id.empty()); - DCHECK(!birthday.empty()); - - return crypto::SHA256HashString(gaia_id + kSeparator + birthday + kSeparator + - last_keystore_key_); + return crypto::ECPrivateKey::DeriveFromSecret( + base::as_bytes(base::make_span(secret))); } bool ProfileSyncService::CanConfigureDataTypes( @@ -1929,4 +1921,29 @@ NotifyObservers(); } +std::string ProfileSyncService::GetExperimentalAuthenticationSecretForTest() + const { + return GetExperimentalAuthenticationSecret(); +} + +std::string ProfileSyncService::GetExperimentalAuthenticationSecret() const { + // Dependent fields are first populated when the sync engine is initialized, + // when usually all except keystore keys are guaranteed to be available. + // Keystore keys are usually available initially too, but in rare cases they + // should arrive in later sync cycles. + if (last_keystore_key_.empty()) { + return std::string(); + } + + // A separator is not strictly needed but it's adopted here as good practice. + const std::string kSeparator("|"); + const std::string gaia_id = GetAuthenticatedAccountInfo().gaia; + const std::string birthday = sync_prefs_.GetBirthday(); + DCHECK(!gaia_id.empty()); + DCHECK(!birthday.empty()); + + return base::StrCat( + {gaia_id, kSeparator, birthday, kSeparator, last_keystore_key_}); +} + } // namespace syncer
diff --git a/components/sync/driver/profile_sync_service.h b/components/sync/driver/profile_sync_service.h index cb65913..8452888a 100644 --- a/components/sync/driver/profile_sync_service.h +++ b/components/sync/driver/profile_sync_service.h
@@ -126,7 +126,8 @@ bool RequiresClientUpgrade() const override; std::unique_ptr<SyncSetupInProgressHandle> GetSetupInProgressHandle() override; - std::string GetExperimentalAuthenticationId() const override; + std::unique_ptr<crypto::ECPrivateKey> GetExperimentalAuthenticationKey() + const override; bool IsSetupInProgress() const override; ModelTypeSet GetRegisteredDataTypes() const override; ModelTypeSet GetPreferredDataTypes() const override; @@ -260,6 +261,10 @@ SyncClient* GetSyncClientForTest(); + // Combines GAIA ID, sync birthday and keystore key with '|' sepearator to + // generate a secret. Returns empty string if keystore key is not available. + std::string GetExperimentalAuthenticationSecretForTest() const; + private: // Passed as an argument to StopImpl to control whether or not the sync // engine should clear its data directory when it shuts down. See StopImpl @@ -361,6 +366,8 @@ // Called by SyncServiceCrypto when a passphrase is required or accepted. void ReconfigureDueToPassphrase(ConfigureReason reason); + std::string GetExperimentalAuthenticationSecret() const; + // This profile's SyncClient, which abstracts away non-Sync dependencies and // the Sync API component factory. const std::unique_ptr<SyncClient> sync_client_;
diff --git a/components/sync/driver/profile_sync_service_unittest.cc b/components/sync/driver/profile_sync_service_unittest.cc index 36efe9f..221adae 100644 --- a/components/sync/driver/profile_sync_service_unittest.cc +++ b/components/sync/driver/profile_sync_service_unittest.cc
@@ -36,7 +36,7 @@ #include "components/sync/engine/fake_sync_engine.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/version_info/version_info_values.h" -#include "crypto/sha2.h" +#include "crypto/ec_private_key.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/user_demographics.pb.h" @@ -1465,7 +1465,21 @@ EXPECT_TRUE(HasBirthYearOffset(prefs())); } -TEST_F(ProfileSyncServiceTest, GetExperimentalAuthenticationId) { +TEST_F(ProfileSyncServiceTest, GetExperimentalAuthenticationKey) { + const std::vector<uint8_t> kExpectedPrivateKeyInfo = { + 0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, + 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, + 0x03, 0x01, 0x07, 0x04, 0x6d, 0x30, 0x6b, 0x02, 0x01, 0x01, 0x04, 0x20, + 0xae, 0xf3, 0x15, 0x62, 0x31, 0x99, 0x3f, 0xe2, 0x96, 0xd4, 0xe6, 0x9c, + 0x33, 0x25, 0x38, 0x58, 0x97, 0xcc, 0x40, 0x0d, 0xab, 0xbf, 0x2b, 0xb7, + 0xd4, 0xcd, 0x79, 0xb9, 0x1f, 0x95, 0x19, 0x66, 0xa1, 0x44, 0x03, 0x42, + 0x00, 0x04, 0x5e, 0xf4, 0x5d, 0x00, 0xaa, 0xea, 0xc9, 0x33, 0xed, 0xcd, + 0xe5, 0xaf, 0xe6, 0x42, 0xef, 0x2b, 0xd2, 0xe0, 0xd6, 0x74, 0x5c, 0x90, + 0x45, 0xad, 0x3f, 0x60, 0xfd, 0xc1, 0xcd, 0x09, 0x0a, 0x9a, 0xda, 0x3d, + 0xf8, 0x18, 0xc6, 0x16, 0x46, 0x79, 0x53, 0x75, 0x92, 0xf2, 0x77, 0xcc, + 0x38, 0x65, 0xa1, 0xcc, 0x79, 0xb3, 0x06, 0xd9, 0x9c, 0xb6, 0x8b, 0x96, + 0x33, 0x88, 0x09, 0xc4, 0x07, 0x44}; + SignIn(); CreateService(ProfileSyncService::AUTO_START); InitializeForNthSync(); @@ -1474,13 +1488,19 @@ const std::string kSeparator("|"); const std::string kGaiaId = signin::GetTestGaiaIdForEmail(kTestUser); - - const std::string authentication_id_before_hashing = + const std::string expected_secret = kGaiaId + kSeparator + FakeSyncEngine::kTestBirthday + kSeparator + FakeSyncEngine::kTestKeystoreKey; - EXPECT_EQ(crypto::SHA256HashString(authentication_id_before_hashing), - service()->GetExperimentalAuthenticationId()); + EXPECT_EQ(expected_secret, + service()->GetExperimentalAuthenticationSecretForTest()); + + std::unique_ptr<crypto::ECPrivateKey> actual_key = + service()->GetExperimentalAuthenticationKey(); + ASSERT_TRUE(actual_key); + std::vector<uint8_t> actual_private_key; + EXPECT_TRUE(actual_key->ExportPrivateKey(&actual_private_key)); + EXPECT_EQ(kExpectedPrivateKeyInfo, actual_private_key); } } // namespace
diff --git a/components/sync/driver/sync_service.h b/components/sync/driver/sync_service.h index 3ccbbe749..18899912 100644 --- a/components/sync/driver/sync_service.h +++ b/components/sync/driver/sync_service.h
@@ -22,6 +22,10 @@ class GoogleServiceAuthError; class GURL; +namespace crypto { +class ECPrivateKey; +} // namespace crypto + namespace syncer { class JsController; @@ -240,13 +244,14 @@ // Sync to work. virtual bool RequiresClientUpgrade() const = 0; - // Returns a high-entropy randomly-generated ID that is unique to a user and - // sync-ed across devices via Nigori. Populated when the transport state - // becomes CONFIGURING. Returns an empty string if not available. Consumers - // of this ID should observe for changes via + // Returns a high-entropy elliptic curve (EC) private key that is unique to a + // user and sync-ed across devices via Nigori. Populated when the transport + // state becomes CONFIGURING. Returns nullptr if not available. Consumers of + // this key should observe for changes via // SyncServiceObserver::OnSyncCycleCompleted(). // TODO(crbug.com/1012226): Remove when VAPID migration is over. - virtual std::string GetExperimentalAuthenticationId() const = 0; + virtual std::unique_ptr<crypto::ECPrivateKey> + GetExperimentalAuthenticationKey() const = 0; ////////////////////////////////////////////////////////////////////////////// // DERIVED STATE ACCESS
diff --git a/components/sync/driver/sync_user_settings_impl.cc b/components/sync/driver/sync_user_settings_impl.cc index d336fa95..55391aa7 100644 --- a/components/sync/driver/sync_user_settings_impl.cc +++ b/components/sync/driver/sync_user_settings_impl.cc
@@ -197,7 +197,7 @@ types.RetainAll(registered_model_types_); } - static_assert(39 == ModelType::NUM_ENTRIES, + static_assert(41 == ModelType::NUM_ENTRIES, "If adding a new sync data type, update the list below below if" " you want to disable the new data type for local sync."); types.PutAll(ControlTypes());
diff --git a/components/sync/driver/test_sync_service.cc b/components/sync/driver/test_sync_service.cc index 82f2ac07..0cea6b1 100644 --- a/components/sync/driver/test_sync_service.cc +++ b/components/sync/driver/test_sync_service.cc
@@ -4,6 +4,7 @@ #include "components/sync/driver/test_sync_service.h" +#include <utility> #include <vector> #include "base/time/time.h" @@ -11,6 +12,7 @@ #include "components/sync/base/progress_marker_map.h" #include "components/sync/driver/sync_token_status.h" #include "components/sync/engine/cycle/model_neutral_state.h" +#include "crypto/ec_private_key.h" namespace syncer { @@ -97,6 +99,11 @@ user_demographics_result_ = user_demographics_result; } +void TestSyncService::SetExperimentalAuthenticationKey( + std::unique_ptr<crypto::ECPrivateKey> experimental_authentication_key) { + experimental_authentication_key_ = std::move(experimental_authentication_key); +} + void TestSyncService::SetEmptyLastCycleSnapshot() { SetLastCycleSnapshot(SyncCycleSnapshot()); } @@ -129,6 +136,11 @@ observer.OnStateChanged(this); } +void TestSyncService::FireSyncCycleCompleted() { + for (auto& observer : observers_) + observer.OnSyncCycleCompleted(this); +} + SyncUserSettings* TestSyncService::GetUserSettings() { return &user_settings_; } @@ -170,8 +182,12 @@ syncer::UPGRADE_CLIENT; } -std::string TestSyncService::GetExperimentalAuthenticationId() const { - return std::string(); +std::unique_ptr<crypto::ECPrivateKey> +TestSyncService::GetExperimentalAuthenticationKey() const { + if (!experimental_authentication_key_) + return nullptr; + + return experimental_authentication_key_->Copy(); } std::unique_ptr<SyncSetupInProgressHandle>
diff --git a/components/sync/driver/test_sync_service.h b/components/sync/driver/test_sync_service.h index e884ab9..90bb170 100644 --- a/components/sync/driver/test_sync_service.h +++ b/components/sync/driver/test_sync_service.h
@@ -40,6 +40,8 @@ void SetLastCycleSnapshot(const SyncCycleSnapshot& snapshot); void SetUserDemographics( const UserDemographicsResult& user_demographics_result); + void SetExperimentalAuthenticationKey( + std::unique_ptr<crypto::ECPrivateKey> experimental_authentication_key); // Convenience versions of the above, for when the caller doesn't care about // the particular values in the snapshot, just whether there is one. @@ -51,6 +53,7 @@ void SetIsUsingSecondaryPassphrase(bool enabled); void FireStateChanged(); + void FireSyncCycleCompleted(); // SyncService implementation. syncer::SyncUserSettings* GetUserSettings() override; @@ -63,7 +66,8 @@ GoogleServiceAuthError GetAuthError() const override; base::Time GetAuthErrorTime() const override; bool RequiresClientUpgrade() const override; - std::string GetExperimentalAuthenticationId() const override; + std::unique_ptr<crypto::ECPrivateKey> GetExperimentalAuthenticationKey() + const override; std::unique_ptr<SyncSetupInProgressHandle> GetSetupInProgressHandle() override; @@ -132,6 +136,8 @@ UserDemographicsResult user_demographics_result_; + std::unique_ptr<crypto::ECPrivateKey> experimental_authentication_key_; + DISALLOW_COPY_AND_ASSIGN(TestSyncService); };
diff --git a/components/sync/engine_impl/commit.cc b/components/sync/engine_impl/commit.cc index ed5abe9..bbab54ec 100644 --- a/components/sync/engine_impl/commit.cc +++ b/components/sync/engine_impl/commit.cc
@@ -61,10 +61,8 @@ CommitProcessor* commit_processor, ExtensionsActivity* extensions_activity) { // Gather per-type contributions. - ContributionMap contributions; - commit_processor->GatherCommitContributions(requested_types, max_entries, - cookie_jar_mismatch, - cookie_jar_empty, &contributions); + ContributionMap contributions = commit_processor->GatherCommitContributions( + requested_types, max_entries, cookie_jar_mismatch, cookie_jar_empty); // Give up if no one had anything to commit. if (contributions.empty())
diff --git a/components/sync/engine_impl/commit_processor.cc b/components/sync/engine_impl/commit_processor.cc index 615e5aac..a467576 100644 --- a/components/sync/engine_impl/commit_processor.cc +++ b/components/sync/engine_impl/commit_processor.cc
@@ -21,42 +21,75 @@ CommitProcessor::~CommitProcessor() {} -void CommitProcessor::GatherCommitContributions( +Commit::ContributionMap CommitProcessor::GatherCommitContributions( ModelTypeSet commit_types, size_t max_entries, bool cookie_jar_mismatch, + bool cookie_jar_empty) { + Commit::ContributionMap contributions; + size_t num_entries = 0; + + // NIGORI should be committed before any other datatype. + DCHECK(commit_types.Has(NIGORI)); + + commit_types.Remove(NIGORI); + num_entries += + GatherCommitContributionsForType(NIGORI, max_entries, cookie_jar_mismatch, + cookie_jar_empty, &contributions); + if (num_entries != 0) { + // If the outgoing commit has a NIGORI update, there are some risks if + // changes from other datatypes are bundled together in the same commit, as + // long as the datatype is encryptable. Hence, restrict to + // PriorityUserTypes() which are never encrypted. + commit_types.RetainAll(PriorityUserTypes()); + } + + for (ModelType type : commit_types) { + num_entries += GatherCommitContributionsForType( + type, max_entries - num_entries, cookie_jar_mismatch, cookie_jar_empty, + &contributions); + if (num_entries >= max_entries) { + DCHECK_EQ(num_entries, max_entries) + << "Number of commit entries exceeds maximum"; + break; + } + } + + return contributions; +} + +int CommitProcessor::GatherCommitContributionsForType( + ModelType type, + size_t max_entries, + bool cookie_jar_mismatch, bool cookie_jar_empty, Commit::ContributionMap* contributions) { - size_t num_entries = 0; - for (ModelType type : commit_types) { - auto cm_it = commit_contributor_map_->find(type); - if (cm_it == commit_contributor_map_->end()) { - DLOG(ERROR) << "Could not find requested type " << ModelTypeToString(type) - << " in contributor map."; - continue; - } - size_t spaces_remaining = max_entries - num_entries; - std::unique_ptr<CommitContribution> contribution = - cm_it->second->GetContribution(spaces_remaining); - if (contribution) { - num_entries += contribution->GetNumEntries(); - contributions->insert(std::make_pair(type, std::move(contribution))); + auto cm_it = commit_contributor_map_->find(type); + if (cm_it == commit_contributor_map_->end()) { + DLOG(ERROR) << "Could not find requested type " << ModelTypeToString(type) + << " in contributor map."; + return 0; + } - if (type == SESSIONS) { - UMA_HISTOGRAM_BOOLEAN("Sync.CookieJarMatchOnNavigation", - !cookie_jar_mismatch); - if (cookie_jar_mismatch) { - UMA_HISTOGRAM_BOOLEAN("Sync.CookieJarEmptyOnMismatch", - cookie_jar_empty); - } - } - } - if (num_entries >= max_entries) { - DCHECK_EQ(num_entries, max_entries) - << "Number of commit entries exceeeds maximum"; - break; + std::unique_ptr<CommitContribution> contribution = + cm_it->second->GetContribution(max_entries); + if (!contribution) { + return 0; + } + + int num_entries = contribution->GetNumEntries(); + DCHECK_LE(num_entries, static_cast<int>(max_entries)); + contributions->emplace(type, std::move(contribution)); + + if (type == SESSIONS) { + UMA_HISTOGRAM_BOOLEAN("Sync.CookieJarMatchOnNavigation", + !cookie_jar_mismatch); + if (cookie_jar_mismatch) { + UMA_HISTOGRAM_BOOLEAN("Sync.CookieJarEmptyOnMismatch", cookie_jar_empty); } } + + return num_entries; } } // namespace syncer
diff --git a/components/sync/engine_impl/commit_processor.h b/components/sync/engine_impl/commit_processor.h index 2f3b3f8..c6d3cd4 100644 --- a/components/sync/engine_impl/commit_processor.h +++ b/components/sync/engine_impl/commit_processor.h
@@ -41,13 +41,19 @@ // exceed |max_entries|. // Note: |cookie_jar_mismatch| and |cookie_jar_empty| are used only for // metrics recording purposes specific to the SESSIONS type. - void GatherCommitContributions(ModelTypeSet commit_types, - size_t max_entries, - bool cookie_jar_mismatch, - bool cookie_jar_empty, - Commit::ContributionMap* contributions); + Commit::ContributionMap GatherCommitContributions(ModelTypeSet commit_types, + size_t max_entries, + bool cookie_jar_mismatch, + bool cookie_jar_empty); private: + // Returns the number of entries added. + int GatherCommitContributionsForType(ModelType type, + size_t max_entries, + bool cookie_jar_mismatch, + bool cookie_jar_empty, + Commit::ContributionMap* contributions); + // A map of 'commit contributors', one for each enabled type. CommitContributorMap* commit_contributor_map_;
diff --git a/components/sync/nigori/nigori_state.cc b/components/sync/nigori/nigori_state.cc index 53bcbf24..df20b2e 100644 --- a/components/sync/nigori/nigori_state.cc +++ b/components/sync/nigori/nigori_state.cc
@@ -67,7 +67,7 @@ void UpdateNigoriSpecificsFromEncryptedTypes( ModelTypeSet encrypted_types, sync_pb::NigoriSpecifics* specifics) { - static_assert(39 == ModelType::NUM_ENTRIES, + static_assert(41 == ModelType::NUM_ENTRIES, "If adding an encryptable type, update handling below."); specifics->set_encrypt_bookmarks(encrypted_types.Has(BOOKMARKS)); specifics->set_encrypt_preferences(encrypted_types.Has(PREFERENCES)); @@ -97,6 +97,7 @@ specifics->set_encrypt_send_tab_to_self( encrypted_types.Has(SEND_TAB_TO_SELF)); specifics->set_encrypt_web_apps(encrypted_types.Has(WEB_APPS)); + specifics->set_encrypt_os_preferences(encrypted_types.Has(OS_PREFERENCES)); } void UpdateSpecificsFromKeyDerivationParams(
diff --git a/components/sync/nigori/nigori_sync_bridge_impl.cc b/components/sync/nigori/nigori_sync_bridge_impl.cc index bdb46ba8..33c68b2 100644 --- a/components/sync/nigori/nigori_sync_bridge_impl.cc +++ b/components/sync/nigori/nigori_sync_bridge_impl.cc
@@ -327,6 +327,92 @@ } // namespace +class NigoriSyncBridgeImpl::BroadcastingObserver + : public SyncEncryptionHandler::Observer { + public: + BroadcastingObserver() = default; + ~BroadcastingObserver() override = default; + + void AddObserver(SyncEncryptionHandler::Observer* observer) { + observers_.AddObserver(observer); + } + + void RemoveObserver(SyncEncryptionHandler::Observer* observer) { + observers_.RemoveObserver(observer); + } + + // SyncEncryptionHandler::Observer implementation. + void OnPassphraseRequired( + PassphraseRequiredReason reason, + const KeyDerivationParams& key_derivation_params, + const sync_pb::EncryptedData& pending_keys) override { + for (auto& observer : observers_) { + observer.OnPassphraseRequired(reason, key_derivation_params, + pending_keys); + } + } + + void OnPassphraseAccepted() override { + for (auto& observer : observers_) { + observer.OnPassphraseAccepted(); + } + } + + void OnTrustedVaultKeyRequired() override { + for (auto& observer : observers_) { + observer.OnTrustedVaultKeyRequired(); + } + } + + void OnTrustedVaultKeyAccepted() override { + for (auto& observer : observers_) { + observer.OnTrustedVaultKeyAccepted(); + } + } + + void OnBootstrapTokenUpdated(const std::string& bootstrap_token, + BootstrapTokenType type) override { + for (auto& observer : observers_) { + observer.OnBootstrapTokenUpdated(bootstrap_token, type); + } + } + + void OnEncryptedTypesChanged(ModelTypeSet encrypted_types, + bool encrypt_everything) override { + for (auto& observer : observers_) { + observer.OnEncryptedTypesChanged(encrypted_types, encrypt_everything); + } + } + + void OnEncryptionComplete() override { + for (auto& observer : observers_) { + observer.OnEncryptionComplete(); + } + } + + void OnCryptographerStateChanged(Cryptographer* cryptographer, + bool has_pending_keys) override { + for (auto& observer : observers_) { + observer.OnCryptographerStateChanged(cryptographer, has_pending_keys); + } + } + + void OnPassphraseTypeChanged(PassphraseType type, + base::Time passphrase_time) override { + for (auto& observer : observers_) { + observer.OnPassphraseTypeChanged(type, passphrase_time); + } + } + + private: + // TODO(crbug/922900): consider using checked ObserverList once + // SyncEncryptionHandlerImpl is no longer needed or consider refactoring old + // implementation to use checked ObserverList as well. + base::ObserverList<SyncEncryptionHandler::Observer>::Unchecked observers_; + + DISALLOW_COPY_AND_ASSIGN(BroadcastingObserver); +}; + NigoriSyncBridgeImpl::NigoriSyncBridgeImpl( std::unique_ptr<NigoriLocalChangeProcessor> processor, std::unique_ptr<NigoriStorage> storage, @@ -339,7 +425,8 @@ random_salt_generator_(random_salt_generator), explicit_passphrase_key_( UnpackExplicitPassphraseKey(*encryptor, - packed_explicit_passphrase_key)) { + packed_explicit_passphrase_key)), + broadcasting_observer_(std::make_unique<BroadcastingObserver>()) { DCHECK(encryptor); // TODO(crbug.com/922900): we currently don't verify |deserialized_data|. @@ -375,12 +462,12 @@ void NigoriSyncBridgeImpl::AddObserver(Observer* observer) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - observers_.AddObserver(observer); + broadcasting_observer_->AddObserver(observer); } void NigoriSyncBridgeImpl::RemoveObserver(Observer* observer) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - observers_.RemoveObserver(observer); + broadcasting_observer_->RemoveObserver(observer); } bool NigoriSyncBridgeImpl::Init() { @@ -390,15 +477,10 @@ // completeness of first sync cycle (which happens before Init() call). // TODO(crbug.com/922900): try to avoid double notification (second one can // happen during UpdateLocalState() call). - for (auto& observer : observers_) { - observer.OnEncryptedTypesChanged( - GetEncryptedTypes(state_.encrypt_everything), - state_.encrypt_everything); - } - for (auto& observer : observers_) { - observer.OnCryptographerStateChanged(state_.cryptographer.get(), - state_.pending_keys.has_value()); - } + broadcasting_observer_->OnEncryptedTypesChanged( + GetEncryptedTypes(state_.encrypt_everything), state_.encrypt_everything); + broadcasting_observer_->OnCryptographerStateChanged( + state_.cryptographer.get(), state_.pending_keys.has_value()); MaybeNotifyOfPendingKeys(); @@ -407,10 +489,8 @@ // shouldn't expose it. PassphraseType enum_passphrase_type = *ProtoPassphraseInt32ToEnum(state_.passphrase_type); - for (auto& observer : observers_) { - observer.OnPassphraseTypeChanged(enum_passphrase_type, - GetExplicitPassphraseTime()); - } + broadcasting_observer_->OnPassphraseTypeChanged( + enum_passphrase_type, GetExplicitPassphraseTime()); UMA_HISTOGRAM_ENUMERATION("Sync.PassphraseType", enum_passphrase_type); } UMA_HISTOGRAM_BOOLEAN("Sync.CryptographerReady", @@ -481,21 +561,15 @@ state_.custom_passphrase_time = base::Time::Now(); processor_->Put(GetData()); storage_->StoreData(SerializeAsNigoriLocalData()); - for (auto& observer : observers_) { - observer.OnPassphraseAccepted(); - } - for (auto& observer : observers_) { - observer.OnPassphraseTypeChanged(PassphraseType::kCustomPassphrase, - state_.custom_passphrase_time); - } - for (auto& observer : observers_) { - observer.OnCryptographerStateChanged(state_.cryptographer.get(), - state_.pending_keys.has_value()); - } - for (auto& observer : observers_) { - observer.OnEncryptedTypesChanged(EncryptableUserTypes(), - state_.encrypt_everything); - } + + broadcasting_observer_->OnPassphraseAccepted(); + broadcasting_observer_->OnPassphraseTypeChanged( + PassphraseType::kCustomPassphrase, state_.custom_passphrase_time); + broadcasting_observer_->OnCryptographerStateChanged( + state_.cryptographer.get(), state_.pending_keys.has_value()); + broadcasting_observer_->OnEncryptedTypesChanged(EncryptableUserTypes(), + state_.encrypt_everything); + MaybeNotifyBootstrapTokenUpdated(); UMA_HISTOGRAM_BOOLEAN("Sync.CustomEncryption", true); // OnLocalSetPassphraseEncryption() is intentionally not called here, because @@ -533,13 +607,10 @@ state_.cryptographer->SelectDefaultEncryptionKey(new_key_name); storage_->StoreData(SerializeAsNigoriLocalData()); - for (auto& observer : observers_) { - observer.OnCryptographerStateChanged(state_.cryptographer.get(), - state_.pending_keys.has_value()); - } - for (auto& observer : observers_) { - observer.OnPassphraseAccepted(); - } + broadcasting_observer_->OnCryptographerStateChanged( + state_.cryptographer.get(), state_.pending_keys.has_value()); + broadcasting_observer_->OnPassphraseAccepted(); + MaybeNotifyBootstrapTokenUpdated(); // TODO(crbug.com/922900): we may need to rewrite encryption_keybag in Nigori // node in case we have some keys in |cryptographer_| which is not stored in @@ -572,15 +643,11 @@ storage_->StoreData(SerializeAsNigoriLocalData()); - for (auto& observer : observers_) { - observer.OnCryptographerStateChanged(state_.cryptographer.get(), - state_.pending_keys.has_value()); - } + broadcasting_observer_->OnCryptographerStateChanged( + state_.cryptographer.get(), state_.pending_keys.has_value()); if (!state_.pending_keys) { - for (auto& observer : observers_) { - observer.OnTrustedVaultKeyAccepted(); - } + broadcasting_observer_->OnTrustedVaultKeyAccepted(); } MaybeNotifyBootstrapTokenUpdated(); @@ -649,10 +716,8 @@ UpdateCryptographerFromKeystoreNigori( sync_pb::EncryptedData(*state_.pending_keys), sync_pb::EncryptedData(*state_.pending_keystore_decryptor_token)); - for (auto& observer : observers_) { - observer.OnCryptographerStateChanged(state_.cryptographer.get(), - state_.pending_keys.has_value()); - } + broadcasting_observer_->OnCryptographerStateChanged( + state_.cryptographer.get(), state_.pending_keys.has_value()); } // Note: we don't need to persist keystore keys here, because we will receive // Nigori node right after this method and persist all the data during @@ -793,25 +858,19 @@ storage_->StoreData(SerializeAsNigoriLocalData()); if (passphrase_type_changed) { - for (auto& observer : observers_) { - observer.OnPassphraseTypeChanged( - *ProtoPassphraseInt32ToEnum(state_.passphrase_type), - GetExplicitPassphraseTime()); - } + broadcasting_observer_->OnPassphraseTypeChanged( + *ProtoPassphraseInt32ToEnum(state_.passphrase_type), + GetExplicitPassphraseTime()); } if (encrypted_types_changed) { // Currently the only way to change encrypted types is to enable // encrypt_everything. DCHECK(state_.encrypt_everything); - for (auto& observer : observers_) { - observer.OnEncryptedTypesChanged(EncryptableUserTypes(), - state_.encrypt_everything); - } + broadcasting_observer_->OnEncryptedTypesChanged(EncryptableUserTypes(), + state_.encrypt_everything); } - for (auto& observer : observers_) { - observer.OnCryptographerStateChanged(state_.cryptographer.get(), - state_.pending_keys.has_value()); - } + broadcasting_observer_->OnCryptographerStateChanged( + state_.cryptographer.get(), state_.pending_keys.has_value()); MaybeNotifyOfPendingKeys(); return base::nullopt; @@ -863,9 +922,7 @@ encryption_keybag.key_name()); if (state_.pending_keys) { state_.pending_keys.reset(); - for (auto& observer : observers_) { - observer.OnPassphraseAccepted(); - } + broadcasting_observer_->OnPassphraseAccepted(); } return base::nullopt; } @@ -973,13 +1030,10 @@ state_.custom_passphrase_time = base::Time(); state_.keystore_migration_time = base::Time(); state_.custom_passphrase_key_derivation_params = base::nullopt; - for (auto& observer : observers_) { - observer.OnCryptographerStateChanged(state_.cryptographer.get(), - /*has_pending_keys=*/false); - } - for (auto& observer : observers_) { - observer.OnEncryptedTypesChanged(SensitiveTypes(), false); - } + broadcasting_observer_->OnCryptographerStateChanged( + state_.cryptographer.get(), + /*has_pending_keys=*/false); + broadcasting_observer_->OnEncryptedTypesChanged(SensitiveTypes(), false); } const Cryptographer& NigoriSyncBridgeImpl::GetCryptographerForTesting() const { @@ -1050,16 +1104,12 @@ case NigoriSpecifics::KEYSTORE_PASSPHRASE: case NigoriSpecifics::CUSTOM_PASSPHRASE: case NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE: - for (auto& observer : observers_) { - observer.OnPassphraseRequired(REASON_DECRYPTION, - GetKeyDerivationParamsForPendingKeys(), - *state_.pending_keys); - } + broadcasting_observer_->OnPassphraseRequired( + REASON_DECRYPTION, GetKeyDerivationParamsForPendingKeys(), + *state_.pending_keys); break; case NigoriSpecifics::TRUSTED_VAULT_PASSPHRASE: - for (auto& observer : observers_) { - observer.OnTrustedVaultKeyRequired(); - } + broadcasting_observer_->OnTrustedVaultKeyRequired(); break; } } @@ -1087,10 +1137,8 @@ std::string packed_custom_passphrase_key = PackExplicitPassphraseKey(*encryptor_, *state_.cryptographer); if (!packed_custom_passphrase_key.empty()) { - for (auto& observer : observers_) { - observer.OnBootstrapTokenUpdated(packed_custom_passphrase_key, - PASSPHRASE_BOOTSTRAP_TOKEN); - } + broadcasting_observer_->OnBootstrapTokenUpdated( + packed_custom_passphrase_key, PASSPHRASE_BOOTSTRAP_TOKEN); } } }
diff --git a/components/sync/nigori/nigori_sync_bridge_impl.h b/components/sync/nigori/nigori_sync_bridge_impl.h index cc3a8c2..d5ff4f13 100644 --- a/components/sync/nigori/nigori_sync_bridge_impl.h +++ b/components/sync/nigori/nigori_sync_bridge_impl.h
@@ -146,10 +146,10 @@ syncer::NigoriState state_; - // TODO(crbug/922900): consider using checked ObserverList once - // SyncEncryptionHandlerImpl is no longer needed or consider refactoring old - // implementation to use checked ObserverList as well. - base::ObserverList<SyncEncryptionHandler::Observer>::Unchecked observers_; + // Observer that owns the list of actual observers, and broadcasts + // notifications to all observers in the list. + class BroadcastingObserver; + const std::unique_ptr<BroadcastingObserver> broadcasting_observer_; SEQUENCE_CHECKER(sequence_checker_);
diff --git a/components/sync/protocol/managed_user_shared_setting_specifics.proto b/components/sync/protocol/managed_user_shared_setting_specifics.proto new file mode 100644 index 0000000..82512ce --- /dev/null +++ b/components/sync/protocol/managed_user_shared_setting_specifics.proto
@@ -0,0 +1,31 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Sync protocol datatype extension for managed user shared settings. + +// If you change or add any fields in this file, update proto_visitors.h and +// potentially proto_enum_conversions.{h, cc}. + +syntax = "proto2"; + +option java_multiple_files = true; +option java_package = "org.chromium.components.sync.protocol"; + +option optimize_for = LITE_RUNTIME; + +package sync_pb; + +// Properties of managed user shared setting sync objects. +message ManagedUserSharedSettingSpecifics { + // The MU ID for the managed user to whom the setting applies. + optional string mu_id = 1; + // The key of the setting. + optional string key = 2; + // The setting value. The setting is a JSON encoding of an arbitrary + // Javascript value. + optional string value = 3; + // This flag is set by the server to acknowledge that it has committed a + // change to a setting. + optional bool acknowledged = 4 [default = false]; +}
diff --git a/components/sync/protocol/managed_user_specifics.proto b/components/sync/protocol/managed_user_specifics.proto new file mode 100644 index 0000000..e36e8c66 --- /dev/null +++ b/components/sync/protocol/managed_user_specifics.proto
@@ -0,0 +1,42 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Sync protocol datatype extension for managed user settings. + +// If you change or add any fields in this file, update proto_visitors.h and +// potentially proto_enum_conversions.{h, cc}. + +syntax = "proto2"; + +option java_multiple_files = true; +option java_package = "org.chromium.components.sync.protocol"; + +option optimize_for = LITE_RUNTIME; + +package sync_pb; + +// Properties of managed user sync objects. +message ManagedUserSpecifics { + // A randomly-generated identifier for the managed user. + optional string id = 1; + // The human-visible name of the managed user + optional string name = 2; + // This flag is set by the server to acknowledge that it has committed a + // newly created managed user. + optional bool acknowledged = 3 [default = false]; + // Master key for managed user cryptohome. + optional string master_key = 4; + // A string representing the index of the supervised user avatar on Chrome. + // It has the following format: + // "chrome-avatar-index:INDEX" where INDEX is an integer. + optional string chrome_avatar = 5; + // A string representing the index of the supervised user avatar on Chrome OS. + // It has the following format: + // "chromeos-avatar-index:INDEX" where INDEX is an integer. + optional string chromeos_avatar = 6; + // Key for signing supervised user's password. + optional string password_signature_key = 7; + // Key for encrypting supervised user's password. + optional string password_encryption_key = 8; +}
diff --git a/components/sync/protocol/proto_value_conversions.cc b/components/sync/protocol/proto_value_conversions.cc index 0e70dd51..b0d82bf5 100644 --- a/components/sync/protocol/proto_value_conversions.cc +++ b/components/sync/protocol/proto_value_conversions.cc
@@ -330,6 +330,8 @@ IMPLEMENT_PROTO_TO_VALUE(MountainShareSpecifics) IMPLEMENT_PROTO_TO_VALUE(NavigationRedirect) IMPLEMENT_PROTO_TO_VALUE(NigoriSpecifics) +IMPLEMENT_PROTO_TO_VALUE(OsPreferenceSpecifics) +IMPLEMENT_PROTO_TO_VALUE(OsPriorityPreferenceSpecifics) IMPLEMENT_PROTO_TO_VALUE(PasswordSpecifics) IMPLEMENT_PROTO_TO_VALUE(PasswordSpecificsData) IMPLEMENT_PROTO_TO_VALUE(PaymentsCustomerData)
diff --git a/components/sync/protocol/proto_value_conversions.h b/components/sync/protocol/proto_value_conversions.h index 1b0b276..fb17ecb 100644 --- a/components/sync/protocol/proto_value_conversions.h +++ b/components/sync/protocol/proto_value_conversions.h
@@ -44,6 +44,8 @@ class MountainShareSpecifics; class NavigationRedirect; class NigoriSpecifics; +class OsPreferenceSpecifics; +class OsPriorityPreferenceSpecifics; class PasswordSpecifics; class PasswordSpecificsData; class PaymentsCustomerData; @@ -176,6 +178,12 @@ std::unique_ptr<base::DictionaryValue> NigoriSpecificsToValue( const sync_pb::NigoriSpecifics& nigori_specifics); +std::unique_ptr<base::DictionaryValue> OsPreferenceSpecificsToValue( + const sync_pb::OsPreferenceSpecifics& specifics); + +std::unique_ptr<base::DictionaryValue> OsPriorityPreferenceSpecificsToValue( + const sync_pb::OsPriorityPreferenceSpecifics& specifics); + std::unique_ptr<base::DictionaryValue> PasswordSpecificsToValue( const sync_pb::PasswordSpecifics& password_specifics);
diff --git a/components/sync/protocol/proto_value_conversions_unittest.cc b/components/sync/protocol/proto_value_conversions_unittest.cc index 5ba9ca804..61cddcc 100644 --- a/components/sync/protocol/proto_value_conversions_unittest.cc +++ b/components/sync/protocol/proto_value_conversions_unittest.cc
@@ -25,6 +25,8 @@ #include "components/sync/protocol/managed_user_setting_specifics.pb.h" #include "components/sync/protocol/managed_user_whitelist_specifics.pb.h" #include "components/sync/protocol/nigori_specifics.pb.h" +#include "components/sync/protocol/os_preference_specifics.pb.h" +#include "components/sync/protocol/os_priority_preference_specifics.pb.h" #include "components/sync/protocol/password_specifics.pb.h" #include "components/sync/protocol/preference_specifics.pb.h" #include "components/sync/protocol/priority_preference_specifics.pb.h" @@ -56,7 +58,7 @@ DEFINE_SPECIFICS_TO_VALUE_TEST(encrypted) -static_assert(39 == syncer::ModelType::NUM_ENTRIES, +static_assert(41 == syncer::ModelType::NUM_ENTRIES, "When adding a new field, add a DEFINE_SPECIFICS_TO_VALUE_TEST " "for your field below, and optionally a test for the specific " "conversions."); @@ -81,6 +83,8 @@ DEFINE_SPECIFICS_TO_VALUE_TEST(managed_user_whitelist) DEFINE_SPECIFICS_TO_VALUE_TEST(mountain_share) DEFINE_SPECIFICS_TO_VALUE_TEST(nigori) +DEFINE_SPECIFICS_TO_VALUE_TEST(os_preference) +DEFINE_SPECIFICS_TO_VALUE_TEST(os_priority_preference) DEFINE_SPECIFICS_TO_VALUE_TEST(password) DEFINE_SPECIFICS_TO_VALUE_TEST(preference) DEFINE_SPECIFICS_TO_VALUE_TEST(printer)
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h index dc87cd28..05d6de2 100644 --- a/components/sync/protocol/proto_visitors.h +++ b/components/sync/protocol/proto_visitors.h
@@ -25,6 +25,8 @@ #include "components/sync/protocol/mountain_share_specifics.pb.h" #include "components/sync/protocol/nigori_local_data.pb.h" #include "components/sync/protocol/nigori_specifics.pb.h" +#include "components/sync/protocol/os_preference_specifics.pb.h" +#include "components/sync/protocol/os_priority_preference_specifics.pb.h" #include "components/sync/protocol/password_specifics.pb.h" #include "components/sync/protocol/persisted_entity_data.pb.h" #include "components/sync/protocol/preference_specifics.pb.h" @@ -364,7 +366,7 @@ } VISIT_PROTO_FIELDS(const sync_pb::EntitySpecifics& proto) { - static_assert(39 == ModelType::NUM_ENTRIES, + static_assert(41 == ModelType::NUM_ENTRIES, "When adding a new protocol type, you will likely need to add " "it here as well."); VISIT(encrypted); @@ -388,6 +390,8 @@ VISIT(managed_user_whitelist); VISIT(mountain_share); VISIT(nigori); + VISIT(os_preference); + VISIT(os_priority_preference); VISIT(password); VISIT(preference); VISIT(printer); @@ -646,6 +650,14 @@ VISIT(custom_passphrase_key_derivation_salt); } +VISIT_PROTO_FIELDS(const sync_pb::OsPreferenceSpecifics& proto) { + VISIT(preference); +} + +VISIT_PROTO_FIELDS(const sync_pb::OsPriorityPreferenceSpecifics& proto) { + VISIT(preference); +} + VISIT_PROTO_FIELDS(const sync_pb::PasswordSpecifics& proto) { VISIT(encrypted); VISIT(unencrypted_metadata);
diff --git a/components/sync/protocol/protocol_sources.gni b/components/sync/protocol/protocol_sources.gni index c39a3483..7eee6ad8 100644 --- a/components/sync/protocol/protocol_sources.gni +++ b/components/sync/protocol/protocol_sources.gni
@@ -30,6 +30,8 @@ "history_status", "loopback_server", "managed_user_setting_specifics", + "managed_user_shared_setting_specifics", + "managed_user_specifics", "managed_user_whitelist_specifics", "model_type_state", "model_type_store_schema_descriptor",
diff --git a/components/sync/protocol/sync.proto b/components/sync/protocol/sync.proto index 446b430f..c398dff 100644 --- a/components/sync/protocol/sync.proto +++ b/components/sync/protocol/sync.proto
@@ -37,6 +37,8 @@ import "get_updates_caller_info.proto"; import "history_delete_directive_specifics.proto"; import "managed_user_setting_specifics.proto"; +import "managed_user_shared_setting_specifics.proto"; +import "managed_user_specifics.proto"; import "managed_user_whitelist_specifics.proto"; import "mountain_share_specifics.proto"; import "nigori_specifics.proto"; @@ -143,6 +145,11 @@ FaviconTrackingSpecifics favicon_tracking = 181534; FaviconImageSpecifics favicon_image = 182019; ManagedUserSettingSpecifics managed_user_setting = 186662; + // TODO(tschumann): Remove once server-side dependencies are resolved. + ManagedUserSpecifics managed_user = 194582 [deprecated = true]; + // TODO(tschumann): Remove once server-side dependencies are resolved. + ManagedUserSharedSettingSpecifics managed_user_shared_setting = 202026 + [deprecated = true]; ManagedUserWhitelistSpecifics managed_user_whitelist = 306060; AppListSpecifics app_list = 229170; AutofillWalletSpecifics autofill_wallet = 306270; @@ -160,10 +167,6 @@ OsPreferenceSpecifics os_preference = 702141; OsPriorityPreferenceSpecifics os_priority_preference = 703915; } - reserved 194582; - reserved "managed_user"; - reserved 202026; - reserved "managed_user_shared_setting"; reserved 218175; reserved "wifi_credential"; reserved 223759;
diff --git a/components/sync/syncable/nigori_util.cc b/components/sync/syncable/nigori_util.cc index a4d62e7..6bbcfecd 100644 --- a/components/sync/syncable/nigori_util.cc +++ b/components/sync/syncable/nigori_util.cc
@@ -265,7 +265,7 @@ bool encrypt_everything, sync_pb::NigoriSpecifics* nigori) { nigori->set_encrypt_everything(encrypt_everything); - static_assert(39 == ModelType::NUM_ENTRIES, + static_assert(41 == ModelType::NUM_ENTRIES, "If adding an encryptable type, update handling below."); nigori->set_encrypt_bookmarks(encrypted_types.Has(BOOKMARKS)); nigori->set_encrypt_preferences(encrypted_types.Has(PREFERENCES)); @@ -292,6 +292,7 @@ nigori->set_encrypt_mountain_shares(encrypted_types.Has(MOUNTAIN_SHARES)); nigori->set_encrypt_send_tab_to_self(encrypted_types.Has(SEND_TAB_TO_SELF)); nigori->set_encrypt_web_apps(encrypted_types.Has(WEB_APPS)); + nigori->set_encrypt_os_preferences(encrypted_types.Has(OS_PREFERENCES)); } ModelTypeSet GetEncryptedTypesFromNigori( @@ -300,7 +301,7 @@ return ModelTypeSet::All(); ModelTypeSet encrypted_types; - static_assert(39 == ModelType::NUM_ENTRIES, + static_assert(41 == ModelType::NUM_ENTRIES, "If adding an encryptable type, update handling below."); if (nigori.encrypt_bookmarks()) encrypted_types.Put(BOOKMARKS); @@ -348,6 +349,8 @@ encrypted_types.Put(SEND_TAB_TO_SELF); if (nigori.encrypt_web_apps()) encrypted_types.Put(WEB_APPS); + if (nigori.encrypt_os_preferences()) + encrypted_types.Put(OS_PREFERENCES); return encrypted_types; }
diff --git a/components/sync_preferences/pref_model_associator.cc b/components/sync_preferences/pref_model_associator.cc index 6cf1f4d..a04adc9 100644 --- a/components/sync_preferences/pref_model_associator.cc +++ b/components/sync_preferences/pref_model_associator.cc
@@ -39,24 +39,20 @@ namespace { const sync_pb::PreferenceSpecifics& GetSpecifics(const syncer::SyncData& pref) { - DCHECK(pref.GetDataType() == syncer::PREFERENCES || - pref.GetDataType() == syncer::PRIORITY_PREFERENCES); - if (pref.GetDataType() == syncer::PRIORITY_PREFERENCES) { - return pref.GetSpecifics().priority_preference().preference(); - } else { - return pref.GetSpecifics().preference(); - } -} - -sync_pb::PreferenceSpecifics* GetMutableSpecifics( - const syncer::ModelType type, - sync_pb::EntitySpecifics* specifics) { - if (type == syncer::PRIORITY_PREFERENCES) { - DCHECK(!specifics->has_preference()); - return specifics->mutable_priority_preference()->mutable_preference(); - } else { - DCHECK(!specifics->has_priority_preference()); - return specifics->mutable_preference(); + switch (pref.GetDataType()) { + case syncer::PREFERENCES: + return pref.GetSpecifics().preference(); + case syncer::PRIORITY_PREFERENCES: + return pref.GetSpecifics().priority_preference().preference(); +#if defined(OS_CHROMEOS) + case syncer::OS_PREFERENCES: + return pref.GetSpecifics().os_preference().preference(); + case syncer::OS_PRIORITY_PREFERENCES: + return pref.GetSpecifics().os_priority_preference().preference(); +#endif + default: + NOTREACHED(); + return pref.GetSpecifics().preference(); } } @@ -68,7 +64,14 @@ PersistentPrefStore* user_pref_store) : type_(type), client_(client), user_pref_store_(user_pref_store) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(type_ == PREFERENCES || type_ == PRIORITY_PREFERENCES); +#if defined(OS_CHROMEOS) + DCHECK(type_ == syncer::PREFERENCES || + type_ == syncer::PRIORITY_PREFERENCES || + type_ == syncer::OS_PREFERENCES || + type_ == syncer::OS_PRIORITY_PREFERENCES); +#else + DCHECK(type_ == syncer::PREFERENCES || type_ == syncer::PRIORITY_PREFERENCES); +#endif DCHECK(user_pref_store_); } @@ -79,6 +82,27 @@ synced_pref_observers_.clear(); } +// static +sync_pb::PreferenceSpecifics* PrefModelAssociator::GetMutableSpecifics( + syncer::ModelType type, + sync_pb::EntitySpecifics* specifics) { + switch (type) { + case syncer::PREFERENCES: + return specifics->mutable_preference(); + case syncer::PRIORITY_PREFERENCES: + return specifics->mutable_priority_preference()->mutable_preference(); +#if defined(OS_CHROMEOS) + case syncer::OS_PREFERENCES: + return specifics->mutable_os_preference()->mutable_preference(); + case syncer::OS_PRIORITY_PREFERENCES: + return specifics->mutable_os_priority_preference()->mutable_preference(); +#endif + default: + NOTREACHED(); + return nullptr; + } +} + void PrefModelAssociator::InitPrefAndAssociate( const syncer::SyncData& sync_pref, const std::string& pref_name,
diff --git a/components/sync_preferences/pref_model_associator.h b/components/sync_preferences/pref_model_associator.h index 6b39aa1..15459a0 100644 --- a/components/sync_preferences/pref_model_associator.h +++ b/components/sync_preferences/pref_model_associator.h
@@ -26,6 +26,7 @@ } namespace sync_pb { +class EntitySpecifics; class PreferenceSpecifics; } @@ -50,6 +51,12 @@ // See description above field for details. bool models_associated() const { return models_associated_; } + // Returns the mutable preference from |specifics| for a given model |type|. + // Exposed for testing. + static sync_pb::PreferenceSpecifics* GetMutableSpecifics( + syncer::ModelType type, + sync_pb::EntitySpecifics* specifics); + // syncer::SyncableService implementation. void WaitUntilReadyToSync(base::OnceClosure done) override; syncer::SyncMergeResult MergeDataAndStartSyncing( @@ -191,7 +198,7 @@ std::unique_ptr<syncer::SyncErrorFactory> sync_error_factory_; // The datatype that this associator is responible for, either PREFERENCES or - // PRIORITY_PREFERENCES. + // PRIORITY_PREFERENCES or OS_PREFERENCES or OS_PRIORITY_PREFERENCES. syncer::ModelType type_; // Map prefs to lists of observers. Observers will receive notification when
diff --git a/components/sync_preferences/pref_service_syncable.cc b/components/sync_preferences/pref_service_syncable.cc index e9a9698d..bcd81db 100644 --- a/components/sync_preferences/pref_service_syncable.cc +++ b/components/sync_preferences/pref_service_syncable.cc
@@ -53,9 +53,21 @@ priority_pref_sync_associator_(pref_model_associator_client, syncer::PRIORITY_PREFERENCES, user_prefs.get()), +#if defined(OS_CHROMEOS) + os_pref_sync_associator_(pref_model_associator_client, + syncer::OS_PREFERENCES, + user_prefs.get()), + os_priority_pref_sync_associator_(pref_model_associator_client, + syncer::OS_PRIORITY_PREFERENCES, + user_prefs.get()), +#endif pref_registry_(std::move(pref_registry)) { pref_sync_associator_.SetPrefService(this); priority_pref_sync_associator_.SetPrefService(this); +#if defined(OS_CHROMEOS) + os_pref_sync_associator_.SetPrefService(this); + os_priority_pref_sync_associator_.SetPrefService(this); +#endif // Let PrefModelAssociators know about changes to preference values. pref_value_store_->set_callback(base::Bind( @@ -120,16 +132,37 @@ } bool PrefServiceSyncable::IsSyncing() { - return pref_sync_associator_.models_associated(); + if (pref_sync_associator_.models_associated()) + return true; +#if defined(OS_CHROMEOS) + if (os_pref_sync_associator_.models_associated()) + return true; +#endif + return false; } bool PrefServiceSyncable::IsPrioritySyncing() { - return priority_pref_sync_associator_.models_associated(); + if (priority_pref_sync_associator_.models_associated()) + return true; +#if defined(OS_CHROMEOS) + if (os_priority_pref_sync_associator_.models_associated()) + return true; +#endif + return false; } bool PrefServiceSyncable::IsPrefSynced(const std::string& name) const { - return pref_sync_associator_.IsPrefSynced(name) || - priority_pref_sync_associator_.IsPrefSynced(name); + if (pref_sync_associator_.IsPrefSynced(name) || + priority_pref_sync_associator_.IsPrefSynced(name)) { + return true; + } +#if defined(OS_CHROMEOS) + if (os_pref_sync_associator_.IsPrefSynced(name) || + os_priority_pref_sync_associator_.IsPrefSynced(name)) { + return true; + } +#endif + return false; } void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { @@ -143,13 +176,20 @@ syncer::SyncableService* PrefServiceSyncable::GetSyncableService( const syncer::ModelType& type) { - if (type == syncer::PREFERENCES) { - return &pref_sync_associator_; - } else if (type == syncer::PRIORITY_PREFERENCES) { - return &priority_pref_sync_associator_; - } else { - NOTREACHED() << "invalid model type: " << type; - return nullptr; + switch (type) { + case syncer::PREFERENCES: + return &pref_sync_associator_; + case syncer::PRIORITY_PREFERENCES: + return &priority_pref_sync_associator_; +#if defined(OS_CHROMEOS) + case syncer::OS_PREFERENCES: + return &os_pref_sync_associator_; + case syncer::OS_PRIORITY_PREFERENCES: + return &os_priority_pref_sync_associator_; +#endif + default: + NOTREACHED() << "invalid model type: " << type; + return nullptr; } } @@ -165,6 +205,10 @@ SyncedPrefObserver* observer) { pref_sync_associator_.AddSyncedPrefObserver(name, observer); priority_pref_sync_associator_.AddSyncedPrefObserver(name, observer); +#if defined(OS_CHROMEOS) + os_pref_sync_associator_.AddSyncedPrefObserver(name, observer); + os_priority_pref_sync_associator_.AddSyncedPrefObserver(name, observer); +#endif } void PrefServiceSyncable::RemoveSyncedPrefObserver( @@ -172,6 +216,10 @@ SyncedPrefObserver* observer) { pref_sync_associator_.RemoveSyncedPrefObserver(name, observer); priority_pref_sync_associator_.RemoveSyncedPrefObserver(name, observer); +#if defined(OS_CHROMEOS) + os_pref_sync_associator_.RemoveSyncedPrefObserver(name, observer); + os_priority_pref_sync_associator_.RemoveSyncedPrefObserver(name, observer); +#endif } void PrefServiceSyncable::AddRegisteredSyncablePreference( @@ -180,9 +228,22 @@ DCHECK(FindPreference(path)); if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PREF) { pref_sync_associator_.RegisterPref(path); - } else if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) { - priority_pref_sync_associator_.RegisterPref(path); + return; } + if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) { + priority_pref_sync_associator_.RegisterPref(path); + return; + } +#if defined(OS_CHROMEOS) + if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF) { + os_pref_sync_associator_.RegisterPref(path); + return; + } + if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF) { + os_priority_pref_sync_associator_.RegisterPref(path); + return; + } +#endif } void PrefServiceSyncable::OnIsSyncingChanged() { @@ -193,6 +254,10 @@ void PrefServiceSyncable::ProcessPrefChange(const std::string& name) { pref_sync_associator_.ProcessPrefChange(name); priority_pref_sync_associator_.ProcessPrefChange(name); +#if defined(OS_CHROMEOS) + os_pref_sync_associator_.ProcessPrefChange(name); + os_priority_pref_sync_associator_.ProcessPrefChange(name); +#endif } } // namespace sync_preferences
diff --git a/components/sync_preferences/pref_service_syncable.h b/components/sync_preferences/pref_service_syncable.h index 8013edb..155fc77 100644 --- a/components/sync_preferences/pref_service_syncable.h +++ b/components/sync_preferences/pref_service_syncable.h
@@ -107,6 +107,13 @@ PrefModelAssociator pref_sync_associator_; PrefModelAssociator priority_pref_sync_associator_; + +#if defined(OS_CHROMEOS) + // Associators for Chrome OS system preferences. + PrefModelAssociator os_pref_sync_associator_; + PrefModelAssociator os_priority_pref_sync_associator_; +#endif + const scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_; base::ObserverList<PrefServiceSyncableObserver>::Unchecked observer_list_;
diff --git a/components/sync_preferences/pref_service_syncable_unittest.cc b/components/sync_preferences/pref_service_syncable_unittest.cc index 5e2d214..5148d51 100644 --- a/components/sync_preferences/pref_service_syncable_unittest.cc +++ b/components/sync_preferences/pref_service_syncable_unittest.cc
@@ -9,6 +9,7 @@ #include <memory> #include "base/bind.h" +#include "base/bind_helpers.h" #include "base/json/json_reader.h" #include "base/json/json_string_value_serializer.h" #include "base/json/json_writer.h" @@ -20,6 +21,7 @@ #include "components/prefs/pref_notifier_impl.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/prefs/testing_pref_store.h" +#include "components/sync/base/model_type.h" #include "components/sync/model/sync_change.h" #include "components/sync/model/sync_change_processor.h" #include "components/sync/model/sync_data.h" @@ -40,6 +42,7 @@ using testing::Not; using testing::NotNull; using testing::SizeIs; +using user_prefs::PrefRegistrySyncable; namespace sync_preferences { @@ -86,6 +89,45 @@ bool fail_next_; }; +class TestSyncedPrefObserver : public SyncedPrefObserver { + public: + TestSyncedPrefObserver() = default; + ~TestSyncedPrefObserver() = default; + + void OnSyncedPrefChanged(const std::string& path, bool from_sync) override { + last_pref_ = path; + } + + std::string last_pref_; +}; + +syncer::SyncChange MakeRemoteChange(int64_t id, + const std::string& name, + const base::Value& value, + SyncChange::SyncChangeType change_type, + syncer::ModelType model_type) { + std::string serialized; + JSONStringValueSerializer json(&serialized); + if (!json.Serialize(value)) + return syncer::SyncChange(); + sync_pb::EntitySpecifics entity; + sync_pb::PreferenceSpecifics* pref = + PrefModelAssociator::GetMutableSpecifics(model_type, &entity); + pref->set_name(name); + pref->set_value(serialized); + return syncer::SyncChange(FROM_HERE, change_type, + syncer::SyncData::CreateRemoteData(id, entity)); +} + +// Creates a SyncChange for model type |PREFERENCES|. +syncer::SyncChange MakeRemoteChange(int64_t id, + const std::string& name, + const base::Value& value, + SyncChange::SyncChangeType type) { + return MakeRemoteChange(id, name, value, type, + syncer::ModelType::PREFERENCES); +} + class PrefServiceSyncableTest : public testing::Test { public: PrefServiceSyncableTest() @@ -109,22 +151,6 @@ ASSERT_TRUE(pref_sync_service_); } - syncer::SyncChange MakeRemoteChange(int64_t id, - const std::string& name, - const base::Value& value, - SyncChange::SyncChangeType type) { - std::string serialized; - JSONStringValueSerializer json(&serialized); - if (!json.Serialize(value)) - return syncer::SyncChange(); - sync_pb::EntitySpecifics entity; - sync_pb::PreferenceSpecifics* pref_one = entity.mutable_preference(); - pref_one->set_name(name); - pref_one->set_value(serialized); - return syncer::SyncChange(FROM_HERE, type, - syncer::SyncData::CreateRemoteData(id, entity)); - } - void AddToRemoteDataList(const std::string& name, const base::Value& value, syncer::SyncDataList* out) { @@ -170,10 +196,6 @@ return nullptr; } - bool IsSynced(const std::string& pref_name) { - return pref_sync_service_->IsPrefSynced(pref_name); - } - bool IsRegistered(const std::string& pref_name) { return pref_sync_service_->IsPrefRegistered(pref_name.c_str()); } @@ -333,7 +355,7 @@ user_prefs_, pref_registry_, &client_, - base::BindRepeating(&PrefServiceSyncableMergeTest::HandleReadError), + /*read_error_callback=*/base::DoNothing(), /*async=*/false), pref_sync_service_(nullptr), next_pref_remote_sync_node_id_(0) {} @@ -361,9 +383,6 @@ ASSERT_THAT(pref_sync_service_, NotNull()); } - /// Empty stub for prefs_ error handling. - static void HandleReadError(PersistentPrefStore::PrefReadError error) {} - syncer::SyncChange MakeRemoteChange(int64_t id, const std::string& name, const base::Value& value, @@ -539,7 +558,6 @@ } TEST_F(PrefServiceSyncableMergeTest, KeepPriorityPreferencesSeparately) { - base::HistogramTester histogram_tester; const std::string pref_name = "testing.priority_pref"; pref_registry_->RegisterStringPref( pref_name, "priority-default", @@ -554,6 +572,25 @@ Eq("priority-default")); } +#if defined(OS_CHROMEOS) +TEST_F(PrefServiceSyncableMergeTest, KeepOsPreferencesSeparately) { + const std::string pref_name = "testing.os_pref"; + + // Register a pref name as an OS pref. + pref_registry_->RegisterStringPref( + pref_name, "os-default", + user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); + + // Set up sync data as a browser pref. + syncer::SyncDataList in; + // AddToRemoteDataList() produces sync data for browser prefs. + AddToRemoteDataList(pref_name, base::Value("browser-value"), &in); + syncer::SyncChangeList out; + InitWithSyncDataTakeOutput(in, &out); + EXPECT_THAT(GetPreferenceValue(pref_name).GetString(), Eq("os-default")); +} +#endif // defined(OS_CHROMEOS) + class ShouldNotBeNotifedObserver : public SyncedPrefObserver { public: ShouldNotBeNotifedObserver() {} @@ -829,6 +866,169 @@ EXPECT_TRUE(pref->IsDefaultValue()); } +#if defined(OS_CHROMEOS) +// The Chrome OS tests exercise pref model association that happens in the +// constructor of PrefServiceSyncable. The tests must register prefs first, +// then create the PrefServiceSyncable object. The tests live in this file +// because they share utility code with the cross-platform tests. +class PrefServiceSyncableChromeOsTest : public testing::Test { + public: + PrefServiceSyncableChromeOsTest() + : pref_registry_(base::MakeRefCounted<PrefRegistrySyncable>()), + pref_notifier_(new PrefNotifierImpl), + user_prefs_(base::MakeRefCounted<TestingPrefStore>()) {} + + void SetUp() override { + // Register prefs of various types. + pref_registry_->RegisterStringPref("unsynced_pref", std::string()); + pref_registry_->RegisterStringPref("browser_pref", std::string(), + PrefRegistrySyncable::SYNCABLE_PREF); + pref_registry_->RegisterStringPref( + "browser_priority_pref", std::string(), + PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF); + pref_registry_->RegisterStringPref("os_pref", std::string(), + PrefRegistrySyncable::SYNCABLE_OS_PREF); + pref_registry_->RegisterStringPref( + "os_priority_pref", std::string(), + PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF); + + // Create the PrefServiceSyncable after prefs are registered, which is the + // order used in production. + prefs_ = std::make_unique<PrefServiceSyncable>( + std::unique_ptr<PrefNotifierImpl>(pref_notifier_), + std::make_unique<PrefValueStore>( + new TestingPrefStore, new TestingPrefStore, new TestingPrefStore, + new TestingPrefStore, user_prefs_.get(), new TestingPrefStore, + pref_registry_->defaults().get(), pref_notifier_), + user_prefs_, pref_registry_, &client_, + /*read_error_callback=*/base::DoNothing(), + /*async=*/false); + } + + void InitSyncForAllTypes() { + const syncer::ModelTypeSet types( + syncer::PREFERENCES, syncer::PRIORITY_PREFERENCES, + syncer::OS_PREFERENCES, syncer::OS_PRIORITY_PREFERENCES); + for (syncer::ModelType type : types) { + syncer::SyncDataList empty_data; + syncer::SyncMergeResult r = + prefs_->GetSyncableService(type)->MergeDataAndStartSyncing( + type, empty_data, + std::make_unique<TestSyncProcessorStub>(nullptr), + std::make_unique<syncer::SyncErrorFactoryMock>()); + EXPECT_FALSE(r.error().IsSet()); + } + } + + void TearDown() override { prefs_.reset(); } + + protected: + scoped_refptr<PrefRegistrySyncable> pref_registry_; + PrefNotifierImpl* pref_notifier_; // Owned by |prefs_|. + scoped_refptr<TestingPrefStore> user_prefs_; + TestPrefModelAssociatorClient client_; + std::unique_ptr<PrefServiceSyncable> prefs_; +}; + +TEST_F(PrefServiceSyncableChromeOsTest, IsPrefRegistered_Prefs) { + auto* associator = static_cast<PrefModelAssociator*>( + prefs_->GetSyncableService(syncer::PREFERENCES)); + EXPECT_FALSE(associator->IsPrefRegistered("unsynced_pref")); + EXPECT_TRUE(associator->IsPrefRegistered("browser_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("browser_priority_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("os_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("os_priority_pref")); +} + +TEST_F(PrefServiceSyncableChromeOsTest, IsPrefRegistered_PriorityPrefs) { + auto* associator = static_cast<PrefModelAssociator*>( + prefs_->GetSyncableService(syncer::PRIORITY_PREFERENCES)); + EXPECT_FALSE(associator->IsPrefRegistered("unsynced_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("browser_pref")); + EXPECT_TRUE(associator->IsPrefRegistered("browser_priority_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("os_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("os_priority_pref")); +} + +TEST_F(PrefServiceSyncableChromeOsTest, IsPrefRegistered_OsPrefs) { + auto* associator = static_cast<PrefModelAssociator*>( + prefs_->GetSyncableService(syncer::OS_PREFERENCES)); + EXPECT_FALSE(associator->IsPrefRegistered("unsynced_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("browser_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("browser_priority_pref")); + EXPECT_TRUE(associator->IsPrefRegistered("os_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("os_priority_pref")); +} + +TEST_F(PrefServiceSyncableChromeOsTest, IsPrefRegistered_OsPriorityPrefs) { + auto* associator = static_cast<PrefModelAssociator*>( + prefs_->GetSyncableService(syncer::OS_PRIORITY_PREFERENCES)); + EXPECT_FALSE(associator->IsPrefRegistered("unsynced_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("browser_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("browser_priority_pref")); + EXPECT_FALSE(associator->IsPrefRegistered("os_pref")); + EXPECT_TRUE(associator->IsPrefRegistered("os_priority_pref")); +} + +TEST_F(PrefServiceSyncableChromeOsTest, IsSyncing) { + EXPECT_FALSE(prefs_->IsSyncing()); + EXPECT_FALSE(prefs_->IsPrioritySyncing()); + InitSyncForAllTypes(); + EXPECT_TRUE(prefs_->IsSyncing()); + EXPECT_TRUE(prefs_->IsPrioritySyncing()); +} + +TEST_F(PrefServiceSyncableChromeOsTest, IsPrefSynced_OsPref) { + InitSyncForAllTypes(); + EXPECT_FALSE(prefs_->IsPrefSynced("os_pref")); + + syncer::SyncChangeList list; + list.push_back(MakeRemoteChange(1, "os_pref", base::Value("value"), + SyncChange::ACTION_ADD, + syncer::OS_PREFERENCES)); + prefs_->GetSyncableService(syncer::OS_PREFERENCES) + ->ProcessSyncChanges(FROM_HERE, list); + EXPECT_TRUE(prefs_->IsPrefSynced("os_pref")); +} + +TEST_F(PrefServiceSyncableChromeOsTest, IsPrefSynced_OsPriorityPref) { + InitSyncForAllTypes(); + EXPECT_FALSE(prefs_->IsPrefSynced("os_priority_pref")); + + syncer::SyncChangeList list; + list.push_back(MakeRemoteChange(1, "os_priority_pref", base::Value("value"), + SyncChange::ACTION_ADD, + syncer::OS_PRIORITY_PREFERENCES)); + prefs_->GetSyncableService(syncer::OS_PRIORITY_PREFERENCES) + ->ProcessSyncChanges(FROM_HERE, list); + EXPECT_TRUE(prefs_->IsPrefSynced("os_priority_pref")); +} + +TEST_F(PrefServiceSyncableChromeOsTest, SyncedPrefObserver_OsPref) { + InitSyncForAllTypes(); + + TestSyncedPrefObserver observer; + prefs_->AddSyncedPrefObserver("os_pref", &observer); + + prefs_->SetString("os_pref", "value"); + EXPECT_EQ("os_pref", observer.last_pref_); + + prefs_->RemoveSyncedPrefObserver("os_pref", &observer); +} + +TEST_F(PrefServiceSyncableChromeOsTest, SyncedPrefObserver_OsPriorityPref) { + InitSyncForAllTypes(); + + TestSyncedPrefObserver observer; + prefs_->AddSyncedPrefObserver("os_priority_pref", &observer); + + prefs_->SetString("os_priority_pref", "value"); + EXPECT_EQ("os_priority_pref", observer.last_pref_); + + prefs_->RemoveSyncedPrefObserver("os_priority_pref", &observer); +} +#endif // defined(OS_CHROMEOS) + } // namespace } // namespace sync_preferences
diff --git a/components/ui_devtools/BUILD.gn b/components/ui_devtools/BUILD.gn index b01fc30..cd2141f 100644 --- a/components/ui_devtools/BUILD.gn +++ b/components/ui_devtools/BUILD.gn
@@ -113,8 +113,6 @@ "//mojo/public/cpp/bindings", "//mojo/public/cpp/system", "//net", - "//services/tracing/public/cpp", - "//services/tracing/public/mojom", "//ui/gfx", ] @@ -123,6 +121,8 @@ "//services/network/public/cpp", "//services/network/public/mojom", "//services/service_manager/public/cpp", + "//services/tracing/public/cpp", + "//services/tracing/public/mojom", "//third_party/perfetto/gn:default_deps", ] }
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc index c53d301c..998ef86 100644 --- a/content/app/content_main_runner_impl.cc +++ b/content/app/content_main_runner_impl.cc
@@ -42,6 +42,7 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/task/post_task.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/trace_event/trace_event.h" #include "components/discardable_memory/service/discardable_shared_memory_manager.h" #include "components/download/public/common/download_task_runner.h"
diff --git a/content/browser/android/content_url_loader_factory.cc b/content/browser/android/content_url_loader_factory.cc index 1f29596..b6336926 100644 --- a/content/browser/android/content_url_loader_factory.cc +++ b/content/browser/android/content_url_loader_factory.cc
@@ -14,11 +14,13 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/macros.h" +#include "base/strings/stringprintf.h" #include "base/time/time.h" #include "content/browser/web_package/bundled_exchanges_utils.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/file_url_loader.h" #include "content/public/common/content_client.h" +#include "content/public/common/resource_type.h" #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/system/data_pipe.h" #include "mojo/public/cpp/system/data_pipe_producer.h"
diff --git a/content/browser/appcache/README.md b/content/browser/appcache/README.md index dde134d3..d50b48e9 100644 --- a/content/browser/appcache/README.md +++ b/content/browser/appcache/README.md
@@ -36,7 +36,7 @@ AppCache aims for comparable ease by automatically updating its locally cached copy of the manifest and its resources whenever a page is visited. This comes -with some significant caveats. +with some significant caveats: 1. AppCache bails early in the update process if the manifest hasn't changed (byte for byte). This behavior is intended to save network bandwidth. @@ -72,7 +72,7 @@ Manifest sharing is particularly complex when combined with implicit caching. An AppCache manifest is not required to list the HTML pages that refer to it via an `<html manifest>` attribute. (Listing the pages is however recommended.) -This allowance introduces the following complexities. +This allowance introduces the following complexities: 1. When a browser encounters an HTML page that refers to a manifest it hasn't seen before, the browser creates an implicit resource entry for the HTML @@ -109,13 +109,20 @@ ## Data Model -AppCache uses the following terms. +AppCache uses the following terms: * A **manifest** is a list of URLs to resources. The listed resources should be be sufficient for the page to be used while offline. * An **application cache** contains one version of a manifest and all the resources associated with it. This includes the resources explicitly listed in the manifest, and the implicitly cached HTML pages that refer to the manifest. + The HTTP responses are stored in a disk_cache (//net term), then all other + AppCache information is stored in a per-profile SQLite database that points + into the disk_cache. The disk_cache scope is per-profile. +* A **response** represents the headers and body for a given server response. + This response is first served by a server and may then be stored and retrieved + in the disk_cache. The application cache in the SQLite database updates each + entry to track the associated response id in the disk_cache for that entry. * An **application cache group** is a collection of all the application caches that have the same manifest. * A **cache host** is a name used to refer to a Document (HTML page) when the @@ -124,14 +131,16 @@ ### Application Cache -An application cache has the following components. +An application cache has the following components: 1. **Entries** that identify resources to be cached. 2. **Namespaces** that direct the loading of sub-resource URLs for a page associated with the cache. 3. **Flags** that influence the cache's behavior. -Entries have the following types. +All of these components are stored in and retrieved from a SQLite database. + +Entries have the following types: * **manifest** - the AppCache manifest; the absolute URL of this entry is used to identify the group that this application cache belongs to @@ -145,8 +154,11 @@ indicates a document whose `<html manifest>` attribute does not point to this cache's manifest. +Each entry can refer to its response, which allows AppCache to know where to +find a given entry's cached response data in its disk or memory cache. + Namespaces are conceptually patterns that match resource URLs. AppCache supports -the following namespaces. +the following namespaces: * **fallback** - URLs matching the namespace are first fetched from the network. If the fetch fails, a cached fallback resource is used instead. Fallback @@ -171,7 +183,7 @@ keyword after the namespace in the manifest. *** -An application cache has the following flags. +An application cache has the following flags: * **completeness** - the application cache is *complete* when all the resources in the manifest have been fetched and cached, and *incomplete* otherwise
diff --git a/content/browser/appcache/appcache_group_unittest.cc b/content/browser/appcache/appcache_group_unittest.cc index 53db23a..786eee3 100644 --- a/content/browser/appcache/appcache_group_unittest.cc +++ b/content/browser/appcache/appcache_group_unittest.cc
@@ -12,6 +12,7 @@ #include "content/browser/appcache/appcache_host.h" #include "content/browser/appcache/appcache_update_job.h" #include "content/browser/appcache/mock_appcache_service.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "mojo/public/cpp/bindings/remote.h" #include "testing/gtest/include/gtest/gtest.h" @@ -46,7 +47,8 @@ const std::string& message) override {} void SetSubresourceFactory( - network::mojom::URLLoaderFactoryPtr url_loader_factory) override {} + mojo::PendingRemote<network::mojom::URLLoaderFactory> url_loader_factory) + override {} mojo::PendingRemote<blink::mojom::AppCacheFrontend> Bind( const base::UnguessableToken& host_id) {
diff --git a/content/browser/appcache/appcache_host.cc b/content/browser/appcache/appcache_host.cc index eb5d2af..9830a3b 100644 --- a/content/browser/appcache/appcache_host.cc +++ b/content/browser/appcache/appcache_host.cc
@@ -179,7 +179,7 @@ if (main_resource_blocked_) OnContentBlocked(blocked_manifest_url_); - // 6.9.6 The application cache selection algorithm. + // 7.9.5 The application cache selection algorithm. // The algorithm is started here and continues in FinishCacheSelection, // after cache or group loading is complete. // Note: Foreign entries are detected on the client side and @@ -469,7 +469,7 @@ mojo::ReportBadMessageCallback bad_message_callback) { DCHECK(!associated_cache()); - // 6.9.6 The application cache selection algorithm + // 7.9.5 The application cache selection algorithm if (cache) { // If document was loaded from an application cache, Associate document // with the application cache from which it was loaded. Invoke the @@ -625,14 +625,14 @@ if (subresource_url_factory_.get()) return; - network::mojom::URLLoaderFactoryPtr factory_ptr = nullptr; - + mojo::PendingRemote<network::mojom::URLLoaderFactory> factory_remote; AppCacheSubresourceURLFactory::CreateURLLoaderFactory(GetWeakPtr(), - &factory_ptr); + &factory_remote); - // We may not have bound |factory_ptr| if the storage partition has shut down. - if (factory_ptr) - frontend()->SetSubresourceFactory(std::move(factory_ptr)); + // We may not have bound |factory_remote| if the storage partition has shut + // down. + if (factory_remote) + frontend()->SetSubresourceFactory(std::move(factory_remote)); } void AppCacheHost::SetAppCacheSubresourceFactory(
diff --git a/content/browser/appcache/appcache_host_unittest.cc b/content/browser/appcache/appcache_host_unittest.cc index a915b640b..83c91c3 100644 --- a/content/browser/appcache/appcache_host_unittest.cc +++ b/content/browser/appcache/appcache_host_unittest.cc
@@ -92,7 +92,8 @@ const std::string& message) override {} void SetSubresourceFactory( - network::mojom::URLLoaderFactoryPtr url_loader_factory) override {} + mojo::PendingRemote<network::mojom::URLLoaderFactory> + url_loader_factory) override {} // WebContentsObserver: void AppCacheAccessed(const GURL& manifest_url,
diff --git a/content/browser/appcache/appcache_request_handler.cc b/content/browser/appcache/appcache_request_handler.cc index 350ad36..e5364988 100644 --- a/content/browser/appcache/appcache_request_handler.cc +++ b/content/browser/appcache/appcache_request_handler.cc
@@ -17,6 +17,7 @@ #include "content/browser/appcache/appcache_subresource_url_factory.h" #include "content/browser/appcache/appcache_url_loader_job.h" #include "content/browser/navigation_subresource_loader_params.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_job.h" #include "third_party/blink/public/common/features.h" @@ -146,18 +147,18 @@ std::unique_ptr<AppCacheJob> job; if (found_fallback_entry_.has_response_id()) { - // 6.9.6, step 4: If this results in a redirect to another origin, + // 7.9.6, step 4: If this results in a redirect to another origin, // get the resource of the fallback entry. job = CreateJob(network_delegate); DeliverAppCachedResponse(found_fallback_entry_, found_cache_id_, found_manifest_url_, true, found_namespace_entry_url_); } else if (!found_network_namespace_) { - // 6.9.6, step 6: Fail the resource load. + // 7.9.6, step 6: Fail the resource load. job = CreateJob(network_delegate); DeliverErrorResponse(); } else { - // 6.9.6 step 3 and 5: Fetch the resource normally. + // 7.9.6 step 3 and 5: Fetch the resource normally. } return job.release(); @@ -173,7 +174,7 @@ return nullptr; if (request_->IsCancelled()) { - // 6.9.6, step 4: But not if the user canceled the download. + // 7.9.6, step 4: But not if the user canceled the download. return nullptr; } @@ -201,7 +202,7 @@ return nullptr; } - // 6.9.6, step 4: If this results in a 4xx or 5xx status code + // 7.9.6, step 4: If this results in a 4xx or 5xx status code // or there were network errors, get the resource of the fallback entry. std::unique_ptr<AppCacheJob> job = CreateJob(network_delegate); @@ -441,7 +442,7 @@ } void AppCacheRequestHandler::ContinueMaybeLoadSubResource() { - // 6.9.6 Changes to the networking model + // 7.9.6 Changes to the networking model // If the resource is not to be fetched using the HTTP GET mechanism or // equivalent ... then fetch the resource normally. DCHECK(job_.get()); @@ -589,14 +590,13 @@ return base::nullopt; // The factory is destroyed when the renderer drops the connection. - // TODO(crbug.com/955171): Replace this with Remote. - network::mojom::URLLoaderFactoryPtr factory_ptr; + mojo::PendingRemote<network::mojom::URLLoaderFactory> factory_remote; AppCacheSubresourceURLFactory::CreateURLLoaderFactory(appcache_host_, - &factory_ptr); + &factory_remote); SubresourceLoaderParams params; - params.pending_appcache_loader_factory = factory_ptr.PassInterface(); + params.pending_appcache_loader_factory = std::move(factory_remote); return base::Optional<SubresourceLoaderParams>(std::move(params)); }
diff --git a/content/browser/appcache/appcache_storage_impl_unittest.cc b/content/browser/appcache/appcache_storage_impl_unittest.cc index 41c5b0e..3b41182 100644 --- a/content/browser/appcache/appcache_storage_impl_unittest.cc +++ b/content/browser/appcache/appcache_storage_impl_unittest.cc
@@ -1517,7 +1517,8 @@ void LogMessage(blink::mojom::ConsoleMessageLevel log_level, const std::string& message) override {} void SetSubresourceFactory( - network::mojom::URLLoaderFactoryPtr url_loader_factory) override {} + mojo::PendingRemote<network::mojom::URLLoaderFactory> + url_loader_factory) override {} bool error_event_was_raised_; };
diff --git a/content/browser/appcache/appcache_subresource_url_factory.cc b/content/browser/appcache/appcache_subresource_url_factory.cc index ccc2d0b..186b991f 100644 --- a/content/browser/appcache/appcache_subresource_url_factory.cc +++ b/content/browser/appcache/appcache_subresource_url_factory.cc
@@ -21,8 +21,6 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/common/content_client.h" #include "mojo/public/cpp/bindings/binding.h" -#include "mojo/public/cpp/bindings/binding_set.h" -#include "mojo/public/cpp/bindings/interface_ptr.h" #include "mojo/public/cpp/bindings/message.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "net/url_request/url_request.h" @@ -341,7 +339,7 @@ // static void AppCacheSubresourceURLFactory::CreateURLLoaderFactory( base::WeakPtr<AppCacheHost> host, - network::mojom::URLLoaderFactoryPtr* loader_factory) { + mojo::PendingRemote<network::mojom::URLLoaderFactory>* loader_factory) { DCHECK(host.get()); scoped_refptr<network::SharedURLLoaderFactory> network_loader_factory; // The partition has shutdown, return without binding |loader_factory|. @@ -356,7 +354,7 @@ // Please see OnConnectionError() for details. auto* impl = new AppCacheSubresourceURLFactory( std::move(network_loader_factory), host); - impl->Clone(mojo::MakeRequest(loader_factory)); + impl->Clone(loader_factory->InitWithNewPipeAndPassReceiver()); // Save the factory in the host to ensure that we don't create it again when // the cache is selected, etc.
diff --git a/content/browser/appcache/appcache_subresource_url_factory.h b/content/browser/appcache/appcache_subresource_url_factory.h index a3988ca..fd5879f 100644 --- a/content/browser/appcache/appcache_subresource_url_factory.h +++ b/content/browser/appcache/appcache_subresource_url_factory.h
@@ -9,6 +9,7 @@ #include "base/memory/weak_ptr.h" #include "content/common/content_export.h" #include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" @@ -37,7 +38,7 @@ // requests. static void CreateURLLoaderFactory( base::WeakPtr<AppCacheHost> host, - network::mojom::URLLoaderFactoryPtr* loader_factory); + mojo::PendingRemote<network::mojom::URLLoaderFactory>* loader_factory); // network::mojom::URLLoaderFactory implementation. void CreateLoaderAndStart(network::mojom::URLLoaderRequest url_loader_request,
diff --git a/content/browser/appcache/appcache_update_job.cc b/content/browser/appcache/appcache_update_job.cc index 5774492b..0f0d149 100644 --- a/content/browser/appcache/appcache_update_job.cc +++ b/content/browser/appcache/appcache_update_job.cc
@@ -81,9 +81,10 @@ // 1) If a cached response contains a Last-Modified header, // AppCacheUpdateJob::URLFetcher::AddConditionalHeaders() adds an // If-Modified-Since header, so the server may return an HTTP 304 Not Modified - // response. AppCacheUpdateJob::HandleUrlFetchCompleted() reuses the existing - // cache entry when a 304 is received, even though the HTTP specification - // mandates updating the cached headers with the headers in the 304 response. + // response. AppCacheUpdateJob::HandleResourceFetchCompleted() reuses the + // existing cache entry when a 304 is received, even though the HTTP + // specification mandates updating the cached headers with the headers in the + // 304 response. // // This deviation from the HTTP specification is Web-observable when AppCache // resources are served with Last-Modified and Cache-Control: max-age headers. @@ -350,7 +351,7 @@ const blink::mojom::AppCacheErrorDetails& error_details, ResultType result, const GURL& failed_resource_url) { - // 6.9.4 cache failure steps 2-8. + // 7.9.4 cache failure steps 2-8. DCHECK(internal_state_ != CACHE_FAILURE); DCHECK(!error_details.message.empty()); DCHECK(result != UPDATE_OK); @@ -502,7 +503,7 @@ // Wait for pending master entries to download. FetchMasterEntries(); - MaybeCompleteUpdate(); // if not done, run async 6.9.4 step 7 substeps + MaybeCompleteUpdate(); // if not done, run async 7.9.4 step 7 substeps return; } @@ -526,7 +527,7 @@ return; } - // Proceed with update process. Section 6.9.4 steps 8-20. + // Proceed with update process. Section 7.9.4 steps 8-20. internal_state_ = DOWNLOADING; inprogress_cache_ = base::MakeRefCounted<AppCache>(storage_, storage_->NewCacheId()); @@ -605,7 +606,7 @@ // if (!manifestAttribute) skip it // Foreign entries will be detected during cache selection. - // Note: 6.9.4, step 17.9 possible optimization: if resource is HTML or XML + // Note: 7.9.4, step 17.9 possible optimization: if resource is HTML or XML // file whose root element is an html element with a manifest attribute // whose value doesn't match the manifest url of the application cache // being processed, mark the entry as being foreign. @@ -707,7 +708,7 @@ DCHECK(found != pending_master_entries_.end()); std::vector<AppCacheHost*>& hosts = found->second; - // Section 6.9.4. No update case: step 7.3, else step 22. + // Section 7.9.4. No update case: step 7.3, else step 22. if (response_code / 100 == 2) { // Add fetched master entry to the appropriate cache. AppCache* cache = inprogress_cache_.get() ? inprogress_cache_.get() @@ -760,7 +761,7 @@ pending_master_entries_.erase(found); --master_entries_completed_; - // Section 6.9.4, step 22.3. + // Section 7.9.4, step 22.3. if (update_type_ == CACHE_ATTEMPT && pending_master_entries_.empty()) { HandleCacheFailure( blink::mojom::AppCacheErrorDetails( @@ -1086,7 +1087,7 @@ void AppCacheUpdateJob::FetchUrls() { DCHECK_EQ(internal_state_, DOWNLOADING); - // Fetch each URL in the list according to section 6.9.4 step 17.1-17.3. + // Fetch each URL in the list according to section 7.9.4 step 18.1-18.3. // Fetch up to the concurrent limit. Other fetches will be triggered as each // each fetch completes. while (pending_url_fetches_.size() < kMaxConcurrentUrlFetches && @@ -1378,7 +1379,7 @@ storage_->StoreEvictionTimes(group_); } group_->SetUpdateAppCacheStatus(AppCacheGroup::IDLE); - // 6.9.4 steps 7.3-7.7. + // 7.9.4 steps 7.3-7.7. NotifyAllAssociatedHosts( blink::mojom::AppCacheEventID::APPCACHE_NO_UPDATE_EVENT); DiscardDuplicateResponses();
diff --git a/content/browser/appcache/appcache_update_job_unittest.cc b/content/browser/appcache/appcache_update_job_unittest.cc index 9f6092b94e..a4a1fde 100644 --- a/content/browser/appcache/appcache_update_job_unittest.cc +++ b/content/browser/appcache/appcache_update_job_unittest.cc
@@ -35,6 +35,7 @@ #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" #include "content/public/test/url_loader_interceptor.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe.h" #include "net/base/net_errors.h" @@ -292,7 +293,8 @@ const std::string& message) override {} void SetSubresourceFactory( - network::mojom::URLLoaderFactoryPtr url_loader_factory) override {} + mojo::PendingRemote<network::mojom::URLLoaderFactory> url_loader_factory) + override {} void AddExpectedEvent(blink::mojom::AppCacheEventID event_id) { DCHECK(!ignore_progress_events_ ||
diff --git a/content/browser/appcache/chrome_appcache_service.cc b/content/browser/appcache/chrome_appcache_service.cc index 8535a96..497e6aa 100644 --- a/content/browser/appcache/chrome_appcache_service.cc +++ b/content/browser/appcache/chrome_appcache_service.cc
@@ -12,6 +12,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "net/base/net_errors.h" #include "storage/browser/quota/quota_manager.h" #include "third_party/blink/public/mojom/appcache/appcache.mojom.h"
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc index 5245c014..4481669a 100644 --- a/content/browser/back_forward_cache_browsertest.cc +++ b/content/browser/back_forward_cache_browsertest.cc
@@ -557,7 +557,7 @@ web_contents()->GetController().GoToOffset(-2); EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); - ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kEvicted, + ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kNotRestored, FROM_HERE); ExpectEvicted(BackForwardCacheMetrics::EvictedReason::kCacheLimit, FROM_HERE); } @@ -1448,7 +1448,7 @@ // 4) Go back to A. web_contents()->GetController().GoBack(); EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); - ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kEvicted, + ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kNotRestored, FROM_HERE); ExpectEvicted(BackForwardCacheMetrics::EvictedReason::kJavaScriptExecution, FROM_HERE); @@ -1494,7 +1494,7 @@ // 4) Go back to A(B). web_contents()->GetController().GoBack(); EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); - ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kEvicted, + ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kNotRestored, FROM_HERE); ExpectEvicted(BackForwardCacheMetrics::EvictedReason::kJavaScriptExecution, FROM_HERE); @@ -1536,7 +1536,7 @@ // 5) Go back to A. web_contents()->GetController().GoBack(); EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); - ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kEvicted, + ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kNotRestored, FROM_HERE); ExpectEvicted(BackForwardCacheMetrics::EvictedReason::kJavaScriptExecution, FROM_HERE); @@ -1892,7 +1892,7 @@ EXPECT_NE(rfh_a2, rfh_b); EXPECT_EQ(rfh_a2->GetLastCommittedURL(), url_a); - ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kEvicted, + ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kNotRestored, FROM_HERE); ExpectEvicted(BackForwardCacheMetrics::EvictedReason::kJavaScriptExecution, FROM_HERE); @@ -1936,7 +1936,7 @@ // 4) Go back to A. web_contents()->GetController().GoBack(); EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); - ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kEvicted, + ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome::kNotRestored, FROM_HERE); ExpectEvicted(BackForwardCacheMetrics::EvictedReason::kRendererProcessKilled, FROM_HERE);
diff --git a/content/browser/bluetooth/bluetooth_blocklist.cc b/content/browser/bluetooth/bluetooth_blocklist.cc index db5a6968..d044a46 100644 --- a/content/browser/bluetooth/bluetooth_blocklist.cc +++ b/content/browser/bluetooth/bluetooth_blocklist.cc
@@ -9,6 +9,7 @@ #include "base/optional.h" #include "base/strings/string_split.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" using device::BluetoothUUID;
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl.cc b/content/browser/bluetooth/web_bluetooth_service_impl.cc index 805ac88..3527cf3 100644 --- a/content/browser/bluetooth/web_bluetooth_service_impl.cc +++ b/content/browser/bluetooth/web_bluetooth_service_impl.cc
@@ -33,6 +33,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_delegate.h" +#include "content/public/common/content_client.h" #include "device/bluetooth/bluetooth_adapter_factory_wrapper.h" #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" #include "device/bluetooth/bluetooth_remote_gatt_descriptor.h"
diff --git a/content/browser/browser_child_process_host_impl.cc b/content/browser/browser_child_process_host_impl.cc index 03189659..3f64880 100644 --- a/content/browser/browser_child_process_host_impl.cc +++ b/content/browser/browser_child_process_host_impl.cc
@@ -47,6 +47,7 @@ #include "content/public/browser/resource_coordinator_service.h" #include "content/public/browser/system_connector.h" #include "content/public/common/connection_filter.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/process_type.h"
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc index 76f78aa..99b29aa 100644 --- a/content/browser/browser_context.cc +++ b/content/browser/browser_context.cc
@@ -53,6 +53,7 @@ #include "content/public/browser/shared_cors_origin_access_list.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/system_connector.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/common/service_manager_connection.h" #include "content/public/common/service_names.mojom.h" @@ -787,6 +788,10 @@ return empty_list->get(); } +bool BrowserContext::ShouldEnableOutOfBlinkCors() { + return base::FeatureList::IsEnabled(network::features::kOutOfBlinkCors); +} + NativeFileSystemPermissionContext* BrowserContext::GetNativeFileSystemPermissionContext() { return nullptr;
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc index 9f4b51dc..6cddbcb 100644 --- a/content/browser/browser_interface_binders.cc +++ b/content/browser/browser_interface_binders.cc
@@ -29,6 +29,7 @@ #include "content/public/browser/service_worker_context.h" #include "content/public/browser/shared_worker_instance.h" #include "content/public/browser/webvr_service_provider.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "device/gamepad/gamepad_monitor.h" #include "device/gamepad/public/mojom/gamepad.mojom.h"
diff --git a/content/browser/browser_url_handler_impl.cc b/content/browser/browser_url_handler_impl.cc index 5f6d1f2..13dadc21 100644 --- a/content/browser/browser_url_handler_impl.cc +++ b/content/browser/browser_url_handler_impl.cc
@@ -11,6 +11,7 @@ #include "content/browser/frame_host/debug_urls.h" #include "content/browser/webui/web_ui_impl.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" #include "content/public/common/url_utils.h" #include "url/gurl.h"
diff --git a/content/browser/browsing_data/browsing_data_remover_impl.cc b/content/browser/browsing_data/browsing_data_remover_impl.cc index 7cd004f7..5fb07a0 100644 --- a/content/browser/browsing_data/browsing_data_remover_impl.cc +++ b/content/browser/browsing_data/browsing_data_remover_impl.cc
@@ -36,6 +36,7 @@ #include "storage/browser/quota/special_storage_policy.h" #include "url/gurl.h" #include "url/origin.h" +#include "url/url_util.h" using base::UserMetricsAction;
diff --git a/content/browser/builtin_service_manifests.cc b/content/browser/builtin_service_manifests.cc index 2be52dbb..0d4e0cb 100644 --- a/content/browser/builtin_service_manifests.cc +++ b/content/browser/builtin_service_manifests.cc
@@ -13,6 +13,7 @@ #include "content/public/app/content_renderer_manifest.h" #include "content/public/app/content_utility_manifest.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/service_names.mojom.h" #include "media/mojo/buildflags.h"
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc index dfe6997..b103ad9 100644 --- a/content/browser/child_process_security_policy_impl.cc +++ b/content/browser/child_process_security_policy_impl.cc
@@ -16,6 +16,7 @@ #include "base/macros.h" #include "base/metrics/histogram_macros.h" #include "base/stl_util.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "build/build_config.h" #include "content/browser/bad_message.h" @@ -32,6 +33,7 @@ #include "content/public/browser/site_isolation_policy.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/bindings_policy.h" +#include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" #include "net/base/filename_util.h" #include "net/base/url_util.h"
diff --git a/content/browser/child_process_security_policy_unittest.cc b/content/browser/child_process_security_policy_unittest.cc index b50a3057..4ec1e64e 100644 --- a/content/browser/child_process_security_policy_unittest.cc +++ b/content/browser/child_process_security_policy_unittest.cc
@@ -18,6 +18,7 @@ #include "content/browser/isolated_origin_util.h" #include "content/browser/site_instance_impl.h" #include "content/public/common/bindings_policy.h" +#include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h"
diff --git a/content/browser/devtools/devtools_background_services_context_impl.cc b/content/browser/devtools/devtools_background_services_context_impl.cc index 2b12d6d..8d97929 100644 --- a/content/browser/devtools/devtools_background_services_context_impl.cc +++ b/content/browser/devtools/devtools_background_services_context_impl.cc
@@ -16,6 +16,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/service_worker_context.h" +#include "content/public/common/content_client.h" #include "url/origin.h" namespace content {
diff --git a/content/browser/devtools/devtools_background_services_context_impl_unittest.cc b/content/browser/devtools/devtools_background_services_context_impl_unittest.cc index 5a592799..b9d013d0 100644 --- a/content/browser/devtools/devtools_background_services_context_impl_unittest.cc +++ b/content/browser/devtools/devtools_background_services_context_impl_unittest.cc
@@ -13,6 +13,7 @@ #include "content/browser/devtools/devtools_background_services.pb.h" #include "content/browser/service_worker/embedded_worker_test_helper.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/content/browser/devtools/devtools_http_handler_unittest.cc b/content/browser/devtools/devtools_http_handler_unittest.cc index 833a6400..b7e81e86 100644 --- a/content/browser/devtools/devtools_http_handler_unittest.cc +++ b/content/browser/devtools/devtools_http_handler_unittest.cc
@@ -25,6 +25,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/devtools_manager_delegate.h" #include "content/public/browser/devtools_socket_factory.h" +#include "content/public/common/content_client.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_utils.h" #include "net/base/completion_once_callback.h"
diff --git a/content/browser/devtools/devtools_manager.cc b/content/browser/devtools/devtools_manager.cc index 49bb4692..776022c 100644 --- a/content/browser/devtools/devtools_manager.cc +++ b/content/browser/devtools/devtools_manager.cc
@@ -11,6 +11,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/devtools_socket_factory.h" +#include "content/public/common/content_client.h" namespace content {
diff --git a/content/browser/do_not_track_browsertest.cc b/content/browser/do_not_track_browsertest.cc index 1372c63f..07e7cc0 100644 --- a/content/browser/do_not_track_browsertest.cc +++ b/content/browser/do_not_track_browsertest.cc
@@ -8,6 +8,7 @@ #include "build/build_config.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h"
diff --git a/content/browser/dom_storage/dom_storage_context_wrapper.cc b/content/browser/dom_storage/dom_storage_context_wrapper.cc index 597dd7f..1ad997a 100644 --- a/content/browser/dom_storage/dom_storage_context_wrapper.cc +++ b/content/browser/dom_storage/dom_storage_context_wrapper.cc
@@ -34,6 +34,7 @@ #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "sql/database.h" +#include "storage/browser/quota/special_storage_policy.h" #include "third_party/blink/public/common/features.h" #include "url/origin.h"
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc index 19e496ab..3a421eb 100644 --- a/content/browser/download/download_browsertest.cc +++ b/content/browser/download/download_browsertest.cc
@@ -43,6 +43,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/download_request_utils.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_paths.h" #include "content/public/common/content_switches.h" #include "content/public/common/webplugininfo.h"
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc index 4d6d555..2acf127 100644 --- a/content/browser/download/download_manager_impl.cc +++ b/content/browser/download/download_manager_impl.cc
@@ -61,6 +61,7 @@ #include "content/public/browser/system_connector.h" #include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_ui_url_loader_factory.h" +#include "content/public/common/content_client.h" #include "content/public/common/origin_util.h" #include "content/public/common/previews_state.h" #include "content/public/common/referrer.h" @@ -111,14 +112,17 @@ void OnDownloadStarted( download::DownloadItemImpl* download, - const download::DownloadUrlParameters::OnStartedCallback& on_started) { + download::DownloadUrlParameters::OnStartedCallback on_started) { if (on_started.is_null()) return; - if (!download || download->GetState() == download::DownloadItem::CANCELLED) - on_started.Run(nullptr, download::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED); - else - on_started.Run(download, download::DOWNLOAD_INTERRUPT_REASON_NONE); + if (!download || download->GetState() == download::DownloadItem::CANCELLED) { + std::move(on_started) + .Run(nullptr, download::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED); + } else { + std::move(on_started) + .Run(download, download::DOWNLOAD_INTERRUPT_REASON_NONE); + } } // Creates an interrupted download and calls StartDownload. Can be called on @@ -137,7 +141,7 @@ base::BindOnce(&DownloadManagerImpl::StartDownload, download_manager, std::move(failed_created_info), std::make_unique<download::InputStream>(), - params->callback())); + std::move(params->callback()))); } class DownloadItemFactoryImpl : public download::DownloadItemFactory { @@ -570,7 +574,7 @@ void DownloadManagerImpl::StartDownloadItem( std::unique_ptr<download::DownloadCreateInfo> info, - const download::DownloadUrlParameters::OnStartedCallback& on_started, + download::DownloadUrlParameters::OnStartedCallback on_started, download::InProgressDownloadManager::StartDownloadItemCallback callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -580,17 +584,17 @@ download = nullptr; std::move(callback).Run(std::move(info), download, should_persist_new_download_); - OnDownloadStarted(download, on_started); + OnDownloadStarted(download, std::move(on_started)); } else { GetNextId(base::BindOnce(&DownloadManagerImpl::CreateNewDownloadItemToStart, weak_factory_.GetWeakPtr(), std::move(info), - on_started, std::move(callback))); + std::move(on_started), std::move(callback))); } } void DownloadManagerImpl::CreateNewDownloadItemToStart( std::unique_ptr<download::DownloadCreateInfo> info, - const download::DownloadUrlParameters::OnStartedCallback& on_started, + download::DownloadUrlParameters::OnStartedCallback on_started, download::InProgressDownloadManager::StartDownloadItemCallback callback, uint32_t id) { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -607,7 +611,7 @@ OnNewDownloadCreated(download); } - OnDownloadStarted(download, on_started); + OnDownloadStarted(download, std::move(on_started)); } service_manager::Connector* DownloadManagerImpl::GetServiceManagerConnector() { @@ -626,13 +630,13 @@ void DownloadManagerImpl::StartDownload( std::unique_ptr<download::DownloadCreateInfo> info, std::unique_ptr<download::InputStream> stream, - const download::DownloadUrlParameters::OnStartedCallback& on_started) { + download::DownloadUrlParameters::OnStartedCallback on_started) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(info); in_progress_manager_->StartDownload( std::move(info), std::move(stream), download::URLLoaderFactoryProvider::GetNullPtr(), base::DoNothing(), - on_started); + std::move(on_started)); } void DownloadManagerImpl::CheckForHistoryFilesRemoval() {
diff --git a/content/browser/download/download_manager_impl.h b/content/browser/download/download_manager_impl.h index 2448011b..f192166 100644 --- a/content/browser/download/download_manager_impl.h +++ b/content/browser/download/download_manager_impl.h
@@ -135,7 +135,7 @@ void StartDownload( std::unique_ptr<download::DownloadCreateInfo> info, std::unique_ptr<download::InputStream> stream, - const download::DownloadUrlParameters::OnStartedCallback& on_started); + download::DownloadUrlParameters::OnStartedCallback on_started); // For testing; specifically, accessed from TestFileErrorInjector. void SetDownloadItemFactoryForTesting( @@ -181,14 +181,14 @@ base::FilePath GetDefaultDownloadDirectory() override; void StartDownloadItem( std::unique_ptr<download::DownloadCreateInfo> info, - const download::DownloadUrlParameters::OnStartedCallback& on_started, + download::DownloadUrlParameters::OnStartedCallback on_started, download::InProgressDownloadManager::StartDownloadItemCallback callback) override; // Creates a new download item and call |callback|. void CreateNewDownloadItemToStart( std::unique_ptr<download::DownloadCreateInfo> info, - const download::DownloadUrlParameters::OnStartedCallback& on_started, + download::DownloadUrlParameters::OnStartedCallback on_started, download::InProgressDownloadManager::StartDownloadItemCallback callback, uint32_t id);
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc index 9fb209b..d0919950 100644 --- a/content/browser/download/download_manager_impl_unittest.cc +++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -87,7 +87,7 @@ const DownloadTargetCallback&)); MOCK_METHOD1(ShouldOpenFileBasedOnExtension, bool(const base::FilePath&)); MOCK_METHOD2(ShouldCompleteDownload, - bool(download::DownloadItem*, const base::Closure&)); + bool(download::DownloadItem*, base::OnceClosure)); MOCK_METHOD2(ShouldOpenDownload, bool(download::DownloadItem*, const DownloadOpenDelayedCallback&));
diff --git a/content/browser/download/drag_download_file.cc b/content/browser/download/drag_download_file.cc index ccf3ab9b..712f2cb 100644 --- a/content/browser/download/drag_download_file.cc +++ b/content/browser/download/drag_download_file.cc
@@ -98,8 +98,8 @@ params->set_referrer_policy( Referrer::ReferrerPolicyForUrlRequest(referrer_.policy)); params->set_referrer_encoding(referrer_encoding_); - params->set_callback(base::Bind(&DragDownloadFileUI::OnDownloadStarted, - weak_ptr_factory_.GetWeakPtr())); + params->set_callback(base::BindOnce(&DragDownloadFileUI::OnDownloadStarted, + weak_ptr_factory_.GetWeakPtr())); params->set_file_path(file_path); params->set_file(std::move(file)); // Nulls file. params->set_download_source(download::DownloadSource::DRAG_AND_DROP);
diff --git a/content/browser/download/save_file_manager.cc b/content/browser/download/save_file_manager.cc index 92c718d..c21f223f 100644 --- a/content/browser/download/save_file_manager.cc +++ b/content/browser/download/save_file_manager.cc
@@ -26,6 +26,7 @@ #include "content/public/browser/shared_cors_origin_access_list.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_ui_url_loader_factory.h" +#include "content/public/common/content_client.h" #include "content/public/common/previews_state.h" #include "net/base/io_buffer.h" #include "net/base/load_flags.h"
diff --git a/content/browser/download/save_package.cc b/content/browser/download/save_package.cc index e6b08b0..c59d82b0 100644 --- a/content/browser/download/save_package.cc +++ b/content/browser/download/save_package.cc
@@ -334,7 +334,7 @@ auto* delegate = download_manager_->GetDelegate(); if (!delegate || delegate->ShouldCompleteDownload( - download_, base::Bind(&SavePackage::Finish, this))) { + download_, base::BindOnce(&SavePackage::Finish, this))) { Finish(); } }
diff --git a/content/browser/download/save_package_browsertest.cc b/content/browser/download/save_package_browsertest.cc index 0007dac..2d9c7fb 100644 --- a/content/browser/download/save_package_browsertest.cc +++ b/content/browser/download/save_package_browsertest.cc
@@ -44,7 +44,7 @@ } bool ShouldCompleteDownload(download::DownloadItem* download, - const base::Closure& closure) override { + base::OnceClosure closure) override { return true; }
diff --git a/content/browser/frame_host/back_forward_cache_metrics.cc b/content/browser/frame_host/back_forward_cache_metrics.cc index 1d8bdf64..871a700d 100644 --- a/content/browser/frame_host/back_forward_cache_metrics.cc +++ b/content/browser/frame_host/back_forward_cache_metrics.cc
@@ -190,9 +190,7 @@ void BackForwardCacheMetrics::RecordMetricsForHistoryNavigationCommit( NavigationRequest* navigation) { - // TODO(hajimehoshi): Use kNotCachedDueToExperimentCondition if the - // experiment condition does not match. - HistoryNavigationOutcome outcome = HistoryNavigationOutcome::kNotCached; + HistoryNavigationOutcome outcome = HistoryNavigationOutcome::kNotRestored; if (navigation->IsServedFromBackForwardCache()) { outcome = HistoryNavigationOutcome::kRestored; @@ -201,15 +199,8 @@ BackForwardCacheMetrics::EvictedAfterDocumentRestoredReason::kRestored); } - // |last_committed_main_frame_navigation_id_ == -1| checks the case when the - // browser is restored. In this case, the page has history items but does not - // have back-forward cache. Just after restoring, |evicted_reason_| does not - // have a value. - if (evicted_reason_.has_value() || - last_committed_main_frame_navigation_id_ == -1) { - DCHECK(!navigation->IsServedFromBackForwardCache()); - outcome = HistoryNavigationOutcome::kEvicted; - } + // TODO(hajimehoshi): Do not record the outcome when the experient condition + // does not match. UMA_HISTOGRAM_ENUMERATION("BackForwardCache.HistoryNavigationOutcome", outcome);
diff --git a/content/browser/frame_host/back_forward_cache_metrics.h b/content/browser/frame_host/back_forward_cache_metrics.h index f7ae1461..d03db36 100644 --- a/content/browser/frame_host/back_forward_cache_metrics.h +++ b/content/browser/frame_host/back_forward_cache_metrics.h
@@ -49,10 +49,8 @@ // tools/metrics/histograms/enums.xml. These values should not be renumbered. enum class HistoryNavigationOutcome { kRestored = 0, - kNotCached = 1, - kEvicted = 2, - kNotCachedDueToExperimentCondition = 3, - kMaxValue = kNotCachedDueToExperimentCondition, + kNotRestored = 1, + kMaxValue = kNotRestored, }; // Please keep in sync with BackForwardCacheEvictedReason in
diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc index 113749d..fad4d2a 100644 --- a/content/browser/frame_host/frame_tree_node.cc +++ b/content/browser/frame_host/frame_tree_node.cc
@@ -51,6 +51,8 @@ } // namespace +const int FrameTreeNode::kFrameTreeNodeInvalidId = -1; + // This observer watches the opener of its owner FrameTreeNode and clears the // owner's opener if the opener is destroyed. class FrameTreeNode::OpenerDestroyedObserver : public FrameTreeNode::Observer {
diff --git a/content/browser/frame_host/frame_tree_node.h b/content/browser/frame_host/frame_tree_node.h index 7a1de4b..99074b56 100644 --- a/content/browser/frame_host/frame_tree_node.h +++ b/content/browser/frame_host/frame_tree_node.h
@@ -62,7 +62,7 @@ virtual ~Observer() {} }; - static const int kFrameTreeNodeInvalidId = -1; + static const int kFrameTreeNodeInvalidId; // Returns the FrameTreeNode with the given global |frame_tree_node_id|, // regardless of which FrameTree it is in.
diff --git a/content/browser/frame_host/navigation_request_unittest.cc b/content/browser/frame_host/navigation_request_unittest.cc index 40769e3..7c251dae 100644 --- a/content/browser/frame_host/navigation_request_unittest.cc +++ b/content/browser/frame_host/navigation_request_unittest.cc
@@ -9,6 +9,7 @@ #include "build/build_config.h" #include "content/public/browser/navigation_throttle.h" #include "content/public/browser/ssl_status.h" +#include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" #include "content/public/test/browser_side_navigation_test_utils.h" #include "content/public/test/test_navigation_throttle.h"
diff --git a/content/browser/frame_host/origin_policy_throttle.cc b/content/browser/frame_host/origin_policy_throttle.cc index 98892e03..dc128854 100644 --- a/content/browser/frame_host/origin_policy_throttle.cc +++ b/content/browser/frame_host/origin_policy_throttle.cc
@@ -16,6 +16,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/storage_partition.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "services/network/public/mojom/origin_policy_manager.mojom.h"
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 60d73278..b945a5f 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -149,6 +149,7 @@ #include "content/public/browser/site_isolation_policy.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/bindings_policy.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h"
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index 06681c4..fe45416 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -71,6 +71,7 @@ #include "net/http/http_response_headers.h" #include "services/device/public/mojom/sensor_provider.mojom.h" #include "services/device/public/mojom/wake_lock_context.mojom.h" +#include "services/network/public/mojom/network_context.mojom.h" #include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/mojom/interface_provider.mojom.h" #include "services/viz/public/mojom/hit_test/input_target_client.mojom.h"
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index 11292ee7..00c2766 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -51,6 +51,7 @@ #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/site_isolation_policy.h" #include "content/public/common/child_process_host.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/mime_handler_view_mode.h"
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc index 3a88d933..c6d139a 100644 --- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -49,6 +49,7 @@ #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_ui_message_handler.h" #include "content/public/common/bindings_policy.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/navigation_policy.h"
diff --git a/content/browser/frame_host/render_frame_message_filter.cc b/content/browser/frame_host/render_frame_message_filter.cc index 9e8d3ff..e4972dba 100644 --- a/content/browser/frame_host/render_frame_message_filter.cc +++ b/content/browser/frame_host/render_frame_message_filter.cc
@@ -35,6 +35,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_features.h" #include "gpu/GLES2/gl2extchromium.h"
diff --git a/content/browser/frame_host/render_frame_message_filter_browsertest.cc b/content/browser/frame_host/render_frame_message_filter_browsertest.cc index b104229..3029ecc 100644 --- a/content/browser/frame_host/render_frame_message_filter_browsertest.cc +++ b/content/browser/frame_host/render_frame_message_filter_browsertest.cc
@@ -23,6 +23,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/storage_partition.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h"
diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc index 5cd2a68..7c7fcf73 100644 --- a/content/browser/frame_host/render_frame_proxy_host.cc +++ b/content/browser/frame_host/render_frame_proxy_host.cc
@@ -29,6 +29,7 @@ #include "content/common/frame_owner_properties.h" #include "content/common/unfreezable_frame_messages.h" #include "content/public/browser/browser_thread.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "ipc/ipc_message.h"
diff --git a/content/browser/gpu/viz_devtools_connector.cc b/content/browser/gpu/viz_devtools_connector.cc index 9c095c0..b3da62d 100644 --- a/content/browser/gpu/viz_devtools_connector.cc +++ b/content/browser/gpu/viz_devtools_connector.cc
@@ -12,6 +12,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "mojo/public/cpp/bindings/pending_receiver.h" namespace content {
diff --git a/content/browser/hid/hid_browsertest.cc b/content/browser/hid/hid_browsertest.cc index 4988d61ab..00c63838 100644 --- a/content/browser/hid/hid_browsertest.cc +++ b/content/browser/hid/hid_browsertest.cc
@@ -10,6 +10,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/hid_chooser.h" #include "content/public/browser/hid_delegate.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h"
diff --git a/content/browser/hid/hid_service.cc b/content/browser/hid/hid_service.cc index 3655454..d273b5b2 100644 --- a/content/browser/hid/hid_service.cc +++ b/content/browser/hid/hid_service.cc
@@ -12,6 +12,7 @@ #include "content/public/browser/hid_chooser.h" #include "content/public/browser/hid_delegate.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/common/content_client.h" #include "mojo/public/cpp/bindings/message.h" #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom.h"
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry.cc b/content/browser/indexed_db/indexed_db_active_blob_registry.cc index 584d42c..5fff8f0 100644 --- a/content/browser/indexed_db/indexed_db_active_blob_registry.cc +++ b/content/browser/indexed_db/indexed_db_active_blob_registry.cc
@@ -119,17 +119,17 @@ IndexedDBBlobInfo::ReleaseCallback IndexedDBActiveBlobRegistry::GetFinalReleaseCallback(int64_t database_id, int64_t blob_key) { - return base::Bind( + return base::BindRepeating( &IndexedDBActiveBlobRegistry::ReleaseBlobRefThreadSafe, scoped_refptr<base::TaskRunner>(backing_store_->task_runner()), weak_factory_.GetWeakPtr(), database_id, blob_key); } -base::Closure IndexedDBActiveBlobRegistry::GetAddBlobRefCallback( +base::RepeatingClosure IndexedDBActiveBlobRegistry::GetAddBlobRefCallback( int64_t database_id, int64_t blob_key) { - return base::Bind(&IndexedDBActiveBlobRegistry::AddBlobRef, - weak_factory_.GetWeakPtr(), database_id, blob_key); + return base::BindRepeating(&IndexedDBActiveBlobRegistry::AddBlobRef, + weak_factory_.GetWeakPtr(), database_id, blob_key); } void IndexedDBActiveBlobRegistry::ForceShutdown() {
diff --git a/content/browser/indexed_db/indexed_db_active_blob_registry.h b/content/browser/indexed_db/indexed_db_active_blob_registry.h index 45904630..36eef64 100644 --- a/content/browser/indexed_db/indexed_db_active_blob_registry.h +++ b/content/browser/indexed_db/indexed_db_active_blob_registry.h
@@ -39,7 +39,8 @@ int64_t blob_key); // This closure holds a raw pointer to the IndexedDBActiveBlobRegistry, // and may not be called after it is deleted. - base::Closure GetAddBlobRefCallback(int64_t database_id, int64_t blob_key); + base::RepeatingClosure GetAddBlobRefCallback(int64_t database_id, + int64_t blob_key); // Call this to force the registry to drop its use counts, permitting the // factory to drop any blob-related refcount for the backing store. // This will also turn any outstanding callbacks into no-ops.
diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc index ea281f1b2..e9d1db7a 100644 --- a/content/browser/indexed_db/indexed_db_backing_store.cc +++ b/content/browser/indexed_db/indexed_db_backing_store.cc
@@ -1532,7 +1532,7 @@ this->last_modified_ = last_modified; delegate->Start(blob->CreateReader(), - base::Bind(&LocalWriteClosure::Run, this)); + base::BindRepeating(&LocalWriteClosure::Run, this)); chained_blob_writer_->set_delegate(std::move(delegate)); }
diff --git a/content/browser/indexed_db/indexed_db_blob_info.h b/content/browser/indexed_db/indexed_db_blob_info.h index 0f1f29c4e..1af66b48 100644 --- a/content/browser/indexed_db/indexed_db_blob_info.h +++ b/content/browser/indexed_db/indexed_db_blob_info.h
@@ -60,7 +60,7 @@ int64_t key() const { return key_; } const base::FilePath& file_path() const { return file_path_; } const base::Time& last_modified() const { return last_modified_; } - const base::Closure& mark_used_callback() const { + const base::RepeatingClosure& mark_used_callback() const { return mark_used_callback_; } const ReleaseCallback& release_callback() const { return release_callback_; } @@ -69,7 +69,7 @@ void set_file_path(const base::FilePath& file_path); void set_last_modified(const base::Time& time); void set_key(int64_t key); - void set_mark_used_callback(const base::Closure& mark_used_callback); + void set_mark_used_callback(const base::RepeatingClosure& mark_used_callback); void set_release_callback(const ReleaseCallback& release_callback); private: @@ -84,7 +84,7 @@ // Valid only when this comes out of the database. int64_t key_; - base::Closure mark_used_callback_; + base::RepeatingClosure mark_used_callback_; ReleaseCallback release_callback_; };
diff --git a/content/browser/indexed_db/indexed_db_browsertest.cc b/content/browser/indexed_db/indexed_db_browsertest.cc index ec085e9..ff0d136 100644 --- a/content/browser/indexed_db/indexed_db_browsertest.cc +++ b/content/browser/indexed_db/indexed_db_browsertest.cc
@@ -897,9 +897,9 @@ ASSERT_TRUE(embedded_test_server()->Started() || embedded_test_server()->InitializeAndListen()); const Origin origin = Origin::Create(embedded_test_server()->base_url()); - embedded_test_server()->RegisterRequestHandler( - base::Bind(&CorruptDBRequestHandler, base::Unretained(GetContext()), - origin, s_corrupt_db_test_prefix, this)); + embedded_test_server()->RegisterRequestHandler(base::BindRepeating( + &CorruptDBRequestHandler, base::Unretained(GetContext()), origin, + s_corrupt_db_test_prefix, this)); embedded_test_server()->StartAcceptingConnections(); std::string test_file = std::string(s_corrupt_db_test_prefix) +
diff --git a/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_browsertest.cc b/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_browsertest.cc index 9d6f1d3..d34ac4f 100644 --- a/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_browsertest.cc +++ b/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_browsertest.cc
@@ -11,6 +11,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/lock_observer.h" #include "content/public/browser/render_process_host.h" +#include "content/public/common/content_client.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h"
diff --git a/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_unittest.cc b/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_unittest.cc index a3c6d38..3acabce 100644 --- a/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_unittest.cc +++ b/content/browser/indexed_db/indexed_db_execution_context_connection_tracker_unittest.cc
@@ -6,6 +6,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/lock_observer.h" +#include "content/public/common/content_client.h" #include "testing/gmock/include/gmock/gmock.h" namespace content {
diff --git a/content/browser/indexed_db/indexed_db_internals_ui.cc b/content/browser/indexed_db/indexed_db_internals_ui.cc index 9929c276..08e0a6b 100644 --- a/content/browser/indexed_db/indexed_db_internals_ui.cc +++ b/content/browser/indexed_db/indexed_db_internals_ui.cc
@@ -102,8 +102,8 @@ web_ui()->GetWebContents()->GetBrowserContext(); BrowserContext::StoragePartitionCallback cb = - base::Bind(&IndexedDBInternalsUI::AddContextFromStoragePartition, - base::Unretained(this)); + base::BindRepeating(&IndexedDBInternalsUI::AddContextFromStoragePartition, + base::Unretained(this)); BrowserContext::ForEachStoragePartition(browser_context, std::move(cb)); } @@ -174,7 +174,7 @@ StoragePartition* result_partition; BrowserContext::StoragePartitionCallback cb = - base::Bind(&FindContext, path, &result_partition, context); + base::BindRepeating(&FindContext, path, &result_partition, context); BrowserContext::ForEachStoragePartition(browser_context, std::move(cb)); if (!result_partition || !(context->get())) @@ -259,7 +259,7 @@ std::vector<base::FilePath> paths = context->GetStoragePaths(origin); zip::ZipWithFilterCallback(context->data_path(), zip_path, - base::Bind(AllowWhitelistedPaths, paths)); + base::BindRepeating(AllowWhitelistedPaths, paths)); base::PostTask(FROM_HERE, {BrowserThread::UI}, base::BindOnce(&IndexedDBInternalsUI::OnDownloadDataReady, @@ -368,9 +368,9 @@ // This is how to watch for the download to finish: first wait for it // to start, then attach a download::DownloadItem::Observer to observe the // state change to the finished state. - dl_params->set_callback(base::Bind(&IndexedDBInternalsUI::OnDownloadStarted, - base::Unretained(this), partition_path, - origin, temp_path, connection_count)); + dl_params->set_callback(base::BindOnce( + &IndexedDBInternalsUI::OnDownloadStarted, base::Unretained(this), + partition_path, origin, temp_path, connection_count)); BrowserContext* context = web_contents->GetBrowserContext(); BrowserContext::GetDownloadManager(context)->DownloadUrl(
diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/content/browser/loader/browser_initiated_resource_request.cc index c83f07f3..e24fde1 100644 --- a/content/browser/loader/browser_initiated_resource_request.cc +++ b/content/browser/loader/browser_initiated_resource_request.cc
@@ -8,6 +8,7 @@ #include "base/metrics/field_trial_params.h" #include "content/common/content_constants_internal.h" #include "content/public/browser/browser_context.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/common/content_client.h" #include "content/public/common/content_features.h"
diff --git a/content/browser/loader/cors_preflight_cache_browsertest.cc b/content/browser/loader/cors_preflight_cache_browsertest.cc index b6a07af..28310a4 100644 --- a/content/browser/loader/cors_preflight_cache_browsertest.cc +++ b/content/browser/loader/cors_preflight_cache_browsertest.cc
@@ -117,7 +117,7 @@ shell(), embedded_test_server()->GetURL(base::StringPrintf( "%s?;%d;reload", kTestPath, cross_origin_port())))); EXPECT_EQ(kTestDone, watcher3->WaitAndGetTitle()); - EXPECT_EQ(network::features::ShouldEnableOutOfBlinkCors() ? 2u : 1u, + EXPECT_EQ(network::features::ShouldEnableOutOfBlinkCorsForTesting() ? 2u : 1u, options_count()); EXPECT_EQ(3u, get_count()); }
diff --git a/content/browser/loader/file_url_loader_factory.cc b/content/browser/loader/file_url_loader_factory.cc index b6fadf64..f18034062 100644 --- a/content/browser/loader/file_url_loader_factory.cc +++ b/content/browser/loader/file_url_loader_factory.cc
@@ -19,6 +19,7 @@ #include "base/numerics/safe_conversions.h" #include "base/strings/string16.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/task/post_task.h"
diff --git a/content/browser/loader/file_url_loader_factory_browsertest.cc b/content/browser/loader/file_url_loader_factory_browsertest.cc index f371e91..e206fcc3 100644 --- a/content/browser/loader/file_url_loader_factory_browsertest.cc +++ b/content/browser/loader/file_url_loader_factory_browsertest.cc
@@ -26,6 +26,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_paths.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h"
diff --git a/content/browser/loader/loader_browsertest.cc b/content/browser/loader/loader_browsertest.cc index 89b2a7f8..f5fa54d 100644 --- a/content/browser/loader/loader_browsertest.cc +++ b/content/browser/loader/loader_browsertest.cc
@@ -26,6 +26,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/site_isolation_policy.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/network_service_util.h" #include "content/public/common/previews_state.h" #include "content/public/common/url_constants.h"
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index 6a9b309..874fb88c 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -61,6 +61,7 @@ #include "content/public/browser/shared_cors_origin_access_list.h" #include "content/public/browser/ssl_status.h" #include "content/public/browser/url_loader_request_interceptor.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/navigation_policy.h"
diff --git a/content/browser/loader/prefetch_browsertest.cc b/content/browser/loader/prefetch_browsertest.cc index 7937bcd2..3337735 100644 --- a/content/browser/loader/prefetch_browsertest.cc +++ b/content/browser/loader/prefetch_browsertest.cc
@@ -145,7 +145,7 @@ // See https://ci.chromium.org/p/chromium/builders/ci/linux-oor-cors-rel. const int expected_request_count = (privacy_changes_enabled_ && - network::features::ShouldEnableOutOfBlinkCors()) + network::features::ShouldEnableOutOfBlinkCorsForTesting()) ? 1 : 2; EXPECT_EQ(expected_request_count, destination_counter->GetRequestCount());
diff --git a/content/browser/loader/prefetch_url_loader.cc b/content/browser/loader/prefetch_url_loader.cc index 8bbcf569..e02d50f 100644 --- a/content/browser/loader/prefetch_url_loader.cc +++ b/content/browser/loader/prefetch_url_loader.cc
@@ -32,7 +32,7 @@ int32_t routing_id, int32_t request_id, uint32_t options, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, const network::ResourceRequest& resource_request, network::mojom::URLLoaderClientPtr client, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, @@ -46,7 +46,7 @@ base::WeakPtr<storage::BlobStorageContext> blob_storage_context, const std::string& accept_langs, RecursivePrefetchTokenGenerator recursive_prefetch_token_generator) - : frame_tree_node_id_getter_(frame_tree_node_id_getter), + : frame_tree_node_id_(frame_tree_node_id), resource_request_(resource_request), network_loader_factory_(std::move(network_loader_factory)), client_binding_(this), @@ -158,7 +158,7 @@ // network. (Until |this| calls the handler's FollowRedirect.) signed_exchange_prefetch_handler_ = std::make_unique<SignedExchangePrefetchHandler>( - frame_tree_node_id_getter_, resource_request_, response, + frame_tree_node_id_, resource_request_, response, mojo::ScopedDataPipeConsumerHandle(), std::move(loader_), client_binding_.Unbind(), network_loader_factory_, url_loader_throttles_getter_, this,
diff --git a/content/browser/loader/prefetch_url_loader.h b/content/browser/loader/prefetch_url_loader.h index a2740c9e..d1d42d4 100644 --- a/content/browser/loader/prefetch_url_loader.h +++ b/content/browser/loader/prefetch_url_loader.h
@@ -54,14 +54,12 @@ // |url_loader_throttles_getter| may be used when a prefetch handler needs to // additionally create a request (e.g. for fetching certificate if the - // prefetch was for a signed exchange). |frame_tree_node_id_getter| is called - // only on UI thread when NetworkService is not enabled, but can be also - // called on IO thread otherwise. + // prefetch was for a signed exchange). PrefetchURLLoader( int32_t routing_id, int32_t request_id, uint32_t options, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, const network::ResourceRequest& resource_request, network::mojom::URLLoaderClientPtr client, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, @@ -127,7 +125,7 @@ bool IsSignedExchangeHandlingEnabled(); - const base::RepeatingCallback<int(void)> frame_tree_node_id_getter_; + const int frame_tree_node_id_; // Set in the constructor and updated when redirected. network::ResourceRequest resource_request_;
diff --git a/content/browser/loader/prefetch_url_loader_service.cc b/content/browser/loader/prefetch_url_loader_service.cc index 1facb6a..fc0b8e6 100644 --- a/content/browser/loader/prefetch_url_loader_service.cc +++ b/content/browser/loader/prefetch_url_loader_service.cc
@@ -191,21 +191,18 @@ ->prefetched_signed_exchange_cache; } - auto frame_tree_node_id_getter = base::BindRepeating( - [](int id) { return id; }, current_context.frame_tree_node_id); - // For now we strongly bind the loader to the request, while we can // also possibly make the new loader owned by the factory so that // they can live longer than the client (i.e. run in detached mode). // TODO(kinuko): Revisit this. mojo::MakeStrongBinding( std::make_unique<PrefetchURLLoader>( - routing_id, request_id, options, frame_tree_node_id_getter, + routing_id, request_id, options, current_context.frame_tree_node_id, resource_request, std::move(client), traffic_annotation, std::move(network_loader_factory_to_use), base::BindRepeating( &PrefetchURLLoaderService::CreateURLLoaderThrottles, this, - resource_request, frame_tree_node_id_getter), + resource_request, current_context.frame_tree_node_id), browser_context_, signed_exchange_prefetch_metric_recorder_, std::move(prefetched_signed_exchange_cache), blob_storage_context_, accept_langs_, @@ -314,8 +311,7 @@ std::vector<std::unique_ptr<blink::URLLoaderThrottle>> PrefetchURLLoaderService::CreateURLLoaderThrottles( const network::ResourceRequest& request, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter) { - int frame_tree_node_id = frame_tree_node_id_getter.Run(); + int frame_tree_node_id) { return GetContentClient()->browser()->CreateURLLoaderThrottles( request, browser_context_, base::BindRepeating(&WebContents::FromFrameTreeNodeId,
diff --git a/content/browser/loader/prefetch_url_loader_service.h b/content/browser/loader/prefetch_url_loader_service.h index d8404519..4fbbdbc 100644 --- a/content/browser/loader/prefetch_url_loader_service.h +++ b/content/browser/loader/prefetch_url_loader_service.h
@@ -101,9 +101,8 @@ // For URLLoaderThrottlesGetter. std::vector<std::unique_ptr<blink::URLLoaderThrottle>> - CreateURLLoaderThrottles( - const network::ResourceRequest& request, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter); + CreateURLLoaderThrottles(const network::ResourceRequest& request, + int frame_tree_node_id); scoped_refptr<URLLoaderFactoryGetter> loader_factory_getter_; BrowserContext* browser_context_ = nullptr;
diff --git a/content/browser/locks/lock_manager.cc b/content/browser/locks/lock_manager.cc index 0dd759f1..4618ad6 100644 --- a/content/browser/locks/lock_manager.cc +++ b/content/browser/locks/lock_manager.cc
@@ -18,6 +18,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/lock_observer.h" #include "content/public/common/content_client.h" +#include "ipc/ipc_message.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/self_owned_associated_receiver.h"
diff --git a/content/browser/locks/lock_manager_browsertest.cc b/content/browser/locks/lock_manager_browsertest.cc index 558760f..0d6fe75d5 100644 --- a/content/browser/locks/lock_manager_browsertest.cc +++ b/content/browser/locks/lock_manager_browsertest.cc
@@ -10,6 +10,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/lock_observer.h" #include "content/public/browser/render_process_host.h" +#include "content/public/common/content_client.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h"
diff --git a/content/browser/media/android/media_resource_getter_impl.cc b/content/browser/media/android/media_resource_getter_impl.cc index 58439e21..260638f 100644 --- a/content/browser/media/android/media_resource_getter_impl.cc +++ b/content/browser/media/android/media_resource_getter_impl.cc
@@ -22,6 +22,7 @@ #include "mojo/public/cpp/bindings/remote.h" #include "net/base/auth.h" #include "net/http/http_auth.h" +#include "services/network/public/mojom/network_context.mojom.h" #include "services/network/public/mojom/restricted_cookie_manager.mojom.h" #include "url/gurl.h" #include "url/origin.h"
diff --git a/content/browser/media/system_media_controls_notifier.cc b/content/browser/media/system_media_controls_notifier.cc index e1179ad..0368b25 100644 --- a/content/browser/media/system_media_controls_notifier.cc +++ b/content/browser/media/system_media_controls_notifier.cc
@@ -10,6 +10,7 @@ #include "base/bind.h" #include "base/time/time.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "services/media_session/public/mojom/constants.mojom.h" #include "services/media_session/public/mojom/media_session.mojom.h" #include "services/service_manager/public/cpp/connector.h"
diff --git a/content/browser/native_file_system/file_system_chooser.cc b/content/browser/native_file_system/file_system_chooser.cc index cff54dd..7b83ed3 100644 --- a/content/browser/native_file_system/file_system_chooser.cc +++ b/content/browser/native_file_system/file_system_chooser.cc
@@ -17,6 +17,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_client.h" +#include "net/base/mime_util.h" #include "storage/browser/fileapi/isolated_context.h" #include "ui/shell_dialogs/select_file_policy.h"
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc index 8952b6e5..6d64bac 100644 --- a/content/browser/navigation_browsertest.cc +++ b/content/browser/navigation_browsertest.cc
@@ -33,6 +33,7 @@ #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_types.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/navigation_policy.h"
diff --git a/content/browser/network_service_client.cc b/content/browser/network_service_client.cc index 232a521..3d3692b2 100644 --- a/content/browser/network_service_client.cc +++ b/content/browser/network_service_client.cc
@@ -24,6 +24,7 @@ #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/global_request_id.h" #include "content/public/browser/network_service_instance.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/network_service_util.h" #include "content/public/common/resource_type.h"
diff --git a/content/browser/network_service_instance_impl.cc b/content/browser/network_service_instance_impl.cc index cfcf150..dea73ed4 100644 --- a/content/browser/network_service_instance_impl.cc +++ b/content/browser/network_service_instance_impl.cc
@@ -30,6 +30,8 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/service_process_host.h" +#include "content/public/browser/system_connector.h" +#include "content/public/common/content_client.h" #include "content/public/common/network_service_util.h" #include "content/public/common/service_names.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/content/browser/notifications/blink_notification_service_impl_unittest.cc b/content/browser/notifications/blink_notification_service_impl_unittest.cc index ce99752..b0c806c9 100644 --- a/content/browser/notifications/blink_notification_service_impl_unittest.cc +++ b/content/browser/notifications/blink_notification_service_impl_unittest.cc
@@ -24,6 +24,7 @@ #include "content/browser/service_worker/embedded_worker_test_helper.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" #include "content/public/browser/permission_type.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/mock_permission_manager.h"
diff --git a/content/browser/notifications/platform_notification_context_impl.cc b/content/browser/notifications/platform_notification_context_impl.cc index 2a447b7..9ada5345 100644 --- a/content/browser/notifications/platform_notification_context_impl.cc +++ b/content/browser/notifications/platform_notification_context_impl.cc
@@ -26,6 +26,7 @@ #include "content/public/browser/permission_controller.h" #include "content/public/browser/permission_type.h" #include "content/public/browser/platform_notification_service.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "third_party/blink/public/common/notifications/notification_resources.h"
diff --git a/content/browser/notifications/platform_notification_context_trigger_unittest.cc b/content/browser/notifications/platform_notification_context_trigger_unittest.cc index d5699cf..1ea7a31 100644 --- a/content/browser/notifications/platform_notification_context_trigger_unittest.cc +++ b/content/browser/notifications/platform_notification_context_trigger_unittest.cc
@@ -14,6 +14,7 @@ #include "content/browser/notifications/platform_notification_context_impl.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" #include "content/public/browser/notification_database_data.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h"
diff --git a/content/browser/notifications/platform_notification_context_unittest.cc b/content/browser/notifications/platform_notification_context_unittest.cc index 6f3f6f9..410b589 100644 --- a/content/browser/notifications/platform_notification_context_unittest.cc +++ b/content/browser/notifications/platform_notification_context_unittest.cc
@@ -17,6 +17,7 @@ #include "content/browser/service_worker/service_worker_context_wrapper.h" #include "content/public/browser/notification_database_data.h" #include "content/public/browser/permission_type.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/mock_permission_manager.h"
diff --git a/content/browser/notifications/platform_notification_service_proxy.cc b/content/browser/notifications/platform_notification_service_proxy.cc index c91adb0c..2e534dbd 100644 --- a/content/browser/notifications/platform_notification_service_proxy.cc +++ b/content/browser/notifications/platform_notification_service_proxy.cc
@@ -15,6 +15,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/notification_database_data.h" #include "content/public/browser/platform_notification_service.h" +#include "content/public/common/content_client.h" namespace content {
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc index ce37baa..093a1e9 100644 --- a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc +++ b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc
@@ -12,6 +12,7 @@ #include "content/common/media/media_player_delegate_messages.h" #include "content/public/browser/overlay_window.h" #include "content/public/browser/web_contents_delegate.h" +#include "content/public/common/content_client.h" #include "content/test/test_content_browser_client.h" #include "content/test/test_render_frame_host.h" #include "content/test/test_render_view_host.h"
diff --git a/content/browser/plugin_service_impl.cc b/content/browser/plugin_service_impl.cc index 06bd3e7..4461a489 100644 --- a/content/browser/plugin_service_impl.cc +++ b/content/browser/plugin_service_impl.cc
@@ -38,6 +38,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/resource_context.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_switches.h" #include "content/public/common/process_type.h"
diff --git a/content/browser/ppapi_plugin_process_host.cc b/content/browser/ppapi_plugin_process_host.cc index cfb9c91..b906149 100644 --- a/content/browser/ppapi_plugin_process_host.cc +++ b/content/browser/ppapi_plugin_process_host.cc
@@ -27,6 +27,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/network_service_instance.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_switches.h" #include "content/public/common/pepper_plugin_info.h"
diff --git a/content/browser/process_internals/process_internals_handler_impl.cc b/content/browser/process_internals/process_internals_handler_impl.cc index 06a9dc8..5cb68ab 100644 --- a/content/browser/process_internals/process_internals_handler_impl.cc +++ b/content/browser/process_internals/process_internals_handler_impl.cc
@@ -14,6 +14,7 @@ #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/site_isolation_policy.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc index c920205..84d4414 100644 --- a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc +++ b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
@@ -32,6 +32,7 @@ #include "content/browser/renderer_host/dwrite_font_proxy_impl_win.h" #include "content/browser/renderer_host/dwrite_font_uma_logging_win.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "third_party/blink/public/common/font_unique_name_lookup/font_table_matcher.h" #include "third_party/blink/public/common/font_unique_name_lookup/font_table_persistence.h"
diff --git a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc index 5f4d05e..0ae8336 100644 --- a/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc +++ b/content/browser/renderer_host/input/render_widget_host_latency_tracker_unittest.cc
@@ -13,6 +13,7 @@ #include "content/browser/web_contents/web_contents_impl.h" #include "content/common/input/synthetic_web_input_event_builders.h" #include "content/public/browser/native_web_keyboard_event.h" +#include "content/public/common/content_client.h" #include "content/test/test_content_browser_client.h" #include "content/test/test_render_view_host.h" #include "content/test/test_web_contents.h"
diff --git a/content/browser/renderer_host/media/media_stream_manager_unittest.cc b/content/browser/renderer_host/media/media_stream_manager_unittest.cc index 410c936..4b243b10 100644 --- a/content/browser/renderer_host/media/media_stream_manager_unittest.cc +++ b/content/browser/renderer_host/media/media_stream_manager_unittest.cc
@@ -21,6 +21,7 @@ #include "content/browser/renderer_host/media/mock_video_capture_provider.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/media_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_service_manager_context.h"
diff --git a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc index 29e14d6..72ca8d9 100644 --- a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc +++ b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc
@@ -10,6 +10,7 @@ #include "content/browser/renderer_host/media/audio_output_delegate_impl.h" #include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "media/audio/audio_system.h" #include "media/mojo/mojom/audio_logging.mojom.h"
diff --git a/content/browser/renderer_host/media/video_capture_unittest.cc b/content/browser/renderer_host/media/video_capture_unittest.cc index 7c57983..2302a73 100644 --- a/content/browser/renderer_host/media/video_capture_unittest.cc +++ b/content/browser/renderer_host/media/video_capture_unittest.cc
@@ -22,6 +22,7 @@ #include "content/browser/renderer_host/media/media_stream_ui_proxy.h" #include "content/browser/renderer_host/media/video_capture_host.h" #include "content/browser/renderer_host/media/video_capture_manager.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h"
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc index 1666488..8c8670f9 100644 --- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc +++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
@@ -493,7 +493,7 @@ connected_socket_->UpgradeToTLS( host_port_pair, std::move(tls_client_socket_options), pepper_socket_utils::PepperTCPNetworkAnnotationTag(), - mojo::MakeRequest(&tls_client_socket_), + tls_client_socket_.BindNewPipeAndPassReceiver(), socket_observer_receiver_.BindNewPipeAndPassRemote(), mojo::WrapCallbackWithDefaultInvokeIfNotRun( base::BindOnce(&PepperTCPSocketMessageFilter::OnSSLHandshakeCompleted,
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h index dfd23e6..192ab6c 100644 --- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h +++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h
@@ -335,7 +335,7 @@ // Holds socket if Connect() is called. mojo::Remote<network::mojom::TCPConnectedSocket> connected_socket_; // Holds socket if socket was upgraded to SSL. - network::mojom::TLSClientSocketPtr tls_client_socket_; + mojo::Remote<network::mojom::TLSClientSocket> tls_client_socket_; // Holds socket if Listen() is called. mojo::Remote<network::mojom::TCPServerSocket> server_socket_;
diff --git a/content/browser/renderer_host/render_process_host_browsertest.cc b/content/browser/renderer_host/render_process_host_browsertest.cc index aa9477f..be3d057 100644 --- a/content/browser/renderer_host/render_process_host_browsertest.cc +++ b/content/browser/renderer_host/render_process_host_browsertest.cc
@@ -21,6 +21,7 @@ #include "content/public/browser/render_process_host_observer.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/url_constants.h"
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 89098ac..311756e 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -168,6 +168,7 @@ #include "content/public/browser/webrtc_log.h" #include "content/public/common/bind_interface_helpers.h" #include "content/public/common/child_process_host.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h"
diff --git a/content/browser/renderer_host/render_process_host_unittest.cc b/content/browser/renderer_host/render_process_host_unittest.cc index 277ae4a..3103e1a 100644 --- a/content/browser/renderer_host/render_process_host_unittest.cc +++ b/content/browser/renderer_host/render_process_host_unittest.cc
@@ -18,6 +18,7 @@ #include "content/common/frame_owner_properties.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_switches.h" #include "content/public/test/mock_render_process_host.h"
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index ac1ebbb..0d66081 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -71,6 +71,7 @@ #include "content/public/browser/render_widget_host_iterator.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/bindings_policy.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h"
diff --git a/content/browser/renderer_host/render_view_host_unittest.cc b/content/browser/renderer_host/render_view_host_unittest.cc index f8000d2..f571c6d 100644 --- a/content/browser/renderer_host/render_view_host_unittest.cc +++ b/content/browser/renderer_host/render_view_host_unittest.cc
@@ -21,6 +21,7 @@ #include "content/public/browser/navigation_entry.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/bindings_policy.h" +#include "content/public/common/content_client.h" #include "content/public/common/drop_data.h" #include "content/public/common/url_constants.h" #include "content/public/test/mock_render_process_host.h"
diff --git a/content/browser/renderer_interface_binders.cc b/content/browser/renderer_interface_binders.cc index 7eaedb5..6b584056f 100644 --- a/content/browser/renderer_interface_binders.cc +++ b/content/browser/renderer_interface_binders.cc
@@ -25,6 +25,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/content/browser/serial/serial_browsertest.cc b/content/browser/serial/serial_browsertest.cc index d574c64..c1cf0f182 100644 --- a/content/browser/serial/serial_browsertest.cc +++ b/content/browser/serial/serial_browsertest.cc
@@ -11,6 +11,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/serial_chooser.h" #include "content/public/browser/serial_delegate.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h"
diff --git a/content/browser/serial/serial_service.cc b/content/browser/serial/serial_service.cc index 9c628bb..492e940 100644 --- a/content/browser/serial/serial_service.cc +++ b/content/browser/serial/serial_service.cc
@@ -15,6 +15,7 @@ #include "content/public/browser/serial_chooser.h" #include "content/public/browser/serial_delegate.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom.h"
diff --git a/content/browser/service_manager/service_manager_context.cc b/content/browser/service_manager/service_manager_context.cc index d728f6e..c4125dc6 100644 --- a/content/browser/service_manager/service_manager_context.cc +++ b/content/browser/service_manager/service_manager_context.cc
@@ -67,6 +67,7 @@ #include "services/metrics/public/mojom/constants.mojom.h" #include "services/network/public/cpp/cross_thread_shared_url_loader_factory_info.h" #include "services/network/public/mojom/network_service_test.mojom.h" +#include "services/network/public/mojom/url_loader.mojom.h" #include "services/service_manager/public/cpp/connector.h" #include "services/service_manager/public/cpp/constants.h" #include "services/service_manager/public/cpp/manifest.h"
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc index 87414629..76b5df3 100644 --- a/content/browser/service_worker/service_worker_browsertest.cc +++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -320,7 +320,7 @@ VerifySaveDataNotInAccessControlRequestHeader( const net::test_server::HttpRequest& request) { if (request.method == net::test_server::METHOD_OPTIONS && - network::features::ShouldEnableOutOfBlinkCors()) { + network::features::ShouldEnableOutOfBlinkCorsForTesting()) { // In OOR-CORS mode, 'Save-Data' is not added to the CORS preflight request. // This is the desired behavior. auto it = request.headers.find("Save-Data");
diff --git a/content/browser/service_worker/service_worker_client_utils.cc b/content/browser/service_worker/service_worker_client_utils.cc index 8e21d2f..4b790a4e 100644 --- a/content/browser/service_worker/service_worker_client_utils.cc +++ b/content/browser/service_worker/service_worker_client_utils.cc
@@ -36,6 +36,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/common/child_process_host.h" +#include "content/public/common/content_client.h" #include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom.h" #include "ui/base/window_open_disposition.h" #include "url/gurl.h"
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc index 7b1f726..eda2dad 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.cc +++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -37,6 +37,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/public/browser/service_worker_context_observer.h" #include "content/public/browser/storage_usage_info.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "net/base/url_util.h" #include "storage/browser/quota/quota_manager_proxy.h"
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc b/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc index 40566cd..3e0f1c89 100644 --- a/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc +++ b/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
@@ -23,6 +23,7 @@ #include "content/browser/service_worker/service_worker_registration.h" #include "content/browser/service_worker/service_worker_test_utils.h" #include "content/public/browser/resource_context.h" +#include "content/public/common/content_client.h" #include "content/public/common/resource_type.h" #include "content/public/test/browser_task_environment.h" #include "content/test/test_content_browser_client.h"
diff --git a/content/browser/service_worker/service_worker_registration_unittest.cc b/content/browser/service_worker/service_worker_registration_unittest.cc index 1d54841..053cc49 100644 --- a/content/browser/service_worker/service_worker_registration_unittest.cc +++ b/content/browser/service_worker/service_worker_registration_unittest.cc
@@ -36,6 +36,7 @@ #include "content/browser/service_worker/test_service_worker_observer.h" #include "content/browser/storage_partition_impl.h" #include "content/common/service_worker/service_worker_utils.h" +#include "content/public/common/content_client.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" #include "content/public/test/url_loader_interceptor.h"
diff --git a/content/browser/service_worker/service_worker_single_script_update_checker.cc b/content/browser/service_worker/service_worker_single_script_update_checker.cc index abde435..da6f6d20 100644 --- a/content/browser/service_worker/service_worker_single_script_update_checker.cc +++ b/content/browser/service_worker/service_worker_single_script_update_checker.cc
@@ -17,6 +17,7 @@ #include "content/common/service_worker/service_worker_utils.h" #include "content/common/throttling_url_loader.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/browser/global_request_id.h" #include "content/public/browser/render_frame_host.h" #include "content/public/common/content_client.h" #include "content/public/common/resource_type.h"
diff --git a/content/browser/service_worker/service_worker_updated_script_loader.cc b/content/browser/service_worker/service_worker_updated_script_loader.cc index 449d74b1..751a4f39 100644 --- a/content/browser/service_worker/service_worker_updated_script_loader.cc +++ b/content/browser/service_worker/service_worker_updated_script_loader.cc
@@ -24,6 +24,7 @@ #include "content/common/throttling_url_loader.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "net/base/ip_endpoint.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h"
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc index b5efd8f5..47a94666 100644 --- a/content/browser/site_instance_impl.cc +++ b/content/browser/site_instance_impl.cc
@@ -24,6 +24,7 @@ #include "content/public/browser/render_process_host_factory.h" #include "content/public/browser/site_isolation_policy.h" #include "content/public/browser/web_ui_controller_factory.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/url_constants.h"
diff --git a/content/browser/speech/speech_recognition_manager_impl.cc b/content/browser/speech/speech_recognition_manager_impl.cc index ef6371fe..9a55a7c 100644 --- a/content/browser/speech/speech_recognition_manager_impl.cc +++ b/content/browser/speech/speech_recognition_manager_impl.cc
@@ -35,6 +35,7 @@ #include "content/public/browser/speech_recognition_session_context.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "media/audio/audio_device_description.h" #include "third_party/blink/public/mojom/speech/speech_recognition_error.mojom.h" #include "third_party/blink/public/mojom/speech/speech_recognition_result.mojom.h"
diff --git a/content/browser/speech/tts_controller_impl.cc b/content/browser/speech/tts_controller_impl.cc index fcc9341e2..7ba7e7e5 100644 --- a/content/browser/speech/tts_controller_impl.cc +++ b/content/browser/speech/tts_controller_impl.cc
@@ -18,6 +18,7 @@ #include "build/build_config.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/system_connector.h" +#include "content/public/common/content_client.h" #include "services/data_decoder/public/cpp/safe_xml_parser.h" #include "services/data_decoder/public/mojom/constants.mojom.h" #include "services/data_decoder/public/mojom/xml_parser.mojom.h"
diff --git a/content/browser/speech/tts_platform_impl.cc b/content/browser/speech/tts_platform_impl.cc index 8d39aad8..7ce56ec 100644 --- a/content/browser/speech/tts_platform_impl.cc +++ b/content/browser/speech/tts_platform_impl.cc
@@ -8,6 +8,7 @@ #if defined(OS_CHROMEOS) #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #endif #include <string>
diff --git a/content/browser/ssl/ssl_client_auth_handler.cc b/content/browser/ssl/ssl_client_auth_handler.cc index 8d063da..3fd2d00 100644 --- a/content/browser/ssl/ssl_client_auth_handler.cc +++ b/content/browser/ssl/ssl_client_auth_handler.cc
@@ -14,6 +14,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/client_certificate_delegate.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "net/ssl/client_cert_store.h" #include "net/ssl/ssl_private_key.h" #include "net/url_request/url_request.h"
diff --git a/content/browser/ssl/ssl_manager.cc b/content/browser/ssl/ssl_manager.cc index dfd84da4..93cda186 100644 --- a/content/browser/ssl/ssl_manager.cc +++ b/content/browser/ssl/ssl_manager.cc
@@ -26,6 +26,7 @@ #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/navigation_details.h" #include "content/public/browser/ssl_host_state_delegate.h" +#include "content/public/common/content_client.h" #include "net/url_request/url_request.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_recorder.h"
diff --git a/content/browser/storage_partition_impl_map.cc b/content/browser/storage_partition_impl_map.cc index a9e3049..bca090b7 100644 --- a/content/browser/storage_partition_impl_map.cc +++ b/content/browser/storage_partition_impl_map.cc
@@ -39,6 +39,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/storage_partition.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h"
diff --git a/content/browser/tracing/tracing_controller_impl.cc b/content/browser/tracing/tracing_controller_impl.cc index 6272c2b..50af9cb 100644 --- a/content/browser/tracing/tracing_controller_impl.cc +++ b/content/browser/tracing/tracing_controller_impl.cc
@@ -4,6 +4,7 @@ #include "content/browser/tracing/tracing_controller_impl.h" +#include <inttypes.h> #include <memory> #include <utility> #include <vector>
diff --git a/content/browser/utility_process_host.cc b/content/browser/utility_process_host.cc index e7b7e83..ac6d13a 100644 --- a/content/browser/utility_process_host.cc +++ b/content/browser/utility_process_host.cc
@@ -26,6 +26,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/process_type.h"
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 1d12fe4dd..b92e423 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -127,6 +127,7 @@ #include "content/public/browser/web_ui_controller.h" #include "content/public/common/bindings_policy.h" #include "content/public/common/child_process_host.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h"
diff --git a/content/browser/web_contents/web_contents_view_android.cc b/content/browser/web_contents/web_contents_view_android.cc index 9d82699..af081e77 100644 --- a/content/browser/web_contents/web_contents_view_android.cc +++ b/content/browser/web_contents/web_contents_view_android.cc
@@ -25,6 +25,7 @@ #include "content/public/browser/android/synchronous_compositor.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/web_contents_delegate.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/drop_data.h" #include "ui/android/overscroll_refresh_handler.h"
diff --git a/content/browser/web_package/bundled_exchanges_browsertest.cc b/content/browser/web_package/bundled_exchanges_browsertest.cc index cc0308d0..c21cd8f 100644 --- a/content/browser/web_package/bundled_exchanges_browsertest.cc +++ b/content/browser/web_package/bundled_exchanges_browsertest.cc
@@ -18,6 +18,7 @@ #include "content/browser/web_package/bundled_exchanges_utils.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/navigation_handle.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h"
diff --git a/content/browser/web_package/signed_exchange_certificate_chain.cc b/content/browser/web_package/signed_exchange_certificate_chain.cc index 947af81..d9151fdf 100644 --- a/content/browser/web_package/signed_exchange_certificate_chain.cc +++ b/content/browser/web_package/signed_exchange_certificate_chain.cc
@@ -15,6 +15,7 @@ #include "content/browser/web_package/signed_exchange_consts.h" #include "content/browser/web_package/signed_exchange_utils.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "crypto/sha2.h" #include "net/cert/asn1_util.h" #include "net/cert/x509_certificate.h"
diff --git a/content/browser/web_package/signed_exchange_devtools_proxy.cc b/content/browser/web_package/signed_exchange_devtools_proxy.cc index cb29a54..416c453 100644 --- a/content/browser/web_package/signed_exchange_devtools_proxy.cc +++ b/content/browser/web_package/signed_exchange_devtools_proxy.cc
@@ -22,12 +22,12 @@ SignedExchangeDevToolsProxy::SignedExchangeDevToolsProxy( const GURL& outer_request_url, const network::ResourceResponseHead& outer_response, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, base::Optional<const base::UnguessableToken> devtools_navigation_token, bool report_raw_headers) : outer_request_url_(outer_request_url), outer_response_(outer_response), - frame_tree_node_id_getter_(frame_tree_node_id_getter), + frame_tree_node_id_(frame_tree_node_id), devtools_navigation_token_(devtools_navigation_token), devtools_enabled_(report_raw_headers) { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -43,7 +43,7 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); errors_.push_back(SignedExchangeError(message, std::move(error_field))); WebContents* web_contents = - WebContents::FromFrameTreeNodeId(frame_tree_node_id_getter_.Run()); + WebContents::FromFrameTreeNodeId(frame_tree_node_id_); if (!web_contents) return; web_contents->GetMainFrame()->AddMessageToConsole( @@ -57,7 +57,7 @@ return; FrameTreeNode* frame_tree_node = - FrameTreeNode::GloballyFindByID(frame_tree_node_id_getter_.Run()); + FrameTreeNode::GloballyFindByID(frame_tree_node_id_); if (!frame_tree_node) return; @@ -75,7 +75,7 @@ return; FrameTreeNode* frame_tree_node = - FrameTreeNode::GloballyFindByID(frame_tree_node_id_getter_.Run()); + FrameTreeNode::GloballyFindByID(frame_tree_node_id_); if (!frame_tree_node) return; @@ -92,7 +92,7 @@ return; FrameTreeNode* frame_tree_node = - FrameTreeNode::GloballyFindByID(frame_tree_node_id_getter_.Run()); + FrameTreeNode::GloballyFindByID(frame_tree_node_id_); if (!frame_tree_node) return; @@ -112,7 +112,7 @@ ssl_info_opt = *ssl_info; FrameTreeNode* frame_tree_node = - FrameTreeNode::GloballyFindByID(frame_tree_node_id_getter_.Run()); + FrameTreeNode::GloballyFindByID(frame_tree_node_id_); if (!frame_tree_node) return;
diff --git a/content/browser/web_package/signed_exchange_devtools_proxy.h b/content/browser/web_package/signed_exchange_devtools_proxy.h index 2ba6b991..b530f47 100644 --- a/content/browser/web_package/signed_exchange_devtools_proxy.h +++ b/content/browser/web_package/signed_exchange_devtools_proxy.h
@@ -40,10 +40,6 @@ // DevTools via the UI thread to show signed exchange related information. class CONTENT_EXPORT SignedExchangeDevToolsProxy { public: - // |frame_tree_node_id_getter| callback will be called on the UI thread to get - // the frame tree node ID. Note: We are using callback beause when Network - // Service is not enabled the ID is not available while handling prefetch - // requests on the IO thread. // When the signed exchange request is a navigation request, // |devtools_navigation_token| can be used to find the matching request in // DevTools. But when the signed exchange request is a prefetch request, the @@ -53,7 +49,7 @@ SignedExchangeDevToolsProxy( const GURL& outer_request_url, const network::ResourceResponseHead& outer_response_head, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, base::Optional<const base::UnguessableToken> devtools_navigation_token, bool report_raw_headers); ~SignedExchangeDevToolsProxy(); @@ -79,7 +75,7 @@ private: const GURL outer_request_url_; const network::ResourceResponseHead outer_response_; - const base::RepeatingCallback<int(void)> frame_tree_node_id_getter_; + const int frame_tree_node_id_; const base::Optional<const base::UnguessableToken> devtools_navigation_token_; const bool devtools_enabled_; std::vector<SignedExchangeError> errors_;
diff --git a/content/browser/web_package/signed_exchange_handler.cc b/content/browser/web_package/signed_exchange_handler.cc index b62ebe4..82838fc6 100644 --- a/content/browser/web_package/signed_exchange_handler.cc +++ b/content/browser/web_package/signed_exchange_handler.cc
@@ -88,7 +88,7 @@ const GURL& url, const std::string& ocsp_result, const std::string& sct_list, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, VerifyCallback callback) { VerifyCallback wrapped_callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun( std::move(callback), net::ERR_FAILED, net::CertVerifyResult(), @@ -97,8 +97,7 @@ network::mojom::NetworkContext* network_context = g_network_context_for_testing; if (!network_context) { - auto* frame = - FrameTreeNode::GloballyFindByID(frame_tree_node_id_getter.Run()); + auto* frame = FrameTreeNode::GloballyFindByID(frame_tree_node_id); if (!frame) return; @@ -176,7 +175,7 @@ std::unique_ptr<blink::SignedExchangeRequestMatcher> request_matcher, std::unique_ptr<SignedExchangeDevToolsProxy> devtools_proxy, SignedExchangeReporter* reporter, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter) + int frame_tree_node_id) : is_secure_transport_(is_secure_transport), has_nosniff_(has_nosniff), headers_callback_(std::move(headers_callback)), @@ -186,7 +185,7 @@ request_matcher_(std::move(request_matcher)), devtools_proxy_(std::move(devtools_proxy)), reporter_(reporter), - frame_tree_node_id_getter_(frame_tree_node_id_getter) { + frame_tree_node_id_(frame_tree_node_id) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("loading"), "SignedExchangeHandler::SignedExchangeHandler"); @@ -237,7 +236,8 @@ SignedExchangeHandler::SignedExchangeHandler() : is_secure_transport_(true), has_nosniff_(true), - load_flags_(net::LOAD_NORMAL) {} + load_flags_(net::LOAD_NORMAL), + frame_tree_node_id_(FrameTreeNode::kFrameTreeNodeInvalidId) {} const GURL& SignedExchangeHandler::GetFallbackUrl() const { return prologue_fallback_url_and_after_.fallback_url().url; @@ -521,7 +521,7 @@ base::PostTask( FROM_HERE, {BrowserThread::UI}, base::BindOnce(&VerifyCert, certificate, url, stapled_ocsp_response, - sct_list_from_cert_cbor, frame_tree_node_id_getter_, + sct_list_from_cert_cbor, frame_tree_node_id_, base::BindOnce(&SignedExchangeHandler::OnVerifyCert, weak_factory_.GetWeakPtr()))); }
diff --git a/content/browser/web_package/signed_exchange_handler.h b/content/browser/web_package/signed_exchange_handler.h index ef3c454..55d3a12 100644 --- a/content/browser/web_package/signed_exchange_handler.h +++ b/content/browser/web_package/signed_exchange_handler.h
@@ -97,7 +97,7 @@ std::unique_ptr<blink::SignedExchangeRequestMatcher> request_matcher, std::unique_ptr<SignedExchangeDevToolsProxy> devtools_proxy, SignedExchangeReporter* reporter, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter); + int frame_tree_node_id); virtual ~SignedExchangeHandler(); int64_t GetExchangeHeaderLength() const { return exchange_header_length_; } @@ -177,7 +177,7 @@ // This is owned by SignedExchangeLoader which is the owner of |this|. SignedExchangeReporter* reporter_; - base::RepeatingCallback<int(void)> frame_tree_node_id_getter_; + const int frame_tree_node_id_; base::TimeTicks cert_fetch_start_time_;
diff --git a/content/browser/web_package/signed_exchange_handler_unittest.cc b/content/browser/web_package/signed_exchange_handler_unittest.cc index 0133b679..d058fe7 100644 --- a/content/browser/web_package/signed_exchange_handler_unittest.cc +++ b/content/browser/web_package/signed_exchange_handler_unittest.cc
@@ -13,12 +13,14 @@ #include "base/path_service.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" +#include "content/browser/frame_host/frame_tree_node.h" #include "content/browser/web_package/signed_exchange_cert_fetcher_factory.h" #include "content/browser/web_package/signed_exchange_devtools_proxy.h" #include "content/browser/web_package/signed_exchange_signature_verifier.h" #include "content/browser/web_package/signed_exchange_test_utils.h" #include "content/browser/web_package/signed_exchange_utils.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_paths.h" #include "content/public/test/browser_task_environment.h" @@ -336,7 +338,7 @@ std::make_unique<blink::SignedExchangeRequestMatcher>( net::HttpRequestHeaders(), std::string() /* accept_langs */), nullptr /* devtools_proxy */, nullptr /* reporter */, - base::RepeatingCallback<int(void)>()); + FrameTreeNode::kFrameTreeNodeInvalidId); } void WaitForHeader() {
diff --git a/content/browser/web_package/signed_exchange_loader.cc b/content/browser/web_package/signed_exchange_loader.cc index 5d341d7..ae6ae32 100644 --- a/content/browser/web_package/signed_exchange_loader.cc +++ b/content/browser/web_package/signed_exchange_loader.cc
@@ -68,7 +68,7 @@ std::unique_ptr<SignedExchangeReporter> reporter, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, URLLoaderThrottlesGetter url_loader_throttles_getter, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, scoped_refptr<SignedExchangePrefetchMetricRecorder> metric_recorder, const std::string& accept_langs) : outer_request_(outer_request), @@ -81,7 +81,7 @@ reporter_(std::move(reporter)), url_loader_factory_(std::move(url_loader_factory)), url_loader_throttles_getter_(std::move(url_loader_throttles_getter)), - frame_tree_node_id_getter_(frame_tree_node_id_getter), + frame_tree_node_id_(frame_tree_node_id), metric_recorder_(std::move(metric_recorder)), accept_langs_(accept_langs) { DCHECK(outer_request_.url.is_valid()); @@ -172,7 +172,7 @@ std::move(cert_fetcher_factory), outer_request_.load_flags, std::make_unique<blink::SignedExchangeRequestMatcher>( outer_request_.headers, accept_langs_), - std::move(devtools_proxy_), reporter_.get(), frame_tree_node_id_getter_); + std::move(devtools_proxy_), reporter_.get(), frame_tree_node_id_); } void SignedExchangeLoader::OnComplete(
diff --git a/content/browser/web_package/signed_exchange_loader.h b/content/browser/web_package/signed_exchange_loader.h index e5baafe..e5aea59 100644 --- a/content/browser/web_package/signed_exchange_loader.h +++ b/content/browser/web_package/signed_exchange_loader.h
@@ -72,7 +72,7 @@ std::unique_ptr<SignedExchangeReporter> reporter, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, URLLoaderThrottlesGetter url_loader_throttles_getter, - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, scoped_refptr<SignedExchangePrefetchMetricRecorder> metric_recorder, const std::string& accept_langs); ~SignedExchangeLoader() override; @@ -172,7 +172,7 @@ std::unique_ptr<SignedExchangeReporter> reporter_; scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; URLLoaderThrottlesGetter url_loader_throttles_getter_; - base::RepeatingCallback<int(void)> frame_tree_node_id_getter_; + const int frame_tree_node_id_; scoped_refptr<SignedExchangePrefetchMetricRecorder> metric_recorder_; base::Optional<net::SSLInfo> ssl_info_;
diff --git a/content/browser/web_package/signed_exchange_loader_unittest.cc b/content/browser/web_package/signed_exchange_loader_unittest.cc index d5d8166f..5bb11d4d 100644 --- a/content/browser/web_package/signed_exchange_loader_unittest.cc +++ b/content/browser/web_package/signed_exchange_loader_unittest.cc
@@ -12,6 +12,7 @@ #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "build/build_config.h" +#include "content/browser/frame_host/frame_tree_node.h" #include "content/browser/web_package/mock_signed_exchange_handler.h" #include "content/browser/web_package/signed_exchange_devtools_proxy.h" #include "content/browser/web_package/signed_exchange_prefetch_metric_recorder.h" @@ -181,7 +182,7 @@ false /* should_redirect_to_fallback */, nullptr /* devtools_proxy */, nullptr /* reporter */, CreateMockPingLoaderFactory(), base::BindRepeating(&SignedExchangeLoaderTest::ThrottlesGetter), - base::RepeatingCallback<int(void)>(), nullptr /* metric_recorder */, + FrameTreeNode::kFrameTreeNodeInvalidId, nullptr /* metric_recorder */, std::string() /* accept_langs */); EXPECT_CALL(mock_loader, PauseReadingBodyFromNet());
diff --git a/content/browser/web_package/signed_exchange_prefetch_handler.cc b/content/browser/web_package/signed_exchange_prefetch_handler.cc index 6c0116f..820cfe3 100644 --- a/content/browser/web_package/signed_exchange_prefetch_handler.cc +++ b/content/browser/web_package/signed_exchange_prefetch_handler.cc
@@ -19,7 +19,7 @@ namespace content { SignedExchangePrefetchHandler::SignedExchangePrefetchHandler( - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, const network::ResourceRequest& resource_request, const network::ResourceResponseHead& response_head, mojo::ScopedDataPipeConsumerHandle response_body, @@ -51,14 +51,14 @@ std::move(client), std::move(endpoints), url_loader_options, false /* should_redirect_to_fallback */, std::make_unique<SignedExchangeDevToolsProxy>( - resource_request.url, response_head, frame_tree_node_id_getter, + resource_request.url, response_head, frame_tree_node_id, base::nullopt /* devtools_navigation_token */, resource_request.report_raw_headers), - SignedExchangeReporter::MaybeCreate( - resource_request.url, resource_request.referrer.spec(), response_head, - frame_tree_node_id_getter), + SignedExchangeReporter::MaybeCreate(resource_request.url, + resource_request.referrer.spec(), + response_head, frame_tree_node_id), std::move(url_loader_factory), loader_throttles_getter, - frame_tree_node_id_getter, std::move(metric_recorder), accept_langs); + frame_tree_node_id, std::move(metric_recorder), accept_langs); } SignedExchangePrefetchHandler::~SignedExchangePrefetchHandler() = default;
diff --git a/content/browser/web_package/signed_exchange_prefetch_handler.h b/content/browser/web_package/signed_exchange_prefetch_handler.h index 1e3764b..3ad5742 100644 --- a/content/browser/web_package/signed_exchange_prefetch_handler.h +++ b/content/browser/web_package/signed_exchange_prefetch_handler.h
@@ -45,7 +45,7 @@ // |forwarding_client| is a pointer to the downstream client (typically who // creates this handler). SignedExchangePrefetchHandler( - base::RepeatingCallback<int(void)> frame_tree_node_id_getter, + int frame_tree_node_id, const network::ResourceRequest& resource_request, const network::ResourceResponseHead& response, mojo::ScopedDataPipeConsumerHandle response_body,
diff --git a/content/browser/web_package/signed_exchange_reporter.cc b/content/browser/web_package/signed_exchange_reporter.cc index 0b5927e..50e4710c 100644 --- a/content/browser/web_package/signed_exchange_reporter.cc +++ b/content/browser/web_package/signed_exchange_reporter.cc
@@ -118,9 +118,8 @@ return false; } -void ReportResultOnUI(base::OnceCallback<int(void)> frame_tree_node_id_getter, +void ReportResultOnUI(int frame_tree_node_id, network::mojom::SignedExchangeReportPtr report) { - int frame_tree_node_id = std::move(frame_tree_node_id_getter).Run(); FrameTreeNode* frame_tree_node = FrameTreeNode::GloballyFindByID(frame_tree_node_id); if (!frame_tree_node) @@ -146,23 +145,23 @@ const GURL& outer_url, const std::string& referrer, const network::ResourceResponseHead& response, - base::OnceCallback<int(void)> frame_tree_node_id_getter) { + int frame_tree_node_id) { if (!signed_exchange_utils:: IsSignedExchangeReportingForDistributorsEnabled()) { return nullptr; } return base::WrapUnique(new SignedExchangeReporter( - outer_url, referrer, response, std::move(frame_tree_node_id_getter))); + outer_url, referrer, response, frame_tree_node_id)); } SignedExchangeReporter::SignedExchangeReporter( const GURL& outer_url, const std::string& referrer, const network::ResourceResponseHead& response, - base::OnceCallback<int(void)> frame_tree_node_id_getter) + int frame_tree_node_id) : report_(network::mojom::SignedExchangeReport::New()), request_start_(response.load_timing.request_start), - frame_tree_node_id_getter_(std::move(frame_tree_node_id_getter)) { + frame_tree_node_id_(frame_tree_node_id) { report_->outer_url = outer_url; report_->referrer = referrer; report_->server_ip_address = response.remote_endpoint.address(); @@ -196,7 +195,6 @@ void SignedExchangeReporter::ReportResultAndFinish( SignedExchangeLoadResult result) { DCHECK(report_); - DCHECK(frame_tree_node_id_getter_); const char* result_string = GetResultTypeString(result); report_->success = result == SignedExchangeLoadResult::kSuccess; @@ -214,10 +212,9 @@ report_->elapsed_time = base::TimeTicks::Now() - request_start_; } - base::PostTask( - FROM_HERE, {BrowserThread::UI}, - base::BindOnce(&ReportResultOnUI, std::move(frame_tree_node_id_getter_), - std::move(report_))); + base::PostTask(FROM_HERE, {BrowserThread::UI}, + base::BindOnce(&ReportResultOnUI, frame_tree_node_id_, + std::move(report_))); } } // namespace content
diff --git a/content/browser/web_package/signed_exchange_reporter.h b/content/browser/web_package/signed_exchange_reporter.h index d7abf43f..bbd3a09 100644 --- a/content/browser/web_package/signed_exchange_reporter.h +++ b/content/browser/web_package/signed_exchange_reporter.h
@@ -8,7 +8,6 @@ #include <memory> #include <string> -#include "base/callback.h" #include "base/macros.h" #include "content/browser/web_package/signed_exchange_error.h" #include "content/common/content_export.h" @@ -31,7 +30,7 @@ const GURL& outer_url, const std::string& referrer, const network::ResourceResponseHead& response, - base::OnceCallback<int(void)> frame_tree_node_id_getter); + int frame_tree_node_id); ~SignedExchangeReporter(); @@ -44,15 +43,14 @@ void ReportResultAndFinish(SignedExchangeLoadResult result); private: - SignedExchangeReporter( - const GURL& outer_url, - const std::string& referrer, - const network::ResourceResponseHead& response, - base::OnceCallback<int(void)> frame_tree_node_id_getter); + SignedExchangeReporter(const GURL& outer_url, + const std::string& referrer, + const network::ResourceResponseHead& response, + int frame_tree_node_id); network::mojom::SignedExchangeReportPtr report_; const base::TimeTicks request_start_; - base::OnceCallback<int(void)> frame_tree_node_id_getter_; + const int frame_tree_node_id_; net::IPAddress cert_server_ip_address_; DISALLOW_COPY_AND_ASSIGN(SignedExchangeReporter);
diff --git a/content/browser/web_package/signed_exchange_request_handler.cc b/content/browser/web_package/signed_exchange_request_handler.cc index 92d6dc3..567b77dd 100644 --- a/content/browser/web_package/signed_exchange_request_handler.cc +++ b/content/browser/web_package/signed_exchange_request_handler.cc
@@ -92,9 +92,6 @@ network::mojom::URLLoaderClientPtr client; *client_request = mojo::MakeRequest(&client); - base::RepeatingCallback<int(void)> frame_tree_node_id_getter = - base::BindRepeating([](int id) { return id; }, frame_tree_node_id_); - // This lets the SignedExchangeLoader directly returns an artificial redirect // to the downstream client without going through ThrottlingURLLoader, which // means some checks like SafeBrowsing may not see the redirect. Given that @@ -105,13 +102,12 @@ url_loader->Unbind(), url_loader_options_, true /* should_redirect_to_fallback */, std::make_unique<SignedExchangeDevToolsProxy>( - request.url, response_head, frame_tree_node_id_getter, + request.url, response_head, frame_tree_node_id_, devtools_navigation_token_, request.report_raw_headers), SignedExchangeReporter::MaybeCreate(request.url, request.referrer.spec(), - response_head, - frame_tree_node_id_getter), - url_loader_factory_, url_loader_throttles_getter_, - frame_tree_node_id_getter, metric_recorder_, accept_langs_); + response_head, frame_tree_node_id_), + url_loader_factory_, url_loader_throttles_getter_, frame_tree_node_id_, + metric_recorder_, accept_langs_); *skip_other_interceptors = true; return true;
diff --git a/content/browser/web_package/signed_exchange_request_handler_browsertest.cc b/content/browser/web_package/signed_exchange_request_handler_browsertest.cc index ec21ae67..26aa8880 100644 --- a/content/browser/web_package/signed_exchange_request_handler_browsertest.cc +++ b/content/browser/web_package/signed_exchange_request_handler_browsertest.cc
@@ -34,6 +34,7 @@ #include "content/public/browser/ssl_status.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_paths.h" #include "content/public/common/page_type.h"
diff --git a/content/browser/web_package/signed_exchange_utils.cc b/content/browser/web_package/signed_exchange_utils.cc index 153d2a7..d01b3ea 100644 --- a/content/browser/web_package/signed_exchange_utils.cc +++ b/content/browser/web_package/signed_exchange_utils.cc
@@ -9,6 +9,7 @@ #include "base/no_destructor.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/time/time.h" #include "base/trace_event/trace_event.h" #include "content/browser/loader/download_utils_impl.h"
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc index fbffd5c..ecc3b4c 100644 --- a/content/browser/webauth/authenticator_impl_unittest.cc +++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -35,6 +35,7 @@ #include "content/browser/webauth/authenticator_environment_impl.h" #include "content/public/browser/authenticator_request_client_delegate.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_service_manager_context.h" @@ -58,6 +59,7 @@ #include "services/service_manager/public/cpp/connector.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "url/url_util.h" #if defined(OS_MACOSX) #include "device/fido/mac/authenticator_config.h"
diff --git a/content/browser/webauth/webauth_browsertest.cc b/content/browser/webauth/webauth_browsertest.cc index 6eff627..3f471d86 100644 --- a/content/browser/webauth/webauth_browsertest.cc +++ b/content/browser/webauth/webauth_browsertest.cc
@@ -25,6 +25,7 @@ #include "content/public/browser/navigation_throttle.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/service_manager_connection.h"
diff --git a/content/browser/webrtc/webrtc_internals.cc b/content/browser/webrtc/webrtc_internals.cc index aec3c7b..a910ed5c 100644 --- a/content/browser/webrtc/webrtc_internals.cc +++ b/content/browser/webrtc/webrtc_internals.cc
@@ -24,6 +24,7 @@ #include "content/public/browser/system_connector.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/webrtc_event_logger.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "ipc/ipc_platform_file.h" #include "media/audio/audio_debug_recording_session.h"
diff --git a/content/browser/websockets/websocket_connector_impl.cc b/content/browser/websockets/websocket_connector_impl.cc index aad76cf9..c1e45c45 100644 --- a/content/browser/websockets/websocket_connector_impl.cc +++ b/content/browser/websockets/websocket_connector_impl.cc
@@ -8,6 +8,7 @@ #include "content/browser/renderer_host/render_process_host_impl.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/storage_partition.h" +#include "content/public/common/content_client.h" #include "services/network/public/cpp/features.h" #include "url/gurl.h"
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc index 72d651c..a9f0765 100644 --- a/content/browser/webui/url_data_manager_backend.cc +++ b/content/browser/webui/url_data_manager_backend.cc
@@ -31,6 +31,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/render_process_host.h" +#include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h"
diff --git a/content/browser/webui/web_ui_controller_factory_registry.cc b/content/browser/webui/web_ui_controller_factory_registry.cc index 2737c43..c0f339f6 100644 --- a/content/browser/webui/web_ui_controller_factory_registry.cc +++ b/content/browser/webui/web_ui_controller_factory_registry.cc
@@ -10,6 +10,7 @@ #include "content/browser/frame_host/debug_urls.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/web_ui_controller.h" +#include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" #include "content/public/common/url_utils.h" #include "url/gurl.h"
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc index 19842b9..c59aeab 100644 --- a/content/browser/worker_host/dedicated_worker_host.cc +++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -22,6 +22,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/service_worker_context.h" +#include "content/public/common/content_client.h" #include "content/public/common/network_service_util.h" #include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/content/browser/worker_host/shared_worker_service_impl.cc b/content/browser/worker_host/shared_worker_service_impl.cc index 02391e7..fe428808 100644 --- a/content/browser/worker_host/shared_worker_service_impl.cc +++ b/content/browser/worker_host/shared_worker_service_impl.cc
@@ -32,6 +32,7 @@ #include "content/public/browser/render_process_host.h" #include "content/public/browser/shared_worker_instance.h" #include "content/public/common/bind_interface_helpers.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/content/browser/worker_host/worker_script_fetch_initiator.cc b/content/browser/worker_host/worker_script_fetch_initiator.cc index 1409ff2b..c43f7eb 100644 --- a/content/browser/worker_host/worker_script_fetch_initiator.cc +++ b/content/browser/worker_host/worker_script_fetch_initiator.cc
@@ -37,6 +37,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/resource_context.h" #include "content/public/browser/shared_cors_origin_access_list.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/referrer.h" #include "mojo/public/cpp/bindings/strong_binding.h"
diff --git a/content/browser/worker_host/worker_script_fetcher.cc b/content/browser/worker_host/worker_script_fetcher.cc index b9fd295..18f7440 100644 --- a/content/browser/worker_host/worker_script_fetcher.cc +++ b/content/browser/worker_host/worker_script_fetcher.cc
@@ -11,6 +11,7 @@ #include "content/browser/worker_host/worker_script_loader_factory.h" #include "content/common/throttling_url_loader.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/global_request_id.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/resource_response.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h"
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 49cb37e..95e3d31a 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -21,6 +21,7 @@ #include "net/base/features.h" #include "services/device/public/cpp/device_features.h" #include "services/network/public/cpp/features.h" +#include "services/network/public/cpp/network_switches.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/platform/web_runtime_features.h" #include "ui/accessibility/accessibility_features.h" @@ -194,9 +195,6 @@ WebRuntimeFeatures::EnableUserActivationV2( base::FeatureList::IsEnabled(features::kUserActivationV2)); - if (base::FeatureList::IsEnabled(features::kScrollAnchorSerialization)) - WebRuntimeFeatures::EnableScrollAnchorSerialization(true); - WebRuntimeFeatures::EnableFeatureFromString( "CSSBackdropFilter", base::FeatureList::IsEnabled(blink::features::kCSSBackdropFilter)); @@ -572,8 +570,10 @@ if (ui::IsOverlayScrollbarEnabled()) WebRuntimeFeatures::EnableOverlayScrollbars(true); - if (network::features::ShouldEnableOutOfBlinkCors()) + + if (command_line.HasSwitch(network::switches::kEnableOutOfBlinkCors)) WebRuntimeFeatures::EnableOutOfBlinkCors(true); + WebRuntimeFeatures::EnableFormControlsRefresh( features::IsFormControlsRefreshEnabled());
diff --git a/content/common/throttling_url_loader.cc b/content/common/throttling_url_loader.cc index b2d1430..ee5e64a 100644 --- a/content/common/throttling_url_loader.cc +++ b/content/common/throttling_url_loader.cc
@@ -423,20 +423,20 @@ throttle_will_start_redirect_url_.spec().c_str()); // This is only needed when CORS is running in the renderer. - if (!network::features::ShouldEnableOutOfBlinkCors()) { - std::string http_origin; - if (start_info_->url_request.headers.GetHeader("Origin", &http_origin)) { - // If this redirect is used in a cross-origin request, add CORS headers - // to make sure that the redirect gets through. Note that the - // destination URL is still subject to the usual CORS policy, i.e. the - // resource will only be available to web pages if the server serves the - // response with the required CORS response headers. - header_string += base::StringPrintf( - "\n" - "Access-Control-Allow-Origin: %s\n" - "Access-Control-Allow-Credentials: true", - http_origin.c_str()); - } + // TODO(crbug.com/1001450): Remove following code once OOR-CORS is fully + // enabled. + std::string http_origin; + if (start_info_->url_request.headers.GetHeader("Origin", &http_origin)) { + // If this redirect is used in a cross-origin request, add CORS headers + // to make sure that the redirect gets through. Note that the + // destination URL is still subject to the usual CORS policy, i.e. the + // resource will only be available to web pages if the server serves the + // response with the required CORS response headers. + header_string += base::StringPrintf( + "\n" + "Access-Control-Allow-Origin: %s\n" + "Access-Control-Allow-Credentials: true", + http_origin.c_str()); } response_head->headers = base::MakeRefCounted<net::HttpResponseHeaders>(
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h index 37c9639..67ba58e 100644 --- a/content/public/browser/browser_context.h +++ b/content/public/browser/browser_context.h
@@ -326,6 +326,9 @@ // Returns a SharedCorsOriginAccessList instance. virtual SharedCorsOriginAccessList* GetSharedCorsOriginAccessList(); + // Returns true if OOR-CORS should be enabled. + virtual bool ShouldEnableOutOfBlinkCors(); + // Handles a service request for a service expected to run an instance per // BrowserContext. virtual std::unique_ptr<service_manager::Service> HandleServiceRequest(
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc index 0303af7..75ca397 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc
@@ -17,11 +17,15 @@ #include "content/public/browser/browser_main_parts.h" #include "content/public/browser/client_certificate_delegate.h" #include "content/public/browser/login_delegate.h" +#include "content/public/browser/navigation_throttle.h" #include "content/public/browser/navigation_ui_data.h" #include "content/public/browser/network_service_instance.h" +#include "content/public/browser/overlay_window.h" #include "content/public/browser/page_navigator.h" +#include "content/public/browser/quota_permission_context.h" #include "content/public/browser/url_loader_request_interceptor.h" #include "content/public/browser/vpn_service_proxy.h" +#include "content/public/browser/web_contents.h" #include "content/public/common/url_utils.h" #include "media/audio/audio_manager.h" #include "media/media_buildflags.h" @@ -32,6 +36,7 @@ #include "services/device/public/cpp/geolocation/location_provider.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/mojom/network_service.mojom.h" +#include "services/service_manager/public/cpp/manifest.h" #include "services/service_manager/sandbox/sandbox_type.h" #include "storage/browser/quota/quota_manager.h" #include "third_party/blink/public/common/loader/url_loader_throttle.h"
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h index 76be4fc..cbcb02c7 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h
@@ -11,63 +11,41 @@ #include <memory> #include <set> #include <string> -#include <utility> #include <vector> #include "base/callback.h" #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" +#include "base/files/file_path.h" +#include "base/memory/scoped_refptr.h" #include "base/optional.h" -#include "base/task/thread_pool/thread_pool_instance.h" +#include "base/strings/string_piece.h" #include "base/time/time.h" -#include "base/values.h" -#include "build/build_config.h" -#include "content/public/browser/browser_or_resource_context.h" +#include "content/common/content_export.h" #include "content/public/browser/certificate_request_result_type.h" #include "content/public/browser/generated_code_cache_settings.h" -#include "content/public/browser/global_request_id.h" -#include "content/public/browser/global_routing_id.h" -#include "content/public/browser/navigation_throttle.h" -#include "content/public/browser/overlay_window.h" #include "content/public/browser/page_visibility_state.h" -#include "content/public/browser/quota_permission_context.h" -#include "content/public/browser/web_contents.h" -#include "content/public/common/content_client.h" -#include "content/public/common/navigation_policy.h" #include "content/public/common/previews_state.h" -#include "content/public/common/resource_type.h" -#include "content/public/common/socket_permission_request.h" #include "content/public/common/window_container_type.mojom-forward.h" #include "media/base/video_codecs.h" #include "media/cdm/cdm_proxy.h" -#include "media/media_buildflags.h" #include "media/mojo/mojom/remoting.mojom.h" #include "mojo/public/cpp/bindings/generic_pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/remote.h" -#include "net/base/mime_util.h" -#include "net/url_request/url_request_context_getter.h" -#include "services/network/public/mojom/network_context.mojom.h" +#include "services/network/public/mojom/restricted_cookie_manager.mojom-forward.h" +#include "services/network/public/mojom/url_loader_factory.mojom-forward.h" #include "services/network/public/mojom/websocket.mojom-forward.h" -#include "services/service_manager/public/cpp/binder_map.h" -#include "services/service_manager/public/cpp/binder_registry.h" -#include "services/service_manager/public/cpp/identity.h" -#include "services/service_manager/public/cpp/manifest.h" -#include "services/service_manager/public/mojom/service.mojom-forward.h" -#include "services/service_manager/sandbox/sandbox_type.h" #include "storage/browser/fileapi/file_system_context.h" -#include "storage/browser/quota/quota_manager.h" -#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" -#include "third_party/blink/public/common/mediastream/media_stream_request.h" #include "third_party/blink/public/common/user_agent/user_agent_metadata.h" #include "third_party/blink/public/mojom/credentialmanager/credential_manager.mojom-forward.h" -#include "third_party/blink/public/mojom/renderer_preference_watcher.mojom-forward.h" #include "third_party/blink/public/mojom/web_feature/web_feature.mojom-forward.h" -#include "third_party/blink/public/mojom/window_features/window_features.mojom-forward.h" #include "ui/accessibility/ax_mode.h" #include "ui/base/page_transition_types.h" #include "ui/base/window_open_disposition.h" #include "ui/gfx/image/image_skia.h" +#include "url/gurl.h" +#include "url/origin.h" #if (defined(OS_POSIX) && !defined(OS_MACOSX)) || defined(OS_FUCHSIA) #include "base/posix/global_descriptors.h" @@ -77,6 +55,10 @@ #include "content/public/browser/posix_file_descriptor_info.h" #endif +namespace net { +class AuthCredentials; +} // namespace net + class GURL; using LoginAuthRequiredCallback = base::OnceCallback<void(const base::Optional<net::AuthCredentials>&)>; @@ -84,45 +66,61 @@ namespace base { class CommandLine; class FilePath; -} +} // namespace base namespace blink { namespace mojom { class RendererPreferences; +class RendererPreferenceWatcher; class WebUsbService; -} +class WindowFeatures; +} // namespace mojom +class AssociatedInterfaceRegistry; class URLLoaderThrottle; } // namespace blink namespace device { class LocationProvider; -} +} // namespace device namespace media { class AudioLogFactory; class AudioManager; enum class EncryptionMode; -} - -namespace mojo { -class ScopedInterfaceEndpointHandle; -} +} // namespace media namespace network { +enum class OriginPolicyState; class SharedURLLoaderFactory; -} +namespace mojom { +class TrustedHeaderClient; +} // namespace mojom +} // namespace network namespace service_manager { class Identity; +struct Manifest; class Service; -} + +template <typename...> +class BinderRegistryWithArgs; +using BinderRegistry = BinderRegistryWithArgs<>; + +template <typename> +class BinderMapWithContext; + +namespace mojom { +class Service; +} // namespace mojom +} // namespace service_manager namespace net { class AuthChallengeInfo; -class AuthCredentials; class ClientCertIdentity; using ClientCertIdentityList = std::vector<std::unique_ptr<ClientCertIdentity>>; class ClientCertStore; +class HttpResponseHeaders; +class NetworkIsolationKey; class SSLCertRequestInfo; class SSLInfo; class URLRequest; @@ -130,30 +128,33 @@ namespace network { namespace mojom { +class NetworkContext; class NetworkService; -} +class TrustedURLLoaderHeaderClient; +} // namespace mojom struct ResourceRequest; } // namespace network namespace rappor { class RapporService; -} +} // namespace rappor namespace sandbox { class TargetPolicy; -} +} // namespace sandbox namespace ui { class SelectFilePolicy; -} +} // namespace ui namespace url { class Origin; -} +} // namespace url namespace storage { class FileSystemBackend; -} +struct QuotaSettings; +} // namespace storage namespace content { enum class PermissionType; @@ -171,7 +172,10 @@ class LoginDelegate; class MediaObserver; class NavigationHandle; +class NavigationThrottle; class NavigationUIData; +class OverlayWindow; +class PictureInPictureWindowController; class PlatformNotificationService; class QuotaPermissionContext; class ReceiverPresentationServiceDelegate; @@ -190,9 +194,13 @@ class VpnServiceProxy; class WebContents; class WebContentsViewDelegate; +struct GlobalFrameRoutingId; +struct GlobalRequestID; struct MainFunctionParams; +struct NavigationDownloadPolicy; struct OpenURLParams; struct Referrer; +struct SocketPermissionRequest; struct WebPreferences; // Embedder API (or SPI) for participating in browser logic, to be implemented @@ -736,7 +744,8 @@ virtual void GetQuotaSettings( content::BrowserContext* context, content::StoragePartition* partition, - storage::OptionalQuotaSettingsCallback callback); + base::OnceCallback<void(base::Optional<storage::QuotaSettings>)> + callback); // Allows the embedder to provide settings that determine if generated code // can be cached and the amount of disk space used for caching generated code. @@ -1552,7 +1561,7 @@ // decisions about whether to allow an external application to launch. virtual bool HandleExternalProtocol( const GURL& url, - WebContents::Getter web_contents_getter, + base::Callback<WebContents*(void)> web_contents_getter, int child_id, NavigationUIData* navigation_data, bool is_main_frame,
diff --git a/content/public/browser/download_manager_delegate.cc b/content/public/browser/download_manager_delegate.cc index 6969224d..7205bd34 100644 --- a/content/public/browser/download_manager_delegate.cc +++ b/content/public/browser/download_manager_delegate.cc
@@ -27,7 +27,7 @@ bool DownloadManagerDelegate::ShouldCompleteDownload( download::DownloadItem* item, - const base::Closure& callback) { + base::OnceClosure callback) { return true; }
diff --git a/content/public/browser/download_manager_delegate.h b/content/public/browser/download_manager_delegate.h index c2f4214b..3276f38 100644 --- a/content/public/browser/download_manager_delegate.h +++ b/content/public/browser/download_manager_delegate.h
@@ -114,7 +114,7 @@ // has been called or the function has returned true for a particular // download it should continue to return true for that download. virtual bool ShouldCompleteDownload(download::DownloadItem* item, - const base::Closure& complete_callback); + base::OnceClosure complete_callback); // Allows the delegate to override opening the download. If this function // returns false, the delegate needs to call callback when it's done
diff --git a/content/public/browser/favicon_status.cc b/content/public/browser/favicon_status.cc index 0a10179..91ed848c 100644 --- a/content/public/browser/favicon_status.cc +++ b/content/public/browser/favicon_status.cc
@@ -5,6 +5,7 @@ #include "content/public/browser/favicon_status.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/common/content_client.h" #include "ui/gfx/image/image_skia.h" namespace content {
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index e0a54735..42ddd152 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -458,10 +458,6 @@ "RunVideoCaptureServiceInBrowserProcess", base::FEATURE_DISABLED_BY_DEFAULT}; -// Save the scroll anchor and use it to restore scroll position. -const base::Feature kScrollAnchorSerialization{ - "ScrollAnchorSerialization", base::FEATURE_ENABLED_BY_DEFAULT}; - // Make sendBeacon throw for a Blob with a non simple type. const base::Feature kSendBeaconThrowForBlobWithNonSimpleType{ "SendBeaconThrowForBlobWithNonSimpleType",
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index b93806d9..fbbe644 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -101,7 +101,6 @@ CONTENT_EXPORT extern const base::Feature kResamplingInputEvents; CONTENT_EXPORT extern const base::Feature kRunVideoCaptureServiceInBrowserProcess; -CONTENT_EXPORT extern const base::Feature kScrollAnchorSerialization; CONTENT_EXPORT extern const base::Feature kSendBeaconThrowForBlobWithNonSimpleType; CONTENT_EXPORT extern const base::Feature kServiceWorkerLongRunningMessage;
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h index dada7d6..a5fe51a 100644 --- a/content/public/renderer/render_frame_observer.h +++ b/content/public/renderer/render_frame_observer.h
@@ -18,10 +18,10 @@ #include "ipc/ipc_sender.h" #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" #include "mojo/public/cpp/system/message_pipe.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/mojom/use_counter/css_property_id.mojom.h" #include "third_party/blink/public/mojom/web_client_hints/web_client_hints_types.mojom.h" #include "third_party/blink/public/mojom/web_feature/web_feature.mojom.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/public/platform/web_vector.h" #include "third_party/blink/public/web/web_local_frame_client.h" #include "third_party/blink/public/web/web_meaningful_layout.h" @@ -154,8 +154,7 @@ // Notification when the renderer uses a particular code path during a page // load. This is used for metrics collection. - virtual void DidObserveLoadingBehavior( - blink::WebLoadingBehaviorFlag behavior) {} + virtual void DidObserveLoadingBehavior(blink::LoadingBehaviorFlag behavior) {} // Notification when the renderer observes a new use counter usage during a // page load. This is used for UseCounter metrics.
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc index 6636881..135a130 100644 --- a/content/public/test/browser_test_base.cc +++ b/content/public/test/browser_test_base.cc
@@ -46,6 +46,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/common/main_function_params.h" #include "content/public/common/network_service_util.h"
diff --git a/content/public/test/download_test_observer.cc b/content/public/test/download_test_observer.cc index 83ffbf8..b7605bbe 100644 --- a/content/public/test/download_test_observer.cc +++ b/content/public/test/download_test_observer.cc
@@ -455,9 +455,9 @@ base::RunLoop::QuitCurrentWhenIdleDeprecated(); } -const download::DownloadUrlParameters::OnStartedCallback +download::DownloadUrlParameters::OnStartedCallback DownloadTestItemCreationObserver::callback() { - return base::Bind( + return base::BindOnce( &DownloadTestItemCreationObserver::DownloadItemCreationCallback, this); }
diff --git a/content/public/test/download_test_observer.h b/content/public/test/download_test_observer.h index c62c164..c1eb5672 100644 --- a/content/public/test/download_test_observer.h +++ b/content/public/test/download_test_observer.h
@@ -25,7 +25,7 @@ // TODO: Rewrite other observers to use this (or be replaced by it). class DownloadUpdatedObserver : public download::DownloadItem::Observer { public: - typedef base::Callback<bool(download::DownloadItem*)> EventFilter; + using EventFilter = base::RepeatingCallback<bool(download::DownloadItem*)>; // The filter passed may be called multiple times, even after it // returns true. @@ -286,7 +286,7 @@ interrupt_reason_ == download::DOWNLOAD_INTERRUPT_REASON_NONE; } - const download::DownloadUrlParameters::OnStartedCallback callback(); + download::DownloadUrlParameters::OnStartedCallback callback(); private: friend class base::RefCountedThreadSafe<DownloadTestItemCreationObserver>;
diff --git a/content/renderer/loader/child_url_loader_factory_bundle.cc b/content/renderer/loader/child_url_loader_factory_bundle.cc index 3e5a1e8d..69bf7a5 100644 --- a/content/renderer/loader/child_url_loader_factory_bundle.cc +++ b/content/renderer/loader/child_url_loader_factory_bundle.cc
@@ -337,12 +337,12 @@ mojo::PendingRemote<network::mojom::URLLoaderFactory> pending_default_factory; if (default_factory_) - pending_default_factory = default_factory_.PassInterface(); + pending_default_factory = default_factory_.Unbind(); mojo::PendingRemote<network::mojom::URLLoaderFactory> pending_appcache_factory; if (appcache_factory_) - pending_appcache_factory = appcache_factory_.PassInterface(); + pending_appcache_factory = appcache_factory_.Unbind(); network::mojom::URLLoaderFactoryPtrInfo direct_network_factory_info; if (direct_network_factory_) {
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 3aeccf9..09870291 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -5526,7 +5526,7 @@ } void RenderFrameImpl::DidObserveLoadingBehavior( - blink::WebLoadingBehaviorFlag behavior) { + blink::LoadingBehaviorFlag behavior) { for (auto& observer : observers_) observer.DidObserveLoadingBehavior(behavior); }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 070d50e..611d2d2 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -82,6 +82,7 @@ #include "third_party/blink/public/common/browser_interface_broker_proxy.h" #include "third_party/blink/public/common/feature_policy/feature_policy.h" #include "third_party/blink/public/common/frame/frame_owner_element_type.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/mojom/autoplay/autoplay.mojom.h" #include "third_party/blink/public/mojom/choosers/file_chooser.mojom.h" #include "third_party/blink/public/mojom/commit_result/commit_result.mojom.h" @@ -91,7 +92,6 @@ #include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h" #include "third_party/blink/public/mojom/use_counter/css_property_id.mojom.h" #include "third_party/blink/public/platform/web_focus_type.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/public/platform/web_media_player.h" #include "third_party/blink/public/web/web_ax_object.h" #include "third_party/blink/public/web/web_document_loader.h" @@ -798,8 +798,7 @@ void DidChangePerformanceTiming() override; void DidChangeCpuTiming(base::TimeDelta time) override; void DidChangeActiveSchedulerTrackedFeatures(uint64_t features_mask) override; - void DidObserveLoadingBehavior( - blink::WebLoadingBehaviorFlag behavior) override; + void DidObserveLoadingBehavior(blink::LoadingBehaviorFlag behavior) override; void DidObserveNewFeatureUsage(blink::mojom::WebFeature feature) override; void DidObserveNewCssPropertyUsage(blink::mojom::CSSSampleId css_property, bool is_animated) override;
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc index ff1c1cb..b2fb238e 100644 --- a/content/renderer/renderer_blink_platform_impl.cc +++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -558,13 +558,6 @@ return rtc_dependency_factory->GetWebRtcWorkerThread(); } -rtc::Thread* RendererBlinkPlatformImpl::GetWebRtcWorkerThreadRtcThread() { - auto* rtc_dependency_factory = - blink::PeerConnectionDependencyFactory::GetInstance(); - rtc_dependency_factory->EnsureInitialized(); - return rtc_dependency_factory->GetWebRtcWorkerThreadRtcThread(); -} - scoped_refptr<base::SingleThreadTaskRunner> RendererBlinkPlatformImpl::GetWebRtcSignalingTaskRunner() { auto* rtc_dependency_factory = @@ -592,26 +585,6 @@ //------------------------------------------------------------------------------ -std::unique_ptr<webrtc::RtpCapabilities> -RendererBlinkPlatformImpl::GetRtpSenderCapabilities( - const blink::WebString& kind) { - auto* pc_dependency_factory = - blink::PeerConnectionDependencyFactory::GetInstance(); - pc_dependency_factory->EnsureInitialized(); - return pc_dependency_factory->GetSenderCapabilities(kind.Utf8()); -} - -std::unique_ptr<webrtc::RtpCapabilities> -RendererBlinkPlatformImpl::GetRtpReceiverCapabilities( - const blink::WebString& kind) { - auto* pc_dependency_factory = - blink::PeerConnectionDependencyFactory::GetInstance(); - pc_dependency_factory->EnsureInitialized(); - return pc_dependency_factory->GetReceiverCapabilities(kind.Utf8()); -} - -//------------------------------------------------------------------------------ - base::Optional<double> RendererBlinkPlatformImpl::GetWebRtcMaxCaptureFrameRate() { const std::string max_fps_str =
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h index ced769c3..78b6a0d 100644 --- a/content/renderer/renderer_blink_platform_impl.h +++ b/content/renderer/renderer_blink_platform_impl.h
@@ -131,17 +131,12 @@ blink::WebRTCPeerConnectionHandlerClient* client, scoped_refptr<base::SingleThreadTaskRunner> task_runner) override; scoped_refptr<base::SingleThreadTaskRunner> GetWebRtcWorkerThread() override; - rtc::Thread* GetWebRtcWorkerThreadRtcThread() override; scoped_refptr<base::SingleThreadTaskRunner> GetWebRtcSignalingTaskRunner() override; std::unique_ptr<cricket::PortAllocator> CreateWebRtcPortAllocator( blink::WebLocalFrame* frame) override; std::unique_ptr<webrtc::AsyncResolverFactory> CreateWebRtcAsyncResolverFactory() override; - std::unique_ptr<webrtc::RtpCapabilities> GetRtpSenderCapabilities( - const blink::WebString& kind) override; - std::unique_ptr<webrtc::RtpCapabilities> GetRtpReceiverCapabilities( - const blink::WebString& kind) override; base::Optional<double> GetWebRtcMaxCaptureFrameRate() override; scoped_refptr<media::AudioRendererSink> NewAudioRendererSink( blink::WebAudioDeviceSourceType source_type,
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.cc b/content/renderer/service_worker/service_worker_subresource_loader.cc index a5a196f..e6f27e5 100644 --- a/content/renderer/service_worker/service_worker_subresource_loader.cc +++ b/content/renderer/service_worker/service_worker_subresource_loader.cc
@@ -7,6 +7,7 @@ #include "base/atomic_sequence_num.h" #include "base/bind.h" #include "base/callback.h" +#include "base/command_line.h" #include "base/feature_list.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" @@ -27,6 +28,7 @@ #include "net/url_request/redirect_util.h" #include "net/url_request/url_request.h" #include "services/network/public/cpp/features.h" +#include "services/network/public/cpp/network_switches.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "third_party/blink/public/common/blob/blob_utils.h" #include "third_party/blink/public/common/features.h" @@ -376,7 +378,8 @@ // preflight logic is implemented in Blink. So we return a "fallback required" // response to Blink. // TODO(falken): Remove this mechanism after OOB-CORS ships. - if (!network::features::ShouldEnableOutOfBlinkCors() && + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + network::switches::kEnableOutOfBlinkCors) && ((resource_request_.mode == network::mojom::RequestMode::kCors || resource_request_.mode == network::mojom::RequestMode::kCorsWithForcedPreflight) &&
diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h index 4d8d903..f1e2c35 100644 --- a/content/shell/browser/shell_content_browser_client.h +++ b/content/shell/browser/shell_content_browser_client.h
@@ -15,6 +15,7 @@ #include "content/public/browser/content_browser_client.h" #include "content/shell/browser/shell_speech_recognition_manager_delegate.h" #include "services/service_manager/public/cpp/binder_registry.h" +#include "storage/browser/quota/quota_settings.h" namespace content {
diff --git a/content/test/test_content_browser_client.h b/content/test/test_content_browser_client.h index 80accc3e..18df270 100644 --- a/content/test/test_content_browser_client.h +++ b/content/test/test_content_browser_client.h
@@ -12,6 +12,7 @@ #include "base/macros.h" #include "build/build_config.h" #include "content/public/browser/content_browser_client.h" +#include "storage/browser/quota/quota_settings.h" namespace content {
diff --git a/content/test/url_loader_interceptor_test.cc b/content/test/url_loader_interceptor_test.cc index 69c107b..fa0320ec 100644 --- a/content/test/url_loader_interceptor_test.cc +++ b/content/test/url_loader_interceptor_test.cc
@@ -11,6 +11,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" @@ -176,6 +177,10 @@ int32_t request_id, mojo::PendingReceiver<network::mojom::TrustedHeaderClient> receiver) override {} + void OnLoaderForCorsPreflightCreated( + const network::ResourceRequest& request, + mojo::PendingReceiver<network::mojom::TrustedHeaderClient> receiver) + override {} mojo::ReceiverSet<network::mojom::TrustedURLLoaderHeaderClient> receivers_; };
diff --git a/device/vr/orientation/orientation_session.cc b/device/vr/orientation/orientation_session.cc index a71ae75..994f4df 100644 --- a/device/vr/orientation/orientation_session.cc +++ b/device/vr/orientation/orientation_session.cc
@@ -52,7 +52,7 @@ } void VROrientationSession::SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo) { + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) { // Input eventing is not supported. This call should not // be made on this device. mojo::ReportBadMessage("Input eventing is not supported.");
diff --git a/device/vr/orientation/orientation_session.h b/device/vr/orientation/orientation_session.h index 9e52db1..d978a82 100644 --- a/device/vr/orientation/orientation_session.h +++ b/device/vr/orientation/orientation_session.h
@@ -13,7 +13,7 @@ #include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/vr_device.h" #include "device/vr/vr_export.h" -#include "mojo/public/cpp/bindings/associated_binding.h" +#include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "ui/display/display.h" @@ -39,7 +39,8 @@ mojom::XREnvironmentIntegrationProviderAssociatedRequest environment_provider) override; void SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo) override; + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) + override; // Accessible to tests. protected:
diff --git a/device/vr/public/mojom/vr_service.mojom b/device/vr/public/mojom/vr_service.mojom index 9edd6e04..ba7ef6fd 100644 --- a/device/vr/public/mojom/vr_service.mojom +++ b/device/vr/public/mojom/vr_service.mojom
@@ -604,7 +604,7 @@ GetEnvironmentIntegrationProvider( associated XREnvironmentIntegrationProvider& environment_provider); SetInputSourceButtonListener( - associated XRInputSourceButtonListener? event_listener); + pending_associated_remote<XRInputSourceButtonListener>? event_listener); }; // Provides the necessary functionality for sending frames to a headset.
diff --git a/device/vr/windows/compositor_base.cc b/device/vr/windows/compositor_base.cc index f8b77b6..4e0c66e8 100644 --- a/device/vr/windows/compositor_base.cc +++ b/device/vr/windows/compositor_base.cc
@@ -138,7 +138,7 @@ frame_data_receiver_.reset(); gamepad_provider_receiver_.reset(); overlay_receiver_.reset(); - input_event_listener_ = nullptr; + input_event_listener_.reset(); StopRuntime(); } @@ -381,10 +381,11 @@ } void XRCompositorCommon::SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo - input_listener_info) { + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener> + input_listener_remote) { DCHECK(UsesInputEventing()); - input_event_listener_.Bind(std::move(input_listener_info)); + input_event_listener_.reset(); + input_event_listener_.Bind(std::move(input_listener_remote)); } void XRCompositorCommon::GetControllerDataAndSendFrameData(
diff --git a/device/vr/windows/compositor_base.h b/device/vr/windows/compositor_base.h index 397d747c..9e5ebcb 100644 --- a/device/vr/windows/compositor_base.h +++ b/device/vr/windows/compositor_base.h
@@ -13,6 +13,8 @@ #include "device/vr/util/fps_meter.h" #include "device/vr/util/sliding_average.h" #include "device/vr/vr_device.h" +#include "mojo/public/cpp/bindings/associated_remote.h" +#include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -66,8 +68,8 @@ void GetFrameData(mojom::XRFrameDataRequestOptionsPtr options, XRFrameDataProvider::GetFrameDataCallback callback) final; void SetInputSourceButtonListener( - device::mojom::XRInputSourceButtonListenerAssociatedPtrInfo - input_listener_info) override; + mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener> + input_listener_remote) override; void GetControllerDataAndSendFrameData( XRFrameDataProvider::GetFrameDataCallback callback, mojom::XRFrameDataPtr frame_data); @@ -90,7 +92,8 @@ // Allow derived classes to call methods on the main thread. scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; - mojom::XRInputSourceButtonListenerAssociatedPtr input_event_listener_; + mojo::AssociatedRemote<mojom::XRInputSourceButtonListener> + input_event_listener_; private: // base::Thread overrides:
diff --git a/docs/speed/benchmark/OWNERS b/docs/speed/benchmark/OWNERS index 9a42e388..5b10219 100644 --- a/docs/speed/benchmark/OWNERS +++ b/docs/speed/benchmark/OWNERS
@@ -1 +1 @@ -# COMPONENT: Speed>Telemetry +# COMPONENT: Test>Telemetry
diff --git a/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.cc b/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.cc index e9fd317..bed921b 100644 --- a/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.cc +++ b/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.cc
@@ -8,7 +8,6 @@ #include "base/memory/ptr_util.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/api/display_source/display_source_connection_delegate_factory.h" -#include "mojo/public/cpp/bindings/strong_binding.h" namespace { const char kErrorCannotHaveMultipleSessions[] = @@ -33,17 +32,17 @@ } // static -void WiFiDisplaySessionServiceImpl::BindToRequest( +void WiFiDisplaySessionServiceImpl::BindToReceiver( content::BrowserContext* browser_context, - WiFiDisplaySessionServiceRequest request, + mojo::PendingReceiver<WiFiDisplaySessionService> receiver, content::RenderFrameHost* render_frame_host) { DisplaySourceConnectionDelegate* delegate = DisplaySourceConnectionDelegateFactory::GetForBrowserContext( browser_context); CHECK(delegate); auto* impl = new WiFiDisplaySessionServiceImpl(delegate); - impl->binding_ = - mojo::MakeStrongBinding(base::WrapUnique(impl), std::move(request)); + impl->receiver_ = + mojo::MakeSelfOwnedReceiver(base::WrapUnique(impl), std::move(receiver)); } void WiFiDisplaySessionServiceImpl::SetClient( @@ -200,7 +199,7 @@ void WiFiDisplaySessionServiceImpl::OnClientConnectionError() { DLOG(ERROR) << "IPC connection error"; - binding_->Close(); + receiver_->reset(); } } // namespace extensions
diff --git a/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.h b/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.h index 51f94f8a..3b32992 100644 --- a/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.h +++ b/extensions/browser/api/display_source/wifi_display/wifi_display_session_service_impl.h
@@ -8,10 +8,10 @@ #include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "extensions/browser/api/display_source/display_source_connection_delegate.h" #include "extensions/common/mojom/wifi_display_session_service.mojom.h" -#include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/public/cpp/bindings/pending_reciever.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" namespace content { class BrowserContext; @@ -27,9 +27,10 @@ public DisplaySourceConnectionDelegate::Observer { public: ~WiFiDisplaySessionServiceImpl() override; - static void BindToRequest(content::BrowserContext* browser_context, - mojom::WiFiDisplaySessionServiceRequest request, - content::RenderFrameHost* render_frame_host); + static void BindToReceiver( + content::BrowserContext* browser_context, + mojo::PendingReceiver<mojom::WiFiDisplaySessionService> receiver, + content::RenderFrameHost* render_frame_host); private: // WiFiDisplaySessionService overrides. @@ -67,7 +68,7 @@ // Id of the sink of the session this object is associated with. int sink_id_; - mojo::StrongBindingPtr<mojom::WiFiDisplaySessionService> binding_; + mojo::SelfOwnedReceiverRef<mojom::WiFiDisplaySessionService> receiver_; base::WeakPtrFactory<WiFiDisplaySessionServiceImpl> weak_factory_; DISALLOW_COPY_AND_ASSIGN(WiFiDisplaySessionServiceImpl);
diff --git a/extensions/browser/api/socket/socket_api.cc b/extensions/browser/api/socket/socket_api.cc index b61bc945..bd60769 100644 --- a/extensions/browser/api/socket/socket_api.cc +++ b/extensions/browser/api/socket/socket_api.cc
@@ -1140,7 +1140,7 @@ void SocketSecureFunction::TlsConnectDone( int result, - network::mojom::TLSClientSocketPtr tls_socket, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
diff --git a/extensions/browser/api/socket/socket_api.h b/extensions/browser/api/socket/socket_api.h index bd2b2f83..4c780f0f 100644 --- a/extensions/browser/api/socket/socket_api.h +++ b/extensions/browser/api/socket/socket_api.h
@@ -585,12 +585,13 @@ void AsyncWorkStart() override; private: - void TlsConnectDone(int result, - network::mojom::TLSClientSocketPtr tls_socket, - const net::IPEndPoint& local_addr, - const net::IPEndPoint& peer_addr, - mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, - mojo::ScopedDataPipeProducerHandle send_pipe_handle); + void TlsConnectDone( + int result, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, + const net::IPEndPoint& local_addr, + const net::IPEndPoint& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, + mojo::ScopedDataPipeProducerHandle send_pipe_handle); std::unique_ptr<api::socket::Secure::Params> params_;
diff --git a/extensions/browser/api/socket/tcp_socket.cc b/extensions/browser/api/socket/tcp_socket.cc index b65b51f8..b01331a 100644 --- a/extensions/browser/api/socket/tcp_socket.cc +++ b/extensions/browser/api/socket/tcp_socket.cc
@@ -482,7 +482,7 @@ void TCPSocket::OnUpgradeToTLSComplete( UpgradeToTLSCallback callback, - network::mojom::TLSClientSocketPtr tls_socket, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, int result, @@ -497,16 +497,16 @@ UpgradeToTLSCallback callback) { if (!client_socket_ || !mojo_data_pump_ || mojo_data_pump_->HasPendingRead() || mojo_data_pump_->HasPendingWrite()) { - std::move(callback).Run(net::ERR_FAILED, nullptr, net::IPEndPoint(), - net::IPEndPoint(), + std::move(callback).Run(net::ERR_FAILED, mojo::NullRemote(), + net::IPEndPoint(), net::IPEndPoint(), mojo::ScopedDataPipeConsumerHandle(), mojo::ScopedDataPipeProducerHandle()); return; } if (!local_addr_ || !peer_addr_) { DVLOG(1) << "Could not get local address or peer address."; - std::move(callback).Run(net::ERR_FAILED, nullptr, net::IPEndPoint(), - net::IPEndPoint(), + std::move(callback).Run(net::ERR_FAILED, mojo::NullRemote(), + net::IPEndPoint(), net::IPEndPoint(), mojo::ScopedDataPipeConsumerHandle(), mojo::ScopedDataPipeProducerHandle()); return; @@ -520,8 +520,8 @@ // host, using this hostname. if (host_info.family == url::CanonHostInfo::BROKEN) { DVLOG(1) << "Could not canonicalize hostname"; - std::move(callback).Run(net::ERR_FAILED, nullptr, net::IPEndPoint(), - net::IPEndPoint(), + std::move(callback).Run(net::ERR_FAILED, mojo::NullRemote(), + net::IPEndPoint(), net::IPEndPoint(), mojo::ScopedDataPipeConsumerHandle(), mojo::ScopedDataPipeProducerHandle()); return; @@ -551,15 +551,14 @@ if (has_version_max) mojo_socket_options->version_max = version_max; } - network::mojom::TLSClientSocketPtr tls_socket; - network::mojom::TLSClientSocketRequest tls_socket_request = - mojo::MakeRequest(&tls_socket); + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket; + auto tls_socket_receiver = tls_socket.InitWithNewPipeAndPassReceiver(); net::HostPortPair host_port_pair(canon_host, peer_addr_.value().port()); client_socket_->UpgradeToTLS( host_port_pair, std::move(mojo_socket_options), net::MutableNetworkTrafficAnnotationTag( Socket::GetNetworkTrafficAnnotationTag()), - std::move(tls_socket_request), mojo::NullRemote() /* observer */, + std::move(tls_socket_receiver), mojo::NullRemote() /* observer */, base::BindOnce(&TCPSocket::OnUpgradeToTLSComplete, base::Unretained(this), std::move(callback), std::move(tls_socket), local_addr_.value(), peer_addr_.value()));
diff --git a/extensions/browser/api/socket/tcp_socket.h b/extensions/browser/api/socket/tcp_socket.h index 1bd59ab..4f71a08 100644 --- a/extensions/browser/api/socket/tcp_socket.h +++ b/extensions/browser/api/socket/tcp_socket.h
@@ -34,13 +34,13 @@ class TCPSocket : public Socket { public: - using UpgradeToTLSCallback = - base::OnceCallback<void(int, - network::mojom::TLSClientSocketPtr, - const net::IPEndPoint&, - const net::IPEndPoint&, - mojo::ScopedDataPipeConsumerHandle, - mojo::ScopedDataPipeProducerHandle)>; + using UpgradeToTLSCallback = base::OnceCallback<void( + int, + mojo::PendingRemote<network::mojom::TLSClientSocket>, + const net::IPEndPoint&, + const net::IPEndPoint&, + mojo::ScopedDataPipeConsumerHandle, + mojo::ScopedDataPipeProducerHandle)>; // Constuctor for when |socket_mode_| is unknown. The |socket_mode_| will be // filled in when the consumer calls Listen/Connect. @@ -148,14 +148,15 @@ mojo::ScopedDataPipeProducerHandle send_stream); void OnWriteComplete(net::CompletionOnceCallback callback, int result); void OnReadComplete(int result, scoped_refptr<net::IOBuffer> io_buffer); - void OnUpgradeToTLSComplete(UpgradeToTLSCallback callback, - network::mojom::TLSClientSocketPtr tls_socket, - const net::IPEndPoint& local_addr, - const net::IPEndPoint& peer_addr, - int result, - mojo::ScopedDataPipeConsumerHandle receive_stream, - mojo::ScopedDataPipeProducerHandle send_stream, - const base::Optional<net::SSLInfo>& ssl_info); + void OnUpgradeToTLSComplete( + UpgradeToTLSCallback callback, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, + const net::IPEndPoint& local_addr, + const net::IPEndPoint& peer_addr, + int result, + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream, + const base::Optional<net::SSLInfo>& ssl_info); content::StoragePartition* GetStoragePartitionHelper();
diff --git a/extensions/browser/api/socket/tls_socket.cc b/extensions/browser/api/socket/tls_socket.cc index c89339d..5b68c4eb 100644 --- a/extensions/browser/api/socket/tls_socket.cc +++ b/extensions/browser/api/socket/tls_socket.cc
@@ -23,12 +23,13 @@ const char kTLSSocketTypeInvalidError[] = "Cannot listen on a socket that is already connected."; -TLSSocket::TLSSocket(network::mojom::TLSClientSocketPtr tls_socket, - const net::IPEndPoint& local_addr, - const net::IPEndPoint& peer_addr, - mojo::ScopedDataPipeConsumerHandle receive_stream, - mojo::ScopedDataPipeProducerHandle send_stream, - const std::string& owner_extension_id) +TLSSocket::TLSSocket( + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, + const net::IPEndPoint& local_addr, + const net::IPEndPoint& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream, + const std::string& owner_extension_id) : ResumableTCPSocket(nullptr, owner_extension_id), tls_socket_(std::move(tls_socket)), local_addr_(local_addr),
diff --git a/extensions/browser/api/socket/tls_socket.h b/extensions/browser/api/socket/tls_socket.h index 7d85f0d..f96d695ac 100644 --- a/extensions/browser/api/socket/tls_socket.h +++ b/extensions/browser/api/socket/tls_socket.h
@@ -14,6 +14,8 @@ #include "extensions/browser/api/socket/socket.h" #include "extensions/browser/api/socket/socket_api.h" #include "extensions/browser/api/socket/tcp_socket.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe.h" #include "services/network/public/mojom/tls_socket.mojom.h" @@ -33,7 +35,7 @@ // touch any socket state. class TLSSocket : public ResumableTCPSocket { public: - TLSSocket(network::mojom::TLSClientSocketPtr tls_socket, + TLSSocket(mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_stream, @@ -75,7 +77,7 @@ void OnWriteComplete(net::CompletionOnceCallback callback, int result); void OnReadComplete(int result, scoped_refptr<net::IOBuffer> io_buffer); - network::mojom::TLSClientSocketPtr tls_socket_; + mojo::Remote<network::mojom::TLSClientSocket> tls_socket_; base::Optional<net::IPEndPoint> local_addr_; base::Optional<net::IPEndPoint> peer_addr_; std::unique_ptr<MojoDataPump> mojo_data_pump_;
diff --git a/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc b/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc index 01fb97c..7359713 100644 --- a/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc +++ b/extensions/browser/api/sockets_tcp/sockets_tcp_api.cc
@@ -528,7 +528,6 @@ } } - network::mojom::TLSClientSocketPtr tls_socket; socket->UpgradeToTLS( &legacy_params, base::BindOnce(&SocketsTcpSecureFunction::TlsConnectDone, this)); @@ -536,7 +535,7 @@ void SocketsTcpSecureFunction::TlsConnectDone( int result, - network::mojom::TLSClientSocketPtr tls_socket, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, const net::IPEndPoint& local_addr, const net::IPEndPoint& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
diff --git a/extensions/browser/api/sockets_tcp/sockets_tcp_api.h b/extensions/browser/api/sockets_tcp/sockets_tcp_api.h index 16114c9..cec877f 100644 --- a/extensions/browser/api/sockets_tcp/sockets_tcp_api.h +++ b/extensions/browser/api/sockets_tcp/sockets_tcp_api.h
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "extensions/browser/api/socket/socket_api.h" #include "extensions/common/api/sockets_tcp.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/mojom/tcp_socket.mojom.h" namespace extensions { @@ -261,12 +262,13 @@ void AsyncWorkStart() override; private: - void TlsConnectDone(int result, - network::mojom::TLSClientSocketPtr tls_socket, - const net::IPEndPoint& local_addr, - const net::IPEndPoint& peer_addr, - mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, - mojo::ScopedDataPipeProducerHandle send_pipe_handle); + void TlsConnectDone( + int result, + mojo::PendingRemote<network::mojom::TLSClientSocket> tls_socket, + const net::IPEndPoint& local_addr, + const net::IPEndPoint& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, + mojo::ScopedDataPipeProducerHandle send_pipe_handle); bool paused_; bool persistent_;
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc index 09d2fc5b..b951eb7 100644 --- a/extensions/browser/api/web_request/web_request_api.cc +++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -2060,6 +2060,7 @@ namespace { helpers::EventResponseDelta CalculateDelta( + content::BrowserContext* browser_context, ExtensionWebRequestEventRouter::BlockedRequest* blocked_request, ExtensionWebRequestEventRouter::EventResponse* response, int extra_info_spec) { @@ -2072,8 +2073,9 @@ net::HttpRequestHeaders* old_headers = blocked_request->request_headers; net::HttpRequestHeaders* new_headers = response->request_headers.get(); return helpers::CalculateOnBeforeSendHeadersDelta( - response->extension_id, response->extension_install_time, - response->cancel, old_headers, new_headers, extra_info_spec); + browser_context, response->extension_id, + response->extension_install_time, response->cancel, old_headers, + new_headers, extra_info_spec); } case ExtensionWebRequestEventRouter::kOnHeadersReceived: { const net::HttpResponseHeaders* old_headers = @@ -2233,8 +2235,8 @@ CHECK_GE(num_handlers_blocking, 0); if (response) { - helpers::EventResponseDelta delta = - CalculateDelta(&blocked_request, response, extra_info_spec); + helpers::EventResponseDelta delta = CalculateDelta( + browser_context, &blocked_request, response, extra_info_spec); activity_monitor::OnWebRequestApiUsed( static_cast<content::BrowserContext*>(browser_context), extension_id, @@ -2600,8 +2602,8 @@ if (HasOptionalArgument(2)) { base::ListValue* value = NULL; EXTENSION_FUNCTION_VALIDATE(args_->GetList(2, &value)); - EXTENSION_FUNCTION_VALIDATE( - ExtraInfoSpec::InitFromValue(*value, &extra_info_spec)); + EXTENSION_FUNCTION_VALIDATE(ExtraInfoSpec::InitFromValue( + browser_context(), *value, &extra_info_spec)); } std::string event_name;
diff --git a/extensions/browser/api/web_request/web_request_api_helpers.cc b/extensions/browser/api/web_request/web_request_api_helpers.cc index 9f2c30d..a569037 100644 --- a/extensions/browser/api/web_request/web_request_api_helpers.cc +++ b/extensions/browser/api/web_request/web_request_api_helpers.cc
@@ -27,6 +27,7 @@ #include "base/time/time.h" #include "base/values.h" #include "components/web_cache/browser/web_cache_manager.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" @@ -37,7 +38,6 @@ #include "extensions/browser/extension_system.h" #include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/runtime_data.h" -#include "extensions/common/extension_features.h" #include "extensions/common/extension_messages.h" #include "net/cookies/cookie_util.h" #include "net/cookies/parsed_cookie.h" @@ -91,11 +91,12 @@ return false; } -std::set<std::string> GetExtraHeaderRequestHeaders() { +std::set<std::string> GetExtraHeaderRequestHeaders( + bool is_out_of_blink_cors_enabled) { std::set<std::string> headers( {"accept-encoding", "accept-language", "cookie", "referer"}); - if (network::features::ShouldEnableOutOfBlinkCors()) + if (is_out_of_blink_cors_enabled) headers.insert("origin"); return headers; @@ -367,12 +368,14 @@ IgnoredAction::IgnoredAction(IgnoredAction&& rhs) = default; -bool ExtraInfoSpec::InitFromValue(const base::ListValue& value, +bool ExtraInfoSpec::InitFromValue(content::BrowserContext* browser_context, + const base::ListValue& value, int* extra_info_spec) { - *extra_info_spec = base::FeatureList::IsEnabled( - extensions_features::kForceWebRequestExtraHeaders) - ? EXTRA_HEADERS - : 0; + *extra_info_spec = + extensions::ExtensionsBrowserClient::Get() + ->ShouldForceWebRequestExtraHeaders(browser_context) + ? EXTRA_HEADERS + : 0; for (size_t i = 0; i < value.GetSize(); ++i) { std::string str; if (!value.GetString(i, &str)) @@ -573,6 +576,7 @@ } EventResponseDelta CalculateOnBeforeSendHeadersDelta( + content::BrowserContext* browser_context, const std::string& extension_id, const base::Time& extension_install_time, bool cancel, @@ -589,8 +593,10 @@ { net::HttpRequestHeaders::Iterator i(*old_headers); while (i.GetNext()) { - if (ShouldHideRequestHeader(extra_info_spec, i.name())) + if (ShouldHideRequestHeader(browser_context, extra_info_spec, + i.name())) { continue; + } if (!new_headers->HasHeader(i.name())) { result.deleted_request_headers.push_back(i.name()); } @@ -601,8 +607,10 @@ { net::HttpRequestHeaders::Iterator i(*new_headers); while (i.GetNext()) { - if (ShouldHideRequestHeader(extra_info_spec, i.name())) + if (ShouldHideRequestHeader(browser_context, extra_info_spec, + i.name())) { continue; + } std::string value; if (!old_headers->GetHeader(i.name(), &value) || i.value() != value) { result.modified_request_headers.SetHeader(i.name(), i.value()); @@ -1501,12 +1509,21 @@ return header; } -bool ShouldHideRequestHeader(int extra_info_spec, const std::string& name) { - static const std::set<std::string> kRequestHeaders = - GetExtraHeaderRequestHeaders(); +bool ShouldHideRequestHeader(content::BrowserContext* browser_context, + int extra_info_spec, + const std::string& name) { + static const std::set<std::string> kRequestHeadersForOutOfBlinkCors = + GetExtraHeaderRequestHeaders(/*is_out_of_blink_cors_enabled=*/true); + static const std::set<std::string> kRequestHeadersForBlinkCors = + GetExtraHeaderRequestHeaders(/*is_out_of_blink_cors_enabled=*/false); + bool is_out_of_blink_cors_enabled = + browser_context && browser_context->ShouldEnableOutOfBlinkCors(); + const std::set<std::string>& request_headers = + is_out_of_blink_cors_enabled ? kRequestHeadersForOutOfBlinkCors + : kRequestHeadersForBlinkCors; return !(extra_info_spec & ExtraInfoSpec::EXTRA_HEADERS) && - kRequestHeaders.find(base::ToLowerASCII(name)) != - kRequestHeaders.end(); + request_headers.find(base::ToLowerASCII(name)) != + request_headers.end(); } bool ShouldHideResponseHeader(int extra_info_spec, const std::string& name) {
diff --git a/extensions/browser/api/web_request/web_request_api_helpers.h b/extensions/browser/api/web_request/web_request_api_helpers.h index cdada0d..aeb1e7a 100644 --- a/extensions/browser/api/web_request/web_request_api_helpers.h +++ b/extensions/browser/api/web_request/web_request_api_helpers.h
@@ -23,6 +23,7 @@ #include "net/base/auth.h" #include "net/http/http_request_headers.h" #include "net/http/http_response_headers.h" +#include "services/network/public/cpp/features.h" #include "url/gurl.h" namespace base { @@ -30,6 +31,10 @@ class DictionaryValue; } +namespace content { +class BrowserContext; +} + namespace extensions { class Extension; struct WebRequestInfo; @@ -187,7 +192,9 @@ EXTRA_HEADERS = 1 << 5, }; - static bool InitFromValue(const base::ListValue& value, int* extra_info_spec); + static bool InitFromValue(content::BrowserContext* browser_context, + const base::ListValue& value, + int* extra_info_spec); }; // Data container for RequestCookies as defined in the declarative WebRequest @@ -374,6 +381,7 @@ bool cancel, const GURL& new_url); EventResponseDelta CalculateOnBeforeSendHeadersDelta( + content::BrowserContext* browser_context, const std::string& extension_id, const base::Time& extension_install_time, bool cancel, @@ -480,7 +488,9 @@ const std::string& value); // Returns whether a request header should be hidden from listeners. -bool ShouldHideRequestHeader(int extra_info_spec, const std::string& name); +bool ShouldHideRequestHeader(content::BrowserContext* browser_context, + int extra_info_spec, + const std::string& name); // Returns whether a response header should be hidden from listeners. bool ShouldHideResponseHeader(int extra_info_spec, const std::string& name);
diff --git a/extensions/browser/api/web_request/web_request_event_details.cc b/extensions/browser/api/web_request/web_request_event_details.cc index 3518af0e..677b924 100644 --- a/extensions/browser/api/web_request/web_request_event_details.cc +++ b/extensions/browser/api/web_request/web_request_event_details.cc
@@ -10,8 +10,10 @@ #include "base/bind.h" #include "base/callback.h" #include "base/strings/string_number_conversions.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" #include "content/public/common/child_process_host.h" #include "extensions/browser/api/extensions_api_client.h" #include "extensions/browser/api/web_request/upload_data_presenter.h" @@ -144,10 +146,14 @@ result->SetKey(keys::kRequestBodyKey, request_body_->Clone()); } if ((extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS) && request_headers_) { + content::RenderProcessHost* process = + content::RenderProcessHost::FromID(render_process_id_); + content::BrowserContext* browser_context = + process ? process->GetBrowserContext() : nullptr; base::Value request_headers = request_headers_->Clone(); - EraseHeadersIf( - &request_headers, - base::BindRepeating(helpers::ShouldHideRequestHeader, extra_info_spec)); + EraseHeadersIf(&request_headers, + base::BindRepeating(helpers::ShouldHideRequestHeader, + browser_context, extra_info_spec)); result->SetKey(keys::kRequestHeadersKey, std::move(request_headers)); } if ((extra_info_spec & ExtraInfoSpec::RESPONSE_HEADERS) &&
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc index 160f862..d92d065 100644 --- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc +++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
@@ -13,6 +13,7 @@ #include "base/strings/stringprintf.h" #include "base/task/post_task.h" #include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/global_request_id.h" @@ -390,6 +391,7 @@ void WebRequestProxyingURLLoaderFactory::InProgressRequest::OnHeadersReceived( const std::string& headers, + const net::IPEndPoint& remote_endpoint, OnHeadersReceivedCallback callback) { if (!current_request_uses_header_client_) { std::move(callback).Run(net::OK, base::nullopt, GURL()); @@ -434,7 +436,7 @@ "Non-Authoritative-Reason: WebRequest API\n\n", kInternalRedirectStatusCode, redirect_url_.spec().c_str()); - if (network::features::ShouldEnableOutOfBlinkCors()) { + if (factory_->browser_context_->ShouldEnableOutOfBlinkCors()) { // Cross-origin requests need to modify the Origin header to 'null'. Since // CorsURLLoader sets |request_initiator| to the Origin request header in // NetworkService, we need to modify |request_initiator| here to craft the @@ -978,6 +980,12 @@ request_it->second->OnLoaderCreated(std::move(receiver)); } +void WebRequestProxyingURLLoaderFactory::OnLoaderForCorsPreflightCreated( + const network::ResourceRequest& request, + mojo::PendingReceiver<network::mojom::TrustedHeaderClient> receiver) { + // TODO(yhirano): Implement this. +} + void WebRequestProxyingURLLoaderFactory::HandleAuthRequest( const net::AuthChallengeInfo& auth_info, scoped_refptr<net::HttpResponseHeaders> response_headers,
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h index 0d62e501..79c6b0e 100644 --- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h +++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h
@@ -26,6 +26,7 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/resource_response.h" +#include "services/network/public/mojom/network_context.mojom.h" #include "services/network/public/mojom/url_loader.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" #include "url/gurl.h" @@ -93,6 +94,7 @@ void OnBeforeSendHeaders(const net::HttpRequestHeaders& headers, OnBeforeSendHeadersCallback callback) override; void OnHeadersReceived(const std::string& headers, + const net::IPEndPoint& endpoint, OnHeadersReceivedCallback callback) override; private: @@ -230,6 +232,10 @@ int32_t request_id, mojo::PendingReceiver<network::mojom::TrustedHeaderClient> receiver) override; + void OnLoaderForCorsPreflightCreated( + const network::ResourceRequest& request, + mojo::PendingReceiver<network::mojom::TrustedHeaderClient> receiver) + override; // WebRequestAPI::Proxy: void HandleAuthRequest(
diff --git a/extensions/browser/api/web_request/web_request_proxying_websocket.cc b/extensions/browser/api/web_request/web_request_proxying_websocket.cc index f9c6416e3..292b0ef 100644 --- a/extensions/browser/api/web_request/web_request_proxying_websocket.cc +++ b/extensions/browser/api/web_request/web_request_proxying_websocket.cc
@@ -256,6 +256,7 @@ void WebRequestProxyingWebSocket::OnHeadersReceived( const std::string& headers, + const net::IPEndPoint& endpoint, OnHeadersReceivedCallback callback) { DCHECK(receiver_as_header_client_.is_bound());
diff --git a/extensions/browser/api/web_request/web_request_proxying_websocket.h b/extensions/browser/api/web_request/web_request_proxying_websocket.h index 5b450b51..01298621 100644 --- a/extensions/browser/api/web_request/web_request_proxying_websocket.h +++ b/extensions/browser/api/web_request/web_request_proxying_websocket.h
@@ -78,6 +78,7 @@ void OnBeforeSendHeaders(const net::HttpRequestHeaders& headers, OnBeforeSendHeadersCallback callback) override; void OnHeadersReceived(const std::string& headers, + const net::IPEndPoint& endpoint, OnHeadersReceivedCallback callback) override; static void StartProxying(
diff --git a/extensions/browser/extensions_browser_client.cc b/extensions/browser/extensions_browser_client.cc index 9f1690e..f2a503e 100644 --- a/extensions/browser/extensions_browser_client.cc +++ b/extensions/browser/extensions_browser_client.cc
@@ -99,4 +99,9 @@ return false; } +bool ExtensionsBrowserClient::ShouldForceWebRequestExtraHeaders( + content::BrowserContext* context) const { + return false; +} + } // namespace extensions
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h index 206b160b..6d8ee7b8 100644 --- a/extensions/browser/extensions_browser_client.h +++ b/extensions/browser/extensions_browser_client.h
@@ -341,6 +341,11 @@ virtual bool ShouldSchemeBypassNavigationChecks( const std::string& scheme) const; + // Returns true when we should enforce 'extraHeaders' option for any + // webRequest API callbacks so to mitigate CORS related compatibility issues. + virtual bool ShouldForceWebRequestExtraHeaders( + content::BrowserContext* context) const; + private: std::vector<std::unique_ptr<ExtensionsBrowserAPIProvider>> providers_;
diff --git a/extensions/browser/mojo/interface_registration.cc b/extensions/browser/mojo/interface_registration.cc index 4207264..a342e60 100644 --- a/extensions/browser/mojo/interface_registration.cc +++ b/extensions/browser/mojo/interface_registration.cc
@@ -60,7 +60,7 @@ if (ExtensionHasPermission(extension, render_frame_host->GetProcess(), "displaySource")) { registry->AddInterface( - base::Bind(WiFiDisplaySessionServiceImpl::BindToRequest, + base::Bind(WiFiDisplaySessionServiceImpl::BindToReceiver, render_frame_host->GetProcess()->GetBrowserContext())); registry->AddInterface( base::Bind(WiFiDisplayMediaServiceImpl::BindToRequest));
diff --git a/extensions/common/extension_features.cc b/extensions/common/extension_features.cc index b0d53c7..3370c10 100644 --- a/extensions/common/extension_features.cc +++ b/extensions/common/extension_features.cc
@@ -6,12 +6,6 @@ namespace extensions_features { -// Forces to handle event listeners as it specifies the "extraHeaders" option. -// TODO(crbug.com/1000982, 1000984): Run a field trial, and convert to a -// short-term enterprise policy. -const base::Feature kForceWebRequestExtraHeaders{ - "ForceWebRequestExtraHeaders", base::FEATURE_DISABLED_BY_DEFAULT}; - // Forces requests to go through WebRequestProxyingURLLoaderFactory. const base::Feature kForceWebRequestProxyForTest{ "ForceWebRequestProxyForTest", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/extensions/common/extension_features.h b/extensions/common/extension_features.h index d77c99fc..fab080ee 100644 --- a/extensions/common/extension_features.h +++ b/extensions/common/extension_features.h
@@ -9,7 +9,6 @@ namespace extensions_features { -extern const base::Feature kForceWebRequestExtraHeaders; extern const base::Feature kForceWebRequestProxyForTest; } // namespace extensions_features
diff --git a/extensions/renderer/api/display_source/wifi_display/wifi_display_session.h b/extensions/renderer/api/display_source/wifi_display/wifi_display_session.h index 0acc735..00558ed2 100644 --- a/extensions/renderer/api/display_source/wifi_display/wifi_display_session.h +++ b/extensions/renderer/api/display_source/wifi_display/wifi_display_session.h
@@ -11,6 +11,7 @@ #include "extensions/common/mojom/wifi_display_session_service.mojom.h" #include "extensions/renderer/api/display_source/display_source_session.h" #include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "third_party/wds/src/libwds/public/source.h" namespace base { @@ -74,7 +75,7 @@ private: std::unique_ptr<wds::Source> wfd_source_; std::unique_ptr<WiFiDisplayMediaManager> media_manager_; - mojom::WiFiDisplaySessionServicePtr service_; + mojo::Remote<mojom::WiFiDisplaySessionService> service_; mojo::Receiver<WiFiDisplaySessionServiceClient> receiver_{this}; std::string local_ip_address_; std::map<int, std::unique_ptr<base::RepeatingTimer>> timers_;
diff --git a/extensions/shell/browser/DEPS b/extensions/shell/browser/DEPS index 3ed8497..4ae4429 100644 --- a/extensions/shell/browser/DEPS +++ b/extensions/shell/browser/DEPS
@@ -28,6 +28,7 @@ "+ppapi", "+services/network/session_cleanup_cookie_store.h", + "+services/network/public/mojom/cors_origin_pattern.mojom.h", "+services/network/public/mojom/url_loader.mojom.h", "+storage/browser/quota", "+third_party/skia/include",
diff --git a/extensions/shell/browser/shell_browser_context.cc b/extensions/shell/browser/shell_browser_context.cc index abeb37f..528705c1 100644 --- a/extensions/shell/browser/shell_browser_context.cc +++ b/extensions/shell/browser/shell_browser_context.cc
@@ -10,6 +10,7 @@ #include "base/task/post_task.h" #include "components/guest_view/browser/guest_view_manager.h" #include "extensions/shell/browser/shell_special_storage_policy.h" +#include "services/network/public/mojom/cors_origin_pattern.mojom.h" namespace extensions {
diff --git a/extensions/shell/browser/shell_content_browser_client.h b/extensions/shell/browser/shell_content_browser_client.h index 7b6ad5f..3e32471 100644 --- a/extensions/shell/browser/shell_content_browser_client.h +++ b/extensions/shell/browser/shell_content_browser_client.h
@@ -10,6 +10,8 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "content/public/browser/content_browser_client.h" +#include "content/public/browser/web_contents.h" +#include "storage/browser/quota/quota_settings.h" class GURL;
diff --git a/headless/lib/browser/headless_content_browser_client.cc b/headless/lib/browser/headless_content_browser_client.cc index 7fff957..5f726cc 100644 --- a/headless/lib/browser/headless_content_browser_client.cc +++ b/headless/lib/browser/headless_content_browser_client.cc
@@ -13,6 +13,7 @@ #include "base/command_line.h" #include "base/path_service.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "build/build_config.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h"
diff --git a/headless/lib/browser/headless_content_browser_client.h b/headless/lib/browser/headless_content_browser_client.h index 9a7ec3a1..7ef1063 100644 --- a/headless/lib/browser/headless_content_browser_client.h +++ b/headless/lib/browser/headless_content_browser_client.h
@@ -9,6 +9,7 @@ #include "content/public/browser/content_browser_client.h" #include "headless/public/headless_browser.h" +#include "storage/browser/quota/quota_settings.h" namespace headless {
diff --git a/headless/lib/browser/headless_request_context_manager.cc b/headless/lib/browser/headless_request_context_manager.cc index 3efed09..f6349e2 100644 --- a/headless/lib/browser/headless_request_context_manager.cc +++ b/headless/lib/browser/headless_request_context_manager.cc
@@ -15,6 +15,7 @@ #include "content/public/browser/resource_context.h" #include "headless/app/headless_shell_switches.h" #include "headless/lib/browser/headless_browser_context_options.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "net/http/http_auth_preferences.h" #include "services/network/network_service.h" #include "services/network/public/cpp/features.h" @@ -87,7 +88,7 @@ explicit HeadlessProxyConfigMonitor( scoped_refptr<base::SingleThreadTaskRunner> task_runner) - : task_runner_(task_runner), poller_binding_(this) { + : task_runner_(task_runner) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // We must create the proxy config service on the UI loop on Linux because // it must synchronously run on the glib message loop. @@ -115,8 +116,8 @@ DCHECK(!proxy_config_client_); network_context_params->proxy_config_client_receiver = proxy_config_client_.BindNewPipeAndPassReceiver(); - poller_binding_.Bind( - mojo::MakeRequest(&network_context_params->proxy_config_poller_client)); + poller_receiver_.Bind(network_context_params->proxy_config_poller_client + .InitWithNewPipeAndPassReceiver()); net::ProxyConfigWithAnnotation proxy_config; net::ProxyConfigService::ConfigAvailability availability = proxy_config_service_->GetLatestProxyConfig(&proxy_config); @@ -150,7 +151,8 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; std::unique_ptr<net::ProxyConfigService> proxy_config_service_; - mojo::Binding<::network::mojom::ProxyConfigPollerClient> poller_binding_; + mojo::Receiver<::network::mojom::ProxyConfigPollerClient> poller_receiver_{ + this}; mojo::Remote<::network::mojom::ProxyConfigClient> proxy_config_client_; DISALLOW_COPY_AND_ASSIGN(HeadlessProxyConfigMonitor);
diff --git a/infra/config/buckets/ci.star b/infra/config/buckets/ci.star index 729a010..7320e44 100644 --- a/infra/config/buckets/ci.star +++ b/infra/config/buckets/ci.star
@@ -377,6 +377,10 @@ ) android_fyi_builder( + name = 'Android WebView P OOR-CORS FYI (rel)', +) + +android_fyi_builder( name = 'android-marshmallow-x86-fyi-rel', )
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 61d1ba5..681e0ae 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -669,6 +669,26 @@ service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" > builders: < + name: "Android WebView P OOR-CORS FYI (rel)" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-16.04" + dimensions: "ssd:0" + recipe: < + name: "chromium" + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" + properties_j: "mastername:\"chromium.android.fyi\"" + > + execution_timeout_secs: 10800 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + > + builders: < name: "Android arm Builder (dbg)" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper"
diff --git a/infra/config/generated/luci-milo.cfg b/infra/config/generated/luci-milo.cfg index 391b47d..501fade4 100644 --- a/infra/config/generated/luci-milo.cfg +++ b/infra/config/generated/luci-milo.cfg
@@ -1554,6 +1554,11 @@ short_name: "p-rel" } builders { + name: "buildbucket/luci.chromium.ci/Android WebView P OOR-CORS FYI (rel)" + category: "webview" + short_name: "cors" + } + builders { name: "buildbucket/luci.chromium.ci/android-marshmallow-x86-fyi-rel" category: "emulator|M|x86" short_name: "rel"
diff --git a/infra/config/generated/luci-scheduler.cfg b/infra/config/generated/luci-scheduler.cfg index 7b4097a1..dc87013 100644 --- a/infra/config/generated/luci-scheduler.cfg +++ b/infra/config/generated/luci-scheduler.cfg
@@ -70,6 +70,7 @@ triggers: "Afl Upload Linux ASan" triggers: "Android ASAN (dbg)" triggers: "Android WebView P FYI (rel)" + triggers: "Android WebView P OOR-CORS FYI (rel)" triggers: "android-archive-dbg-goma-canary" triggers: "android-archive-dbg-goma-latest" triggers: "android-archive-dbg-goma-rbe-canary" @@ -704,6 +705,16 @@ } job { + id: "Android WebView P OOR-CORS FYI (rel)" + acl_sets: "default" + buildbucket: { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "Android WebView P OOR-CORS FYI (rel)" + } +} + +job { id: "Android x64 Builder (dbg)" acl_sets: "default" buildbucket: {
diff --git a/infra/config/luci-milo.cfg b/infra/config/luci-milo.cfg index 391b47d..501fade4 100644 --- a/infra/config/luci-milo.cfg +++ b/infra/config/luci-milo.cfg
@@ -1554,6 +1554,11 @@ short_name: "p-rel" } builders { + name: "buildbucket/luci.chromium.ci/Android WebView P OOR-CORS FYI (rel)" + category: "webview" + short_name: "cors" + } + builders { name: "buildbucket/luci.chromium.ci/android-marshmallow-x86-fyi-rel" category: "emulator|M|x86" short_name: "rel"
diff --git a/infra/config/luci-scheduler.cfg b/infra/config/luci-scheduler.cfg index 7b4097a1..dc87013 100644 --- a/infra/config/luci-scheduler.cfg +++ b/infra/config/luci-scheduler.cfg
@@ -70,6 +70,7 @@ triggers: "Afl Upload Linux ASan" triggers: "Android ASAN (dbg)" triggers: "Android WebView P FYI (rel)" + triggers: "Android WebView P OOR-CORS FYI (rel)" triggers: "android-archive-dbg-goma-canary" triggers: "android-archive-dbg-goma-latest" triggers: "android-archive-dbg-goma-rbe-canary" @@ -704,6 +705,16 @@ } job { + id: "Android WebView P OOR-CORS FYI (rel)" + acl_sets: "default" + buildbucket: { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "Android WebView P OOR-CORS FYI (rel)" + } +} + +job { id: "Android x64 Builder (dbg)" acl_sets: "default" buildbucket: {
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn index 4278e0a..22418d7 100644 --- a/ios/chrome/app/BUILD.gn +++ b/ios/chrome/app/BUILD.gn
@@ -278,8 +278,10 @@ "MediaPlayer.framework", ] - allow_circular_includes_from = - [ "//ios/chrome/app/application_delegate:application_delegate_internal" ] + allow_circular_includes_from = [ + "//ios/chrome/app/application_delegate:application_delegate_internal", + "//ios/chrome/browser/ui/main:scene", + ] } source_set("mode") {
diff --git a/ios/chrome/app/main_application_delegate.mm b/ios/chrome/app/main_application_delegate.mm index 86218a8..7daae5b 100644 --- a/ios/chrome/app/main_application_delegate.mm +++ b/ios/chrome/app/main_application_delegate.mm
@@ -92,14 +92,11 @@ } - (UIWindow*)window { - return [_mainController window]; + return self.sceneState.window; } - (void)setWindow:(UIWindow*)newWindow { - DCHECK(newWindow); - [_mainController setWindow:newWindow]; - // self.window has been set by this time. _appState window can now be set. - [_appState setWindow:newWindow]; + NOTREACHED() << "Should not be called, use [SceneState window] instead"; } #pragma mark - UIApplicationDelegate methods - @@ -113,9 +110,10 @@ - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { startup_loggers::RegisterAppDidFinishLaunchingTime(); - // Main window must be ChromeOverlayWindow or a subclass of it. - self.window = [[ChromeOverlayWindow alloc] - initWithFrame:[[UIScreen mainScreen] bounds]]; + + _mainController.window = self.window; + // self.window has been set by this time. _appState window can now be set. + _appState.window = self.window; BOOL inBackground = [application applicationState] == UIApplicationStateBackground;
diff --git a/ios/chrome/app/multitasking_test_application_delegate.mm b/ios/chrome/app/multitasking_test_application_delegate.mm index c8ecc60..684464e8 100644 --- a/ios/chrome/app/multitasking_test_application_delegate.mm +++ b/ios/chrome/app/multitasking_test_application_delegate.mm
@@ -38,16 +38,14 @@ - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { - // Configure application window size for multitasking tests. + BOOL returnValue = [super application:application + didFinishLaunchingWithOptions:launchOptions]; + // Adjust window size for multitasking tests. CGSize newWindowSize = [self windowSize]; - self.window = [[ChromeOverlayWindow alloc] - initWithFrame:CGRectMake(0, 0, newWindowSize.width, - newWindowSize.height)]; + self.window.frame = + CGRectMake(0, 0, newWindowSize.width, newWindowSize.height); - BOOL inBackground = - [application applicationState] == UIApplicationStateBackground; - return [[self appState] requiresHandlingAfterLaunchWithOptions:launchOptions - stateBackground:inBackground]; + return returnValue; } // Returns true if test is running on 12.9 inch iPad Pro. Otherwise, it's
diff --git a/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc b/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc index dd246bb9..c96f36a 100644 --- a/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc +++ b/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc
@@ -43,7 +43,7 @@ protected: // Returns the collection of default datatypes. std::vector<syncer::ModelType> DefaultDatatypes() { - static_assert(39 == syncer::ModelType::NUM_ENTRIES, + static_assert(41 == syncer::ModelType::NUM_ENTRIES, "When adding a new type, you probably want to add it here as " "well (assuming it is already enabled).");
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn index de15633..3bffff55 100644 --- a/ios/chrome/browser/ui/main/BUILD.gn +++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -21,6 +21,7 @@ "//ios/chrome/browser/tabs:tabs", "//ios/chrome/browser/ui/commands:commands", "//ios/chrome/browser/ui/tab_grid", + "//ios/chrome/browser/ui/util:multiwindow_util", ] libs = [ "UIKit.framework" ]
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm index 9430b5eb..ae24261c 100644 --- a/ios/chrome/browser/ui/main/scene_controller.mm +++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -4,6 +4,10 @@ #import "ios/chrome/browser/ui/main/scene_controller.h" +#import "base/logging.h" +#import "ios/chrome/app/chrome_overlay_window.h" +#import "ios/chrome/browser/ui/util/multi_window_support.h" + #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif @@ -15,6 +19,14 @@ if (self) { _sceneState = sceneState; [_sceneState addObserver:self]; + // The window is necessary very early in the app/scene lifecycle, so it + // should be created right away. + if (!self.sceneState.window) { + DCHECK(!IsMultiwindowSupported()) + << "The window must be created by the scene delegate"; + self.sceneState.window = [[ChromeOverlayWindow alloc] + initWithFrame:[[UIScreen mainScreen] bounds]]; + } } return self; }
diff --git a/ios/chrome/browser/ui/main/scene_delegate.mm b/ios/chrome/browser/ui/main/scene_delegate.mm index 76570750..bc829464 100644 --- a/ios/chrome/browser/ui/main/scene_delegate.mm +++ b/ios/chrome/browser/ui/main/scene_delegate.mm
@@ -4,6 +4,9 @@ #import "ios/chrome/browser/ui/main/scene_delegate.h" +#include "base/mac/foundation_util.h" +#import "ios/chrome/app/chrome_overlay_window.h" + #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif @@ -18,7 +21,18 @@ return _sceneState; } -#pragma mark - UISceneDelegate +#pragma mark - UIWindowSceneDelegate + +// This getter is called when the SceneDelegate is created. Returning a +// ChromeOverlayWindow allows UIKit to use that as the main window for this +// scene. +- (UIWindow*)window { + if (!_window) { + // Sizing of the window is handled by UIKit. + _window = [[ChromeOverlayWindow alloc] init]; + } + return _window; +} #pragma mark Connecting and Disconnecting the Scene @@ -26,6 +40,7 @@ willConnectToSession:(UISceneSession*)session options:(UISceneConnectionOptions*)connectionOptions API_AVAILABLE(ios(13)) { + self.sceneState.scene = base::mac::ObjCCastStrict<UIWindowScene>(scene); self.sceneState.activationLevel = SceneActivationLevelBackground; }
diff --git a/ios/chrome/browser/ui/main/scene_state.h b/ios/chrome/browser/ui/main/scene_state.h index d417eda..c72ffe2 100644 --- a/ios/chrome/browser/ui/main/scene_state.h +++ b/ios/chrome/browser/ui/main/scene_state.h
@@ -44,7 +44,9 @@ @property(nonatomic, assign) SceneActivationLevel activationLevel; // Window for the associated scene, if any. -@property(nonatomic, weak) UIWindow* window; +@property(nonatomic, strong) UIWindow* window; + +@property(nonatomic, strong) UIWindowScene* scene API_AVAILABLE(ios(13)); // Adds an observer to this scene state. The observers will be notified about // scene state changes per SceneStateObserver protocol.
diff --git a/ios/chrome/browser/ui/main/scene_state.mm b/ios/chrome/browser/ui/main/scene_state.mm index 286a76231..2eb709e 100644 --- a/ios/chrome/browser/ui/main/scene_state.mm +++ b/ios/chrome/browser/ui/main/scene_state.mm
@@ -5,6 +5,8 @@ #import "ios/chrome/browser/ui/main/scene_state.h" #import "base/ios/crb_protocol_observers.h" +#import "ios/chrome/app/chrome_overlay_window.h" +#import "ios/chrome/browser/ui/util/multi_window_support.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -26,6 +28,7 @@ @end @implementation SceneState +@synthesize window = _window; - (instancetype)init { self = [super init]; @@ -48,6 +51,30 @@ #pragma mark - Setters & Getters. +- (void)setWindow:(UIWindow*)window { + if (IsMultiwindowSupported()) { + // No need to set anything, instead the getter is backed by scene.windows + // property. + return; + } + _window = window; +} + +- (UIWindow*)window { + if (IsMultiwindowSupported()) { + UIWindow* mainWindow = nil; + if (@available(ios 13, *)) { + for (UIWindow* window in self.scene.windows) { + if ([window isKindOfClass:[ChromeOverlayWindow class]]) { + mainWindow = window; + } + } + } + return mainWindow; + } + return _window; +} + - (void)setActivationLevel:(SceneActivationLevel)newLevel { if (_activationLevel == newLevel) { return;
diff --git a/jingle/glue/network_service_async_socket.cc b/jingle/glue/network_service_async_socket.cc index e42e8e9..cd42e0c 100644 --- a/jingle/glue/network_service_async_socket.cc +++ b/jingle/glue/network_service_async_socket.cc
@@ -452,7 +452,7 @@ write_close_watcher_.reset(); socket_ = nullptr; - tls_socket_ = nullptr; + tls_socket_.reset(); socket_observer_receiver_.reset(); socket_factory_ = nullptr; @@ -495,7 +495,7 @@ socket_->UpgradeToTLS( net::HostPortPair(domain_name, 443), net::MutableNetworkTrafficAnnotationTag(traffic_annotation_), - mojo::MakeRequest(&tls_socket_), std::move(socket_observer), + tls_socket_.BindNewPipeAndPassReceiver(), std::move(socket_observer), base::BindOnce(&NetworkServiceAsyncSocket::ProcessSSLConnectDone, base::Unretained(this), std::move(socket_observer_receiver)));
diff --git a/jingle/glue/network_service_async_socket.h b/jingle/glue/network_service_async_socket.h index 3fc01aa..3652947 100644 --- a/jingle/glue/network_service_async_socket.h +++ b/jingle/glue/network_service_async_socket.h
@@ -20,6 +20,7 @@ #include "jingle/glue/network_service_config.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe.h" #include "mojo/public/cpp/system/simple_watcher.h" #include "net/base/host_port_pair.h" @@ -211,7 +212,7 @@ // exists. network::mojom::ProxyResolvingSocketPtr socket_; // TLS socket, if StartTls has been called. - network::mojom::TLSClientSocketPtr tls_socket_; + mojo::Remote<network::mojom::TLSClientSocket> tls_socket_; // Used to route error notifications here. mojo::Receiver<network::mojom::SocketObserver> socket_observer_receiver_{
diff --git a/jingle/glue/network_service_async_socket_unittest.cc b/jingle/glue/network_service_async_socket_unittest.cc index f9044df5..7a54836 100644 --- a/jingle/glue/network_service_async_socket_unittest.cc +++ b/jingle/glue/network_service_async_socket_unittest.cc
@@ -21,6 +21,7 @@ #include "base/strings/string_number_conversions.h" #include "base/test/task_environment.h" #include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe_utils.h" @@ -165,7 +166,7 @@ void UpgradeToTLS( const net::HostPortPair& host_port_pair, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - network::mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<network::mojom::TLSClientSocket> receiver, mojo::PendingRemote<network::mojom::SocketObserver> observer, network::mojom::ProxyResolvingSocket::UpgradeToTLSCallback callback) override {
diff --git a/net/base/network_delegate.cc b/net/base/network_delegate.cc index 6dc817f..cecc0fb 100644 --- a/net/base/network_delegate.cc +++ b/net/base/network_delegate.cc
@@ -60,6 +60,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) { TRACE_EVENT0(NetTracingCategory(), "NetworkDelegate::NotifyHeadersReceived"); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -67,7 +68,7 @@ DCHECK(!callback.is_null()); return OnHeadersReceived(request, std::move(callback), original_response_headers, override_response_headers, - allowed_unsafe_redirect_url); + endpoint, allowed_unsafe_redirect_url); } void NetworkDelegate::NotifyResponseStarted(URLRequest* request,
diff --git a/net/base/network_delegate.h b/net/base/network_delegate.h index 301c56f..fc35ecc4 100644 --- a/net/base/network_delegate.h +++ b/net/base/network_delegate.h
@@ -40,6 +40,7 @@ class CookieOptions; class HttpRequestHeaders; class HttpResponseHeaders; +class IPEndPoint; class ProxyInfo; class URLRequest; @@ -66,6 +67,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& remote_endpoint, GURL* allowed_unsafe_redirect_url); void NotifyBeforeRedirect(URLRequest* request, const GURL& new_location); @@ -184,6 +186,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& remote_endpoint, GURL* allowed_unsafe_redirect_url) = 0; // Called right after a redirect response code was received. |new_location| is
diff --git a/net/base/network_delegate_impl.cc b/net/base/network_delegate_impl.cc index 1a65fad..398fb5f 100644 --- a/net/base/network_delegate_impl.cc +++ b/net/base/network_delegate_impl.cc
@@ -32,6 +32,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) { return OK; }
diff --git a/net/base/network_delegate_impl.h b/net/base/network_delegate_impl.h index ed5192ab..857fb29e 100644 --- a/net/base/network_delegate_impl.h +++ b/net/base/network_delegate_impl.h
@@ -53,6 +53,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override; void OnBeforeRedirect(URLRequest* request, const GURL& new_location) override;
diff --git a/net/proxy_resolution/network_delegate_error_observer_unittest.cc b/net/proxy_resolution/network_delegate_error_observer_unittest.cc index 86c3720..50fb964 100644 --- a/net/proxy_resolution/network_delegate_error_observer_unittest.cc +++ b/net/proxy_resolution/network_delegate_error_observer_unittest.cc
@@ -44,6 +44,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const net::IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override { return OK; }
diff --git a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc index e3a074b..6882f78 100644 --- a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc +++ b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
@@ -155,6 +155,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const net::IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override { return OK; }
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc index 640a708..7825bf23 100644 --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc
@@ -88,6 +88,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override { return OK; }
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index eccaeff..1f133bb 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc
@@ -910,6 +910,9 @@ // |NetworkDelegate::URLRequestDestroyed()| has been called. OnCallToDelegate(NetLogEventType::NETWORK_DELEGATE_HEADERS_RECEIVED); allowed_unsafe_redirect_url_ = GURL(); + IPEndPoint endpoint; + if (transaction_) + transaction_->GetRemoteEndpoint(&endpoint); // The NetworkDelegate must watch for OnRequestDestroyed and not modify // any of the arguments after it's called. // TODO(mattm): change the API to remove the out-params and take the @@ -918,7 +921,7 @@ request_, base::BindOnce(&URLRequestHttpJob::OnHeadersReceivedCallback, weak_factory_.GetWeakPtr()), - headers.get(), &override_response_headers_, + headers.get(), &override_response_headers_, endpoint, &allowed_unsafe_redirect_url_); if (error != OK) { if (error == ERR_IO_PENDING) {
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 09cda16c..5170349 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc
@@ -459,6 +459,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) { int req_id = GetRequestId(request); bool is_first_response =
diff --git a/net/url_request/url_request_test_util.h b/net/url_request/url_request_test_util.h index 6dedc56..aaaf60bd1 100644 --- a/net/url_request/url_request_test_util.h +++ b/net/url_request/url_request_test_util.h
@@ -339,6 +339,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override; void OnBeforeRedirect(URLRequest* request, const GURL& new_location) override; void OnResponseStarted(URLRequest* request, int net_error) override;
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 29e365d..20add8e 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc
@@ -439,6 +439,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override; // Resets the callbacks and |stage_blocked_for_callback_|. @@ -544,12 +545,14 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) { // TestNetworkDelegate always completes synchronously. - CHECK_NE(ERR_IO_PENDING, - TestNetworkDelegate::OnHeadersReceived( - request, base::NullCallback(), original_response_headers, - override_response_headers, allowed_unsafe_redirect_url)); + CHECK_NE( + ERR_IO_PENDING, + TestNetworkDelegate::OnHeadersReceived( + request, base::NullCallback(), original_response_headers, + override_response_headers, endpoint, allowed_unsafe_redirect_url)); return MaybeBlockStage(ON_HEADERS_RECEIVED, std::move(callback)); } @@ -2917,6 +2920,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override; private: @@ -2930,6 +2934,7 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) { HttpResponseHeaders* new_response_headers = new HttpResponseHeaders(original_response_headers->raw_headers()); @@ -2940,7 +2945,7 @@ *override_response_headers = new_response_headers; return TestNetworkDelegate::OnHeadersReceived( request, std::move(callback), original_response_headers, - override_response_headers, allowed_unsafe_redirect_url); + override_response_headers, endpoint, allowed_unsafe_redirect_url); } // Test that cookie expiration times are adjusted for server/client clock @@ -4337,12 +4342,14 @@ CompletionOnceCallback callback, const HttpResponseHeaders* original_response_headers, scoped_refptr<HttpResponseHeaders>* override_response_headers, + const IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override { // TestNetworkDelegate always completes synchronously. - CHECK_NE(ERR_IO_PENDING, - TestNetworkDelegate::OnHeadersReceived( - request, base::NullCallback(), original_response_headers, - override_response_headers, allowed_unsafe_redirect_url)); + CHECK_NE( + ERR_IO_PENDING, + TestNetworkDelegate::OnHeadersReceived( + request, base::NullCallback(), original_response_headers, + override_response_headers, endpoint, allowed_unsafe_redirect_url)); return RunCallbackAsynchronously(request, std::move(callback)); }
diff --git a/services/network/cors/cors_url_loader_factory.cc b/services/network/cors/cors_url_loader_factory.cc index bda3d27c..1602b6d 100644 --- a/services/network/cors/cors_url_loader_factory.cc +++ b/services/network/cors/cors_url_loader_factory.cc
@@ -92,12 +92,12 @@ const ResourceRequest& resource_request, mojom::URLLoaderClientPtr client, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { - if (!IsSane(context_, resource_request)) { + if (!IsSane(context_, resource_request, options)) { client->OnComplete(URLLoaderCompletionStatus(net::ERR_INVALID_ARGUMENT)); return; } - if (features::ShouldEnableOutOfBlinkCors() && !disable_web_security_) { + if (context_->IsCorsEnabled() && !disable_web_security_) { auto loader = std::make_unique<CorsURLLoader>( std::move(request), routing_id, request_id, options, base::BindOnce(&CorsURLLoaderFactory::DestroyURLLoader, @@ -134,7 +134,8 @@ } bool CorsURLLoaderFactory::IsSane(const NetworkContext* context, - const ResourceRequest& request) { + const ResourceRequest& request, + uint32_t options) { // CORS needs a proper origin (including a unique opaque origin). If the // request doesn't have one, CORS cannot work. if (!request.request_initiator && !IsNavigationRequestMode(request.mode) && @@ -279,6 +280,14 @@ return false; } + // kURLLoadOptionAsCorsPreflight should be set only by the network service. + // Otherwise the network service will be confused. + if (options & mojom::kURLLoadOptionAsCorsPreflight) { + mojo::ReportBadMessage( + "CorsURLLoaderFactory: kURLLoadOptionAsCorsPreflight is set"); + return false; + } + // TODO(yhirano): If the request mode is "no-cors", the redirect mode should // be "follow". return true;
diff --git a/services/network/cors/cors_url_loader_factory.h b/services/network/cors/cors_url_loader_factory.h index d4bc5a4..2116a281 100644 --- a/services/network/cors/cors_url_loader_factory.h +++ b/services/network/cors/cors_url_loader_factory.h
@@ -70,7 +70,9 @@ void DeleteIfNeeded(); - bool IsSane(const NetworkContext* context, const ResourceRequest& request); + bool IsSane(const NetworkContext* context, + const ResourceRequest& request, + uint32_t options); mojo::ReceiverSet<mojom::URLLoaderFactory> receivers_;
diff --git a/services/network/cors/cors_url_loader_unittest.cc b/services/network/cors/cors_url_loader_unittest.cc index 42c402ec2..5e3c7d7 100644 --- a/services/network/cors/cors_url_loader_unittest.cc +++ b/services/network/cors/cors_url_loader_unittest.cc
@@ -164,6 +164,7 @@ context_params->initial_proxy_config = net::ProxyConfigWithAnnotation::CreateDirect(); context_params->cors_exempt_header_list.push_back(kTestCorsExemptHeader); + context_params->enable_cors = true; network_context_ = std::make_unique<NetworkContext>( network_service_.get(), network_context_remote_.BindNewPipeAndPassReceiver(),
diff --git a/services/network/cors/preflight_controller.cc b/services/network/cors/preflight_controller.cc index cd651a8..eb89fba0 100644 --- a/services/network/cors/preflight_controller.cc +++ b/services/network/cors/preflight_controller.cc
@@ -210,6 +210,8 @@ loader_->SetOnResponseStartedCallback(base::BindRepeating( &PreflightLoader::HandleResponseHeader, base::Unretained(this))); + // TODO(yhirano): Set kURLLoadOptionAsCorsPreflight. + // TODO(yhirano): Set kURLLoadOptionUseHeaderClient. loader_->DownloadToString( loader_factory, base::BindOnce(&PreflightLoader::HandleResponseBody,
diff --git a/services/network/host_resolver.cc b/services/network/host_resolver.cc index aaef3f2..86a8c91 100644 --- a/services/network/host_resolver.cc +++ b/services/network/host_resolver.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/lazy_instance.h" #include "base/optional.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "net/base/host_port_pair.h" #include "net/base/net_errors.h" #include "net/dns/host_resolver.h" @@ -89,12 +90,12 @@ internal_resolver_, host, ConvertOptionalParameters(optional_parameters), net_log_); - mojom::ResolveHostHandleRequest control_handle_request; + mojo::PendingReceiver<mojom::ResolveHostHandle> control_handle_receiver; if (optional_parameters) - control_handle_request = std::move(optional_parameters->control_handle); + control_handle_receiver = std::move(optional_parameters->control_handle); int rv = request->Start( - std::move(control_handle_request), std::move(response_client), + std::move(control_handle_receiver), std::move(response_client), base::BindOnce(&HostResolver::OnResolveHostComplete, base::Unretained(this), request.get())); if (rv != net::ERR_IO_PENDING)
diff --git a/services/network/host_resolver_unittest.cc b/services/network/host_resolver_unittest.cc index cc3acb79..85a5207 100644 --- a/services/network/host_resolver_unittest.cc +++ b/services/network/host_resolver_unittest.cc
@@ -193,10 +193,11 @@ HostResolver resolver(inner_resolver.get(), &net_log); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -222,10 +223,11 @@ HostResolver resolver(inner_resolver.get(), &net_log); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -236,7 +238,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); run_loop.Run(); EXPECT_EQ(net::OK, response_client.result_error()); @@ -668,10 +670,11 @@ HostResolver resolver(inner_resolver.get(), &net_log); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -694,10 +697,11 @@ HostResolver resolver(inner_resolver.get(), &net_log); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -708,7 +712,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); run_loop.Run(); EXPECT_EQ(net::ERR_NAME_NOT_RESOLVED, response_client.result_error()); @@ -778,10 +782,11 @@ HostResolver resolver(inner_resolver.get(), &net_log); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -790,7 +795,7 @@ resolver.ResolveHost(net::HostPortPair("localhost", 160), std::move(optional_parameters), std::move(pending_response_client)); - control_handle = nullptr; + control_handle.reset(); run_loop.Run(); EXPECT_EQ(net::OK, response_client.result_error()); @@ -812,10 +817,11 @@ ASSERT_EQ(0, inner_resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -825,7 +831,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); control_handle->Cancel(net::ERR_ABORTED); run_loop.Run(); @@ -847,10 +853,11 @@ HostResolver resolver(inner_resolver.get(), &net_log); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, nullptr); @@ -895,10 +902,11 @@ ASSERT_EQ(0, inner_resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -908,7 +916,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); resolver = nullptr; run_loop.Run(); @@ -932,10 +940,11 @@ ASSERT_EQ(0, inner_resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -945,7 +954,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); response_client.CloseReceiver(); run_loop.RunUntilIdle(); @@ -1013,10 +1022,11 @@ &net_log); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -1055,10 +1065,11 @@ ASSERT_EQ(0, inner_resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); resolver_remote->ResolveHost(net::HostPortPair("localhost", 160), @@ -1067,7 +1078,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); resolver_remote.reset(); run_loop.Run();
diff --git a/services/network/network_context.cc b/services/network/network_context.cc index d5ac13f..8489c08 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc
@@ -397,6 +397,9 @@ cors_exempt_header_list_.insert(key); origin_policy_manager_ = std::make_unique<OriginPolicyManager>(this); + + cors_enabled_ = + base::FeatureList::IsEnabled(network::features::kOutOfBlinkCors); } NetworkContext::~NetworkContext() { @@ -1206,6 +1209,15 @@ std::move(callback).Run(); } +void NetworkContext::SetCorsExtraSafelistedRequestHeaderNames( + const std::vector<std::string>& + cors_extra_safelisted_request_header_names) { + cors_preflight_controller_.set_extra_safelisted_header_names( + base::flat_set<std::string>( + cors_extra_safelisted_request_header_names.cbegin(), + cors_extra_safelisted_request_header_names.cend())); +} + void NetworkContext::AddHSTS(const std::string& host, base::Time expiry, bool include_subdomains, @@ -2164,6 +2176,7 @@ } for (const auto& key : params_->cors_exempt_header_list) cors_exempt_header_list_.insert(key); + cors_enabled_ = params_->enable_cors; } void NetworkContext::GetOriginPolicyManager(
diff --git a/services/network/network_context.h b/services/network/network_context.h index cebe6d9..0a45894 100644 --- a/services/network/network_context.h +++ b/services/network/network_context.h
@@ -316,6 +316,9 @@ std::vector<mojom::CorsOriginPatternPtr> allow_patterns, std::vector<mojom::CorsOriginPatternPtr> block_patterns, SetCorsOriginAccessListsForOriginCallback callback) override; + void SetCorsExtraSafelistedRequestHeaderNames( + const std::vector<std::string>& + cors_extra_safelisted_request_header_names) override; void EnableStaticKeyPinningForTesting( EnableStaticKeyPinningForTestingCallback callback) override; void SetFailingHttpTransactionForTesting( @@ -423,6 +426,8 @@ return domain_reliability_monitor_.get(); } + bool IsCorsEnabled() const { return cors_enabled_; } + private: URLRequestContextOwner MakeURLRequestContext(); @@ -612,6 +617,9 @@ // Manages CORS preflight requests and its cache. cors::PreflightController cors_preflight_controller_; + // Manages if OOR-CORS is enabled. + bool cors_enabled_ = false; + std::unique_ptr<NetworkQualitiesPrefDelegate> network_qualities_pref_delegate_;
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc index c7d482e..b69794a 100644 --- a/services/network/network_context_unittest.cc +++ b/services/network/network_context_unittest.cc
@@ -47,9 +47,6 @@ #include "components/network_session_configurator/common/network_switches.h" #include "components/prefs/testing_pref_service.h" #include "crypto/sha2.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "mojo/public/cpp/system/data_pipe_utils.h" #include "net/base/cache_type.h" @@ -2675,10 +2672,11 @@ resolver->set_synchronous_mode(true); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2704,10 +2702,11 @@ resolver->set_synchronous_mode(false); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2718,7 +2717,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); run_loop.Run(); EXPECT_EQ(net::OK, response_client.result_error()); @@ -2740,10 +2739,11 @@ resolver->set_synchronous_mode(true); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2768,10 +2768,11 @@ resolver->set_synchronous_mode(false); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2782,7 +2783,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); run_loop.Run(); EXPECT_EQ(net::ERR_NAME_NOT_RESOLVED, response_client.result_error()); @@ -2820,10 +2821,11 @@ CreateContextWithParams(CreateContextParams()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2832,7 +2834,7 @@ network_context->ResolveHost(net::HostPortPair("localhost", 160), std::move(optional_parameters), std::move(pending_response_client)); - control_handle = nullptr; + control_handle.reset(); run_loop.Run(); EXPECT_EQ(net::OK, response_client.result_error()); @@ -2855,10 +2857,11 @@ ASSERT_EQ(0, resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2868,7 +2871,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); control_handle->Cancel(net::ERR_ABORTED); run_loop.Run(); @@ -2894,10 +2897,11 @@ ASSERT_EQ(0, resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2907,7 +2911,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); network_context = nullptr; run_loop.Run(); @@ -2931,10 +2935,11 @@ ASSERT_EQ(0, resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -2944,7 +2949,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); response_client.CloseReceiver(); run_loop.RunUntilIdle(); @@ -3055,10 +3060,11 @@ ASSERT_EQ(0, internal_resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -3068,7 +3074,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); resolver.reset(); run_loop.Run(); @@ -3097,10 +3103,11 @@ ASSERT_EQ(0, internal_resolver->num_cancellations()); base::RunLoop run_loop; - mojom::ResolveHostHandlePtr control_handle; + mojo::Remote<mojom::ResolveHostHandle> control_handle; mojom::ResolveHostParametersPtr optional_parameters = mojom::ResolveHostParameters::New(); - optional_parameters->control_handle = mojo::MakeRequest(&control_handle); + optional_parameters->control_handle = + control_handle.BindNewPipeAndPassReceiver(); mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client; TestResolveHostClient response_client(&pending_response_client, &run_loop); @@ -3115,7 +3122,7 @@ bool control_handle_closed = false; auto connection_error_callback = base::BindLambdaForTesting([&]() { control_handle_closed = true; }); - control_handle.set_connection_error_handler(connection_error_callback); + control_handle.set_disconnect_handler(connection_error_callback); bool resolver_closed = false; auto resolver_closed_callback = base::BindLambdaForTesting([&]() { resolver_closed = true; }); @@ -4104,7 +4111,7 @@ std::string details; }; - TestProxyErrorClient() : binding_(this) {} + TestProxyErrorClient() = default; ~TestProxyErrorClient() override {} @@ -4125,14 +4132,13 @@ return on_pac_script_error_calls_; } - // Creates an InterfacePtrInfo, binds it to |*this| and returns it. - mojom::ProxyErrorClientPtrInfo CreateInterfacePtrInfo() { - mojom::ProxyErrorClientPtrInfo client_ptr_info; - - binding_.Bind(mojo::MakeRequest(&client_ptr_info)); - binding_.set_connection_error_handler(base::BindOnce( + // Creates an mojo::PendingRemote, binds it to |*this| and returns it. + mojo::PendingRemote<mojom::ProxyErrorClient> CreateRemote() { + mojo::PendingRemote<mojom::ProxyErrorClient> client_remote = + receiver_.BindNewPipeAndPassRemote(); + receiver_.set_disconnect_handler(base::BindOnce( &TestProxyErrorClient::OnMojoPipeError, base::Unretained(this))); - return client_ptr_info; + return client_remote; } // Runs until the message pipe is closed due to an error. @@ -4153,7 +4159,7 @@ std::move(quit_closure_for_on_mojo_pipe_error_).Run(); } - mojo::Binding<mojom::ProxyErrorClient> binding_; + mojo::Receiver<mojom::ProxyErrorClient> receiver_{this}; base::OnceClosure quit_closure_for_on_mojo_pipe_error_; bool has_received_mojo_pipe_error_ = false; @@ -4191,8 +4197,7 @@ TestProxyErrorClient proxy_error_client; mojom::NetworkContextParamsPtr context_params = mojom::NetworkContextParams::New(); - context_params->proxy_error_client = - proxy_error_client.CreateInterfacePtrInfo(); + context_params->proxy_error_client = proxy_error_client.CreateRemote(); net::ProxyConfig proxy_config; // Set the proxy to an unreachable address (host resolution fails). proxy_config.proxy_rules().ParseFromString("proxy.bad.dns"); @@ -4253,8 +4258,7 @@ // configuration. TestProxyErrorClient proxy_error_client; mojom::NetworkContextParamsPtr context_params = CreateContextParams(); - context_params->proxy_error_client = - proxy_error_client.CreateInterfacePtrInfo(); + context_params->proxy_error_client = proxy_error_client.CreateRemote(); std::unique_ptr<NetworkContext> network_context = CreateContextWithParams(std::move(context_params)); @@ -4373,8 +4377,7 @@ TestProxyErrorClient proxy_error_client; mojom::NetworkContextParamsPtr context_params = mojom::NetworkContextParams::New(); - context_params->proxy_error_client = - proxy_error_client.CreateInterfacePtrInfo(); + context_params->proxy_error_client = proxy_error_client.CreateRemote(); #if defined(OS_CHROMEOS) context_params->dhcp_wpad_url_client = @@ -4520,6 +4523,7 @@ } void OnHeadersReceived(const std::string& headers, + const net::IPEndPoint& endpoint, OnHeadersReceivedCallback callback) override { auto new_headers = base::MakeRefCounted<net::HttpResponseHeaders>(headers); @@ -4561,6 +4565,11 @@ override { header_client_.Bind(std::move(receiver)); } + void OnLoaderForCorsPreflightCreated( + const ResourceRequest& request, + mojo::PendingReceiver<mojom::TrustedHeaderClient> receiver) override { + header_client_.Bind(std::move(receiver)); + } void set_on_before_send_headers_result(int result) { header_client_.set_on_before_send_headers_result(result); @@ -4713,6 +4722,7 @@ } void OnHeadersReceived(const std::string& headers, + const net::IPEndPoint& endpoint, OnHeadersReceivedCallback callback) override { saved_received_headers_ = headers; saved_on_headers_received_callback_ = std::move(callback); @@ -4767,6 +4777,11 @@ override { header_client_.Bind(std::move(receiver)); } + void OnLoaderForCorsPreflightCreated( + const ResourceRequest& request, + mojo::PendingReceiver<mojom::TrustedHeaderClient> receiver) override { + header_client_.Bind(std::move(receiver)); + } void CallOnBeforeSendHeadersCallback() { header_client_.CallOnBeforeSendHeadersCallback(); @@ -4885,7 +4900,7 @@ // The reported error differs, but eventually URLLoader returns // net::ERR_ABORTED once OOR-CORS clean-up is finished. - if (features::ShouldEnableOutOfBlinkCors()) + if (features::ShouldEnableOutOfBlinkCorsForTesting()) EXPECT_EQ(client.completion_status().error_code, net::ERR_ABORTED); else EXPECT_EQ(client.completion_status().error_code, net::ERR_FAILED); @@ -4938,7 +4953,7 @@ // The reported error differs, but eventually URLLoader returns // net::ERR_ABORTED once OOR-CORS clean-up is finished. - if (features::ShouldEnableOutOfBlinkCors()) + if (features::ShouldEnableOutOfBlinkCorsForTesting()) EXPECT_EQ(client.completion_status().error_code, net::ERR_ABORTED); else EXPECT_EQ(client.completion_status().error_code, net::ERR_FAILED);
diff --git a/services/network/network_service_network_delegate.cc b/services/network/network_service_network_delegate.cc index bfa62eea..3293a27 100644 --- a/services/network/network_service_network_delegate.cc +++ b/services/network/network_service_network_delegate.cc
@@ -38,14 +38,14 @@ NetworkServiceNetworkDelegate::NetworkServiceNetworkDelegate( bool enable_referrers, bool validate_referrer_policy_on_initial_request, - mojom::ProxyErrorClientPtrInfo proxy_error_client_info, + mojo::PendingRemote<mojom::ProxyErrorClient> proxy_error_client_remote, NetworkContext* network_context) : enable_referrers_(enable_referrers), validate_referrer_policy_on_initial_request_( validate_referrer_policy_on_initial_request), network_context_(network_context) { - if (proxy_error_client_info) - proxy_error_client_.Bind(std::move(proxy_error_client_info)); + if (proxy_error_client_remote) + proxy_error_client_.Bind(std::move(proxy_error_client_remote)); } NetworkServiceNetworkDelegate::~NetworkServiceNetworkDelegate() = default; @@ -136,13 +136,14 @@ net::CompletionOnceCallback callback, const net::HttpResponseHeaders* original_response_headers, scoped_refptr<net::HttpResponseHeaders>* override_response_headers, + const net::IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) { auto chain = base::MakeRefCounted<PendingCallbackChain>(std::move(callback)); URLLoader* url_loader = URLLoader::ForRequest(*request); if (url_loader) { chain->AddResult(url_loader->OnHeadersReceived( chain->CreateCallback(), original_response_headers, - override_response_headers, allowed_unsafe_redirect_url)); + override_response_headers, endpoint, allowed_unsafe_redirect_url)); } #if !defined(OS_IOS)
diff --git a/services/network/network_service_network_delegate.h b/services/network/network_service_network_delegate.h index 8e70eb2..cf9ebb92 100644 --- a/services/network/network_service_network_delegate.h +++ b/services/network/network_service_network_delegate.h
@@ -7,6 +7,8 @@ #include "base/component_export.h" #include "base/macros.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/completion_once_callback.h" #include "net/base/network_delegate_impl.h" #include "services/network/network_context.h" @@ -22,7 +24,7 @@ NetworkServiceNetworkDelegate( bool enable_referrers, bool validate_referrer_policy_on_initial_request, - mojom::ProxyErrorClientPtrInfo proxy_error_client_info, + mojo::PendingRemote<mojom::ProxyErrorClient> proxy_error_client_remote, NetworkContext* network_context); ~NetworkServiceNetworkDelegate() override; @@ -47,6 +49,7 @@ net::CompletionOnceCallback callback, const net::HttpResponseHeaders* original_response_headers, scoped_refptr<net::HttpResponseHeaders>* override_response_headers, + const net::IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) override; void OnBeforeRedirect(net::URLRequest* request, const GURL& new_location) override; @@ -100,7 +103,7 @@ bool enable_referrers_; bool validate_referrer_policy_on_initial_request_; - mojom::ProxyErrorClientPtr proxy_error_client_; + mojo::Remote<mojom::ProxyErrorClient> proxy_error_client_; NetworkContext* network_context_; mutable base::WeakPtrFactory<NetworkServiceNetworkDelegate> weak_ptr_factory_{
diff --git a/services/network/proxy_config_service_mojo.cc b/services/network/proxy_config_service_mojo.cc index b2a281b..0a4ecfa2 100644 --- a/services/network/proxy_config_service_mojo.cc +++ b/services/network/proxy_config_service_mojo.cc
@@ -12,7 +12,7 @@ mojo::PendingReceiver<mojom::ProxyConfigClient> proxy_config_client_receiver, base::Optional<net::ProxyConfigWithAnnotation> initial_proxy_config, - mojom::ProxyConfigPollerClientPtrInfo proxy_poller_client) { + mojo::PendingRemote<mojom::ProxyConfigPollerClient> proxy_poller_client) { DCHECK(initial_proxy_config || proxy_config_client_receiver.is_valid()); if (initial_proxy_config) @@ -22,6 +22,11 @@ receiver_.Bind(std::move(proxy_config_client_receiver)); // Only use the |proxy_poller_client| if there's a // |proxy_config_client_receiver|. + if (!proxy_poller_client) { + // NullRemote() could be passed in unit tests. In that case, it can't be + // bound. + return; + } proxy_poller_client_.Bind(std::move(proxy_poller_client)); } }
diff --git a/services/network/proxy_config_service_mojo.h b/services/network/proxy_config_service_mojo.h index 55265287..d778a79 100644 --- a/services/network/proxy_config_service_mojo.h +++ b/services/network/proxy_config_service_mojo.h
@@ -10,7 +10,9 @@ #include "base/observer_list.h" #include "base/optional.h" #include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/proxy_resolution/proxy_config.h" #include "net/proxy_resolution/proxy_config_service.h" #include "net/proxy_resolution/proxy_config_with_annotation.h" @@ -39,7 +41,7 @@ mojo::PendingReceiver<mojom::ProxyConfigClient> proxy_config_client_receiver, base::Optional<net::ProxyConfigWithAnnotation> initial_proxy_config, - mojom::ProxyConfigPollerClientPtrInfo proxy_poller_client); + mojo::PendingRemote<mojom::ProxyConfigPollerClient> proxy_poller_client); ~ProxyConfigServiceMojo() override; // net::ProxyConfigService implementation: @@ -55,7 +57,7 @@ const net::ProxyConfigWithAnnotation& proxy_config) override; void FlushProxyConfig(FlushProxyConfigCallback callback) override; - mojom::ProxyConfigPollerClientPtr proxy_poller_client_; + mojo::Remote<mojom::ProxyConfigPollerClient> proxy_poller_client_; net::ProxyConfigWithAnnotation config_; bool config_pending_ = true;
diff --git a/services/network/proxy_config_service_mojo_unittest.cc b/services/network/proxy_config_service_mojo_unittest.cc index 6a9c56a..f17941dc 100644 --- a/services/network/proxy_config_service_mojo_unittest.cc +++ b/services/network/proxy_config_service_mojo_unittest.cc
@@ -6,7 +6,6 @@ #include "base/macros.h" #include "base/test/task_environment.h" -#include "mojo/public/cpp/bindings/remote.h" #include "net/proxy_resolution/proxy_config.h" #include "net/proxy_resolution/proxy_config_service.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" @@ -72,7 +71,7 @@ : task_environment_(base::test::TaskEnvironment::MainThreadType::IO), proxy_config_service_(config_client_.BindNewPipeAndPassReceiver(), base::Optional<net::ProxyConfigWithAnnotation>(), - nullptr), + mojo::NullRemote()), observer_(&proxy_config_service_) { proxy_config_service_.AddObserver(&observer_); }
diff --git a/services/network/proxy_resolving_socket_mojo.cc b/services/network/proxy_resolving_socket_mojo.cc index ecc8511..b5b1fe6 100644 --- a/services/network/proxy_resolving_socket_mojo.cc +++ b/services/network/proxy_resolving_socket_mojo.cc
@@ -53,20 +53,20 @@ void ProxyResolvingSocketMojo::UpgradeToTLS( const net::HostPortPair& host_port_pair, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, mojo::PendingRemote<mojom::SocketObserver> observer, mojom::ProxyResolvingSocket::UpgradeToTLSCallback callback) { // Wait for data pipes to be closed by the client before doing the upgrade. if (socket_data_pump_) { pending_upgrade_to_tls_callback_ = base::BindOnce( &ProxyResolvingSocketMojo::UpgradeToTLS, base::Unretained(this), - host_port_pair, traffic_annotation, std::move(request), + host_port_pair, traffic_annotation, std::move(receiver), std::move(observer), std::move(callback)); return; } tls_socket_factory_->UpgradeToTLS( this, host_port_pair, nullptr /* sockt_options */, traffic_annotation, - std::move(request), std::move(observer), + std::move(receiver), std::move(observer), base::BindOnce( [](mojom::ProxyResolvingSocket::UpgradeToTLSCallback callback, int32_t net_error,
diff --git a/services/network/proxy_resolving_socket_mojo.h b/services/network/proxy_resolving_socket_mojo.h index f5528be6..058df7c9 100644 --- a/services/network/proxy_resolving_socket_mojo.h +++ b/services/network/proxy_resolving_socket_mojo.h
@@ -10,6 +10,7 @@ #include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/traffic_annotation/network_traffic_annotation.h" @@ -41,7 +42,7 @@ void UpgradeToTLS( const net::HostPortPair& host_port_pair, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, mojo::PendingRemote<mojom::SocketObserver> observer, mojom::ProxyResolvingSocket::UpgradeToTLSCallback callback) override;
diff --git a/services/network/public/cpp/BUILD.gn b/services/network/public/cpp/BUILD.gn index d363bb9..f782138 100644 --- a/services/network/public/cpp/BUILD.gn +++ b/services/network/public/cpp/BUILD.gn
@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni") import("//mojo/public/tools/bindings/mojom.gni") import("//services/network/public/cpp/features.gni") +import("//testing/libfuzzer/fuzzer_test.gni") buildflag_header("buildflags") { header = "network_service_buildflags.h" @@ -242,3 +243,12 @@ ":buildflags", ] } + +fuzzer_test("cors_fuzzer") { + sources = [ + "cors/cors_fuzzer.cc", + ] + deps = [ + ":cpp", + ] +}
diff --git a/services/network/public/cpp/cors/cors_fuzzer.cc b/services/network/public/cpp/cors/cors_fuzzer.cc new file mode 100644 index 0000000..2d83e8e5 --- /dev/null +++ b/services/network/public/cpp/cors/cors_fuzzer.cc
@@ -0,0 +1,16 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "services/network/public/cpp/cors/cors.h" + +#include <string> + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + const std::string test_data(reinterpret_cast<const char*>(data), size); + network::cors::IsCorsSafelistedHeader("device-memory", test_data); + network::cors::IsCorsSafelistedHeader("width", test_data); + network::cors::IsCorsSafelistedHeader("content-type", test_data); + network::cors::IsCorsSafelistedHeader(test_data, test_data); + return 0; +}
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc index 45f2f98..83fd4aac 100644 --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc
@@ -154,7 +154,7 @@ const base::Feature kOutOfBlinkFrameAncestors{ "OutOfBlinkFrameAncestors", base::FEATURE_DISABLED_BY_DEFAULT}; -bool ShouldEnableOutOfBlinkCors() { +bool ShouldEnableOutOfBlinkCorsForTesting() { return base::FeatureList::IsEnabled(features::kOutOfBlinkCors); }
diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h index 0aaccb9..5dd6a28 100644 --- a/services/network/public/cpp/features.h +++ b/services/network/public/cpp/features.h
@@ -58,7 +58,8 @@ COMPONENT_EXPORT(NETWORK_CPP) extern const base::Feature kOutOfBlinkFrameAncestors; -COMPONENT_EXPORT(NETWORK_CPP) bool ShouldEnableOutOfBlinkCors(); +COMPONENT_EXPORT(NETWORK_CPP) +bool ShouldEnableOutOfBlinkCorsForTesting(); } // namespace features } // namespace network
diff --git a/services/network/public/cpp/network_switches.cc b/services/network/public/cpp/network_switches.cc index 019faf68..cedaeaaf 100644 --- a/services/network/public/cpp/network_switches.cc +++ b/services/network/public/cpp/network_switches.cc
@@ -70,6 +70,9 @@ const char kUnsafelyTreatInsecureOriginAsSecure[] = "unsafely-treat-insecure-origin-as-secure"; +// Enable OOR-CORS in child processes. +const char kEnableOutOfBlinkCors[] = "enable-oor-cors"; + } // namespace switches } // namespace network
diff --git a/services/network/public/cpp/network_switches.h b/services/network/public/cpp/network_switches.h index 6fa0b4d..9a90b17 100644 --- a/services/network/public/cpp/network_switches.h +++ b/services/network/public/cpp/network_switches.h
@@ -23,6 +23,7 @@ COMPONENT_EXPORT(NETWORK_CPP) extern const char kExplicitlyAllowedPorts[]; COMPONENT_EXPORT(NETWORK_CPP) extern const char kUnsafelyTreatInsecureOriginAsSecure[]; +COMPONENT_EXPORT(NETWORK_CPP) extern const char kEnableOutOfBlinkCors[]; } // namespace switches
diff --git a/services/network/public/mojom/host_resolver.mojom b/services/network/public/mojom/host_resolver.mojom index 7114773f..8038f83 100644 --- a/services/network/public/mojom/host_resolver.mojom +++ b/services/network/public/mojom/host_resolver.mojom
@@ -205,7 +205,7 @@ // If set, the outstanding request can be controlled, eg cancelled, via the // handle. - ResolveHostHandle&? control_handle; + pending_receiver<ResolveHostHandle>? control_handle; // If |true|, requests that the resolver include AddressList::canonical_name // in the results. If the resolver can do so without significant performance
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom index 712f621..086f4b9 100644 --- a/services/network/public/mojom/network_context.mojom +++ b/services/network/public/mojom/network_context.mojom
@@ -152,7 +152,7 @@ // Allows modifying response headers, including sensitive headers such as // set-cookie. This should only be used from a trusted process. - OnHeadersReceived(string headers) => + OnHeadersReceived(string headers, IPEndPoint remote_endpoint) => (int32 result, string? headers, url.mojom.Url allowed_unsafe_redirect_url); @@ -166,6 +166,12 @@ // corresponding |header_client|. OnLoaderCreated(int32 request_id, pending_receiver<TrustedHeaderClient> header_client); + + // When a new URLLoader is created for a CORS preflight request, this will + // be called to pass a corresponding |header_client|. + OnLoaderForCorsPreflightCreated( + URLRequest request, + pending_receiver<TrustedHeaderClient> header_client); }; // Parameters for constructing a network context. @@ -291,11 +297,11 @@ // TODO(mmenke): Can the consumer piggy back on other network events through // other channels (navigation, issuing requests, etc)? Or can // ProxyConfigServices be modified not to need this notification? - ProxyConfigPollerClient? proxy_config_poller_client; + pending_remote<ProxyConfigPollerClient>? proxy_config_poller_client; // Optional client that will be notified of errors related to the proxy // settings. - ProxyErrorClient? proxy_error_client; + pending_remote<ProxyErrorClient>? proxy_error_client; // When PAC quick checking is enabled, DNS lookups for PAC script's host are // timed out aggressively. This prevents hanging all network request on DNS @@ -413,6 +419,9 @@ // Extra CORS safelisted request headers names. array<string> cors_extra_safelisted_request_header_names; + // Specifies to enable OOR-CORS. + bool enable_cors = false; + // Points to a sqlite database containing persisted Reporting clients and NEL // policies. If Reporting and NEL persistence is disabled, then we'll ignore // this field. If this field is null then persistence will be disabled @@ -1143,6 +1152,10 @@ url.mojom.Origin source_origin, array<CorsOriginPattern> allow_patterns, array<CorsOriginPattern> block_patterns) => (); + // Sets extra CORS safelisted request headers names dynamically. + SetCorsExtraSafelistedRequestHeaderNames( + array<string> cors_extra_safelisted_request_header_names); + // Deletes any dynamic data stored for |host| from the transport // security state. Returns true iff an entry was deleted. // See net::TransportSecurityState::DeleteDynamicDataForHost for more detail.
diff --git a/services/network/public/mojom/proxy_resolving_socket.mojom b/services/network/public/mojom/proxy_resolving_socket.mojom index e8d8553..2e1fedb1 100644 --- a/services/network/public/mojom/proxy_resolving_socket.mojom +++ b/services/network/public/mojom/proxy_resolving_socket.mojom
@@ -29,7 +29,7 @@ // |result| is a network error code. UpgradeToTLS(HostPortPair host_port_pair, MutableNetworkTrafficAnnotationTag traffic_annotation, - TLSClientSocket& request, + pending_receiver<TLSClientSocket> receiver, pending_remote<SocketObserver>? observer) => (int32 net_error, handle<data_pipe_consumer>? receive_stream,
diff --git a/services/network/public/mojom/tcp_socket.mojom b/services/network/public/mojom/tcp_socket.mojom index b0d869fe..afbbe4d7 100644 --- a/services/network/public/mojom/tcp_socket.mojom +++ b/services/network/public/mojom/tcp_socket.mojom
@@ -77,7 +77,7 @@ UpgradeToTLS(HostPortPair host_port_pair, TLSClientSocketOptions? options, MutableNetworkTrafficAnnotationTag traffic_annotation, - TLSClientSocket& request, + pending_receiver<TLSClientSocket> receiver, pending_remote<SocketObserver>? observer) => (int32 net_error, handle<data_pipe_consumer>? receive_stream,
diff --git a/services/network/public/mojom/url_loader_factory.mojom b/services/network/public/mojom/url_loader_factory.mojom index 93b06594e..e804c620 100644 --- a/services/network/public/mojom/url_loader_factory.mojom +++ b/services/network/public/mojom/url_loader_factory.mojom
@@ -24,6 +24,10 @@ const uint32 kURLLoadOptionBlockAllCookies = 32; // Similar to |kURLLoadOptionBlockAllCookies|, but only for third party cookies. const uint32 kURLLoadOptionBlockThirdPartyCookies = 64; +// This request is for CORS preflight. This is used in the network service. +// This is set and used only in the network service, no callsites outside the +// service must set this. +const uint32 kURLLoadOptionAsCorsPreflight = 128; interface URLLoaderFactory { // Creates a URLLoader and starts loading with the given |request|. |client|'s
diff --git a/services/network/resolve_host_request.cc b/services/network/resolve_host_request.cc index 391e07f..5aecd5ad 100644 --- a/services/network/resolve_host_request.cc +++ b/services/network/resolve_host_request.cc
@@ -31,8 +31,7 @@ } ResolveHostRequest::~ResolveHostRequest() { - if (control_handle_binding_.is_bound()) - control_handle_binding_.Close(); + control_handle_receiver_.reset(); if (response_client_.is_bound()) { response_client_->OnComplete(net::ERR_FAILED, base::nullopt); @@ -41,11 +40,11 @@ } int ResolveHostRequest::Start( - mojom::ResolveHostHandleRequest control_handle_request, + mojo::PendingReceiver<mojom::ResolveHostHandle> control_handle_receiver, mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client, net::CompletionOnceCallback callback) { DCHECK(internal_request_); - DCHECK(!control_handle_binding_.is_bound()); + DCHECK(!control_handle_receiver_.is_bound()); DCHECK(!response_client_.is_bound()); // Unretained |this| reference is safe because if |internal_request_| goes out @@ -60,8 +59,8 @@ return rv; } - if (control_handle_request) - control_handle_binding_.Bind(std::move(control_handle_request)); + if (control_handle_receiver) + control_handle_receiver_.Bind(std::move(control_handle_receiver)); response_client_ = std::move(response_client); // Unretained |this| reference is safe because connection error cannot occur @@ -89,7 +88,7 @@ DCHECK(response_client_.is_bound()); DCHECK(callback_); - control_handle_binding_.Close(); + control_handle_receiver_.reset(); SignalNonAddressResults(); response_client_->OnComplete(error, GetAddressResults()); response_client_.reset();
diff --git a/services/network/resolve_host_request.h b/services/network/resolve_host_request.h index 4238cdf..bbb057e9 100644 --- a/services/network/resolve_host_request.h +++ b/services/network/resolve_host_request.h
@@ -9,8 +9,9 @@ #include "base/macros.h" #include "base/optional.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/base/completion_once_callback.h" #include "net/dns/host_resolver.h" @@ -37,7 +38,7 @@ ~ResolveHostRequest() override; int Start( - mojom::ResolveHostHandleRequest control_handle_request, + mojo::PendingReceiver<mojom::ResolveHostHandle> control_handle_request, mojo::PendingRemote<mojom::ResolveHostClient> pending_response_client, net::CompletionOnceCallback callback); @@ -51,7 +52,7 @@ std::unique_ptr<net::HostResolver::ResolveHostRequest> internal_request_; - mojo::Binding<mojom::ResolveHostHandle> control_handle_binding_{this}; + mojo::Receiver<mojom::ResolveHostHandle> control_handle_receiver_{this}; mojo::Remote<mojom::ResolveHostClient> response_client_; net::CompletionOnceCallback callback_; bool cancelled_ = false;
diff --git a/services/network/tcp_bound_socket_unittest.cc b/services/network/tcp_bound_socket_unittest.cc index 3d21c8c2..facd307d 100644 --- a/services/network/tcp_bound_socket_unittest.cc +++ b/services/network/tcp_bound_socket_unittest.cc
@@ -462,11 +462,12 @@ client_socket_send_handle.reset(); base::RunLoop run_loop; - mojom::TLSClientSocketPtr tls_client_socket; + mojo::Remote<mojom::TLSClientSocket> tls_client_socket; client_socket->UpgradeToTLS( test_server.host_port_pair(), nullptr /* options */, net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - mojo::MakeRequest(&tls_client_socket), mojo::NullRemote() /* observer */, + tls_client_socket.BindNewPipeAndPassReceiver(), + mojo::NullRemote() /* observer */, base::BindLambdaForTesting( [&](int net_error, mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
diff --git a/services/network/tcp_connected_socket.cc b/services/network/tcp_connected_socket.cc index 3af48a9..71919d4 100644 --- a/services/network/tcp_connected_socket.cc +++ b/services/network/tcp_connected_socket.cc
@@ -155,7 +155,7 @@ const net::HostPortPair& host_port_pair, mojom::TLSClientSocketOptionsPtr socket_options, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, mojo::PendingRemote<mojom::SocketObserver> observer, mojom::TCPConnectedSocket::UpgradeToTLSCallback callback) { if (!tls_socket_factory_) { @@ -169,12 +169,12 @@ pending_upgrade_to_tls_callback_ = base::BindOnce( &TCPConnectedSocket::UpgradeToTLS, base::Unretained(this), host_port_pair, std::move(socket_options), traffic_annotation, - std::move(request), std::move(observer), std::move(callback)); + std::move(receiver), std::move(observer), std::move(callback)); return; } tls_socket_factory_->UpgradeToTLS( this, host_port_pair, std::move(socket_options), traffic_annotation, - std::move(request), std::move(observer), std::move(callback)); + std::move(receiver), std::move(observer), std::move(callback)); } void TCPConnectedSocket::SetSendBufferSize(int send_buffer_size,
diff --git a/services/network/tcp_connected_socket.h b/services/network/tcp_connected_socket.h index 50a6c8c..97225d5d 100644 --- a/services/network/tcp_connected_socket.h +++ b/services/network/tcp_connected_socket.h
@@ -77,7 +77,7 @@ const net::HostPortPair& host_port_pair, mojom::TLSClientSocketOptionsPtr socket_options, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, mojo::PendingRemote<mojom::SocketObserver> observer, mojom::TCPConnectedSocket::UpgradeToTLSCallback callback) override; void SetSendBufferSize(int send_buffer_size,
diff --git a/services/network/tcp_socket_unittest.cc b/services/network/tcp_socket_unittest.cc index 78edc9e..f713216 100644 --- a/services/network/tcp_socket_unittest.cc +++ b/services/network/tcp_socket_unittest.cc
@@ -499,11 +499,12 @@ client_socket_send_handle.reset(); base::RunLoop run_loop; - mojom::TLSClientSocketPtr tls_client_socket; + mojo::Remote<mojom::TLSClientSocket> tls_client_socket; server.most_recent_connected_socket()->UpgradeToTLS( net::HostPortPair("foopy", 443), nullptr /* options */, net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - mojo::MakeRequest(&tls_client_socket), mojo::NullRemote() /* observer */, + tls_client_socket.BindNewPipeAndPassReceiver(), + mojo::NullRemote() /* observer */, base::BindLambdaForTesting( [&](int net_error, mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, @@ -1357,7 +1358,7 @@ // UpgradeToTLS will destroy network::TCPConnectedSocket::|socket_|. Calling // SetNoDelay and SetKeepAlive should error out. - mojom::TLSClientSocketPtr tls_socket; + mojo::Remote<mojom::TLSClientSocket> tls_socket; client_socket_receive_handle.reset(); client_socket_send_handle.reset(); { @@ -1366,7 +1367,8 @@ client_socket->UpgradeToTLS( host_port_pair, nullptr /* ssl_config_ptr */, net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - mojo::MakeRequest(&tls_socket), mojo::NullRemote() /*observer */, + tls_socket.BindNewPipeAndPassReceiver(), + mojo::NullRemote() /*observer */, base::BindLambdaForTesting( [&](int result, mojo::ScopedDataPipeConsumerHandle receive_pipe_handle,
diff --git a/services/network/test/test_network_context.h b/services/network/test/test_network_context.h index 0fe71e7..0c05d9a8 100644 --- a/services/network/test/test_network_context.h +++ b/services/network/test/test_network_context.h
@@ -186,6 +186,9 @@ std::vector<mojom::CorsOriginPatternPtr> allow_patterns, std::vector<mojom::CorsOriginPatternPtr> block_patterns, base::OnceClosure closure) override {} + void SetCorsExtraSafelistedRequestHeaderNames( + const std::vector<std::string>& + cors_extra_safelisted_request_header_names) override {} void AddHSTS(const std::string& host, base::Time expiry, bool include_subdomains,
diff --git a/services/network/tls_client_socket.cc b/services/network/tls_client_socket.cc index a12e3521..f41f2992 100644 --- a/services/network/tls_client_socket.cc +++ b/services/network/tls_client_socket.cc
@@ -19,7 +19,6 @@ namespace network { TLSClientSocket::TLSClientSocket( - mojom::TLSClientSocketRequest request, mojo::PendingRemote<mojom::SocketObserver> observer, const net::NetworkTrafficAnnotationTag& traffic_annotation) : observer_(std::move(observer)), traffic_annotation_(traffic_annotation) {}
diff --git a/services/network/tls_client_socket.h b/services/network/tls_client_socket.h index acf0df4..8a625fc 100644 --- a/services/network/tls_client_socket.h +++ b/services/network/tls_client_socket.h
@@ -9,6 +9,7 @@ #include "base/component_export.h" #include "base/macros.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/base/address_family.h" @@ -32,8 +33,7 @@ : public mojom::TLSClientSocket, public SocketDataPump::Delegate { public: - TLSClientSocket(mojom::TLSClientSocketRequest request, - mojo::PendingRemote<mojom::SocketObserver> observer, + TLSClientSocket(mojo::PendingRemote<mojom::SocketObserver> observer, const net::NetworkTrafficAnnotationTag& traffic_annotation); ~TLSClientSocket() override;
diff --git a/services/network/tls_client_socket_unittest.cc b/services/network/tls_client_socket_unittest.cc index d5d79718..512811e2 100644 --- a/services/network/tls_client_socket_unittest.cc +++ b/services/network/tls_client_socket_unittest.cc
@@ -192,28 +192,29 @@ void UpgradeToTLS(SocketHandle* handle, const net::HostPortPair& host_port_pair, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, net::CompletionOnceCallback callback) { if (mode_ == kDirect) { UpgradeTCPConnectedSocketToTLS(handle->tcp_socket.get(), host_port_pair, - nullptr /* options */, std::move(request), + nullptr /* options */, std::move(receiver), std::move(callback)); } else { UpgradeProxyResolvingSocketToTLS(handle->proxy_socket.get(), - host_port_pair, std::move(request), + host_port_pair, std::move(receiver), std::move(callback)); } } - void UpgradeTCPConnectedSocketToTLS(mojom::TCPConnectedSocket* client_socket, - const net::HostPortPair& host_port_pair, - mojom::TLSClientSocketOptionsPtr options, - mojom::TLSClientSocketRequest request, - net::CompletionOnceCallback callback) { + void UpgradeTCPConnectedSocketToTLS( + mojom::TCPConnectedSocket* client_socket, + const net::HostPortPair& host_port_pair, + mojom::TLSClientSocketOptionsPtr options, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, + net::CompletionOnceCallback callback) { client_socket->UpgradeToTLS( host_port_pair, std::move(options), net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - std::move(request), post_tls_observer()->GetObserverRemote(), + std::move(receiver), post_tls_observer()->GetObserverRemote(), base::BindOnce( [](net::CompletionOnceCallback cb, mojo::ScopedDataPipeConsumerHandle* consumer_handle_out, @@ -234,12 +235,12 @@ void UpgradeProxyResolvingSocketToTLS( mojom::ProxyResolvingSocket* client_socket, const net::HostPortPair& host_port_pair, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, net::CompletionOnceCallback callback) { client_socket->UpgradeToTLS( host_port_pair, net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - std::move(request), post_tls_observer()->GetObserverRemote(), + std::move(receiver), post_tls_observer()->GetObserverRemote(), base::BindOnce( [](net::CompletionOnceCallback cb, mojo::ScopedDataPipeConsumerHandle* consumer_handle, @@ -343,9 +344,9 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); ResetSocket(&client_socket); @@ -386,9 +387,9 @@ base::RunLoop().RunUntilIdle(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); ResetSocket(&client_socket); @@ -423,13 +424,13 @@ // First UpgradeToTLS should complete successfully. net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); // Second time UpgradeToTLS is called, it should fail. - mojom::TLSClientSocketPtr tls_socket2; + mojo::Remote<mojom::TLSClientSocket> tls_socket2; base::RunLoop run_loop; int net_error = net::ERR_FAILED; if (mode() == kDirect) { @@ -443,8 +444,8 @@ client_socket.tcp_socket->UpgradeToTLS( host_port_pair, nullptr /* ssl_config_ptr */, net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - mojo::MakeRequest(&tls_socket2), mojo::NullRemote() /*observer */, - std::move(upgrade2_callback)); + tls_socket2.BindNewPipeAndPassReceiver(), + mojo::NullRemote() /*observer */, std::move(upgrade2_callback)); } else { auto upgrade2_callback = base::BindLambdaForTesting( [&](int result, mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, @@ -455,8 +456,8 @@ client_socket.proxy_socket->UpgradeToTLS( host_port_pair, net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - mojo::MakeRequest(&tls_socket2), mojo::NullRemote() /*observer */, - std::move(upgrade2_callback)); + tls_socket2.BindNewPipeAndPassReceiver(), + mojo::NullRemote() /*observer */, std::move(upgrade2_callback)); } run_loop.Run(); ASSERT_EQ(net::ERR_SOCKET_NOT_CONNECTED, net_error); @@ -489,7 +490,7 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); - mojom::TLSClientSocketPtr tls_socket; + mojo::Remote<mojom::TLSClientSocket> tls_socket; base::RunLoop run_loop; mojom::TLSClientSocketOptionsPtr options = mojom::TLSClientSocketOptions::New(); @@ -506,7 +507,7 @@ client_socket.tcp_socket->UpgradeToTLS( host_port_pair, std::move(options), net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), - mojo::MakeRequest(&tls_socket), mojo::NullRemote() /*observer */, + tls_socket.BindNewPipeAndPassReceiver(), mojo::NullRemote() /*observer */, std::move(upgrade_callback)); run_loop.Run(); ASSERT_EQ(net::OK, net_error); @@ -549,9 +550,9 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); ResetSocket(&client_socket); @@ -589,9 +590,9 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); ResetSocket(&client_socket); @@ -630,9 +631,9 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); ResetSocket(&client_socket); @@ -672,9 +673,9 @@ net::HostPortPair host_port_pair("example.org", 443); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); base::RunLoop().RunUntilIdle(); EXPECT_EQ(kMsg, Read(pre_tls_recv_handle(), kMsgSize)); @@ -718,9 +719,9 @@ net::HostPortPair host_port_pair("example.org", 443); pre_tls_recv_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); base::RunLoop().RunUntilIdle(); uint32_t num_bytes = strlen(kMsg); @@ -767,9 +768,9 @@ net::HostPortPair host_port_pair("example.org", 443); base::RunLoop run_loop; net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); EXPECT_EQ(kMsg, Read(pre_tls_recv_handle(), kMsgSize)); uint32_t num_bytes = strlen(kMsg); EXPECT_EQ(MOJO_RESULT_OK, pre_tls_send_handle()->get().WriteData( @@ -813,9 +814,9 @@ net::HostPortPair host_port_pair("example.org", 443); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); EXPECT_EQ(kMsg, Read(pre_tls_recv_handle(), kMsgSize)); EXPECT_EQ(net::ERR_CONNECTION_CLOSED, pre_tls_observer()->WaitForReadError()); @@ -852,9 +853,9 @@ net::HostPortPair host_port_pair("example.org", 443); pre_tls_recv_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); uint32_t num_bytes = strlen(kMsg); EXPECT_EQ(MOJO_RESULT_OK, pre_tls_send_handle()->get().WriteData( &kMsg, &num_bytes, MOJO_WRITE_DATA_FLAG_NONE)); @@ -922,9 +923,9 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; - UpgradeToTLS(&client_socket, host_port_pair, mojo::MakeRequest(&tls_socket), - callback.callback()); + mojo::Remote<mojom::TLSClientSocket> tls_socket; + UpgradeToTLS(&client_socket, host_port_pair, + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); ResetSocket(&client_socket); @@ -991,10 +992,10 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; + mojo::Remote<mojom::TLSClientSocket> tls_socket; UpgradeTCPConnectedSocketToTLS( client_socket.get(), host_port_pair, nullptr /* options */, - mojo::MakeRequest(&tls_socket), callback.callback()); + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); client_socket.reset(); EXPECT_FALSE(ssl_info()); @@ -1042,13 +1043,13 @@ pre_tls_recv_handle()->reset(); pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; - mojom::TLSClientSocketPtr tls_socket; + mojo::Remote<mojom::TLSClientSocket> tls_socket; mojom::TLSClientSocketOptionsPtr options = mojom::TLSClientSocketOptions::New(); options->send_ssl_info = true; UpgradeTCPConnectedSocketToTLS( client_socket.get(), host_port_pair, std::move(options), - mojo::MakeRequest(&tls_socket), callback.callback()); + tls_socket.BindNewPipeAndPassReceiver(), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); ASSERT_TRUE(ssl_info()); EXPECT_TRUE(ssl_socket.ssl_info.is_issued_by_known_root); @@ -1097,7 +1098,7 @@ pre_tls_send_handle()->reset(); net::TestCompletionCallback callback; UpgradeToTLS(&client_socket, server_.host_port_pair(), - mojo::MakeRequest(&tls_socket_), callback.callback()); + tls_socket_.BindNewPipeAndPassReceiver(), callback.callback()); int result = callback.WaitForResult(); ResetSocket(&client_socket); return result; @@ -1120,7 +1121,7 @@ net::TestCompletionCallback callback; UpgradeTCPConnectedSocketToTLS( tcp_socket.get(), server_.host_port_pair(), std::move(options), - mojo::MakeRequest(&tls_socket_), callback.callback()); + tls_socket_.BindNewPipeAndPassReceiver(), callback.callback()); int result = callback.WaitForResult(); tcp_socket.reset(); return result; @@ -1142,7 +1143,7 @@ private: net::EmbeddedTestServer server_; - mojom::TLSClientSocketPtr tls_socket_; + mojo::Remote<mojom::TLSClientSocket> tls_socket_; DISALLOW_COPY_AND_ASSIGN(TLSClientSocketTestWithEmbeddedTestServerBase); };
diff --git a/services/network/tls_socket_factory.cc b/services/network/tls_socket_factory.cc index 57b36e5b..a5b51ff 100644 --- a/services/network/tls_socket_factory.cc +++ b/services/network/tls_socket_factory.cc
@@ -75,7 +75,7 @@ const net::HostPortPair& host_port_pair, mojom::TLSClientSocketOptionsPtr socket_options, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, mojo::PendingRemote<mojom::SocketObserver> observer, UpgradeToTLSCallback callback) { const net::StreamSocket* socket = socket_delegate->BorrowSocket(); @@ -86,7 +86,7 @@ return; } CreateTLSClientSocket( - host_port_pair, std::move(socket_options), std::move(request), + host_port_pair, std::move(socket_options), std::move(receiver), socket_delegate->TakeSocket(), std::move(observer), static_cast<net::NetworkTrafficAnnotationTag>(traffic_annotation), std::move(callback)); @@ -95,16 +95,16 @@ void TLSSocketFactory::CreateTLSClientSocket( const net::HostPortPair& host_port_pair, mojom::TLSClientSocketOptionsPtr socket_options, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, std::unique_ptr<net::StreamSocket> underlying_socket, mojo::PendingRemote<mojom::SocketObserver> observer, const net::NetworkTrafficAnnotationTag& traffic_annotation, mojom::TCPConnectedSocket::UpgradeToTLSCallback callback) { auto socket = std::make_unique<TLSClientSocket>( - std::move(request), std::move(observer), + std::move(observer), static_cast<net::NetworkTrafficAnnotationTag>(traffic_annotation)); TLSClientSocket* socket_raw = socket.get(); - tls_socket_bindings_.AddBinding(std::move(socket), std::move(request)); + tls_socket_receivers_.Add(std::move(socket), std::move(receiver)); net::SSLClientContext* ssl_client_context = &ssl_client_context_;
diff --git a/services/network/tls_socket_factory.h b/services/network/tls_socket_factory.h index 8bd00dd..ec96c719 100644 --- a/services/network/tls_socket_factory.h +++ b/services/network/tls_socket_factory.h
@@ -10,8 +10,9 @@ #include "base/component_export.h" #include "base/macros.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/strong_binding_set.h" +#include "mojo/public/cpp/bindings/unique_receiver_set.h" #include "net/http/http_network_session.h" #include "net/socket/ssl_client_socket.h" #include "net/traffic_annotation/network_traffic_annotation.h" @@ -61,7 +62,7 @@ const net::HostPortPair& host_port_pair, mojom::TLSClientSocketOptionsPtr socket_options, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, mojo::PendingRemote<mojom::SocketObserver> observer, UpgradeToTLSCallback callback); @@ -69,7 +70,7 @@ void CreateTLSClientSocket( const net::HostPortPair& host_port_pair, mojom::TLSClientSocketOptionsPtr socket_options, - mojom::TLSClientSocketRequest request, + mojo::PendingReceiver<mojom::TLSClientSocket> receiver, std::unique_ptr<net::StreamSocket> underlying_socket, mojo::PendingRemote<mojom::SocketObserver> observer, const net::NetworkTrafficAnnotationTag& traffic_annotation, @@ -87,7 +88,7 @@ net::SSLClientContext ssl_client_context_; net::ClientSocketFactory* client_socket_factory_; net::SSLConfigService* const ssl_config_service_; - mojo::StrongBindingSet<mojom::TLSClientSocket> tls_socket_bindings_; + mojo::UniqueReceiverSet<mojom::TLSClientSocket> tls_socket_receivers_; DISALLOW_COPY_AND_ASSIGN(TLSSocketFactory); };
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc index bba7906..f02d359 100644 --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc
@@ -378,8 +378,13 @@ DCHECK(factory_params_); if (url_loader_header_client && (options_ & mojom::kURLLoadOptionUseHeaderClient)) { - url_loader_header_client->OnLoaderCreated( - request_id_, header_client_.BindNewPipeAndPassReceiver()); + if (options_ & mojom::kURLLoadOptionAsCorsPreflight) { + url_loader_header_client->OnLoaderForCorsPreflightCreated( + request, header_client_.BindNewPipeAndPassReceiver()); + } else { + url_loader_header_client->OnLoaderCreated( + request_id_, header_client_.BindNewPipeAndPassReceiver()); + } // Make sure the loader dies if |header_client_| has an error, otherwise // requests can hang. header_client_.set_disconnect_handler( @@ -1193,10 +1198,11 @@ net::CompletionOnceCallback callback, const net::HttpResponseHeaders* original_response_headers, scoped_refptr<net::HttpResponseHeaders>* override_response_headers, + const net::IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url) { if (header_client_) { header_client_->OnHeadersReceived( - original_response_headers->raw_headers(), + original_response_headers->raw_headers(), endpoint, base::BindOnce(&URLLoader::OnHeadersReceivedComplete, weak_ptr_factory_.GetWeakPtr(), std::move(callback), override_response_headers, allowed_unsafe_redirect_url));
diff --git a/services/network/url_loader.h b/services/network/url_loader.h index 1d72901..0f924260 100644 --- a/services/network/url_loader.h +++ b/services/network/url_loader.h
@@ -119,6 +119,7 @@ net::CompletionOnceCallback callback, const net::HttpResponseHeaders* original_response_headers, scoped_refptr<net::HttpResponseHeaders>* override_response_headers, + const net::IPEndPoint& endpoint, GURL* allowed_unsafe_redirect_url); // mojom::AuthChallengeResponder:
diff --git a/services/network/websocket.cc b/services/network/websocket.cc index bbfd911..0c77e56 100644 --- a/services/network/websocket.cc +++ b/services/network/websocket.cc
@@ -495,7 +495,7 @@ GURL* allowed_unsafe_redirect_url) { if (header_client_) { header_client_->OnHeadersReceived( - original_response_headers->raw_headers(), + original_response_headers->raw_headers(), net::IPEndPoint(), base::BindOnce(&WebSocket::OnHeadersReceivedComplete, weak_ptr_factory_.GetWeakPtr(), std::move(callback), override_response_headers, allowed_unsafe_redirect_url));
diff --git a/services/tracing/perfetto/consumer_host.cc b/services/tracing/perfetto/consumer_host.cc index 189a081..0257b39 100644 --- a/services/tracing/perfetto/consumer_host.cc +++ b/services/tracing/perfetto/consumer_host.cc
@@ -120,18 +120,18 @@ ConsumerHost::TracingSession::TracingSession( ConsumerHost* host, mojo::PendingReceiver<mojom::TracingSessionHost> tracing_session_host, - mojo::Remote<mojom::TracingSessionClient> tracing_session_client, + mojo::PendingRemote<mojom::TracingSessionClient> tracing_session_client, const perfetto::TraceConfig& trace_config, mojom::TracingClientPriority priority) : host_(host), tracing_session_client_(std::move(tracing_session_client)), - binding_(this, std::move(tracing_session_host)), + receiver_(this, std::move(tracing_session_host)), tracing_priority_(priority) { host_->service()->RegisterTracingSession(this); tracing_session_client_.set_disconnect_handler(base::BindOnce( &ConsumerHost::DestructTracingSession, base::Unretained(host))); - binding_.set_connection_error_handler(base::BindOnce( + receiver_.set_disconnect_handler(base::BindOnce( &ConsumerHost::DestructTracingSession, base::Unretained(host))); privacy_filtering_enabled_ = false; @@ -527,14 +527,12 @@ if (!weak_this) { return; } - mojo::Remote<mojom::TracingSessionClient> - tracing_session_client_remote( - std::move(tracing_session_client)); + weak_this->tracing_session_ = std::make_unique<TracingSession>( weak_this.get(), std::move(tracing_session_host), - std::move(tracing_session_client_remote), - trace_config, priority); + std::move(tracing_session_client), trace_config, + priority); }, weak_factory_.GetWeakPtr(), std::move(tracing_session_host), std::move(tracing_session_client), trace_config, priority));
diff --git a/services/tracing/perfetto/consumer_host.h b/services/tracing/perfetto/consumer_host.h index b9afbc2..63a400ca 100644 --- a/services/tracing/perfetto/consumer_host.h +++ b/services/tracing/perfetto/consumer_host.h
@@ -51,7 +51,7 @@ TracingSession( ConsumerHost* host, mojo::PendingReceiver<mojom::TracingSessionHost> tracing_session_host, - mojo::Remote<mojom::TracingSessionClient> tracing_session_client, + mojo::PendingRemote<mojom::TracingSessionClient> tracing_session_client, const perfetto::TraceConfig& trace_config, mojom::TracingClientPriority priority); ~TracingSession() override; @@ -98,7 +98,7 @@ ConsumerHost* const host_; mojo::Remote<mojom::TracingSessionClient> tracing_session_client_; - mojo::Binding<mojom::TracingSessionHost> binding_; + mojo::Receiver<mojom::TracingSessionHost> receiver_; bool privacy_filtering_enabled_ = false; base::SequenceBound<StreamWriter> read_buffers_stream_writer_; RequestBufferUsageCallback request_buffer_usage_callback_;
diff --git a/services/tracing/perfetto/consumer_host_unittest.cc b/services/tracing/perfetto/consumer_host_unittest.cc index 1db75e70..41a9a09 100644 --- a/services/tracing/perfetto/consumer_host_unittest.cc +++ b/services/tracing/perfetto/consumer_host_unittest.cc
@@ -19,7 +19,7 @@ #include "base/task/post_task.h" #include "base/test/bind_test_util.h" #include "base/test/task_environment.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/system/data_pipe.h" #include "mojo/public/cpp/system/data_pipe_drainer.h" #include "services/tracing/perfetto/perfetto_service.h" @@ -48,6 +48,8 @@ base::WithBaseSyncPrimitives(), base::TaskPriority::BEST_EFFORT})) { perfetto_service_ = std::make_unique<PerfettoService>(task_runner_); + tracing_session_host_ = + std::make_unique<mojo::Remote<mojom::TracingSessionHost>>(); base::RunLoop wait_for_construct; task_runner_->PostTaskAndReply( FROM_HERE, @@ -58,8 +60,8 @@ } ~ThreadedPerfettoService() override { - if (binding_) { - task_runner_->DeleteSoon(FROM_HERE, std::move(binding_)); + if (receiver_) { + task_runner_->DeleteSoon(FROM_HERE, std::move(receiver_)); } task_runner_->DeleteSoon(FROM_HERE, std::move(producer_)); @@ -67,6 +69,9 @@ task_runner_->DeleteSoon(FROM_HERE, std::move(consumer_)); } + if (tracing_session_host_) + task_runner_->DeleteSoon(FROM_HERE, std::move(tracing_session_host_)); + { base::RunLoop wait_for_destruction; task_runner_->PostTaskAndReply(FROM_HERE, base::DoNothing(), @@ -145,11 +150,11 @@ void EnableTracingOnSequence(const perfetto::TraceConfig& config) { mojo::PendingRemote<tracing::mojom::TracingSessionClient> tracing_session_client; - binding_ = std::make_unique<mojo::Binding<mojom::TracingSessionClient>>( + receiver_ = std::make_unique<mojo::Receiver<mojom::TracingSessionClient>>( this, tracing_session_client.InitWithNewPipeAndPassReceiver()); consumer_->EnableTracing( - mojo::MakeRequest(&tracing_session_host_), + tracing_session_host_->BindNewPipeAndPassReceiver(), std::move(tracing_session_client), std::move(config), tracing::mojom::TracingClientPriority::kUserInitiated); } @@ -164,8 +169,6 @@ std::move(stream), std::move(callback))); } - void FreeBuffers() { tracing_session_host_.reset(); } - void DisableTracing() { base::RunLoop wait_for_call; task_runner_->PostTaskAndReply( @@ -290,8 +293,9 @@ std::unique_ptr<PerfettoService> perfetto_service_; std::unique_ptr<ConsumerHost> consumer_; std::unique_ptr<MockProducer> producer_; - std::unique_ptr<mojo::Binding<mojom::TracingSessionClient>> binding_; - tracing::mojom::TracingSessionHostPtr tracing_session_host_; + std::unique_ptr<mojo::Receiver<mojom::TracingSessionClient>> receiver_; + std::unique_ptr<mojo::Remote<tracing::mojom::TracingSessionHost>> + tracing_session_host_; bool tracing_enabled_ = false; }; @@ -503,8 +507,6 @@ wait_for_packets.Run(); EXPECT_EQ(10u, matching_packet_count()); - - threaded_perfetto_service()->FreeBuffers(); } TEST_F(TracingConsumerTest, LargeDataSize) { @@ -675,15 +677,15 @@ mojom::TracingClientPriority priority) { mojo::PendingRemote<tracing::mojom::TracingSessionClient> tracing_session_client; - binding_.Bind(tracing_session_client.InitWithNewPipeAndPassReceiver()); + receiver_.Bind(tracing_session_client.InitWithNewPipeAndPassReceiver()); - binding_.set_connection_error_handler(base::BindOnce( + receiver_.set_disconnect_handler(base::BindOnce( &MockConsumerHost::OnConnectionLost, base::Unretained(this))); - consumer_host_->EnableTracing(mojo::MakeRequest(&tracing_session_host_), - std::move(tracing_session_client), config, - priority); - tracing_session_host_.set_connection_error_handler(base::BindOnce( + consumer_host_->EnableTracing( + tracing_session_host_.BindNewPipeAndPassReceiver(), + std::move(tracing_session_client), config, priority); + tracing_session_host_.set_disconnect_handler(base::BindOnce( &MockConsumerHost::OnConnectionLost, base::Unretained(this))); } @@ -696,7 +698,7 @@ void CloseTracingSession() { tracing_session_host_.reset(); - binding_.Close(); + receiver_.reset(); } // mojom::TracingSessionClient implementation: @@ -711,8 +713,8 @@ void WaitForTracingDisabled() { wait_for_tracing_disabled_.Run(); } private: - tracing::mojom::TracingSessionHostPtr tracing_session_host_; - mojo::Binding<mojom::TracingSessionClient> binding_{this}; + mojo::Remote<tracing::mojom::TracingSessionHost> tracing_session_host_; + mojo::Receiver<mojom::TracingSessionClient> receiver_{this}; std::unique_ptr<ConsumerHost> consumer_host_; base::RunLoop wait_for_connection_lost_; base::RunLoop wait_for_tracing_enabled_;
diff --git a/services/tracing/public/cpp/perfetto/producer_client.h b/services/tracing/public/cpp/perfetto/producer_client.h index dcb75123..eed5de4 100644 --- a/services/tracing/public/cpp/perfetto/producer_client.h +++ b/services/tracing/public/cpp/perfetto/producer_client.h
@@ -17,6 +17,7 @@ #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/tracing/public/cpp/perfetto/perfetto_producer.h" #include "services/tracing/public/cpp/perfetto/task_runner.h" #include "services/tracing/public/mojom/perfetto_service.mojom.h" @@ -106,7 +107,7 @@ uint32_t data_sources_tracing_ = 0; std::unique_ptr<mojo::Receiver<mojom::ProducerClient>> receiver_; - mojom::ProducerHostPtr producer_host_; + mojo::Remote<mojom::ProducerHost> producer_host_; std::unique_ptr<MojoSharedMemory> shared_memory_; std::unique_ptr<perfetto::SharedMemoryArbiter> shared_memory_arbiter_; perfetto::SharedMemoryArbiter* in_process_arbiter_ = nullptr;
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 3a4aeae3..ef858b42 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -65,6 +65,252 @@ } ] }, + "Android WebView P OOR-CORS FYI (rel)": { + "gtest_tests": [ + { + "args": [ + "--enable-features=OutOfBlinkCors", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "android_webview_unittests_oor_cors" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "name": "android_webview_unittests_oor_cors", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "device_os": "PQ3A.190801.002", + "device_os_flavor": "google", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ] + }, + "test": "android_webview_unittests" + }, + { + "args": [ + "--enable-features=OutOfBlinkCors", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "system_webview_shell_layout_test_apk_oor_cors" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "name": "system_webview_shell_layout_test_apk_oor_cors", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "device_os": "PQ3A.190801.002", + "device_os_flavor": "google", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ] + }, + "test": "system_webview_shell_layout_test_apk" + }, + { + "args": [ + "--enable-features=OutOfBlinkCors", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "webview_cts_tests_oor_cors" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "name": "webview_cts_tests_oor_cors", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "chromium/android_webview/tools/cts_archive", + "location": "android_webview/tools/cts_archive", + "revision": "4kDr36wBuZtvbfaEin4U4oeFD7oAuN0flkWDImKBts4C" + }, + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "device_os": "PQ3A.190801.002", + "device_os_flavor": "google", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "shards": 3 + }, + "test": "webview_cts_tests" + }, + { + "args": [ + "--enable-features=OutOfBlinkCors", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "webview_instrumentation_test_apk_oor_cors" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "name": "webview_instrumentation_test_apk_oor_cors", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "device_os": "PQ3A.190801.002", + "device_os_flavor": "google", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ], + "shards": 12 + }, + "test": "webview_instrumentation_test_apk" + }, + { + "args": [ + "--enable-features=OutOfBlinkCors", + "--gs-results-bucket=chromium-result-details", + "--recover-devices" + ], + "merge": { + "args": [ + "--bucket", + "chromium-result-details", + "--test-name", + "webview_ui_test_app_test_apk_oor_cors" + ], + "script": "//build/android/pylib/results/presentation/test_results_presentation.py" + }, + "name": "webview_ui_test_app_test_apk_oor_cors", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/luci/logdog/butler/${platform}", + "location": "bin", + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" + } + ], + "dimension_sets": [ + { + "device_os": "PQ3A.190801.002", + "device_os_flavor": "google", + "device_os_type": "userdebug", + "device_type": "walleye", + "os": "Android" + } + ], + "output_links": [ + { + "link": [ + "https://luci-logdog.appspot.com/v/?s", + "=android%2Fswarming%2Flogcats%2F", + "${TASK_ID}%2F%2B%2Funified_logcats" + ], + "name": "shard #${SHARD_INDEX} logcats" + } + ] + }, + "test": "webview_ui_test_app_test_apk" + } + ] + }, "Memory Infra Tester": { "isolated_scripts": [ {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 2daa894..f8b6afc 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -4830,6 +4830,15 @@ }, }, + 'system_webview_shell_instrumentation_tests_oor_cors': { + 'system_webview_shell_layout_test_apk_oor_cors': { + 'args': [ + '--enable-features=OutOfBlinkCors', + ], + 'test': 'system_webview_shell_layout_test_apk', + }, + }, + 'system_webview_wpt': { 'system_webview_wpt': { 'swarming': { @@ -5004,10 +5013,27 @@ }, }, + 'webview_bot_instrumentation_test_apk_oor_cors_gtest': { + 'webview_instrumentation_test_apk_oor_cors': { + 'args': ['--enable-features=OutOfBlinkCors'], + 'swarming': { + 'shards': 12, + }, + 'test': 'webview_instrumentation_test_apk', + }, + }, + 'webview_bot_unittests_gtest': { 'android_webview_unittests': {}, }, + 'webview_bot_unittests_oor_cors_gtest': { + 'android_webview_unittests_oor_cors': { + 'args': ['--enable-features=OutOfBlinkCors'], + 'test': 'android_webview_unittests', + }, + }, + 'webview_cts_tests_gtest': { 'webview_cts_tests': { 'swarming': { @@ -5042,6 +5068,25 @@ }, }, + 'webview_cts_tests_gtest_oor_cors': { + 'webview_cts_tests_oor_cors': { + 'args': [ + '--enable-features=OutOfBlinkCors', + ], + 'swarming': { + 'shards': 3, + 'cipd_packages': [ + { + "cipd_package": 'chromium/android_webview/tools/cts_archive', + 'location': 'android_webview/tools/cts_archive', + 'revision': '4kDr36wBuZtvbfaEin4U4oeFD7oAuN0flkWDImKBts4C', + } + ] + }, + 'test': 'webview_cts_tests', + }, + }, + 'webview_ui_instrumentation_tests': { 'webview_ui_test_app_test_apk': {}, }, @@ -5055,6 +5100,15 @@ }, }, + 'webview_ui_instrumentation_tests_oor_cors': { + 'webview_ui_test_app_test_apk_oor_cors': { + 'args': [ + '--enable-features=OutOfBlinkCors', + ], + 'test': 'webview_ui_test_app_test_apk', + }, + }, + 'win7_32_bit_gtests': { 'base_unittests': {}, 'browser_tests': { @@ -5935,6 +5989,14 @@ 'webview_ui_instrumentation_tests_no_field_trial', ], + 'webview_bot_oor_cors_gtests': [ + 'system_webview_shell_instrumentation_tests_oor_cors', + 'webview_bot_instrumentation_test_apk_oor_cors_gtest', + 'webview_bot_unittests_oor_cors_gtest', + 'webview_cts_tests_gtest_oor_cors', + 'webview_ui_instrumentation_tests_oor_cors', + ], + 'webview_bot_system_gtests': [ 'system_webview_shell_instrumentation_tests', 'system_webview_shell_instrumentation_tests_no_field_trial',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index b5b3c86..c5e59ab 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -675,6 +675,17 @@ 'use_swarming': True, 'os_type': 'android', }, + 'Android WebView P OOR-CORS FYI (rel)': { + 'mixins': [ + 'pie_fleet', + 'walleye', + ], + 'test_suites': { + 'gtest_tests': 'webview_bot_oor_cors_gtests', + }, + 'use_swarming': True, + 'os_type': 'android', + }, 'Memory Infra Tester': { 'mixins': [ 'kitkat',
diff --git a/third_party/blink/common/loader/url_loader_factory_bundle.cc b/third_party/blink/common/loader/url_loader_factory_bundle.cc index 237565d4..d45b4cd 100644 --- a/third_party/blink/common/loader/url_loader_factory_bundle.cc +++ b/third_party/blink/common/loader/url_loader_factory_bundle.cc
@@ -92,7 +92,7 @@ if (appcache_factory_) return appcache_factory_.get(); - return default_factory_.get(); + return default_factory_.is_bound() ? default_factory_.get() : nullptr; } void URLLoaderFactoryBundle::CreateLoaderAndStart( @@ -143,10 +143,12 @@ void URLLoaderFactoryBundle::Update( std::unique_ptr<URLLoaderFactoryBundleInfo> pending_factories) { if (pending_factories->pending_default_factory()) { + default_factory_.reset(); default_factory_.Bind( std::move(pending_factories->pending_default_factory())); } if (pending_factories->pending_appcache_factory()) { + appcache_factory_.reset(); appcache_factory_.Bind( std::move(pending_factories->pending_appcache_factory())); }
diff --git a/third_party/blink/common/loader/url_loader_factory_bundle_mojom_traits.cc b/third_party/blink/common/loader/url_loader_factory_bundle_mojom_traits.cc index 2f037d3c..447a23f9 100644 --- a/third_party/blink/common/loader/url_loader_factory_bundle_mojom_traits.cc +++ b/third_party/blink/common/loader/url_loader_factory_bundle_mojom_traits.cc
@@ -15,13 +15,13 @@ std::unique_ptr<blink::URLLoaderFactoryBundleInfo>>; // static -network::mojom::URLLoaderFactoryPtrInfo Traits::default_factory( +mojo::PendingRemote<network::mojom::URLLoaderFactory> Traits::default_factory( BundleInfoType& bundle) { return std::move(bundle->pending_default_factory()); } // static -network::mojom::URLLoaderFactoryPtrInfo Traits::appcache_factory( +mojo::PendingRemote<network::mojom::URLLoaderFactory> Traits::appcache_factory( BundleInfoType& bundle) { return std::move(bundle->pending_appcache_factory()); }
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn index 9e8287d9..4d1bb66 100644 --- a/third_party/blink/public/BUILD.gn +++ b/third_party/blink/public/BUILD.gn
@@ -270,7 +270,6 @@ "platform/web_isolated_world_ids.h", "platform/web_isolated_world_info.h", "platform/web_keyboard_event.h", - "platform/web_loading_behavior_flag.h", "platform/web_loading_hints_provider.h", "platform/web_media_constraints.h", "platform/web_media_key_system_configuration.h",
diff --git a/third_party/blink/public/common/BUILD.gn b/third_party/blink/public/common/BUILD.gn index 9f10445..b15109d 100644 --- a/third_party/blink/public/common/BUILD.gn +++ b/third_party/blink/public/common/BUILD.gn
@@ -78,6 +78,7 @@ "indexeddb/indexeddb_key_range.h", "indexeddb/indexeddb_metadata.h", "indexeddb/web_idb_types.h", + "loader/loading_behavior_flag.h", "loader/mime_sniffing_throttle.h", "loader/mime_sniffing_url_loader.h", "loader/request_destination.h",
diff --git a/third_party/blink/public/platform/web_loading_behavior_flag.h b/third_party/blink/public/common/loader/loading_behavior_flag.h similarity index 66% rename from third_party/blink/public/platform/web_loading_behavior_flag.h rename to third_party/blink/public/common/loader/loading_behavior_flag.h index b1342dd1..dfd6735 100644 --- a/third_party/blink/public/platform/web_loading_behavior_flag.h +++ b/third_party/blink/public/common/loader/loading_behavior_flag.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_LOADING_BEHAVIOR_FLAG_H_ -#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_LOADING_BEHAVIOR_FLAG_H_ +#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_LOADER_LOADING_BEHAVIOR_FLAG_H_ +#define THIRD_PARTY_BLINK_PUBLIC_COMMON_LOADER_LOADING_BEHAVIOR_FLAG_H_ namespace blink { @@ -12,33 +12,33 @@ // features and potential areas of improvement in the loading stack. The main // consumer is the page_load_metrics component, which sends bit flags to the // browser process for histogram splitting. -enum WebLoadingBehaviorFlag { - kWebLoadingBehaviorNone = 0, +enum LoadingBehaviorFlag { + kLoadingBehaviorNone = 0, // Indicates that the page used the document.write evaluator to preload scan // for resources inserted via document.write. // DEPRECATED, feature has been turned down. - kWebLoadingBehaviorDocumentWriteEvaluator = 1 << 0, + kLoadingBehaviorDocumentWriteEvaluator = 1 << 0, // Indicates that the page is controlled by a Service Worker. - kWebLoadingBehaviorServiceWorkerControlled = 1 << 1, + kLoadingBehaviorServiceWorkerControlled = 1 << 1, // Indicates that the page has a synchronous, cross-origin document.written // script. - kWebLoadingBehaviorDocumentWriteBlock = 1 << 2, + kLoadingBehaviorDocumentWriteBlock = 1 << 2, // Indicates that the page is a reload and has a synchronous, cross-origin // document.written script. - kWebLoadingBehaviorDocumentWriteBlockReload = 1 << 3, + kLoadingBehaviorDocumentWriteBlockReload = 1 << 3, // The page loaded external CSS that generated a PreloadRequest via the // CSSPreloaderResourceClient. - kWebLoadingBehaviorCSSPreloadFound = 1 << 4, + kLoadingBehaviorCSSPreloadFound = 1 << 4, // Indicates that the page has a synchronous, same-origin document.written // script with different protocol. - kWebLoadingBehaviorDocumentWriteBlockDifferentScheme = 1 << 5, + kLoadingBehaviorDocumentWriteBlockDifferentScheme = 1 << 5, // Indicates that a subresource on the page matched the subresource filtering // rules. - kWebLoadingBehaviorSubresourceFilterMatch = 1 << 6, + kLoadingBehaviorSubresourceFilterMatch = 1 << 6, // Indicates that the page is an AMP document, with <html amp> tag. - kWebLoadingBehaviorAmpDocumentLoaded = 1 << 7, + kLoadingBehaviorAmpDocumentLoaded = 1 << 7, }; } // namespace blink -#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_LOADING_BEHAVIOR_FLAG_H_ +#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_LOADER_LOADING_BEHAVIOR_FLAG_H_
diff --git a/third_party/blink/public/common/loader/url_loader_factory_bundle.h b/third_party/blink/public/common/loader/url_loader_factory_bundle.h index fe81a9a..738e05e 100644 --- a/third_party/blink/public/common/loader/url_loader_factory_bundle.h +++ b/third_party/blink/public/common/loader/url_loader_factory_bundle.h
@@ -143,16 +143,15 @@ return output; } - // TODO(crbug.com/955171): Replace URLLoaderFactoryPtr with Remote below. // |default_factory_| is the default factory used by the bundle. It usually // goes to "network", but it's possible it was overriden in case when the // context should not be given access to the network. - network::mojom::URLLoaderFactoryPtr default_factory_; + mojo::Remote<network::mojom::URLLoaderFactory> default_factory_; // |appcache_factory_| is a special loader factory that intercepts // requests when the context has AppCache. See also // AppCacheSubresourceURLFactory. - network::mojom::URLLoaderFactoryPtr appcache_factory_; + mojo::Remote<network::mojom::URLLoaderFactory> appcache_factory_; // Map from URL scheme to Remote<URLLoaderFactory> for handling URL requests // for schemes not handled by the |default_factory_|. See also
diff --git a/third_party/blink/public/common/loader/url_loader_factory_bundle_mojom_traits.h b/third_party/blink/public/common/loader/url_loader_factory_bundle_mojom_traits.h index cd9c9de..be9179e 100644 --- a/third_party/blink/public/common/loader/url_loader_factory_bundle_mojom_traits.h +++ b/third_party/blink/public/common/loader/url_loader_factory_bundle_mojom_traits.h
@@ -7,6 +7,7 @@ #include <memory> +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/struct_traits.h" #include "third_party/blink/public/common/common_export.h" #include "third_party/blink/public/common/loader/url_loader_factory_bundle.h" @@ -24,10 +25,10 @@ static void SetToNull(BundleInfoType* bundle) { bundle->reset(); } - static network::mojom::URLLoaderFactoryPtrInfo default_factory( + static mojo::PendingRemote<network::mojom::URLLoaderFactory> default_factory( BundleInfoType& bundle); - static network::mojom::URLLoaderFactoryPtrInfo appcache_factory( + static mojo::PendingRemote<network::mojom::URLLoaderFactory> appcache_factory( BundleInfoType& bundle); static blink::URLLoaderFactoryBundleInfo::SchemeMap scheme_specific_factories(
diff --git a/third_party/blink/public/mojom/appcache/appcache.mojom b/third_party/blink/public/mojom/appcache/appcache.mojom index 0e53a93..b1419ac 100644 --- a/third_party/blink/public/mojom/appcache/appcache.mojom +++ b/third_party/blink/public/mojom/appcache/appcache.mojom
@@ -138,5 +138,6 @@ // In the network service world this message sets the URLLoaderFactory to be // used for subresources. - SetSubresourceFactory(network.mojom.URLLoaderFactory url_loader_factory); + SetSubresourceFactory( + pending_remote<network.mojom.URLLoaderFactory> url_loader_factory); };
diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h index aaf0792c..cda5f317 100644 --- a/third_party/blink/public/platform/platform.h +++ b/third_party/blink/public/platform/platform.h
@@ -87,10 +87,6 @@ class GpuVideoAcceleratorFactories; } -namespace rtc { -class Thread; -} - namespace service_manager { class InterfaceProvider; } @@ -106,7 +102,6 @@ } namespace webrtc { -struct RtpCapabilities; class AsyncResolverFactory; } @@ -581,11 +576,6 @@ return nullptr; } - // Returns the rtc::Thread instance associated with the WebRTC worker thread. - // TODO(bugs.webrtc.org/9419): Remove once WebRTC can be built as a component. - // May return null if WebRTC functionality is not implemented. - virtual rtc::Thread* GetWebRtcWorkerThreadRtcThread() { return nullptr; } - virtual scoped_refptr<base::SingleThreadTaskRunner> GetWebRtcSignalingTaskRunner() { return nullptr; @@ -599,13 +589,6 @@ virtual std::unique_ptr<webrtc::AsyncResolverFactory> CreateWebRtcAsyncResolverFactory(); - // Returns the most optimistic view of the capabilities of the system for - // sending or receiving media of the given kind ("audio" or "video"). - virtual std::unique_ptr<webrtc::RtpCapabilities> GetRtpSenderCapabilities( - const WebString& kind); - virtual std::unique_ptr<webrtc::RtpCapabilities> GetRtpReceiverCapabilities( - const WebString& kind); - // Checks if the default minimum starting volume value for the AGC is // overridden on the command line. virtual base::Optional<double> GetWebRtcMaxCaptureFrameRate() {
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h index 326a4141..d0b1bcb 100644 --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -165,7 +165,6 @@ BLINK_PLATFORM_EXPORT static void EnableLazyImageLoadingMetadataFetch(bool); BLINK_PLATFORM_EXPORT static void EnableScriptedSpeechRecognition(bool); BLINK_PLATFORM_EXPORT static void EnableScriptedSpeechSynthesis(bool); - BLINK_PLATFORM_EXPORT static void EnableScrollAnchorSerialization(bool); BLINK_PLATFORM_EXPORT static void EnableFetchMetadata(bool); BLINK_PLATFORM_EXPORT static void EnableAutoLazyLoadOnReloads(bool); BLINK_PLATFORM_EXPORT static void EnableFetchMetadataDestination(bool);
diff --git a/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h b/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h index 2e97405..fde6670 100644 --- a/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h +++ b/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h
@@ -118,8 +118,10 @@ void EnsureInitialized(); scoped_refptr<base::SingleThreadTaskRunner> GetWebRtcWorkerThread() const; + + // Returns the rtc::Thread instance associated with the WebRTC worker thread. // TODO(bugs.webrtc.org/9419): Remove once WebRTC can be built as a component. - rtc::Thread* GetWebRtcWorkerThreadRtcThread() const; + rtc::Thread* GetWebRtcWorkerThreadRtcThread(); virtual scoped_refptr<base::SingleThreadTaskRunner> GetWebRtcSignalingThread() const;
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h index e9075e8..7159bd20 100644 --- a/third_party/blink/public/web/web_local_frame_client.h +++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -40,6 +40,7 @@ #include "third_party/blink/public/common/frame/frame_owner_element_type.h" #include "third_party/blink/public/common/frame/sandbox_flags.h" #include "third_party/blink/public/common/frame/user_activation_update_type.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/common/loader/url_loader_factory_bundle.h" #include "third_party/blink/public/mojom/frame/lifecycle.mojom-shared.h" #include "third_party/blink/public/mojom/use_counter/css_property_id.mojom-shared.h" @@ -52,7 +53,6 @@ #include "third_party/blink/public/platform/web_effective_connection_type.h" #include "third_party/blink/public/platform/web_file_system_type.h" #include "third_party/blink/public/platform/web_insecure_request_policy.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/public/platform/web_scroll_types.h" #include "third_party/blink/public/platform/web_set_sink_id_callbacks.h" #include "third_party/blink/public/platform/web_source_location.h" @@ -637,7 +637,7 @@ // UseCounter ---------------------------------------------------------- // Blink exhibited a certain loading behavior that the browser process will // use for segregated histograms. - virtual void DidObserveLoadingBehavior(WebLoadingBehaviorFlag) {} + virtual void DidObserveLoadingBehavior(LoadingBehaviorFlag) {} // Blink UseCounter should only track feature usage for non NTP activities. // ShouldTrackUseCounter checks the url of a page's main frame is not a new // tab page url.
diff --git a/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py b/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py index c380c93..3fc8a81 100644 --- a/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py +++ b/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py
@@ -80,7 +80,6 @@ has_cross_origin_named_enum = False has_cross_origin_named_getter = False has_cross_origin_named_setter = False - has_origin_safe_method_setter = False has_security_check = False indexed_property_getter = None is_global = False @@ -98,9 +97,6 @@ interface.indexed_property_getter, ['index']) if not interface.is_partial: - has_origin_safe_method_setter = is_global and any( - method['is_check_security_for_receiver'] and not method['is_unforgeable'] - for method in methods) has_security_check = ('CheckSecurity' in interface.extended_attributes and interface.name != 'EventTarget') has_cross_origin_named_getter = (any(method['is_cross_origin'] for method in methods) or @@ -114,7 +110,6 @@ return { 'attributes': attributes, 'component': component, - 'has_origin_safe_method_setter': has_origin_safe_method_setter, 'has_constructor_callback': has_constructor_callback, 'has_cross_origin_named_getter': has_cross_origin_named_getter, 'has_cross_origin_named_setter': has_cross_origin_named_setter,
diff --git a/third_party/blink/renderer/bindings/scripts/v8_interface.py b/third_party/blink/renderer/bindings/scripts/v8_interface.py index 6810582..39ab8717 100644 --- a/third_party/blink/renderer/bindings/scripts/v8_interface.py +++ b/third_party/blink/renderer/bindings/scripts/v8_interface.py
@@ -434,10 +434,6 @@ # Methods context.update(methods_context(interface, component_info)) methods = context['methods'] - context.update({ - 'has_origin_safe_method_setter': any(method['is_cross_origin'] and not method['is_unforgeable'] - for method in methods), - }) # Conditionally enabled methods conditional_methods = v8_methods.filter_conditionally_enabled(methods, interface.is_partial)
diff --git a/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl b/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl index 4f44253..3097b0d 100644 --- a/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl +++ b/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl
@@ -58,9 +58,6 @@ {% endif%} {% endfor %} {% endfor %}{# method #} - {% if interface.has_origin_safe_method_setter %} - reinterpret_cast<intptr_t>({{v8_class}}::{{interface.name}}OriginSafeMethodSetterCallback), - {% endif %} {% if interface.has_cross_origin_named_getter %} reinterpret_cast<intptr_t>({{v8_class}}::CrossOriginNamedGetter), {% endif %}
diff --git a/third_party/blink/renderer/bindings/templates/interface.cc.tmpl b/third_party/blink/renderer/bindings/templates/interface.cc.tmpl index d3c398e..7334759 100644 --- a/third_party/blink/renderer/bindings/templates/interface.cc.tmpl +++ b/third_party/blink/renderer/bindings/templates/interface.cc.tmpl
@@ -722,58 +722,6 @@ {##############################################################################} -{# TODO(dcheng): Currently, bindings must create a function object for each - realm as a hack to support the incumbent realm. Remove this when Blink - properly supports the incumbent realm. #} -{% block origin_safe_method_setter %} -{% if has_origin_safe_method_setter %} -static void {{cpp_class}}OriginSafeMethodSetter( - v8::Local<v8::Name> name, - v8::Local<v8::Value> v8_value, - const v8::PropertyCallbackInfo<void>& info) { - if (!name->IsString()) - return; - v8::Local<v8::Object> holder = - {{v8_class}}::FindInstanceInPrototypeChain(info.Holder(), info.GetIsolate()); - if (holder.IsEmpty()) - return; - {{cpp_class}}* impl = {{v8_class}}::ToImpl(holder); - v8::String::Utf8Value name_in_utf8(info.GetIsolate(), name); - ExceptionState exception_state( - info.GetIsolate(), - ExceptionState::kSetterContext, - "{{interface_name}}", - *name_in_utf8); - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(info.GetIsolate()), impl, exception_state)) { - return; - } - - {# The findInstanceInPrototypeChain() call above only returns a non-empty handle if info.Holder() is an Object. #} - {% raw %} - // |methodName| must be same with {{method.name}} in - // {{method.name}}OriginSafeMethodGetter{{world_suffix}} defined in - // methods.cc.tmpl - {% endraw %} - V8PrivateProperty::GetSymbol(info.GetIsolate(), *name_in_utf8) - .Set(v8::Local<v8::Object>::Cast(info.Holder()), v8_value); -} -{% endif %} -{% endblock %} - -{% block origin_safe_method_setter_callback %} -{% if has_origin_safe_method_setter %} -void {{v8_class_or_partial}}::{{cpp_class}}OriginSafeMethodSetterCallback( - v8::Local<v8::Name> name, - v8::Local<v8::Value> v8_value, - const v8::PropertyCallbackInfo<void>& info) { - {{internal_namespace}}::{{cpp_class}}OriginSafeMethodSetter(name, v8_value, info); -} -{% endif %} -{% endblock %} - - -{##############################################################################} {% block named_constructor %} {% from 'methods.cc.tmpl' import generate_constructor with context %} {% if named_constructor %} @@ -954,64 +902,58 @@ {##############################################################################} -{% macro install_origin_safe_method(method, instance_template, prototype_template) %} +{% macro install_origin_safe_method(method, instance_template, prototype_template, interface_template, signature) %} {% from 'utilities.cc.tmpl' import property_location %} {# TODO(dcheng): Currently, bindings must create a function object for each realm as a hack to support the incumbent realm. Clean this up when Blink properly supports the incumbent realm. #} -{% set getter_callback = - '%s::%sOriginSafeMethodGetterCallback' % - (v8_class_or_partial, method.camel_case_name) %} -{% set setter_callback = - '%s::%sOriginSafeMethodSetterCallback' % (v8_class_or_partial, cpp_class) - if not method.is_unforgeable else 'nullptr' %} +{% set function_callback = + '%s::%sMethodCallback' % (v8_class_or_partial, method.camel_case_name) %} {% set property_attribute = 'static_cast<v8::PropertyAttribute>(%s)' % ' | '.join(method.property_attributes or ['v8::None']) %} {% set holder_check = 'V8DOMConfiguration::kCheckHolder' %} -static const V8DOMConfiguration::AttributeConfiguration {{method.name}}OriginSafeAttributeConfiguration[] = { +static const V8DOMConfiguration::MethodConfiguration k{{method.camel_case_name}}OriginSafeMethodConfiguration[] = { {% if method.is_per_world_bindings %} -{% set getter_callback_for_main_world = '%sForMainWorld' % getter_callback %} -{% set setter_callback_for_main_world = '%sForMainWorld' % setter_callback - if not method.is_unforgeable else 'nullptr' %} +{% set function_callback_for_main_world = '%sForMainWorld' % function_callback %} { "{{method.name}}", - {{getter_callback_for_main_world}}, - {{setter_callback_for_main_world}}, + {{function_callback_for_main_world}}, + {{method.length}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::MainWorld, }, { "{{method.name}}", - {{getter_callback}}, - {{setter_callback}}, + {{function_callback}}, + {{method.length}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::NonMainWorlds, } {% else %} { "{{method.name}}", - {{getter_callback}}, - {{setter_callback}}, + {{function_callback}}, + {{method.length}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds, } {% endif %} }; - for (const auto& attributeConfig : {{method.name}}OriginSafeAttributeConfiguration) - V8DOMConfiguration::InstallAttribute(isolate, world, {{instance_template}}, {{prototype_template}}, attributeConfig); +for (const auto& method_config : k{{method.camel_case_name}}OriginSafeMethodConfiguration) + V8DOMConfiguration::InstallMethod(isolate, world, {{instance_template}}, {{prototype_template}}, {{interface_template}}, {{signature}}, method_config); {%- endmacro %}
diff --git a/third_party/blink/renderer/bindings/templates/interface.h.tmpl b/third_party/blink/renderer/bindings/templates/interface.h.tmpl index c124e53..f84c116 100644 --- a/third_party/blink/renderer/bindings/templates/interface.h.tmpl +++ b/third_party/blink/renderer/bindings/templates/interface.h.tmpl
@@ -220,9 +220,6 @@ {% if iterator_method %} {{exported}}static void {{iterator_method.camel_case_name}}MethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); {% endif %} - {% if has_origin_safe_method_setter %} - {{exported}}static void {{cpp_class}}OriginSafeMethodSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value>, const v8::PropertyCallbackInfo<void>&); - {% endif %} {% if has_access_check_callbacks and not is_partial %} {{exported}}static bool SecurityCheck(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Value>);
diff --git a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl index 303e016..5702a47 100644 --- a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl +++ b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
@@ -128,7 +128,6 @@ {% if iterator_method %} {{generate_method(iterator_method)}} {% endif %} -{% block origin_safe_method_setter %}{% endblock %} {# Constructors #} {% for constructor in constructors %} {{generate_constructor(constructor)}} @@ -235,7 +234,6 @@ {% if iterator_method %} {{method_callback(iterator_method)}} {% endif %} -{% block origin_safe_method_setter_callback %}{% endblock %} {# Special operations (methods) #} {% block named_property_getter_callback %}{% endblock %} {% block named_property_setter_callback %}{% endblock %} @@ -616,7 +614,7 @@ if method.overloads else method.runtime_enabled_feature_name %} {% if not feature_name %} {% if method.is_cross_origin %} - {{install_origin_safe_method(method, 'instance_template', 'prototype_template') | trim | indent(2)}} + {{install_origin_safe_method(method, 'instance_template', 'prototype_template', 'interface_template', 'signature') | trim | indent(2)}} {% else %} {{install_custom_signature(method, 'instance_template', 'prototype_template', 'interface_template', 'signature') | trim | indent(2)}} {% endif %}
diff --git a/third_party/blink/renderer/bindings/templates/methods.cc.tmpl b/third_party/blink/renderer/bindings/templates/methods.cc.tmpl index f6c69a2c..955155c 100644 --- a/third_party/blink/renderer/bindings/templates/methods.cc.tmpl +++ b/third_party/blink/renderer/bindings/templates/methods.cc.tmpl
@@ -516,32 +516,7 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - {{cpp_class}}* impl = {{v8_class}}::ToImpl(info.Holder()); - // Different FunctionTemplates should be used between cross-origin access and - // same-origin access. - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(isolate), impl, - BindingSecurity::ErrorReportOption::kDoNotReport)) { - static int dom_template_key; // This address is used for a key to look up the dom template. - - v8::Local<v8::FunctionTemplate> method_template = - data->FindOrCreateOperationTemplate( - world, - &dom_template_key, - {{v8_class_or_partial}}::{{method.camel_case_name}}MethodCallback{{world_suffix}}, - v8::Local<v8::Value>(), - signature, - {{method.length}}); - - V8SetReturnValue( - info, - method_template->GetFunction( - isolate->GetCurrentContext()).ToLocalChecked()); - return; - } - static int dom_template_key; // This address is used for a key to look up the dom template. - v8::Local<v8::FunctionTemplate> method_template = data->FindOrCreateOperationTemplate( world, @@ -551,21 +526,10 @@ signature, {{method.length}}); - // When the web author overwrote the property, return the overwriting value. - // - // "{{method.name}}" must be the same as |name_in_utf8| (=name) in - // {{cpp_class}}OriginSafeMethodSetter defined in interface.cc.tmpl. - V8PrivateProperty::Symbol property_symbol = - V8PrivateProperty::GetSymbol(isolate, "{{method.name}}"); - v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder()); - if (property_symbol.HasValue(holder)) { - V8SetReturnValue(info, property_symbol.GetOrUndefined(holder)); - } else { - V8SetReturnValue( - info, - method_template->GetFunction( - holder->CreationContext()).ToLocalChecked()); - } + V8SetReturnValue( + info, + method_template->GetFunction( + isolate->GetCurrentContext()).ToLocalChecked()); } {% endmacro %}
diff --git a/third_party/blink/renderer/bindings/templates/partial_interface.h.tmpl b/third_party/blink/renderer/bindings/templates/partial_interface.h.tmpl index 9a3e8cd8..41b235f 100644 --- a/third_party/blink/renderer/bindings/templates/partial_interface.h.tmpl +++ b/third_party/blink/renderer/bindings/templates/partial_interface.h.tmpl
@@ -100,9 +100,6 @@ {% if iterator_method %} {{exported}}static void {{iterator_method.camel_case_name}}MethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info); {% endif %} - {% if has_origin_safe_method_setter %} - {{exported}}static void {{cpp_class}}OriginSafeMethodSetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8_value, const v8::PropertyCallbackInfo<void>& info); - {% endif %} private: {% if needs_runtime_enabled_installer %}
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc index 9c80a99e..ced7be9 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
@@ -202,32 +202,7 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder()); - // Different FunctionTemplates should be used between cross-origin access and - // same-origin access. - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(isolate), impl, - BindingSecurity::ErrorReportOption::kDoNotReport)) { - static int dom_template_key; // This address is used for a key to look up the dom template. - - v8::Local<v8::FunctionTemplate> method_template = - data->FindOrCreateOperationTemplate( - world, - &dom_template_key, - V8TestInterfaceCheckSecurity::DoNotCheckSecurityVoidMethodMethodCallback, - v8::Local<v8::Value>(), - signature, - 0); - - V8SetReturnValue( - info, - method_template->GetFunction( - isolate->GetCurrentContext()).ToLocalChecked()); - return; - } - static int dom_template_key; // This address is used for a key to look up the dom template. - v8::Local<v8::FunctionTemplate> method_template = data->FindOrCreateOperationTemplate( world, @@ -237,21 +212,10 @@ signature, 0); - // When the web author overwrote the property, return the overwriting value. - // - // "doNotCheckSecurityVoidMethod" must be the same as |name_in_utf8| (=name) in - // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl. - V8PrivateProperty::Symbol property_symbol = - V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityVoidMethod"); - v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder()); - if (property_symbol.HasValue(holder)) { - V8SetReturnValue(info, property_symbol.GetOrUndefined(holder)); - } else { - V8SetReturnValue( - info, - method_template->GetFunction( - holder->CreationContext()).ToLocalChecked()); - } + V8SetReturnValue( + info, + method_template->GetFunction( + isolate->GetCurrentContext()).ToLocalChecked()); } static void DoNotCheckSecurityPerWorldBindingsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) { @@ -270,32 +234,7 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder()); - // Different FunctionTemplates should be used between cross-origin access and - // same-origin access. - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(isolate), impl, - BindingSecurity::ErrorReportOption::kDoNotReport)) { - static int dom_template_key; // This address is used for a key to look up the dom template. - - v8::Local<v8::FunctionTemplate> method_template = - data->FindOrCreateOperationTemplate( - world, - &dom_template_key, - V8TestInterfaceCheckSecurity::DoNotCheckSecurityPerWorldBindingsVoidMethodMethodCallback, - v8::Local<v8::Value>(), - signature, - 0); - - V8SetReturnValue( - info, - method_template->GetFunction( - isolate->GetCurrentContext()).ToLocalChecked()); - return; - } - static int dom_template_key; // This address is used for a key to look up the dom template. - v8::Local<v8::FunctionTemplate> method_template = data->FindOrCreateOperationTemplate( world, @@ -305,21 +244,10 @@ signature, 0); - // When the web author overwrote the property, return the overwriting value. - // - // "doNotCheckSecurityPerWorldBindingsVoidMethod" must be the same as |name_in_utf8| (=name) in - // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl. - V8PrivateProperty::Symbol property_symbol = - V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityPerWorldBindingsVoidMethod"); - v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder()); - if (property_symbol.HasValue(holder)) { - V8SetReturnValue(info, property_symbol.GetOrUndefined(holder)); - } else { - V8SetReturnValue( - info, - method_template->GetFunction( - holder->CreationContext()).ToLocalChecked()); - } + V8SetReturnValue( + info, + method_template->GetFunction( + isolate->GetCurrentContext()).ToLocalChecked()); } static void DoNotCheckSecurityPerWorldBindingsVoidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { @@ -338,32 +266,7 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder()); - // Different FunctionTemplates should be used between cross-origin access and - // same-origin access. - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(isolate), impl, - BindingSecurity::ErrorReportOption::kDoNotReport)) { - static int dom_template_key; // This address is used for a key to look up the dom template. - - v8::Local<v8::FunctionTemplate> method_template = - data->FindOrCreateOperationTemplate( - world, - &dom_template_key, - V8TestInterfaceCheckSecurity::DoNotCheckSecurityPerWorldBindingsVoidMethodMethodCallbackForMainWorld, - v8::Local<v8::Value>(), - signature, - 0); - - V8SetReturnValue( - info, - method_template->GetFunction( - isolate->GetCurrentContext()).ToLocalChecked()); - return; - } - static int dom_template_key; // This address is used for a key to look up the dom template. - v8::Local<v8::FunctionTemplate> method_template = data->FindOrCreateOperationTemplate( world, @@ -373,21 +276,10 @@ signature, 0); - // When the web author overwrote the property, return the overwriting value. - // - // "doNotCheckSecurityPerWorldBindingsVoidMethod" must be the same as |name_in_utf8| (=name) in - // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl. - V8PrivateProperty::Symbol property_symbol = - V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityPerWorldBindingsVoidMethod"); - v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder()); - if (property_symbol.HasValue(holder)) { - V8SetReturnValue(info, property_symbol.GetOrUndefined(holder)); - } else { - V8SetReturnValue( - info, - method_template->GetFunction( - holder->CreationContext()).ToLocalChecked()); - } + V8SetReturnValue( + info, + method_template->GetFunction( + isolate->GetCurrentContext()).ToLocalChecked()); } static void DoNotCheckSecurityUnforgeableVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) { @@ -406,32 +298,7 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder()); - // Different FunctionTemplates should be used between cross-origin access and - // same-origin access. - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(isolate), impl, - BindingSecurity::ErrorReportOption::kDoNotReport)) { - static int dom_template_key; // This address is used for a key to look up the dom template. - - v8::Local<v8::FunctionTemplate> method_template = - data->FindOrCreateOperationTemplate( - world, - &dom_template_key, - V8TestInterfaceCheckSecurity::DoNotCheckSecurityUnforgeableVoidMethodMethodCallback, - v8::Local<v8::Value>(), - signature, - 0); - - V8SetReturnValue( - info, - method_template->GetFunction( - isolate->GetCurrentContext()).ToLocalChecked()); - return; - } - static int dom_template_key; // This address is used for a key to look up the dom template. - v8::Local<v8::FunctionTemplate> method_template = data->FindOrCreateOperationTemplate( world, @@ -441,21 +308,10 @@ signature, 0); - // When the web author overwrote the property, return the overwriting value. - // - // "doNotCheckSecurityUnforgeableVoidMethod" must be the same as |name_in_utf8| (=name) in - // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl. - V8PrivateProperty::Symbol property_symbol = - V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityUnforgeableVoidMethod"); - v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder()); - if (property_symbol.HasValue(holder)) { - V8SetReturnValue(info, property_symbol.GetOrUndefined(holder)); - } else { - V8SetReturnValue( - info, - method_template->GetFunction( - holder->CreationContext()).ToLocalChecked()); - } + V8SetReturnValue( + info, + method_template->GetFunction( + isolate->GetCurrentContext()).ToLocalChecked()); } static void DoNotCheckSecurityVoidOverloadMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) { @@ -571,32 +427,7 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interface_template); - TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder()); - // Different FunctionTemplates should be used between cross-origin access and - // same-origin access. - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(isolate), impl, - BindingSecurity::ErrorReportOption::kDoNotReport)) { - static int dom_template_key; // This address is used for a key to look up the dom template. - - v8::Local<v8::FunctionTemplate> method_template = - data->FindOrCreateOperationTemplate( - world, - &dom_template_key, - V8TestInterfaceCheckSecurity::DoNotCheckSecurityVoidOverloadMethodMethodCallback, - v8::Local<v8::Value>(), - signature, - test_interface_check_security_v8_internal::DoNotCheckSecurityVoidOverloadMethodMethodLength()); - - V8SetReturnValue( - info, - method_template->GetFunction( - isolate->GetCurrentContext()).ToLocalChecked()); - return; - } - static int dom_template_key; // This address is used for a key to look up the dom template. - v8::Local<v8::FunctionTemplate> method_template = data->FindOrCreateOperationTemplate( world, @@ -606,21 +437,10 @@ signature, test_interface_check_security_v8_internal::DoNotCheckSecurityVoidOverloadMethodMethodLength()); - // When the web author overwrote the property, return the overwriting value. - // - // "doNotCheckSecurityVoidOverloadMethod" must be the same as |name_in_utf8| (=name) in - // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl. - V8PrivateProperty::Symbol property_symbol = - V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityVoidOverloadMethod"); - v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder()); - if (property_symbol.HasValue(holder)) { - V8SetReturnValue(info, property_symbol.GetOrUndefined(holder)); - } else { - V8SetReturnValue( - info, - method_template->GetFunction( - holder->CreationContext()).ToLocalChecked()); - } + V8SetReturnValue( + info, + method_template->GetFunction( + isolate->GetCurrentContext()).ToLocalChecked()); } static void SecureContextRuntimeEnabledMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) { @@ -641,34 +461,6 @@ impl->secureContextRuntimeEnabledMethod(arg); } -static void TestInterfaceCheckSecurityOriginSafeMethodSetter( - v8::Local<v8::Name> name, - v8::Local<v8::Value> v8_value, - const v8::PropertyCallbackInfo<void>& info) { - if (!name->IsString()) - return; - v8::Local<v8::Object> holder = - V8TestInterfaceCheckSecurity::FindInstanceInPrototypeChain(info.Holder(), info.GetIsolate()); - if (holder.IsEmpty()) - return; - TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(holder); - v8::String::Utf8Value name_in_utf8(info.GetIsolate(), name); - ExceptionState exception_state( - info.GetIsolate(), - ExceptionState::kSetterContext, - "TestInterfaceCheckSecurity", - *name_in_utf8); - if (!BindingSecurity::ShouldAllowAccessTo( - CurrentDOMWindow(info.GetIsolate()), impl, exception_state)) { - return; - } - - // |methodName| must be same with {{method.name}} in - // {{method.name}}OriginSafeMethodGetter{{world_suffix}} defined in - // methods.cc.tmpl - V8PrivateProperty::GetSymbol(info.GetIsolate(), *name_in_utf8) - .Set(v8::Local<v8::Object>::Cast(info.Holder()), v8_value); -} static const struct { using GetterCallback = void(*)(const v8::PropertyCallbackInfo<v8::Value>&); using SetterCallback = void(*)(v8::Local<v8::Value>, const V8CrossOriginCallbackInfo&); @@ -846,13 +638,6 @@ test_interface_check_security_v8_internal::SecureContextRuntimeEnabledMethodMethod(info); } -void V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback( - v8::Local<v8::Name> name, - v8::Local<v8::Value> v8_value, - const v8::PropertyCallbackInfo<void>& info) { - test_interface_check_security_v8_internal::TestInterfaceCheckSecurityOriginSafeMethodSetter(name, v8_value, info); -} - bool V8TestInterfaceCheckSecurity::SecurityCheck(v8::Local<v8::Context> accessing_context, v8::Local<v8::Object> accessed_object, v8::Local<v8::Value> data) { #error "Unexpected security check for interface TestInterfaceCheckSecurity" } @@ -989,77 +774,77 @@ v8::External::New(isolate, const_cast<WrapperTypeInfo*>(V8TestInterfaceCheckSecurity::GetWrapperTypeInfo()))); // Custom signature - static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityVoidMethodOriginSafeAttributeConfiguration[] = { + static const V8DOMConfiguration::MethodConfiguration kDoNotCheckSecurityVoidMethodOriginSafeMethodConfiguration[] = { { "doNotCheckSecurityVoidMethod", - V8TestInterfaceCheckSecurity::DoNotCheckSecurityVoidMethodOriginSafeMethodGetterCallback, - V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, + V8TestInterfaceCheckSecurity::DoNotCheckSecurityVoidMethodMethodCallback, + 0, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds, } }; - for (const auto& attributeConfig : doNotCheckSecurityVoidMethodOriginSafeAttributeConfiguration) - V8DOMConfiguration::InstallAttribute(isolate, world, instance_template, prototype_template, attributeConfig); - static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeAttributeConfiguration[] = { + for (const auto& method_config : kDoNotCheckSecurityVoidMethodOriginSafeMethodConfiguration) + V8DOMConfiguration::InstallMethod(isolate, world, instance_template, prototype_template, interface_template, signature, method_config); + static const V8DOMConfiguration::MethodConfiguration kDoNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodConfiguration[] = { { "doNotCheckSecurityPerWorldBindingsVoidMethod", - V8TestInterfaceCheckSecurity::DoNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallbackForMainWorld, - V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallbackForMainWorld, + V8TestInterfaceCheckSecurity::DoNotCheckSecurityPerWorldBindingsVoidMethodMethodCallbackForMainWorld, + 0, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::MainWorld, }, { "doNotCheckSecurityPerWorldBindingsVoidMethod", - V8TestInterfaceCheckSecurity::DoNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallback, - V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, + V8TestInterfaceCheckSecurity::DoNotCheckSecurityPerWorldBindingsVoidMethodMethodCallback, + 0, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::NonMainWorlds, } }; - for (const auto& attributeConfig : doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeAttributeConfiguration) - V8DOMConfiguration::InstallAttribute(isolate, world, instance_template, prototype_template, attributeConfig); - static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityUnforgeableVoidMethodOriginSafeAttributeConfiguration[] = { + for (const auto& method_config : kDoNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodConfiguration) + V8DOMConfiguration::InstallMethod(isolate, world, instance_template, prototype_template, interface_template, signature, method_config); + static const V8DOMConfiguration::MethodConfiguration kDoNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodConfiguration[] = { { "doNotCheckSecurityUnforgeableVoidMethod", - V8TestInterfaceCheckSecurity::DoNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallback, - nullptr, + V8TestInterfaceCheckSecurity::DoNotCheckSecurityUnforgeableVoidMethodMethodCallback, + 0, static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds, } }; - for (const auto& attributeConfig : doNotCheckSecurityUnforgeableVoidMethodOriginSafeAttributeConfiguration) - V8DOMConfiguration::InstallAttribute(isolate, world, instance_template, prototype_template, attributeConfig); - static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityVoidOverloadMethodOriginSafeAttributeConfiguration[] = { + for (const auto& method_config : kDoNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodConfiguration) + V8DOMConfiguration::InstallMethod(isolate, world, instance_template, prototype_template, interface_template, signature, method_config); + static const V8DOMConfiguration::MethodConfiguration kDoNotCheckSecurityVoidOverloadMethodOriginSafeMethodConfiguration[] = { { "doNotCheckSecurityVoidOverloadMethod", - V8TestInterfaceCheckSecurity::DoNotCheckSecurityVoidOverloadMethodOriginSafeMethodGetterCallback, - V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, + V8TestInterfaceCheckSecurity::DoNotCheckSecurityVoidOverloadMethodMethodCallback, + test_interface_check_security_v8_internal::DoNotCheckSecurityVoidOverloadMethodMethodLength(), static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, + V8DOMConfiguration::kCheckAccess, V8DOMConfiguration::kHasSideEffect, - V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds, } }; - for (const auto& attributeConfig : doNotCheckSecurityVoidOverloadMethodOriginSafeAttributeConfiguration) - V8DOMConfiguration::InstallAttribute(isolate, world, instance_template, prototype_template, attributeConfig); + for (const auto& method_config : kDoNotCheckSecurityVoidOverloadMethodOriginSafeMethodConfiguration) + V8DOMConfiguration::InstallMethod(isolate, world, instance_template, prototype_template, interface_template, signature, method_config); V8TestInterfaceCheckSecurity::InstallRuntimeEnabledFeaturesOnTemplate( isolate, world, interface_template);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h index e14a98b..11acfd4 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.h
@@ -75,7 +75,6 @@ CORE_EXPORT static void DoNotCheckSecurityVoidOverloadMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void DoNotCheckSecurityVoidOverloadMethodOriginSafeMethodGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&); CORE_EXPORT static void SecureContextRuntimeEnabledMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); - CORE_EXPORT static void TestInterfaceCheckSecurityOriginSafeMethodSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value>, const v8::PropertyCallbackInfo<void>&); CORE_EXPORT static bool SecurityCheck(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Value>); CORE_EXPORT static void CrossOriginNamedGetter(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc index 4ec88a508..cac490f 100644 --- a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc +++ b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
@@ -308,7 +308,7 @@ IsA<HTMLMeterElement>(element) || IsA<HTMLProgressElement>(element) || IsA<HTMLCanvasElement>(element) || IsHTMLMediaElement(element) || IsHTMLInputElement(element) || IsHTMLTextAreaElement(element) || - IsHTMLSelectElement(element)) { + IsA<HTMLSelectElement>(element)) { style.SetDisplay(EDisplay::kNone); } }
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc index 64bc412..5e2ec4b 100644 --- a/third_party/blink/renderer/core/css/selector_checker.cc +++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -84,8 +84,8 @@ } static bool MatchesListBoxPseudoClass(const Element& element) { - return IsHTMLSelectElement(element) && - !ToHTMLSelectElement(element).UsesMenuList(); + auto* html_select_element = DynamicTo<HTMLSelectElement>(element); + return html_select_element && !html_select_element->UsesMenuList(); } static bool MatchesTagName(const Element& element,
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc index 50e40ff6..637c3d3 100644 --- a/third_party/blink/renderer/core/css/style_engine_test.cc +++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -1594,6 +1594,7 @@ EXPECT_EQ(MakeRGB(0, 128, 0), GetDocument().body()->GetComputedStyle()->VisitedDependentColor( GetCSSPropertyColor())); + Platform::Current()->ThemeEngine()->SetForcedColors(ForcedColors::kNone); } TEST_F(StyleEngineTest, MediaQueriesChangeForcedColorsAndPreferredColorScheme) { @@ -1662,10 +1663,10 @@ EXPECT_EQ(MakeRGB(0, 0, 255), GetDocument().body()->GetComputedStyle()->VisitedDependentColor( GetCSSPropertyColor())); + Platform::Current()->ThemeEngine()->SetForcedColors(ForcedColors::kNone); } -// Flaky. https://crbug.com/1014380 -TEST_F(StyleEngineTest, DISABLED_MediaQueriesColorSchemeOverride) { +TEST_F(StyleEngineTest, MediaQueriesColorSchemeOverride) { ScopedMediaQueryPrefersColorSchemeForTest feature_scope(true); EXPECT_EQ(PreferredColorScheme::kNoPreference, @@ -1700,8 +1701,7 @@ GetCSSPropertyColor())); } -// Flaky. https://crbug.com/1014380 -TEST_F(StyleEngineTest, DISABLED_MediaQueriesReducedMotionOverride) { +TEST_F(StyleEngineTest, MediaQueriesReducedMotionOverride) { EXPECT_FALSE(GetDocument().GetSettings()->GetPrefersReducedMotion()); GetDocument().body()->SetInnerHTMLFromString(R"HTML( @@ -1733,8 +1733,7 @@ GetCSSPropertyColor())); } -// Flaky. https://crbug.com/1014380 -TEST_F(StyleEngineTest, DISABLED_MediaQueriesChangeNavigationControls) { +TEST_F(StyleEngineTest, MediaQueriesChangeNavigationControls) { ScopedMediaQueryNavigationControlsForTest scoped_feature(true); GetDocument().body()->SetInnerHTMLFromString(R"HTML( <style>
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 5a62770d..fe3647ab 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -7109,7 +7109,6 @@ } void Document::UpdateFocusAppearanceAfterLayout() { - DCHECK_LT(Lifecycle().GetState(), DocumentLifecycle::kLayoutClean); update_focus_appearance_after_layout_ = true; }
diff --git a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc index 2274c0d..24ce6bf 100644 --- a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc +++ b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
@@ -337,7 +337,7 @@ // TODO(dtapuska): Change this to a target SDK quirk crbug.com/643705 if (!is_trusted_or_click && event_->IsMouseEvent() && event_->type() == event_type_names::kMousedown && - IsHTMLSelectElement(*node_)) { + IsA<HTMLSelectElement>(*node_)) { if (Settings* settings = node_->GetDocument().GetSettings()) { is_trusted_or_click = settings->GetWideViewportQuirkEnabled(); } @@ -382,7 +382,7 @@ // events to open select boxes. if (!event_->isTrusted() && event_->IsMouseEvent() && event_->type() == event_type_names::kMousedown && - IsHTMLSelectElement(*node_)) { + IsA<HTMLSelectElement>(*node_)) { UseCounter::Count(node_->GetDocument(), WebFeature::kUntrustedMouseDownEventDispatchedToSelect); }
diff --git a/third_party/blink/renderer/core/dom/slot_assignment.cc b/third_party/blink/renderer/core/dom/slot_assignment.cc index 84c5c69..5ae4e837 100644 --- a/third_party/blink/renderer/core/dom/slot_assignment.cc +++ b/third_party/blink/renderer/core/dom/slot_assignment.cc
@@ -24,7 +24,7 @@ bool ShouldAssignToCustomSlot(const Node& node) { if (IsA<HTMLDetailsElement>(node.parentElement())) return HTMLDetailsElement::IsFirstSummary(node); - if (IsHTMLSelectElement(node.parentElement())) + if (IsA<HTMLSelectElement>(node.parentElement())) return HTMLSelectElement::CanAssignToSelectSlot(node); if (IsA<HTMLOptGroupElement>(node.parentElement())) return HTMLOptGroupElement::CanAssignToOptGroupSlot(node);
diff --git a/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc b/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc index 6da40a9..8784b1c 100644 --- a/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc +++ b/third_party/blink/renderer/core/editing/commands/replace_selection_command.cc
@@ -807,7 +807,7 @@ // TODO(yosin): We should set |end_of_inserted_content_| not in SELECT // element, since contents of SELECT elements, e.g. OPTION, OPTGROUP, are // not editable, or SELECT element is an atomic on editing. - HTMLSelectElement* enclosing_select = ToHTMLSelectElement( + auto* enclosing_select = To<HTMLSelectElement>( EnclosingElementWithTag(end_of_inserted_content_, kSelectTag)); if (enclosing_select) { return CreateVisiblePosition(LastPositionInOrAfterNode(*enclosing_select));
diff --git a/third_party/blink/renderer/core/editing/editing_utilities.cc b/third_party/blink/renderer/core/editing/editing_utilities.cc index 988b71d7..cfa485cf 100644 --- a/third_party/blink/renderer/core/editing/editing_utilities.cc +++ b/third_party/blink/renderer/core/editing/editing_utilities.cc
@@ -343,7 +343,7 @@ // instead of |isSelectionBondary()|. bool IsUserSelectContain(const Node& node) { return IsHTMLTextAreaElement(node) || IsHTMLInputElement(node) || - IsHTMLSelectElement(node); + IsA<HTMLSelectElement>(node); } enum EditableLevel { kEditable, kRichlyEditable };
diff --git a/third_party/blink/renderer/core/editing/element_inner_text.cc b/third_party/blink/renderer/core/editing/element_inner_text.cc index bc56c6c..2fe5c49d 100644 --- a/third_party/blink/renderer/core/editing/element_inner_text.cc +++ b/third_party/blink/renderer/core/editing/element_inner_text.cc
@@ -123,8 +123,8 @@ // Note: Handles <select> and <option> here since they are implemented as // UA shadow DOM, e.g. Text nodes in <option> don't have layout object. // See also: https://github.com/whatwg/html/issues/3797 - if (IsHTMLSelectElement(element)) - ProcessSelectElement(ToHTMLSelectElement(element)); + if (auto* html_select_element = DynamicTo<HTMLSelectElement>(element)) + ProcessSelectElement(*html_select_element); else if (auto* option_element = DynamicTo<HTMLOptionElement>(element)) ProcessOptionElement(*option_element); else @@ -309,8 +309,8 @@ // whose child boxes include only those of option element child nodes; and // * option element have an associated non-replaced block-level CSS box whose // child boxes are as normal for non-replaced block-level CSS boxes. - if (IsHTMLSelectElement(node)) - return ProcessSelectElement(ToHTMLSelectElement(node)); + if (auto* html_select_element = DynamicTo<HTMLSelectElement>(node)) + return ProcessSelectElement(*html_select_element); if (auto* option_element = DynamicTo<HTMLOptionElement>(node)) { // Since child nodes of OPTION are not rendered, we use dedicated function. // e.g. <div>ab<option>12</div>cd</div>innerText == "ab\n12\ncd"
diff --git a/third_party/blink/renderer/core/editing/finder/find_buffer.cc b/third_party/blink/renderer/core/editing/finder/find_buffer.cc index b04f994..7c9dbdc4 100644 --- a/third_party/blink/renderer/core/editing/finder/find_buffer.cc +++ b/third_party/blink/renderer/core/editing/finder/find_buffer.cc
@@ -105,8 +105,8 @@ IsA<HTMLIFrameElement>(*element) || IsHTMLImageElement(*element) || IsA<HTMLLegendElement>(*element) || IsA<HTMLMeterElement>(*element) || IsHTMLObjectElement(*element) || IsA<HTMLProgressElement>(*element) || - (IsHTMLSelectElement(*element) && - ToHTMLSelectElement(*element).UsesMenuList()) || + (IsA<HTMLSelectElement>(*element) && + To<HTMLSelectElement>(*element).UsesMenuList()) || IsHTMLStyleElement(*element) || IsHTMLScriptElement(*element) || IsHTMLVideoElement(*element) || IsA<HTMLAudioElement>(*element) || (element->GetDisplayLockContext() &&
diff --git a/third_party/blink/renderer/core/editing/frame_selection.cc b/third_party/blink/renderer/core/editing/frame_selection.cc index 32bb755..fbd58025 100644 --- a/third_party/blink/renderer/core/editing/frame_selection.cc +++ b/third_party/blink/renderer/core/editing/frame_selection.cc
@@ -691,7 +691,7 @@ void FrameSelection::SelectAll(SetSelectionBy set_selection_by) { if (auto* select_element = - ToHTMLSelectElementOrNull(GetDocument().FocusedElement())) { + DynamicTo<HTMLSelectElement>(GetDocument().FocusedElement())) { if (select_element->CanSelectAll()) { select_element->SelectAll(); return;
diff --git a/third_party/blink/renderer/core/editing/selection_adjuster.cc b/third_party/blink/renderer/core/editing/selection_adjuster.cc index 2a8858e..230645e 100644 --- a/third_party/blink/renderer/core/editing/selection_adjuster.cc +++ b/third_party/blink/renderer/core/editing/selection_adjuster.cc
@@ -409,7 +409,7 @@ static bool IsSelectionBoundary(const Node& node) { return IsHTMLTextAreaElement(node) || IsHTMLInputElement(node) || - IsHTMLSelectElement(node); + IsA<HTMLSelectElement>(node); } static Node* EnclosingShadowHostForStart(const PositionInFlatTree& position) {
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc index 55c2e90..e6958a5 100644 --- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc +++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -729,7 +729,7 @@ } void LocalFrameClientImpl::DidObserveLoadingBehavior( - WebLoadingBehaviorFlag behavior) { + LoadingBehaviorFlag behavior) { if (web_frame_->Client()) web_frame_->Client()->DidObserveLoadingBehavior(behavior); }
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h index 24bdb71..c9a2e7a 100644 --- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h +++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -152,7 +152,7 @@ void DidChangePerformanceTiming() override; void DidChangeCpuTiming(base::TimeDelta) override; void DidChangeActiveSchedulerTrackedFeatures(uint64_t features_mask) override; - void DidObserveLoadingBehavior(WebLoadingBehaviorFlag) override; + void DidObserveLoadingBehavior(LoadingBehaviorFlag) override; void DidObserveNewFeatureUsage(mojom::WebFeature) override; void DidObserveNewCssPropertyUsage(mojom::CSSSampleId, bool) override; void DidObserveLayoutShift(double score, bool after_input_or_scroll) override;
diff --git a/third_party/blink/renderer/core/exported/web_form_control_element.cc b/third_party/blink/renderer/core/exported/web_form_control_element.cc index 9c623dc..4529881 100644 --- a/third_party/blink/renderer/core/exported/web_form_control_element.cc +++ b/third_party/blink/renderer/core/exported/web_form_control_element.cc
@@ -79,7 +79,7 @@ bool WebFormControlElement::UserHasEditedTheField() const { if (auto* input = ToHTMLInputElementOrNull(*private_)) return input->UserHasEditedTheField(); - if (auto* select_element = ToHTMLSelectElementOrNull(*private_)) + if (auto* select_element = DynamicTo<HTMLSelectElement>(*private_)) return select_element->UserHasEditedTheField(); return true; } @@ -110,7 +110,7 @@ return input->ShouldAutocomplete(); if (auto* textarea = ToHTMLTextAreaElementOrNull(*private_)) return textarea->ShouldAutocomplete(); - if (auto* select = ToHTMLSelectElementOrNull(*private_)) + if (auto* select = DynamicTo<HTMLSelectElement>(*private_)) return select->ShouldAutocomplete(); return false; } @@ -126,7 +126,7 @@ value, send_events ? TextFieldEventBehavior::kDispatchInputAndChangeEvent : TextFieldEventBehavior::kDispatchNoEvent); - } else if (auto* select = ToHTMLSelectElementOrNull(*private_)) { + } else if (auto* select = DynamicTo<HTMLSelectElement>(*private_)) { select->setValue(value, send_events); } } @@ -147,7 +147,7 @@ Unwrap<Element>()->DispatchBlurEvent(nullptr, kWebFocusTypeForward, nullptr); } - } else if (auto* select = ToHTMLSelectElementOrNull(*private_)) { + } else if (auto* select = DynamicTo<HTMLSelectElement>(*private_)) { if (!Focused()) { Unwrap<Element>()->DispatchFocusEvent(nullptr, kWebFocusTypeForward, nullptr); @@ -165,7 +165,7 @@ return input->value(); if (auto* textarea = ToHTMLTextAreaElementOrNull(*private_)) return textarea->value(); - if (auto* select = ToHTMLSelectElementOrNull(*private_)) + if (auto* select = DynamicTo<HTMLSelectElement>(*private_)) return select->value(); return WebString(); } @@ -175,7 +175,7 @@ input->SetSuggestedValue(value); } else if (auto* textarea = ToHTMLTextAreaElementOrNull(*private_)) { textarea->SetSuggestedValue(value); - } else if (auto* select = ToHTMLSelectElementOrNull(*private_)) + } else if (auto* select = DynamicTo<HTMLSelectElement>(*private_)) select->SetSuggestedValue(value); } @@ -184,7 +184,7 @@ return input->SuggestedValue(); if (auto* textarea = ToHTMLTextAreaElementOrNull(*private_)) return textarea->SuggestedValue(); - if (auto* select = ToHTMLSelectElementOrNull(*private_)) + if (auto* select = DynamicTo<HTMLSelectElement>(*private_)) return select->SuggestedValue(); return WebString(); }
diff --git a/third_party/blink/renderer/core/exported/web_searchable_form_data.cc b/third_party/blink/renderer/core/exported/web_searchable_form_data.cc index e04441e..db51e31 100644 --- a/third_party/blink/renderer/core/exported/web_searchable_form_data.cc +++ b/third_party/blink/renderer/core/exported/web_searchable_form_data.cc
@@ -123,7 +123,7 @@ if (input->type() == input_type_names::kCheckbox || input->type() == input_type_names::kRadio) return input->checked() == input->FastHasAttribute(kCheckedAttr); - } else if (auto* select = ToHTMLSelectElementOrNull(form_element)) { + } else if (auto* select = DynamicTo<HTMLSelectElement>(form_element)) { return IsSelectInDefaultState(*select); } return true;
diff --git a/third_party/blink/renderer/core/exported/web_select_element.cc b/third_party/blink/renderer/core/exported/web_select_element.cc index 08765c9..36ef39d 100644 --- a/third_party/blink/renderer/core/exported/web_select_element.cc +++ b/third_party/blink/renderer/core/exported/web_select_element.cc
@@ -51,7 +51,7 @@ : WebFormControlElement(element) {} DEFINE_WEB_NODE_TYPE_CASTS(WebSelectElement, - IsHTMLSelectElement(ConstUnwrap<Node>())) + IsA<HTMLSelectElement>(ConstUnwrap<Node>())) WebSelectElement& WebSelectElement::operator=(HTMLSelectElement* element) { private_ = element; @@ -59,7 +59,7 @@ } WebSelectElement::operator HTMLSelectElement*() const { - return ToHTMLSelectElement(private_.Get()); + return blink::To<HTMLSelectElement>(private_.Get()); } } // namespace blink
diff --git a/third_party/blink/renderer/core/fetch/fetch_manager.cc b/third_party/blink/renderer/core/fetch/fetch_manager.cc index 0a8f9ee6..67b8ac59 100644 --- a/third_party/blink/renderer/core/fetch/fetch_manager.cc +++ b/third_party/blink/renderer/core/fetch/fetch_manager.cc
@@ -8,6 +8,7 @@ #include "base/feature_list.h" #include "base/single_thread_task_runner.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/cpp/features.h" #include "services/network/public/cpp/request_mode.h" #include "services/network/public/mojom/fetch_api.mojom-blink.h" @@ -782,11 +783,13 @@ fetch_initiator_type_names::kFetch; resource_loader_options.data_buffering_policy = kDoNotBufferData; if (fetch_request_data_->URLLoaderFactory()) { - network::mojom::blink::URLLoaderFactoryPtr factory_clone; - fetch_request_data_->URLLoaderFactory()->Clone(MakeRequest(&factory_clone)); - resource_loader_options.url_loader_factory = base::MakeRefCounted< - base::RefCountedData<network::mojom::blink::URLLoaderFactoryPtr>>( - std::move(factory_clone)); + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> factory_clone; + fetch_request_data_->URLLoaderFactory()->Clone( + factory_clone.InitWithNewPipeAndPassReceiver()); + resource_loader_options.url_loader_factory = + base::MakeRefCounted<base::RefCountedData< + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>>( + std::move(factory_clone)); } threadable_loader_ = MakeGarbageCollected<ThreadableLoader>(
diff --git a/third_party/blink/renderer/core/fetch/fetch_request_data.cc b/third_party/blink/renderer/core/fetch/fetch_request_data.cc index 6ac6ef78..71f5b96 100644 --- a/third_party/blink/renderer/core/fetch/fetch_request_data.cc +++ b/third_party/blink/renderer/core/fetch/fetch_request_data.cc
@@ -165,7 +165,8 @@ request->buffer_ = new2; } if (url_loader_factory_) { - url_loader_factory_->Clone(MakeRequest(&request->url_loader_factory_)); + url_loader_factory_->Clone( + request->url_loader_factory_.BindNewPipeAndPassReceiver()); } return request; }
diff --git a/third_party/blink/renderer/core/fetch/fetch_request_data.h b/third_party/blink/renderer/core/fetch/fetch_request_data.h index ccf3a5c..f8f7ebf 100644 --- a/third_party/blink/renderer/core/fetch/fetch_request_data.h +++ b/third_party/blink/renderer/core/fetch/fetch_request_data.h
@@ -8,6 +8,8 @@ #include "base/macros.h" #include "base/memory/scoped_refptr.h" #include "base/unguessable_token.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/mojom/fetch_api.mojom-blink-forward.h" #include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h" #include "services/network/public/mojom/url_loader_factory.mojom-blink.h" @@ -108,10 +110,11 @@ void SetIsHistoryNavigation(bool b) { is_history_navigation_ = b; } network::mojom::blink::URLLoaderFactory* URLLoaderFactory() const { - return url_loader_factory_.get(); + return url_loader_factory_.is_bound() ? url_loader_factory_.get() : nullptr; } - void SetURLLoaderFactory(network::mojom::blink::URLLoaderFactoryPtr factory) { - url_loader_factory_ = std::move(factory); + void SetURLLoaderFactory( + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> factory) { + url_loader_factory_.Bind(std::move(factory)); } const base::UnguessableToken& WindowId() const { return window_id_; } void SetWindowId(const base::UnguessableToken& id) { window_id_ = id; } @@ -154,7 +157,7 @@ // the system would otherwise decide to use to load this request. // Currently used for blob: URLs, to ensure they can still be loaded even if // the URL got revoked after creating the request. - network::mojom::blink::URLLoaderFactoryPtr url_loader_factory_; + mojo::Remote<network::mojom::blink::URLLoaderFactory> url_loader_factory_; base::UnguessableToken window_id_; DISALLOW_COPY_AND_ASSIGN(FetchRequestData);
diff --git a/third_party/blink/renderer/core/fetch/request.cc b/third_party/blink/renderer/core/fetch/request.cc index 7b1106a8..14923a5 100644 --- a/third_party/blink/renderer/core/fetch/request.cc +++ b/third_party/blink/renderer/core/fetch/request.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/fetch/request.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/cpp/request_mode.h" #include "third_party/blink/public/common/blob/blob_utils.h" #include "third_party/blink/public/common/loader/request_destination.h" @@ -73,8 +74,9 @@ request->SetKeepalive(original->Keepalive()); request->SetIsHistoryNavigation(original->IsHistoryNavigation()); if (original->URLLoaderFactory()) { - network::mojom::blink::URLLoaderFactoryPtr factory_clone; - original->URLLoaderFactory()->Clone(MakeRequest(&factory_clone)); + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> factory_clone; + original->URLLoaderFactory()->Clone( + factory_clone.InitWithNewPipeAndPassReceiver()); request->SetURLLoaderFactory(std::move(factory_clone)); } request->SetWindowId(original->WindowId()); @@ -263,10 +265,12 @@ // fetching of a blob URL should work even after the URL is revoked as long // as the request was created while the URL was still valid. if (parsed_url.ProtocolIs("blob")) { - network::mojom::blink::URLLoaderFactoryPtr url_loader_factory; + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + url_loader_factory; ExecutionContext::From(script_state) ->GetPublicURLManager() - .Resolve(parsed_url, MakeRequest(&url_loader_factory)); + .Resolve(parsed_url, + url_loader_factory.InitWithNewPipeAndPassReceiver()); request->SetURLLoaderFactory(std::move(url_loader_factory)); }
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h index 4847c34..598e7073 100644 --- a/third_party/blink/renderer/core/frame/local_frame_client.h +++ b/third_party/blink/renderer/core/frame/local_frame_client.h
@@ -38,6 +38,7 @@ #include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/mojom/ip_address_space.mojom-blink-forward.h" #include "third_party/blink/public/common/feature_policy/feature_policy.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/common/user_agent/user_agent_metadata.h" #include "third_party/blink/public/mojom/frame/navigation_initiator.mojom-blink-forward.h" #include "third_party/blink/public/mojom/portal/portal.mojom-blink-forward.h" @@ -47,7 +48,6 @@ #include "third_party/blink/public/platform/web_content_settings_client.h" #include "third_party/blink/public/platform/web_effective_connection_type.h" #include "third_party/blink/public/platform/web_insecure_request_policy.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/public/platform/web_sudden_termination_disabler_type.h" #include "third_party/blink/public/platform/web_worker_fetch_context.h" #include "third_party/blink/public/web/web_frame_load_type.h" @@ -223,7 +223,7 @@ // Will be called when a particular loading code path has been used. This // propogates renderer loading behavior to the browser process for histograms. - virtual void DidObserveLoadingBehavior(WebLoadingBehaviorFlag) {} + virtual void DidObserveLoadingBehavior(LoadingBehaviorFlag) {} // Will be called when a new UseCounter feature has been observed in a frame. // This propogates feature usage to the browser process for histograms.
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index da01ba4..587e024 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -1333,20 +1333,21 @@ // A select element with a "multiple" attribute or with a display size greater // than 1. - if (auto* select_element = ToHTMLSelectElementOrNull(element)) { + if (auto* select_element = DynamicTo<HTMLSelectElement>(element)) { if (select_element->IsMultiple() || select_element->size() > 1) return true; } // An option element that is in a list of options of a select element with a // "multiple" attribute or with a display size greater than 1. - if (IsA<HTMLOptionElement>(element) && element.parentNode() && - IsHTMLSelectElement(*element.parentNode())) { - const HTMLSelectElement& select_element = - ToHTMLSelectElement(*element.parentNode()); - if (select_element.IsMultiple() || select_element.size() > 1) - return true; - } + const auto* parent_select = + IsA<HTMLOptionElement>(element) + ? DynamicTo<HTMLSelectElement>(element.parentNode()) + : nullptr; + + if (parent_select && + (parent_select->IsMultiple() || parent_select->size() > 1)) + return true; // An element that would not be interactive content except for having the // tabindex attribute specified.
diff --git a/third_party/blink/renderer/core/html/forms/external_popup_menu_test.cc b/third_party/blink/renderer/core/html/forms/external_popup_menu_test.cc index 5e05a5b..383f6a85 100644 --- a/third_party/blink/renderer/core/html/forms/external_popup_menu_test.cc +++ b/third_party/blink/renderer/core/html/forms/external_popup_menu_test.cc
@@ -140,7 +140,7 @@ WebView()->MainFrameWidget()->UpdateAllLifecyclePhases( WebWidget::LifecycleUpdateReason::kTest); - HTMLSelectElement* select = ToHTMLSelectElement( + auto* select = To<HTMLSelectElement>( MainFrame()->GetFrame()->GetDocument()->getElementById("select")); LayoutMenuList* menu_list = ToLayoutMenuList(select->GetLayoutObject()); ASSERT_TRUE(menu_list); @@ -169,7 +169,7 @@ RegisterMockedURLLoad("select.html"); LoadFrame("select.html"); - HTMLSelectElement* select = ToHTMLSelectElement( + auto* select = To<HTMLSelectElement>( MainFrame()->GetFrame()->GetDocument()->getElementById("select")); LayoutMenuList* menu_list = ToLayoutMenuList(select->GetLayoutObject()); ASSERT_TRUE(menu_list); @@ -189,7 +189,7 @@ RegisterMockedURLLoad("select.html"); LoadFrame("select.html"); - HTMLSelectElement* select = ToHTMLSelectElement( + auto* select = To<HTMLSelectElement>( MainFrame()->GetFrame()->GetDocument()->getElementById("select")); LayoutMenuList* menu_list = ToLayoutMenuList(select->GetLayoutObject()); ASSERT_TRUE(menu_list); @@ -211,7 +211,7 @@ RegisterMockedURLLoad("select.html"); LoadFrame("select.html"); - HTMLSelectElement* select = ToHTMLSelectElement( + auto* select = To<HTMLSelectElement>( MainFrame()->GetFrame()->GetDocument()->getElementById("select")); LayoutMenuList* menu_list = ToLayoutMenuList(select->GetLayoutObject()); ASSERT_TRUE(menu_list);
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.cc b/third_party/blink/renderer/core/html/forms/html_input_element.cc index f32097f7..4f2db6f 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_input_element.cc
@@ -415,6 +415,10 @@ DropInnerEditorElement(); SetForceReattachLayoutTree(); + // In this function, we should not do force to do style recalc and layout. + DocumentLifecycle::DisallowTransitionScope disallow_transition( + GetDocument().Lifecycle()); + if (input_type_->SupportsRequired() != new_type->SupportsRequired() && IsRequired()) { PseudoStateChanged(CSSSelector::kPseudoRequired);
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element_test.cc b/third_party/blink/renderer/core/html/forms/html_input_element_test.cc index 282cb37..f68bfb64 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element_test.cc +++ b/third_party/blink/renderer/core/html/forms/html_input_element_test.cc
@@ -237,4 +237,16 @@ EXPECT_TRUE(input->GetLayoutObject()->ShouldCheckForPaintInvalidation()); } +TEST_F(HTMLInputElementTest, UpdateTypeDcheck) { + Document& doc = GetDocument(); + // Removing <body> is required to reproduce the issue. + doc.body()->remove(); + Element* input = doc.CreateRawElement(html_names::kInputTag); + doc.documentElement()->appendChild(input); + input->focus(); + input->setAttribute(html_names::kTypeAttr, AtomicString("radio")); + // Test succeeds if the above setAttribute() didn't trigger a DCHECK failure + // in Document::UpdateFocusAppearanceAfterLayout(). +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc b/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc index de72893..c7659e3 100644 --- a/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_opt_group_element.cc
@@ -96,7 +96,7 @@ } void HTMLOptGroupElement::RemovedFrom(ContainerNode& insertion_point) { - if (auto* select = ToHTMLSelectElementOrNull(insertion_point)) { + if (auto* select = DynamicTo<HTMLSelectElement>(insertion_point)) { if (!parentNode()) select->OptGroupInsertedOrRemoved(*this); }
diff --git a/third_party/blink/renderer/core/html/forms/html_option_element.cc b/third_party/blink/renderer/core/html/forms/html_option_element.cc index 3dd52b8..275f0f5 100644 --- a/third_party/blink/renderer/core/html/forms/html_option_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_option_element.cc
@@ -280,10 +280,10 @@ HTMLSelectElement* HTMLOptionElement::OwnerSelectElement() const { if (!parentNode()) return nullptr; - if (auto* select = ToHTMLSelectElementOrNull(*parentNode())) + if (auto* select = DynamicTo<HTMLSelectElement>(*parentNode())) return select; if (IsA<HTMLOptGroupElement>(*parentNode())) - return ToHTMLSelectElementOrNull(parentNode()->parentNode()); + return DynamicTo<HTMLSelectElement>(parentNode()->parentNode()); return nullptr; } @@ -338,11 +338,11 @@ } void HTMLOptionElement::RemovedFrom(ContainerNode& insertion_point) { - if (auto* select = ToHTMLSelectElementOrNull(insertion_point)) { + if (auto* select = DynamicTo<HTMLSelectElement>(insertion_point)) { if (!parentNode() || IsA<HTMLOptGroupElement>(*parentNode())) select->OptionRemoved(*this); } else if (IsA<HTMLOptGroupElement>(insertion_point)) { - select = ToHTMLSelectElementOrNull(insertion_point.parentNode()); + select = DynamicTo<HTMLSelectElement>(insertion_point.parentNode()); if (select) select->OptionRemoved(*this); }
diff --git a/third_party/blink/renderer/core/html/forms/html_options_collection.cc b/third_party/blink/renderer/core/html/forms/html_options_collection.cc index 65de9989..13c3d22 100644 --- a/third_party/blink/renderer/core/html/forms/html_options_collection.cc +++ b/third_party/blink/renderer/core/html/forms/html_options_collection.cc
@@ -31,7 +31,7 @@ HTMLOptionsCollection::HTMLOptionsCollection(ContainerNode& select) : HTMLCollection(select, kSelectOptions, kDoesNotOverrideItemAfter) { - DCHECK(IsHTMLSelectElement(select)); + DCHECK(IsA<HTMLSelectElement>(select)); } HTMLOptionsCollection::HTMLOptionsCollection(ContainerNode& select, @@ -74,31 +74,31 @@ const HTMLOptionElementOrHTMLOptGroupElement& element, const HTMLElementOrLong& before, ExceptionState& exception_state) { - ToHTMLSelectElement(ownerNode()).add(element, before, exception_state); + To<HTMLSelectElement>(ownerNode()).add(element, before, exception_state); } void HTMLOptionsCollection::remove(int index) { - ToHTMLSelectElement(ownerNode()).remove(index); + To<HTMLSelectElement>(ownerNode()).remove(index); } int HTMLOptionsCollection::selectedIndex() const { - return ToHTMLSelectElement(ownerNode()).selectedIndex(); + return To<HTMLSelectElement>(ownerNode()).selectedIndex(); } void HTMLOptionsCollection::setSelectedIndex(int index) { - ToHTMLSelectElement(ownerNode()).setSelectedIndex(index); + To<HTMLSelectElement>(ownerNode()).setSelectedIndex(index); } void HTMLOptionsCollection::setLength(unsigned length, ExceptionState& exception_state) { - ToHTMLSelectElement(ownerNode()).setLength(length, exception_state); + To<HTMLSelectElement>(ownerNode()).setLength(length, exception_state); } bool HTMLOptionsCollection::AnonymousIndexedSetter( unsigned index, HTMLOptionElement* value, ExceptionState& exception_state) { - HTMLSelectElement& base = ToHTMLSelectElement(ownerNode()); + auto& base = To<HTMLSelectElement>(ownerNode()); if (!value) { // undefined or null base.remove(index); return true;
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element_test.cc b/third_party/blink/renderer/core/html/forms/html_select_element_test.cc index aa1c35b..8da7099 100644 --- a/third_party/blink/renderer/core/html/forms/html_select_element_test.cc +++ b/third_party/blink/renderer/core/html/forms/html_select_element_test.cc
@@ -34,25 +34,25 @@ "<option value='111' selected id='2'>!666</option>" "<option value='999'>999</option></select>"); Element* element = GetElementById("sel"); - HTMLFormControlElementWithState* select = ToHTMLSelectElement(element); auto* opt0 = To<HTMLOptionElement>(GetElementById("0")); auto* opt2 = To<HTMLOptionElement>(GetElementById("2")); // Save the select element state, and then restore again. // Test passes if the restored state is not changed. - EXPECT_EQ(2, ToHTMLSelectElement(element)->selectedIndex()); + EXPECT_EQ(2, To<HTMLSelectElement>(element)->selectedIndex()); EXPECT_FALSE(opt0->Selected()); EXPECT_TRUE(opt2->Selected()); + HTMLFormControlElementWithState* select = To<HTMLSelectElement>(element); FormControlState select_state = select->SaveFormControlState(); EXPECT_EQ(2U, select_state.ValueSize()); // Clear the selected state, to be restored by restoreFormControlState. - ToHTMLSelectElement(select)->setSelectedIndex(-1); + To<HTMLSelectElement>(select)->setSelectedIndex(-1); ASSERT_FALSE(opt2->Selected()); // Restore select->RestoreFormControlState(select_state); - EXPECT_EQ(2, ToHTMLSelectElement(element)->selectedIndex()); + EXPECT_EQ(2, To<HTMLSelectElement>(element)->selectedIndex()); EXPECT_FALSE(opt0->Selected()); EXPECT_TRUE(opt2->Selected()); } @@ -64,8 +64,6 @@ "<option value='222'>222</option>" "<option value='111' selected id='2'>!666</option>" "<option value='999' selected id='3'>999</option></select>"); - HTMLFormControlElementWithState* select = - ToHTMLSelectElement(GetElementById("sel")); auto* opt0 = To<HTMLOptionElement>(GetElementById("0")); auto* opt2 = To<HTMLOptionElement>(GetElementById("2")); @@ -76,6 +74,8 @@ EXPECT_FALSE(opt0->Selected()); EXPECT_TRUE(opt2->Selected()); EXPECT_TRUE(opt3->Selected()); + HTMLFormControlElementWithState* select = + To<HTMLSelectElement>(GetElementById("sel")); FormControlState select_state = select->SaveFormControlState(); EXPECT_EQ(4U, select_state.ValueSize()); @@ -105,11 +105,11 @@ </select> )HTML"); Element* element = GetElementById("sel"); - HTMLFormControlElementWithState* select = ToHTMLSelectElement(element); auto* opt2 = To<HTMLOptionElement>(GetElementById("2")); - ToHTMLSelectElement(element)->setSelectedIndex(1); + To<HTMLSelectElement>(element)->setSelectedIndex(1); // Save the current state. + HTMLFormControlElementWithState* select = To<HTMLSelectElement>(element); FormControlState select_state = select->SaveFormControlState(); EXPECT_EQ(2U, select_state.ValueSize()); @@ -120,16 +120,15 @@ // Restore select->RestoreFormControlState(select_state); - EXPECT_EQ(-1, ToHTMLSelectElement(element)->selectedIndex()); - EXPECT_EQ(nullptr, ToHTMLSelectElement(element)->OptionToBeShown()); + EXPECT_EQ(-1, To<HTMLSelectElement>(element)->selectedIndex()); + EXPECT_EQ(nullptr, To<HTMLSelectElement>(element)->OptionToBeShown()); } TEST_F(HTMLSelectElementTest, VisibleBoundsInVisualViewport) { SetHtmlInnerHTML( "<select style='position:fixed; top:12.3px; height:24px; " "-webkit-appearance:none;'><option>o1</select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); ASSERT_NE(select, nullptr); IntRect bounds = select->VisibleBoundsInVisualViewport(); EXPECT_EQ(24, bounds.Height()); @@ -137,8 +136,7 @@ TEST_F(HTMLSelectElementTest, PopupIsVisible) { SetHtmlInnerHTML("<select><option>o1</option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); ASSERT_NE(select, nullptr); EXPECT_FALSE(select->PopupIsVisible()); select->ShowPopup(); @@ -150,15 +148,13 @@ TEST_F(HTMLSelectElementTest, FirstSelectableOption) { { SetHtmlInnerHTML("<select></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ(nullptr, select->FirstSelectableOption()); } { SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->FirstSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -166,8 +162,7 @@ SetHtmlInnerHTML( "<select><option id=o1 disabled></option><option " "id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->FirstSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -175,8 +170,7 @@ SetHtmlInnerHTML( "<select><option id=o1 style='display:none'></option><option " "id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->FirstSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -184,8 +178,7 @@ SetHtmlInnerHTML( "<select><optgroup><option id=o1></option><option " "id=o2></option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->FirstSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -194,15 +187,13 @@ TEST_F(HTMLSelectElementTest, LastSelectableOption) { { SetHtmlInnerHTML("<select></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ(nullptr, select->LastSelectableOption()); } { SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->LastSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -210,8 +201,7 @@ SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2 " "disabled></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->LastSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -219,8 +209,7 @@ SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2 " "style='display:none'></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->LastSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -228,8 +217,7 @@ SetHtmlInnerHTML( "<select><optgroup><option id=o1></option><option " "id=o2></option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->LastSelectableOption()->FastGetAttribute( html_names::kIdAttr)); } @@ -238,15 +226,13 @@ TEST_F(HTMLSelectElementTest, NextSelectableOption) { { SetHtmlInnerHTML("<select></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ(nullptr, select->NextSelectableOption(nullptr)); } { SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->NextSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } @@ -254,8 +240,7 @@ SetHtmlInnerHTML( "<select><option id=o1 disabled></option><option " "id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->NextSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } @@ -263,8 +248,7 @@ SetHtmlInnerHTML( "<select><option id=o1 style='display:none'></option><option " "id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->NextSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } @@ -272,16 +256,14 @@ SetHtmlInnerHTML( "<select><optgroup><option id=o1></option><option " "id=o2></option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->NextSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } { SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); auto* option = To<HTMLOptionElement>(GetElementById("o1")); EXPECT_EQ("o2", select->NextSelectableOption(option)->FastGetAttribute( html_names::kIdAttr)); @@ -293,8 +275,7 @@ SetHtmlInnerHTML( "<select><option id=o1></option><optgroup><option " "id=o2></option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); auto* option = To<HTMLOptionElement>(GetElementById("o1")); EXPECT_EQ("o2", select->NextSelectableOption(option)->FastGetAttribute( html_names::kIdAttr)); @@ -304,15 +285,13 @@ TEST_F(HTMLSelectElementTest, PreviousSelectableOption) { { SetHtmlInnerHTML("<select></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ(nullptr, select->PreviousSelectableOption(nullptr)); } { SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->PreviousSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } @@ -320,8 +299,7 @@ SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2 " "disabled></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->PreviousSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } @@ -329,8 +307,7 @@ SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2 " "style='display:none'></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o1", select->PreviousSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } @@ -338,16 +315,14 @@ SetHtmlInnerHTML( "<select><optgroup><option id=o1></option><option " "id=o2></option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); EXPECT_EQ("o2", select->PreviousSelectableOption(nullptr)->FastGetAttribute( html_names::kIdAttr)); } { SetHtmlInnerHTML( "<select><option id=o1></option><option id=o2></option></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); auto* option = To<HTMLOptionElement>(GetElementById("o2")); EXPECT_EQ("o1", select->PreviousSelectableOption(option)->FastGetAttribute( html_names::kIdAttr)); @@ -359,8 +334,7 @@ SetHtmlInnerHTML( "<select><option id=o1></option><optgroup><option " "id=o2></option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); auto* option = To<HTMLOptionElement>(GetElementById("o2")); EXPECT_EQ("o1", select->PreviousSelectableOption(option)->FastGetAttribute( html_names::kIdAttr)); @@ -370,8 +344,7 @@ TEST_F(HTMLSelectElementTest, ActiveSelectionEndAfterOptionRemoval) { SetHtmlInnerHTML( "<select><optgroup><option selected>o1</option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); auto* option = To<HTMLOptionElement>(select->firstChild()->firstChild()); EXPECT_EQ(1, select->ActiveSelectionEndListIndex()); select->firstChild()->removeChild(option); @@ -384,8 +357,7 @@ SetHtmlInnerHTML( "<select size=4><option value=" ">Placeholder</option><optgroup><option>o2</option></optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); auto* option = To<Element>(select->firstChild()); auto* optgroup = To<Element>(option->nextSibling()); @@ -428,8 +400,7 @@ SetHtmlInnerHTML( "<select><optgroup><option>sub1</option><option>sub2</option></" "optgroup></select>"); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().body()->firstChild()); + auto* select = To<HTMLSelectElement>(GetDocument().body()->firstChild()); select->SetInnerHTMLFromString(""); // PASS if setInnerHTML didn't have a check failure. }
diff --git a/third_party/blink/renderer/core/html/forms/internal_popup_menu_test.cc b/third_party/blink/renderer/core/html/forms/internal_popup_menu_test.cc index c9f4f8c9..72c34bf2 100644 --- a/third_party/blink/renderer/core/html/forms/internal_popup_menu_test.cc +++ b/third_party/blink/renderer/core/html/forms/internal_popup_menu_test.cc
@@ -33,8 +33,7 @@ )HTML"); document.View()->UpdateAllLifecyclePhases( DocumentLifecycle::LifecycleUpdateReason::kTest); - HTMLSelectElement* select = - ToHTMLSelectElement(document.getElementById("select")); + auto* select = To<HTMLSelectElement>(document.getElementById("select")); ASSERT_TRUE(select); auto* menu = MakeGarbageCollected<InternalPopupMenu>( MakeGarbageCollected<EmptyChromeClient>(), *select); @@ -62,8 +61,7 @@ document.View()->UpdateAllLifecyclePhases( DocumentLifecycle::LifecycleUpdateReason::kTest); auto* div = document.getElementById("container"); - HTMLSelectElement* select = - ToHTMLSelectElement(document.getElementById("select")); + auto* select = To<HTMLSelectElement>(document.getElementById("select")); ASSERT_TRUE(select); auto* menu = MakeGarbageCollected<InternalPopupMenu>( MakeGarbageCollected<EmptyChromeClient>(), *select);
diff --git a/third_party/blink/renderer/core/html/html_hr_element.cc b/third_party/blink/renderer/core/html/html_hr_element.cc index 4c00740d..16a88caf 100644 --- a/third_party/blink/renderer/core/html/html_hr_element.cc +++ b/third_party/blink/renderer/core/html/html_hr_element.cc
@@ -112,11 +112,11 @@ HTMLSelectElement* HTMLHRElement::OwnerSelectElement() const { if (!parentNode()) return nullptr; - if (auto* select = ToHTMLSelectElementOrNull(*parentNode())) + if (auto* select = DynamicTo<HTMLSelectElement>(*parentNode())) return select; if (!IsA<HTMLOptGroupElement>(*parentNode())) return nullptr; - return ToHTMLSelectElementOrNull(parentNode()->parentNode()); + return DynamicTo<HTMLSelectElement>(parentNode()->parentNode()); } Node::InsertionNotificationRequest HTMLHRElement::InsertedInto( @@ -132,12 +132,12 @@ } void HTMLHRElement::RemovedFrom(ContainerNode& insertion_point) { - if (auto* select = ToHTMLSelectElementOrNull(insertion_point)) { + if (auto* select = DynamicTo<HTMLSelectElement>(insertion_point)) { if (!parentNode() || IsA<HTMLOptGroupElement>(*parentNode())) select->HrInsertedOrRemoved(*this); } else if (IsA<HTMLOptGroupElement>(insertion_point)) { Node* parent = insertion_point.parentNode(); - select = ToHTMLSelectElementOrNull(parent); + select = DynamicTo<HTMLSelectElement>(parent); if (select) select->HrInsertedOrRemoved(*this); }
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc index 711a66e..676cb23a 100644 --- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc +++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
@@ -31,10 +31,10 @@ #include "base/auto_reset.h" #include "base/numerics/safe_conversions.h" #include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/mojom/appcache/appcache.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/task_type.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/renderer/core/css/media_values_cached.h" #include "third_party/blink/renderer/core/css/resolver/style_resolver.h" #include "third_party/blink/renderer/core/dom/document_fragment.h" @@ -1202,7 +1202,7 @@ // from extensions. See example callstacks linked from crbug.com/931330. if (document->Loader()) { document->Loader()->DidObserveLoadingBehavior( - kWebLoadingBehaviorAmpDocumentLoaded); + kLoadingBehaviorAmpDocumentLoaded); } } if (preloader_)
diff --git a/third_party/blink/renderer/core/html/parser/html_element_stack.cc b/third_party/blink/renderer/core/html/parser/html_element_stack.cc index f7fd1e2..e62d0fd7 100644 --- a/third_party/blink/renderer/core/html/parser/html_element_stack.cc +++ b/third_party/blink/renderer/core/html/parser/html_element_stack.cc
@@ -168,7 +168,7 @@ auto* element = DynamicTo<Element>(node); if (element) { element->FinishParsingChildren(); - if (auto* select = ToHTMLSelectElementOrNull(node)) + if (auto* select = DynamicTo<HTMLSelectElement>(node)) select->SetBlocksFormSubmission(true); } top_ = top_->ReleaseNext();
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 4ac3f76..2108aee 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -3280,10 +3280,10 @@ } bool LayoutBox::AutoWidthShouldFitContent() const { - return GetNode() && - (IsHTMLInputElement(*GetNode()) || IsHTMLSelectElement(*GetNode()) || - IsA<HTMLButtonElement>(*GetNode()) || - IsHTMLTextAreaElement(*GetNode()) || IsRenderedLegend()); + return GetNode() && (IsHTMLInputElement(*GetNode()) || + IsA<HTMLSelectElement>(*GetNode()) || + IsA<HTMLButtonElement>(*GetNode()) || + IsHTMLTextAreaElement(*GetNode()) || IsRenderedLegend()); } void LayoutBox::ComputeMarginsForDirection(MarginDirection flow_direction,
diff --git a/third_party/blink/renderer/core/layout/layout_list_box.cc b/third_party/blink/renderer/core/layout/layout_list_box.cc index 7802cb6..f664104 100644 --- a/third_party/blink/renderer/core/layout/layout_list_box.cc +++ b/third_party/blink/renderer/core/layout/layout_list_box.cc
@@ -52,13 +52,13 @@ LayoutListBox::LayoutListBox(Element* element) : LayoutBlockFlow(element) { DCHECK(element); DCHECK(element->IsHTMLElement()); - DCHECK(IsHTMLSelectElement(element)); + DCHECK(IsA<HTMLSelectElement>(element)); } LayoutListBox::~LayoutListBox() = default; inline HTMLSelectElement* LayoutListBox::SelectElement() const { - return ToHTMLSelectElement(GetNode()); + return To<HTMLSelectElement>(GetNode()); } unsigned LayoutListBox::size() const {
diff --git a/third_party/blink/renderer/core/layout/layout_menu_list.cc b/third_party/blink/renderer/core/layout/layout_menu_list.cc index 5f1f9d1..d10d4e1 100644 --- a/third_party/blink/renderer/core/layout/layout_menu_list.cc +++ b/third_party/blink/renderer/core/layout/layout_menu_list.cc
@@ -50,7 +50,7 @@ inner_block_height_(LayoutUnit()), options_width_(0), last_active_index_(-1) { - DCHECK(IsHTMLSelectElement(element)); + DCHECK(IsA<HTMLSelectElement>(element)); } LayoutMenuList::~LayoutMenuList() = default; @@ -163,7 +163,7 @@ } HTMLSelectElement* LayoutMenuList::SelectElement() const { - return ToHTMLSelectElement(GetNode()); + return To<HTMLSelectElement>(GetNode()); } void LayoutMenuList::AddChild(LayoutObject* new_child,
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc index 46a2b24..58a04d4 100644 --- a/third_party/blink/renderer/core/layout/layout_text.cc +++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -55,7 +55,6 @@ #include "third_party/blink/renderer/core/layout/ng/inline/ng_abstract_inline_text_box.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h" -#include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_fragment_traversal.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_physical_text_fragment.h" @@ -450,17 +449,16 @@ template <typename PhysicalRectCollector> void LayoutText::CollectLineBoxRects(const PhysicalRectCollector& yield, ClippingOption option) const { - if (const NGPhysicalBoxFragment* box_fragment = - ContainingBlockFlowFragment()) { - const auto children = - NGInlineFragmentTraversal::SelfFragmentsOf(*box_fragment, this); - for (const auto& child : children) { + if (IsInLayoutNGInlineFormattingContext()) { + NGInlineCursor cursor; + cursor.MoveTo(*this); + for (; cursor; cursor.MoveToNextForSameLayoutObject()) { if (UNLIKELY(option != ClippingOption::kNoClipping)) { DCHECK_EQ(option, ClippingOption::kClipToEllipsis); - if (child.fragment->IsHiddenForPaint()) + if (cursor.IsHiddenForPaint()) continue; } - yield(child.RectInContainerBox()); + yield(cursor.CurrentRect()); } return; }
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc index 31a90c7..1be2597 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc
@@ -118,6 +118,13 @@ } } +void NGFragmentItemsBuilder::AddListMarker( + const NGPhysicalBoxFragment& marker_fragment, + const LogicalOffset& offset) { + items_.push_back(std::make_unique<NGFragmentItem>(marker_fragment, 1)); + offsets_.push_back(offset); +} + // Convert internal logical offsets to physical. Items are kept with logical // offset until outer box size is determined. void NGFragmentItemsBuilder::ConvertToPhysical(WritingMode writing_mode,
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.h b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.h index fcd9a1d..7141f3fc 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.h
@@ -49,6 +49,10 @@ void AddLine(const NGPhysicalLineBoxFragment& line, const LogicalOffset& offset); + // Add a list marker to the current line. + void AddListMarker(const NGPhysicalBoxFragment& marker_fragment, + const LogicalOffset& offset); + // Build a |NGFragmentItems|. The builder cannot build twice because data set // to this builder may be cleared. void ToFragmentItems(WritingMode writing_mode,
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc index 04c59028..2b69300 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc
@@ -54,7 +54,9 @@ return; } - NOTREACHED(); + // We reach here in case of |ScrollANchor::NotifyBeforeLayout()| via + // |LayoutText::PhysicalLinesBoundingBox()| + // See external/wpt/css/css-scroll-anchoring/wrapped-text.html } NGInlineCursor::NGInlineCursor(const NGFragmentItems& items) @@ -75,6 +77,8 @@ current_paint_fragment_(other.current_paint_fragment_), layout_inline_(other.layout_inline_) {} +NGInlineCursor::NGInlineCursor() = default; + bool NGInlineCursor::operator==(const NGInlineCursor& other) const { if (root_paint_fragment_) { return root_paint_fragment_ == other.root_paint_fragment_ && @@ -262,6 +266,10 @@ return PhysicalOffset(); } +const PhysicalRect NGInlineCursor::CurrentRect() const { + return PhysicalRect(CurrentOffset(), CurrentSize()); +} + TextDirection NGInlineCursor::CurrentResolvedDirection() const { if (current_paint_fragment_) return current_paint_fragment_->PhysicalFragment().ResolvedDirection(); @@ -317,21 +325,26 @@ } if (fragment_items_) return MoveToItem(items_.end()); - NOTREACHED(); } void NGInlineCursor::InternalMoveTo(const LayoutObject& layout_object) { DCHECK(layout_object.IsInLayoutNGInlineFormattingContext()); - if (root_paint_fragment_) { - const auto fragments = NGPaintFragment::InlineFragmentsFor(&layout_object); - if (!fragments.IsInLayoutNGInlineFormattingContext() || fragments.IsEmpty()) - return MakeNull(); - return MoveTo(fragments.front()); + if (fragment_items_) { + item_iter_ = items_.begin(); + while (current_item_ && CurrentLayoutObject() != &layout_object) + MoveToNextItem(); + return; } - DCHECK(IsItemCursor()); - item_iter_ = items_.begin(); - while (current_item_ && CurrentLayoutObject() != &layout_object) - MoveToNextItem(); + const auto fragments = NGPaintFragment::InlineFragmentsFor(&layout_object); + if (!fragments.IsInLayoutNGInlineFormattingContext() || fragments.IsEmpty()) + return MakeNull(); + if (!root_paint_fragment_) { + // We reach here in case of |ScrollANchor::NotifyBeforeLayout()| via + // |LayoutText::PhysicalLinesBoundingBox()| + // See external/wpt/css/css-scroll-anchoring/wrapped-text.html + root_paint_fragment_ = fragments.front().Root(); + } + return MoveTo(fragments.front()); } void NGInlineCursor::MoveTo(const LayoutObject& layout_object) {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h index 903b13d..d92b72a 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h
@@ -21,6 +21,7 @@ class NGPaintFragment; class NGPhysicalBoxFragment; struct PhysicalOffset; +struct PhysicalRect; struct PhysicalSize; // This class traverses fragments in an inline formatting context. @@ -38,6 +39,7 @@ explicit NGInlineCursor(const NGFragmentItems& items); explicit NGInlineCursor(const NGPaintFragment& root_paint_fragment); NGInlineCursor(const NGInlineCursor& other); + NGInlineCursor(); bool operator==(const NGInlineCursor& other) const; bool operator!=(const NGInlineCursor& other) const { @@ -110,6 +112,7 @@ // The offset relative to the root of the inline formatting context. const PhysicalOffset CurrentOffset() const; + const PhysicalRect CurrentRect() const; const PhysicalSize CurrentSize() const; // Returns start/end of offset in text content of current text fragment. @@ -171,11 +174,6 @@ private: using ItemsSpan = base::span<const std::unique_ptr<NGFragmentItem>>; - // |NGInlineCursor| is either paint fragment cursor or fragment item cursor. - // TODO(yosin): When we implement default constructor of |NGInlineCursor|, - // we'll call it "void cursor" instead of "null cursor". - NGInlineCursor() = delete; - // True if current position is descendant or self of |layout_object|. // Note: This function is used for moving cursor in culled inline boxes. bool IsInclusiveDescendantOf(const LayoutObject& layout_object) const;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_fragment_traversal.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_fragment_traversal.cc index 9b9df75..d9aa540 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_fragment_traversal.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_fragment_traversal.cc
@@ -122,8 +122,9 @@ STACK_ALLOCATED(); public: - explicit LayoutInlineCollector(const LayoutInline& container) - : container_(container) {} + explicit LayoutInlineCollector(const LayoutInline& container) { + CollectInclusiveDescendants(container); + } Vector<Result> CollectFrom(const NGPhysicalFragment& fragment) final { return CollectExclusivelyFrom(fragment); @@ -132,14 +133,30 @@ private: void Visit() final { if (!GetFragment().IsLineBox() && - GetFragment().GetLayoutObject()->IsDescendantOf(&container_)) { + inclusive_descendants_.Contains(GetFragment().GetLayoutObject())) { Emit(); return; } VisitChildren(); } - const LayoutInline& container_; + void CollectInclusiveDescendants(const LayoutInline& container) { + inclusive_descendants_.insert(&container); + for (const LayoutObject* node = container.FirstChild(); node; + node = node->NextSibling()) { + if (node->IsFloatingOrOutOfFlowPositioned()) + continue; + if (node->IsBox() || node->IsText()) { + inclusive_descendants_.insert(node); + continue; + } + if (!node->IsLayoutInline()) + continue; + CollectInclusiveDescendants(ToLayoutInline(*node)); + } + } + + HashSet<const LayoutObject*> inclusive_descendants_; DISALLOW_COPY_AND_ASSIGN(LayoutInlineCollector); };
diff --git a/third_party/blink/renderer/core/layout/ng/list/ng_unpositioned_list_marker.cc b/third_party/blink/renderer/core/layout/ng/list/ng_unpositioned_list_marker.cc index 374086a..7108243 100644 --- a/third_party/blink/renderer/core/layout/ng/list/ng_unpositioned_list_marker.cc +++ b/third_party/blink/renderer/core/layout/ng/list/ng_unpositioned_list_marker.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/core/layout/ng/list/ng_unpositioned_list_marker.h" #include "third_party/blink/renderer/core/layout/layout_list_marker.h" +#include "third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h" #include "third_party/blink/renderer/core/layout/ng/list/layout_ng_list_marker.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment.h" @@ -124,6 +125,11 @@ marker_offset.block_offset); DCHECK(container_builder); + if (NGFragmentItemsBuilder* items_builder = + container_builder->ItemsBuilder()) { + items_builder->AddListMarker(marker_physical_fragment, marker_offset); + return; + } container_builder->AddChild(marker_physical_fragment, marker_offset); } @@ -142,6 +148,7 @@ LogicalOffset offset(InlineOffset(marker_size.inline_size), LayoutUnit()); DCHECK(container_builder); + DCHECK(!container_builder->ItemsBuilder()); container_builder->AddChild(marker_physical_fragment, offset); return marker_size.block_size;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc index c245e90a6..3757f8f 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.cc
@@ -201,6 +201,18 @@ scoped_refptr<const NGLayoutResult> NGBoxFragmentBuilder::ToBoxFragment( WritingMode block_or_line_writing_mode) { +#if DCHECK_IS_ON() + if (ItemsBuilder()) { + for (const ChildWithOffset& child : Children()) { + DCHECK(child.fragment); + const NGPhysicalFragment& fragment = *child.fragment; + DCHECK(fragment.IsLineBox() || + // TODO(kojii): How to place floats and OOF is TBD. + fragment.IsFloatingOrOutOfFlowPositioned()); + } + } +#endif + if (UNLIKELY(node_ && has_block_fragmentation_)) { if (!inline_break_tokens_.IsEmpty()) { if (auto token = inline_break_tokens_.back()) {
diff --git a/third_party/blink/renderer/core/loader/appcache/application_cache_host.h b/third_party/blink/renderer/core/loader/appcache/application_cache_host.h index 04f6e6a..2ab5f3b 100644 --- a/third_party/blink/renderer/core/loader/appcache/application_cache_host.h +++ b/third_party/blink/renderer/core/loader/appcache/application_cache_host.h
@@ -35,6 +35,7 @@ #include "base/gtest_prod_util.h" #include "base/macros.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "third_party/blink/public/common/browser_interface_broker_proxy.h" @@ -104,7 +105,8 @@ void LogMessage(mojom::blink::ConsoleMessageLevel log_level, const String& message) override {} void SetSubresourceFactory( - network::mojom::blink::URLLoaderFactoryPtr url_loader_factory) override {} + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + url_loader_factory) override {} virtual void Trace(blink::Visitor*) {}
diff --git a/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.cc b/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.cc index bc0040fd..ef36211 100644 --- a/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.cc +++ b/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.cc
@@ -129,12 +129,12 @@ } void ApplicationCacheHostForFrame::SetSubresourceFactory( - network::mojom::blink::URLLoaderFactoryPtr url_loader_factory) { + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + url_loader_factory) { auto pending_factories = std::make_unique<URLLoaderFactoryBundleInfo>(); pending_factories->pending_appcache_factory() = mojo::PendingRemote<network::mojom::URLLoaderFactory>( - url_loader_factory.PassInterface().PassHandle(), - url_loader_factory.version()); + url_loader_factory.PassPipe(), url_loader_factory.version()); local_frame_->Client()->UpdateSubresourceFactory( std::move(pending_factories)); }
diff --git a/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.h b/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.h index 2c52628c..a43d4f4 100644 --- a/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.h +++ b/third_party/blink/renderer/core/loader/appcache/application_cache_host_for_frame.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_APPCACHE_APPLICATION_CACHE_HOST_FOR_FRAME_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_APPCACHE_APPLICATION_CACHE_HOST_FOR_FRAME_H_ +#include "mojo/public/cpp/bindings/pending_remote.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/loader/appcache/application_cache_host.h" @@ -34,7 +35,8 @@ void LogMessage(mojom::blink::ConsoleMessageLevel log_level, const String& message) override; void SetSubresourceFactory( - network::mojom::blink::URLLoaderFactoryPtr url_loader_factory) override; + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + url_loader_factory) override; void WillStartLoadingMainResource(DocumentLoader* loader, const KURL& url,
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc index 13ee5d84..5d63d9d 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -373,8 +373,7 @@ } } -void DocumentLoader::DidObserveLoadingBehavior( - WebLoadingBehaviorFlag behavior) { +void DocumentLoader::DidObserveLoadingBehavior(LoadingBehaviorFlag behavior) { if (frame_) { DCHECK_GE(state_, kCommitted); GetLocalFrameClient().DidObserveLoadingBehavior(behavior); @@ -1422,7 +1421,7 @@ service_worker_network_provider_->GetControllerServiceWorkerMode() == blink::mojom::ControllerServiceWorkerMode::kControlled) { GetLocalFrameClient().DidObserveLoadingBehavior( - kWebLoadingBehaviorServiceWorkerControlled); + kLoadingBehaviorServiceWorkerControlled); } Document* document = frame_->GetDocument();
diff --git a/third_party/blink/renderer/core/loader/document_loader.h b/third_party/blink/renderer/core/loader/document_loader.h index 3810c6f..5c20f73 100644 --- a/third_party/blink/renderer/core/loader/document_loader.h +++ b/third_party/blink/renderer/core/loader/document_loader.h
@@ -35,9 +35,9 @@ #include "base/optional.h" #include "base/unguessable_token.h" #include "mojo/public/cpp/base/big_buffer.h" +#include "third_party/blink/public/common/loader/loading_behavior_flag.h" #include "third_party/blink/public/mojom/loader/mhtml_load_result.mojom-blink-forward.h" #include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h" -#include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/public/platform/web_navigation_body_loader.h" #include "third_party/blink/public/web/web_document_loader.h" #include "third_party/blink/public/web/web_frame_load_type.h" @@ -153,7 +153,7 @@ const; void DidChangePerformanceTiming(); - void DidObserveLoadingBehavior(WebLoadingBehaviorFlag); + void DidObserveLoadingBehavior(LoadingBehaviorFlag); void UpdateForSameDocumentNavigation(const KURL&, SameDocumentNavigationSource, scoped_refptr<SerializedScriptValue>,
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc index 138f90f..ff1d0747 100644 --- a/third_party/blink/renderer/core/loader/frame_loader.cc +++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -243,9 +243,6 @@ } void FrameLoader::SaveScrollAnchor() { - if (!RuntimeEnabledFeatures::ScrollAnchorSerializationEnabled()) - return; - if (!document_loader_ || !document_loader_->GetHistoryItem() || !frame_->View()) return; @@ -1175,13 +1172,11 @@ if (should_restore_scroll) { // TODO(pnoland): attempt to restore the anchor in more places than this. // Anchor-based restore should allow for earlier restoration. - bool did_restore = - RuntimeEnabledFeatures::ScrollAnchorSerializationEnabled() && - view->LayoutViewport()->RestoreScrollAnchor( - {view_state.scroll_anchor_data_.selector_, - LayoutPoint(view_state.scroll_anchor_data_.offset_.x, - view_state.scroll_anchor_data_.offset_.y), - view_state.scroll_anchor_data_.simhash_}); + bool did_restore = view->LayoutViewport()->RestoreScrollAnchor( + {view_state.scroll_anchor_data_.selector_, + LayoutPoint(view_state.scroll_anchor_data_.offset_.x, + view_state.scroll_anchor_data_.offset_.y), + view_state.scroll_anchor_data_.simhash_}); if (!did_restore) { view->LayoutViewport()->SetScrollOffset(view_state.scroll_offset_, kProgrammaticScroll);
diff --git a/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc b/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc index d75037a4..d0bbcb27 100644 --- a/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc +++ b/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc
@@ -5,6 +5,8 @@ #include "third_party/blink/renderer/core/loader/loader_factory_for_frame.h" #include "base/single_thread_task_runner.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/mojom/url_loader_factory.mojom-blink.h" #include "third_party/blink/public/common/blob/blob_utils.h" #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h" @@ -42,9 +44,13 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner) { WrappedResourceRequest webreq(request); - network::mojom::blink::URLLoaderFactoryPtr url_loader_factory; + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + url_loader_factory; if (options.url_loader_factory) { - options.url_loader_factory->data->Clone(MakeRequest(&url_loader_factory)); + mojo::Remote<network::mojom::blink::URLLoaderFactory> + url_loader_factory_remote(std::move(options.url_loader_factory->data)); + url_loader_factory_remote->Clone( + url_loader_factory.InitWithNewPipeAndPassReceiver()); } // Resolve any blob: URLs that haven't been resolved yet. The XHR and // fetch() API implementations resolve blob URLs earlier because there can @@ -66,7 +72,7 @@ if (request.Url().ProtocolIs("blob") && !url_loader_factory && request.GetRequestContext() != mojom::RequestContextType::SHARED_WORKER) { frame_or_imported_document_->GetDocument().GetPublicURLManager().Resolve( - request.Url(), MakeRequest(&url_loader_factory)); + request.Url(), url_loader_factory.InitWithNewPipeAndPassReceiver()); } LocalFrame& frame = frame_or_imported_document_->GetFrame(); FrameScheduler* frame_scheduler = frame.GetFrameScheduler(); @@ -79,7 +85,7 @@ // resource loader handle's task runner. if (url_loader_factory) { return Platform::Current() - ->WrapURLLoaderFactory(url_loader_factory.PassInterface().PassHandle()) + ->WrapURLLoaderFactory(url_loader_factory.PassPipe()) ->CreateURLLoader( webreq, frame_scheduler->CreateResourceLoadingTaskRunnerHandle()); }
diff --git a/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc b/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc index b69c7293..1e5089d 100644 --- a/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc +++ b/third_party/blink/renderer/core/loader/loader_factory_for_worker.cc
@@ -4,6 +4,8 @@ #include "third_party/blink/renderer/core/loader/loader_factory_for_worker.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/mojom/url_loader_factory.mojom-blink.h" #include "third_party/blink/public/common/blob/blob_utils.h" #include "third_party/blink/public/platform/web_url_loader.h" @@ -27,9 +29,13 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner) { WrappedResourceRequest wrapped(request); - network::mojom::blink::URLLoaderFactoryPtr url_loader_factory; + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + url_loader_factory; if (options.url_loader_factory) { - options.url_loader_factory->data->Clone(MakeRequest(&url_loader_factory)); + mojo::Remote<network::mojom::blink::URLLoaderFactory> + url_loader_factory_remote(std::move(options.url_loader_factory->data)); + url_loader_factory_remote->Clone( + url_loader_factory.InitWithNewPipeAndPassReceiver()); } // Resolve any blob: URLs that haven't been resolved yet. The XHR and // fetch() API implementations resolve blob URLs earlier because there can @@ -39,12 +45,11 @@ // simplest. if (request.Url().ProtocolIs("blob") && !url_loader_factory) { global_scope_->GetPublicURLManager().Resolve( - request.Url(), MakeRequest(&url_loader_factory)); + request.Url(), url_loader_factory.InitWithNewPipeAndPassReceiver()); } if (url_loader_factory) { - return web_context_ - ->WrapURLLoaderFactory(url_loader_factory.PassInterface().PassHandle()) + return web_context_->WrapURLLoaderFactory(url_loader_factory.PassPipe()) ->CreateURLLoader(wrapped, CreateTaskRunnerHandle(task_runner)); }
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc index 483df84..f5752cb 100644 --- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc +++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
@@ -7,6 +7,7 @@ #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/mojom/url_loader_factory.mojom-blink.h" #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" @@ -212,9 +213,10 @@ std::unique_ptr<WebURLLoader> PrefetchedSignedExchangeManager::CreatePrefetchedSignedExchangeURLLoader( const WebURLRequest& request, - network::mojom::blink::URLLoaderFactoryPtr loader_factory) { + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + loader_factory) { return Platform::Current() - ->WrapURLLoaderFactory(loader_factory.PassInterface().PassHandle()) + ->WrapURLLoaderFactory(loader_factory.PassPipe()) ->CreateURLLoader( request, frame_->GetFrameScheduler()->CreateResourceLoadingTaskRunnerHandle()); @@ -278,18 +280,19 @@ if (!loader) continue; auto* prefetched_exchange = maching_prefetched_exchanges.at(i); - network::mojom::blink::URLLoaderFactoryPtr loader_factory = - network::mojom::blink::URLLoaderFactoryPtr( - network::mojom::blink::URLLoaderFactoryPtrInfo( - std::move(prefetched_exchange->loader_factory_handle), - network::mojom::URLLoaderFactory::Version_)); - network::mojom::blink::URLLoaderFactoryPtr loader_factory_clone; - loader_factory->Clone(MakeRequest(&loader_factory_clone)); + mojo::Remote<network::mojom::blink::URLLoaderFactory> loader_factory( + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>( + std::move(prefetched_exchange->loader_factory_handle), + network::mojom::URLLoaderFactory::Version_)); + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + loader_factory_clone; + loader_factory->Clone( + loader_factory_clone.InitWithNewPipeAndPassReceiver()); // Reset loader_factory_handle to support loading the same resource again. prefetched_exchange->loader_factory_handle = - loader_factory_clone.PassInterface().PassHandle(); + loader_factory_clone.PassPipe(); loader->SetURLLoader(CreatePrefetchedSignedExchangeURLLoader( - loader->request(), std::move(loader_factory))); + loader->request(), loader_factory.Unbind())); } }
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h index a0fb7fc6..40dfc6f5 100644 --- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h +++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_PREFETCHED_SIGNED_EXCHANGE_MANAGER_H_ #include "base/macros.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/mojom/url_loader_factory.mojom-blink-forward.h" #include "third_party/blink/public/web/web_navigation_params.h" #include "third_party/blink/renderer/core/loader/preload_helper.h" @@ -84,7 +85,8 @@ const WebURLRequest& request); std::unique_ptr<WebURLLoader> CreatePrefetchedSignedExchangeURLLoader( const WebURLRequest& request, - network::mojom::blink::URLLoaderFactoryPtr loader_factory); + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + loader_factory); Member<LocalFrame> frame_; std::unique_ptr<AlternateSignedExchangeResourceInfo> alternative_resources_;
diff --git a/third_party/blink/renderer/core/loader/subresource_filter.cc b/third_party/blink/renderer/core/loader/subresource_filter.cc index 7e793d8..5b9982f 100644 --- a/third_party/blink/renderer/core/loader/subresource_filter.cc +++ b/third_party/blink/renderer/core/loader/subresource_filter.cc
@@ -142,7 +142,7 @@ if (auto* document = DynamicTo<Document>(execution_context_.Get())) { if (DocumentLoader* loader = document->Loader()) { loader->DidObserveLoadingBehavior( - kWebLoadingBehaviorSubresourceFilterMatch); + kLoadingBehaviorSubresourceFilterMatch); } } break;
diff --git a/third_party/blink/renderer/core/page/spatial_navigation_test.cc b/third_party/blink/renderer/core/page/spatial_navigation_test.cc index 88ac29f3..b80b5d3c 100644 --- a/third_party/blink/renderer/core/page/spatial_navigation_test.cc +++ b/third_party/blink/renderer/core/page/spatial_navigation_test.cc
@@ -771,8 +771,7 @@ )HTML"); Compositor().BeginFrame(); - HTMLSelectElement* select = - ToHTMLSelectElement(GetDocument().getElementById("target")); + auto* select = To<HTMLSelectElement>(GetDocument().getElementById("target")); SimulateKeyPress(ui::DomKey::ARROW_DOWN); SpatialNavigationController& spat_nav_controller =
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc index ca7dea3..399087f 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -2235,7 +2235,7 @@ static bool LayerNodeMayNeedCompositedScrolling(const PaintLayer* layer) { // Don't force composite scroll for select or text input elements. if (Node* node = layer->GetLayoutObject().GetNode()) { - if (IsHTMLSelectElement(node)) + if (IsA<HTMLSelectElement>(node)) return false; if (TextControlElement* text_control = EnclosingTextControl(node)) { if (IsHTMLInputElement(text_control)) {
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc b/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc index 8b09393..f0f94855 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_update_tests.cc
@@ -945,7 +945,7 @@ EXPECT_NE(nullptr, select->FirstFragment().PaintProperties()->OverflowClip()); // Should not assert in FindPropertiesNeedingUpdate. - ToHTMLSelectElement(select->GetNode())->setSelectedIndex(1); + To<HTMLSelectElement>(select->GetNode())->setSelectedIndex(1); UpdateAllLifecyclePhasesForTest(); EXPECT_NE(nullptr, select->FirstFragment().PaintProperties()->OverflowClip()); }
diff --git a/third_party/blink/renderer/core/paint/theme_painter.cc b/third_party/blink/renderer/core/paint/theme_painter.cc index ca7665f..86492b34 100644 --- a/third_party/blink/renderer/core/paint/theme_painter.cc +++ b/third_party/blink/renderer/core/paint/theme_painter.cc
@@ -224,7 +224,7 @@ } case kMenulistPart: COUNT_APPEARANCE(doc, MenuList); - if (!IsHTMLSelectElement(node) && !IsMenulistInput(node)) + if (!IsA<HTMLSelectElement>(node) && !IsMenulistInput(node)) DEPRECATE_APPEARANCE(doc, MenuListForOthers); return PaintMenuList(node, o.GetDocument(), style, paint_info, r); case kMeterPart: @@ -398,7 +398,7 @@ switch (style.EffectiveAppearance()) { case kMenulistButtonPart: COUNT_APPEARANCE(document, MenuListButton); - if (!IsHTMLSelectElement(node) && !IsMenulistInput(node)) + if (!IsA<HTMLSelectElement>(node) && !IsMenulistInput(node)) DEPRECATE_APPEARANCE(document, MenuListButtonForOthers); return PaintMenuListButton(node, document, style, paint_info, r); case kTextFieldPart:
diff --git a/third_party/blink/renderer/core/script/document_write_intervention.cc b/third_party/blink/renderer/core/script/document_write_intervention.cc index d86a3a1..5baad6f 100644 --- a/third_party/blink/renderer/core/script/document_write_intervention.cc +++ b/third_party/blink/renderer/core/script/document_write_intervention.cc
@@ -160,8 +160,8 @@ // block more scripts than necessary. if (params.Url().Protocol() != document.GetSecurityOrigin()->Protocol()) { document.Loader()->DidObserveLoadingBehavior( - WebLoadingBehaviorFlag:: - kWebLoadingBehaviorDocumentWriteBlockDifferentScheme); + LoadingBehaviorFlag:: + kLoadingBehaviorDocumentWriteBlockDifferentScheme); } return false; } @@ -176,7 +176,7 @@ // Recording this metric since an increase in number of reloads for pages // where a script was blocked could be indicative of a page break. document.Loader()->DidObserveLoadingBehavior( - WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlockReload); + LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlockReload); AddWarningHeader(¶ms); return false; } @@ -185,7 +185,7 @@ // that are eligible for blocking. Note that if there are multiple scripts // the flag will be conveyed to the browser process only once. document.Loader()->DidObserveLoadingBehavior( - WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock); + LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlock); if (!ShouldDisallowFetch(settings, GetNetworkStateNotifier().ConnectionType(), GetNetworkStateNotifier().EffectiveType())) {
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc index 5a7917ae..4abceb2 100644 --- a/third_party/blink/renderer/core/testing/internals.cc +++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -1324,7 +1324,7 @@ if (auto* textarea = ToHTMLTextAreaElementOrNull(*element)) return textarea->SuggestedValue(); - if (auto* select = ToHTMLSelectElementOrNull(*element)) + if (auto* select = DynamicTo<HTMLSelectElement>(*element)) return select->SuggestedValue(); return suggested_value; @@ -1347,7 +1347,7 @@ if (auto* textarea = ToHTMLTextAreaElementOrNull(*element)) textarea->SetSuggestedValue(value); - if (auto* select = ToHTMLSelectElementOrNull(*element)) + if (auto* select = DynamicTo<HTMLSelectElement>(*element)) select->SetSuggestedValue(value); } @@ -1377,7 +1377,7 @@ *Event::CreateBubble(event_type_names::kKeyup)); } - if (auto* select = ToHTMLSelectElementOrNull(*element)) + if (auto* select = DynamicTo<HTMLSelectElement>(*element)) select->setValue(value, true /* send_events */); To<HTMLFormControlElement>(element)->SetAutofillState( @@ -2935,34 +2935,34 @@ bool Internals::isSelectPopupVisible(Node* node) { DCHECK(node); - if (auto* select = ToHTMLSelectElementOrNull(*node)) + if (auto* select = DynamicTo<HTMLSelectElement>(*node)) return select->PopupIsVisible(); return false; } bool Internals::selectPopupItemStyleIsRtl(Node* node, int item_index) { - if (!node || !IsHTMLSelectElement(*node)) + auto* select = DynamicTo<HTMLSelectElement>(node); + if (!select) return false; - HTMLSelectElement& select = ToHTMLSelectElement(*node); if (item_index < 0 || - static_cast<wtf_size_t>(item_index) >= select.GetListItems().size()) + static_cast<wtf_size_t>(item_index) >= select->GetListItems().size()) return false; const ComputedStyle* item_style = - select.ItemComputedStyle(*select.GetListItems()[item_index]); + select->ItemComputedStyle(*select->GetListItems()[item_index]); return item_style && item_style->Direction() == TextDirection::kRtl; } int Internals::selectPopupItemStyleFontHeight(Node* node, int item_index) { - if (!node || !IsHTMLSelectElement(*node)) + auto* select = DynamicTo<HTMLSelectElement>(node); + if (!select) return false; - HTMLSelectElement& select = ToHTMLSelectElement(*node); if (item_index < 0 || - static_cast<wtf_size_t>(item_index) >= select.GetListItems().size()) + static_cast<wtf_size_t>(item_index) >= select->GetListItems().size()) return false; const ComputedStyle* item_style = - select.ItemComputedStyle(*select.GetListItems()[item_index]); + select->ItemComputedStyle(*select->GetListItems()[item_index]); if (item_style) { const SimpleFontData* font_data = item_style->GetFont().PrimaryFont();
diff --git a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc index ff4785d1..a5ed66f 100644 --- a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc +++ b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc
@@ -709,7 +709,7 @@ if (url_.ProtocolIs("blob")) { GetExecutionContext()->GetPublicURLManager().Resolve( - url_, MakeRequest(&blob_url_loader_factory_)); + url_, blob_url_loader_factory_.InitWithNewPipeAndPassReceiver()); } async_ = async; @@ -1082,9 +1082,10 @@ resource_loader_options.initiator_info.name = fetch_initiator_type_names::kXmlhttprequest; if (blob_url_loader_factory_) { - resource_loader_options.url_loader_factory = base::MakeRefCounted< - base::RefCountedData<network::mojom::blink::URLLoaderFactoryPtr>>( - std::move(blob_url_loader_factory_)); + resource_loader_options.url_loader_factory = + base::MakeRefCounted<base::RefCountedData< + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>>( + std::move(blob_url_loader_factory_)); } // When responseType is set to "blob", we redirect the downloaded data to a
diff --git a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.h b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.h index 5a9ea79..e7056e6 100644 --- a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.h +++ b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.h
@@ -26,6 +26,7 @@ #include <memory> #include "base/memory/scoped_refptr.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/mojom/url_loader_factory.mojom-blink.h" #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" #include "third_party/blink/renderer/core/dom/document_parser_client.h" @@ -300,7 +301,8 @@ Member<XMLHttpRequestUpload> upload_; KURL url_; - network::mojom::blink::URLLoaderFactoryPtr blob_url_loader_factory_; + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> + blob_url_loader_factory_; AtomicString method_; HTTPHeaderMap request_headers_; // Not converted to ASCII lowercase. Must be lowered later or compared
diff --git a/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js b/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js index 19c6b955..14cf789 100644 --- a/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js +++ b/third_party/blink/renderer/devtools/front_end/coverage/CoverageModel.js
@@ -445,7 +445,9 @@ return null; } let urlCoverage = this._coverageByURL.get(url); + let isNewUrlCoverage = false; if (!urlCoverage) { + isNewUrlCoverage = true; urlCoverage = new Coverage.URLCoverageInfo(url); this._coverageByURL.set(url, urlCoverage); } @@ -458,7 +460,7 @@ } const oldUsedSize = coverageInfo._usedSize; coverageInfo.mergeCoverage(segments); - if (coverageInfo._usedSize === oldUsedSize) { + if (!isNewUrlCoverage && coverageInfo._usedSize === oldUsedSize) { return null; } urlCoverage._usedSize += coverageInfo._usedSize - oldUsedSize;
diff --git a/third_party/blink/renderer/devtools/front_end/emulation/GeolocationsSettingsTab.js b/third_party/blink/renderer/devtools/front_end/emulation/GeolocationsSettingsTab.js index 1d9d2f3..4c8cdd0 100644 --- a/third_party/blink/renderer/devtools/front_end/emulation/GeolocationsSettingsTab.js +++ b/third_party/blink/renderer/devtools/front_end/emulation/GeolocationsSettingsTab.js
@@ -48,7 +48,7 @@ } _addButtonClicked() { - this._list.addNewItem(this._customSetting.get().length, {title: '', lat: 0, long: 0}); + this._list.addNewItem(this._customSetting.get().length, {title: '', lat: 0, long: 0, timezoneId: ''}); } /** @@ -68,6 +68,8 @@ element.createChild('div', 'geolocations-list-text').textContent = geolocation.lat; element.createChild('div', 'geolocations-list-separator'); element.createChild('div', 'geolocations-list-text').textContent = geolocation.long; + element.createChild('div', 'geolocations-list-separator'); + element.createChild('div', 'geolocations-list-text').textContent = geolocation.timezoneId; return element; } @@ -95,6 +97,8 @@ geolocation.lat = lat ? parseFloat(lat) : 0; const long = editor.control('long').value.trim(); geolocation.long = long ? parseFloat(long) : 0; + const timezoneId = editor.control('timezoneId').value.trim(); + geolocation.timezoneId = timezoneId; const list = this._customSetting.get(); if (isNew) { @@ -114,6 +118,7 @@ editor.control('title').value = geolocation.title; editor.control('lat').value = String(geolocation.lat); editor.control('long').value = String(geolocation.long); + editor.control('timezoneId').value = String(geolocation.timezoneId); return editor; } @@ -136,6 +141,8 @@ titles.createChild('div', 'geolocations-list-text').textContent = Common.UIString('Lat'); titles.createChild('div', 'geolocations-list-separator geolocations-list-separator-invisible'); titles.createChild('div', 'geolocations-list-text').textContent = Common.UIString('Long'); + titles.createChild('div', 'geolocations-list-separator geolocations-list-separator-invisible'); + titles.createChild('div', 'geolocations-list-text').textContent = Common.UIString('Timezone ID'); const fields = content.createChild('div', 'geolocations-edit-row'); fields.createChild('div', 'geolocations-list-text geolocations-list-title') @@ -149,6 +156,9 @@ cell = fields.createChild('div', 'geolocations-list-text'); cell.appendChild(editor.createInput('long', 'text', ls`Longitude`, longValidator)); + cell = fields.createChild('div', 'geolocations-list-text'); + cell.appendChild(editor.createInput('timezoneId', 'text', ls`Timezone ID`, timezoneIdValidator)); + return editor; /** @@ -235,8 +245,28 @@ } return {valid: true}; } + + /** + * @param {*} item + * @param {number} index + * @param {!HTMLInputElement|!HTMLSelectElement} input + * @return {!UI.ListWidget.ValidatorResult} + */ + function timezoneIdValidator(item, index, input) { + const value = input.value.trim(); + // Chromium uses ICU's timezone implementation, which is very + // liberal in what it accepts. ICU does not simply use an allowlist + // but instead tries to make sense of the input, even for + // weird-looking timezone IDs. There's not much point in validating + // the input other than checking if it contains at least one slash. + if (value === '' || value.includes('/')) { + return {valid: true}; + } + const errorMessage = ls`Timezone ID must contain "/"`; + return {valid: false, errorMessage}; + } } }; /** @typedef {{title: string, lat: number, long: number}} */ -Emulation.GeolocationsSettingsTab.Item; \ No newline at end of file +Emulation.GeolocationsSettingsTab.Item;
diff --git a/third_party/blink/renderer/devtools/front_end/emulation/SensorsView.js b/third_party/blink/renderer/devtools/front_end/emulation/SensorsView.js index d153057..15f9dd7 100644 --- a/third_party/blink/renderer/devtools/front_end/emulation/SensorsView.js +++ b/third_party/blink/renderer/devtools/front_end/emulation/SensorsView.js
@@ -95,6 +95,10 @@ const latitudeGroup = this._fieldsetElement.createChild('div', 'latlong-group'); const longitudeGroup = this._fieldsetElement.createChild('div', 'latlong-group'); + const timezoneGroup = this._fieldsetElement.createChild('div', 'latlong-group'); + + const cmdOrCtrl = Host.isMac() ? '\u2318' : 'Ctrl'; + const modifierKeyMessage = ls`Adjust with mousewheel or up/down keys. ${cmdOrCtrl}: ±10, Shift: ±1, Alt: ±0.01`; this._latitudeInput = UI.createInput('', 'number'); latitudeGroup.appendChild(this._latitudeInput); @@ -104,6 +108,8 @@ this._latitudeInput, this._applyGeolocationUserInput.bind(this), SDK.EmulationModel.Geolocation.latitudeValidator, true, 0.1); this._latitudeSetter(String(geolocation.latitude)); + this._latitudeInput.title = modifierKeyMessage; + latitudeGroup.appendChild(UI.createLabel(ls`Latitude`, 'latlong-title', this._latitudeInput)); this._longitudeInput = UI.createInput('', 'number'); longitudeGroup.appendChild(this._longitudeInput); @@ -113,14 +119,17 @@ this._longitudeInput, this._applyGeolocationUserInput.bind(this), SDK.EmulationModel.Geolocation.longitudeValidator, true, 0.1); this._longitudeSetter(String(geolocation.longitude)); - - const cmdOrCtrl = Host.isMac() ? '\u2318' : 'Ctrl'; - const modifierKeyMessage = ls`Adjust with mousewheel or up/down keys. ${cmdOrCtrl}: ±10, Shift: ±1, Alt: ±0.01`; - this._latitudeInput.title = modifierKeyMessage; this._longitudeInput.title = modifierKeyMessage; - - latitudeGroup.appendChild(UI.createLabel(ls`Latitude`, 'latlong-title', this._latitudeInput)); longitudeGroup.appendChild(UI.createLabel(ls`Longitude`, 'latlong-title', this._longitudeInput)); + + this._timezoneInput = UI.createInput('', 'text'); + timezoneGroup.appendChild(this._timezoneInput); + this._timezoneInput.value = 'Europe/Berlin'; + this._timezoneSetter = UI.bindInput( + this._timezoneInput, this._applyGeolocationUserInput.bind(this), + SDK.EmulationModel.Geolocation.timezoneIdValidator, false); + this._timezoneSetter(String(geolocation.timezoneId)); + timezoneGroup.appendChild(UI.createLabel(ls`Timezone ID`, 'timezone-title', this._timezoneInput)); } _geolocationSelectChanged() { @@ -132,20 +141,22 @@ } else if (value === Emulation.SensorsView.NonPresetOptions.Custom) { this._geolocationOverrideEnabled = true; const geolocation = SDK.EmulationModel.Geolocation.parseUserInput( - this._latitudeInput.value.trim(), this._longitudeInput.value.trim(), ''); + this._latitudeInput.value.trim(), this._longitudeInput.value.trim(), this._timezoneInput.value.trim()); if (!geolocation) { return; } this._geolocation = geolocation; } else if (value === Emulation.SensorsView.NonPresetOptions.Unavailable) { this._geolocationOverrideEnabled = true; - this._geolocation = new SDK.EmulationModel.Geolocation(0, 0, true); + this._geolocation = new SDK.EmulationModel.Geolocation(0, 0, '', true); } else { this._geolocationOverrideEnabled = true; const coordinates = JSON.parse(value); - this._geolocation = new SDK.EmulationModel.Geolocation(coordinates.lat, coordinates.long, false); + this._geolocation = + new SDK.EmulationModel.Geolocation(coordinates.lat, coordinates.long, coordinates.timezoneId, false); this._latitudeSetter(coordinates.lat); this._longitudeSetter(coordinates.long); + this._timezoneSetter(coordinates.timezoneId); } this._applyGeolocation(); @@ -156,7 +167,7 @@ _applyGeolocationUserInput() { const geolocation = SDK.EmulationModel.Geolocation.parseUserInput( - this._latitudeInput.value.trim(), this._longitudeInput.value.trim(), ''); + this._latitudeInput.value.trim(), this._longitudeInput.value.trim(), this._timezoneInput.value.trim()); if (!geolocation) { return; }
diff --git a/third_party/blink/renderer/devtools/front_end/emulation/emulation_strings.grdp b/third_party/blink/renderer/devtools/front_end/emulation/emulation_strings.grdp index ee369b04..c73adc5c 100644 --- a/third_party/blink/renderer/devtools/front_end/emulation/emulation_strings.grdp +++ b/third_party/blink/renderer/devtools/front_end/emulation/emulation_strings.grdp
@@ -123,6 +123,9 @@ <message name="IDS_DEVTOOLS_5b4f1c0e2bd8bc1ba726cd51dd70c1a6" desc="City name in Geolocations Settings"> Mountain View </message> + <message name="IDS_DEVTOOLS_5cacd64cfc65b4f4ea83306b6cebf0be" desc="A tag of Sensors tool that can be searched in the command menu"> + timezones + </message> <message name="IDS_DEVTOOLS_614103b76fd0d9de068d69034fb6f987" desc="Text in Device Mode View of the Device Toolbar"> (<ph name="THIS__MODEL_DEVICE___TITLE">$1s<ex>iPhone X</ex></ph>) </message> @@ -180,6 +183,9 @@ <message name="IDS_DEVTOOLS_815dff01257e5ef182b25d4c1ef0a7a0" desc="Text in Device Mode Toolbar of the Device Toolbar"> Landscape </message> + <message name="IDS_DEVTOOLS_8189965036f7d675e0b7af67a2a873a0" desc="Text in Sensors View of the Device Toolbar"> + Timezone ID + </message> <message name="IDS_DEVTOOLS_81c3744a7fe979d029d1e7b84afd613f" desc="Reload warning text content in Sensors View of the Device Toolbar"> *Requires reload </message> @@ -309,6 +315,9 @@ <message name="IDS_DEVTOOLS_d15305d7a4e34e02489c74a5ef542f36" desc="Text in Sensors View of the Device Toolbar"> Off </message> + <message name="IDS_DEVTOOLS_d9e39d238ea8f70b277a68d9c07b5046" desc="Error message in the Geolocations settings pane that declares timezone ID input invalid"> + Timezone ID must contain "/" + </message> <message name="IDS_DEVTOOLS_da31f3ff326e70f6b08748520c553920" desc="Text in Sensors View of the Device Toolbar"> γ (gamma) </message> @@ -354,4 +363,4 @@ <message name="IDS_DEVTOOLS_fd37e9411d9f8a6af8fb4d3b787ccfc6" desc="Error message in the Devices settings pane that declares the minimum value for the width input"> Width must be greater than or equal to <ph name="EMULATION_DEVICEMODEMODEL_MINDEVICESIZE">$1s<ex>50</ex></ph>. </message> -</grit-part> \ No newline at end of file +</grit-part>
diff --git a/third_party/blink/renderer/devtools/front_end/emulation/geolocationsSettingsTab.css b/third_party/blink/renderer/devtools/front_end/emulation/geolocationsSettingsTab.css index f6a0a37..47ec50d 100644 --- a/third_party/blink/renderer/devtools/front_end/emulation/geolocationsSettingsTab.css +++ b/third_party/blink/renderer/devtools/front_end/emulation/geolocationsSettingsTab.css
@@ -5,84 +5,87 @@ */ :host { - overflow:hidden; + overflow: hidden; } .header { - padding: 0 0 6px; - border-bottom: 1px solid #EEEEEE; - font-size: 18px; - font-weight: normal; - flex: none; + padding: 0 0 6px; + border-bottom: 1px solid #EEEEEE; + font-size: 18px; + font-weight: normal; + flex: none; } .add-geolocations-button { - flex: none; - margin: 10px 2px; - min-width: 140px; - align-self: flex-start; + flex: none; + margin: 10px 2px; + min-width: 140px; + align-self: flex-start; } .geolocations-list { - max-width: 500px; - min-width: 340px; - flex: auto; + max-width: 600px; + min-width: 340px; + flex: auto; } .geolocations-list-item { - padding: 3px 5px 3px 5px; - height: 30px; - display: flex; - align-items: center; - position: relative; - flex: auto 1 1; + padding: 3px 5px 3px 5px; + height: 30px; + display: flex; + align-items: center; + position: relative; + flex: auto 1 1; } .geolocations-list-text { - white-space: nowrap; - text-overflow: ellipsis; - flex: 0 0 70px; - -webkit-user-select: none; - color: #222; - text-align: end; - position: relative; + white-space: nowrap; + text-overflow: ellipsis; + flex: 0 0 70px; + -webkit-user-select: none; + color: #222; + text-align: end; + position: relative; +} + +.geolocations-list-text:last-child { + flex: 0 0 170px; } .geolocations-list-title { - text-align: start; - flex: auto; - display: flex; - align-items: flex-start; + text-align: start; + flex: auto; + display: flex; + align-items: flex-start; } .geolocations-list-title-text { - overflow: hidden; - flex: auto; - white-space: nowrap; - text-overflow: ellipsis; + overflow: hidden; + flex: auto; + white-space: nowrap; + text-overflow: ellipsis; } .geolocations-list-separator { - flex: 0 0 1px; - background-color: rgb(231, 231, 231); - height: 30px; - margin: 0 4px; + flex: 0 0 1px; + background-color: rgb(231, 231, 231); + height: 30px; + margin: 0 4px; } .geolocations-list-separator-invisible { - visibility: hidden; - height: 100% !important; + visibility: hidden; + height: 100% !important; } .geolocations-edit-row { - flex: none; - display: flex; - flex-direction: row; - margin: 6px 5px; + flex: none; + display: flex; + flex-direction: row; + margin: 6px 5px; } .geolocations-edit-row input { - width: 100%; - text-align: inherit; + width: 100%; + text-align: inherit; } -
diff --git a/third_party/blink/renderer/devtools/front_end/emulation/module.json b/third_party/blink/renderer/devtools/front_end/emulation/module.json index f79e7e45..25e72d10 100644 --- a/third_party/blink/renderer/devtools/front_end/emulation/module.json +++ b/third_party/blink/renderer/devtools/front_end/emulation/module.json
@@ -146,25 +146,25 @@ "persistence": "closeable", "order": 100, "className": "Emulation.SensorsView", - "tags": "geolocation, accelerometer, device orientation" + "tags": "geolocation, timezones, accelerometer, device orientation" }, { "type": "setting", "settingName": "emulation.geolocations", "settingType": "array", "defaultValue": [ - {"title": "Berlin", "lat": 52.520007, "long": 13.404954}, - {"title": "London", "lat": 51.507351, "long": -0.127758}, - {"title": "Moscow", "lat": 55.755826, "long": 37.617300}, - {"title": "Mountain View", "lat": 37.386052, "long": -122.083851}, - {"title": "Mumbai", "lat": 19.075984, "long": 72.877656}, - {"title": "San Francisco", "lat": 37.774929, "long": -122.419416}, - {"title": "Shanghai", "lat": 31.230416, "long": 121.473701}, - {"title": "São Paulo", "lat": -23.550520, "long": -46.633309}, - {"title": "Tokyo", "lat": 35.689487, "long": 139.691706} - ] - }, - { + {"title": "Berlin", "lat": 52.520007, "long": 13.404954, "timezoneId": "Europe/Berlin"}, + {"title": "London", "lat": 51.507351, "long": -0.127758, "timezoneId": "Europe/London"}, + {"title": "Moscow", "lat": 55.755826, "long": 37.617300, "timezoneId": "Europe/Moscow"}, + {"title": "Mountain View", "lat": 37.386052, "long": -122.083851, "timezoneId": "US/Pacific"}, + {"title": "Mumbai", "lat": 19.075984, "long": 72.877656, "timezoneId": "Asia/Kolkata"}, + {"title": "San Francisco", "lat": 37.774929, "long": -122.419416, "timezoneId": "US/Pacific"}, + {"title": "Shanghai", "lat": 31.230416, "long": 121.473701, "timezoneId": "Asia/Shanghai"}, + {"title": "São Paulo", "lat": -23.550520, "long": -46.633309, "timezoneId": "America/Sao_Paulo"}, + {"title": "Tokyo", "lat": 35.689487, "long": 139.691706, "timezoneId": "Asia/Tokyo"} + ] + }, + { "type": "view", "location": "settings-view", "id": "emulation-geolocations",
diff --git a/third_party/blink/renderer/devtools/front_end/emulation/sensors.css b/third_party/blink/renderer/devtools/front_end/emulation/sensors.css index f89c59e..a0da0eb3 100644 --- a/third_party/blink/renderer/devtools/front_end/emulation/sensors.css +++ b/third_party/blink/renderer/devtools/front_end/emulation/sensors.css
@@ -5,165 +5,164 @@ */ .sensors-view { - padding: 12px; - display: block; + padding: 12px; + display: block; } .sensors-view input { - width: 100%; - max-width: 100px; - margin: -5px 10px 0px 0px; - text-align: end; + width: 100%; + max-width: 120px; + margin: -5px 10px 0px 0px; + text-align: end; } .sensors-view input[readonly] { - background-color: rgb(235, 235, 228); + background-color: rgb(235, 235, 228); } .sensors-view fieldset { - border: none; - padding: 10px 0px; - margin-left: 0; - flex: 0 0 auto; - margin: 0; + border: none; + padding: 10px 0px; + margin-left: 0; + flex: 0 0 auto; + margin: 0; } .sensors-view fieldset[disabled] { - opacity: 0.5; + opacity: 0.5; } .sensors-view input:focus::-webkit-input-placeholder { - color: transparent !important; + color: transparent !important; } .sensors-view .chrome-select { - width: 200px; + width: 200px; } .sensors-group-title { - width: 80px; - line-height: 24px; + width: 80px; + line-height: 24px; } .sensors-group { - display: flex; - flex-wrap: wrap; - margin-bottom: 10px; + display: flex; + flex-wrap: wrap; + margin-bottom: 10px; } .geo-fields { - flex: 2 0 200px; + flex: 2 0 200px; } .latlong-group { - display: flex; - margin-bottom: 10px; + display: flex; + margin-bottom: 10px; } .latlong-title { - width: 70px; + width: 70px; } /* Device Orientation */ .orientation-content { - display: flex; - flex-wrap: wrap; + display: flex; + flex-wrap: wrap; } .orientation-fields { - margin-right: 10px; + margin-right: 10px; } .orientation-stage { - -webkit-perspective: 700px; - -webkit-perspective-origin: 50% 50%; - width: 160px; - height: 150px; - background: linear-gradient(#E1F5FE 0%, #E1F5FE 64%, #b0Ebf3 64%, #DEF6F9 100%); - transition: 0.2s ease opacity, 0.2s ease -webkit-filter; - overflow: hidden; - margin-bottom: 10px; + -webkit-perspective: 700px; + -webkit-perspective-origin: 50% 50%; + width: 160px; + height: 150px; + background: linear-gradient(#E1F5FE 0%, #E1F5FE 64%, #b0Ebf3 64%, #DEF6F9 100%); + transition: 0.2s ease opacity, 0.2s ease -webkit-filter; + overflow: hidden; + margin-bottom: 10px; } .orientation-stage.disabled { - -webkit-filter: grayscale(); - opacity: 0.5; - cursor: default !important; + -webkit-filter: grayscale(); + opacity: 0.5; + cursor: default !important; } .orientation-element, .orientation-element::before, -.orientation-element::after -{ - position: absolute; - box-sizing: border-box; - transform-style: preserve-3d; - background: no-repeat; - background-size: cover; - backface-visibility: hidden; +.orientation-element::after{ + position: absolute; + box-sizing: border-box; + transform-style: preserve-3d; + background: no-repeat; + background-size: cover; + backface-visibility: hidden; } .orientation-box { - width: 62px; - height: 122px; - left: 0; - right: 0; - top: 0; - bottom: 0; - margin: auto; - transform: rotate3d(1, 0, 0, 90deg); + width: 62px; + height: 122px; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; + transform: rotate3d(1, 0, 0, 90deg); } .orientation-box.is-animating, .is-animating .orientation-layer { - transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; + transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .orientation-layer { - width: 100%; - height: 100%; - transform-style: preserve-3d; + width: 100%; + height: 100%; + transform-style: preserve-3d; } .orientation-front, .orientation-back { - width: 62px; - height: 122px; - border-radius: 8px; + width: 62px; + height: 122px; + border-radius: 8px; } .orientation-front { - background-image: url(Images/accelerometer-front.svg); + background-image: url(Images/accelerometer-front.svg); } .orientation-back { - transform: rotateY(180deg) translateZ(8px); - background-image: url(Images/accelerometer-back.svg); + transform: rotateY(180deg) translateZ(8px); + background-image: url(Images/accelerometer-back.svg); } .orientation-left, .orientation-right { - width: 8px; - height: 106px; - top: 8px; - background-position: center center; + width: 8px; + height: 106px; + top: 8px; + background-position: center center; } .orientation-left { - left: -8px; - transform-origin: right center; - transform: rotateY(-90deg); - background-image: url(Images/accelerometer-left.png); + left: -8px; + transform-origin: right center; + transform: rotateY(-90deg); + background-image: url(Images/accelerometer-left.png); } .orientation-right { - right: -8px; - transform-origin: left center; - transform: rotateY(90deg); - background-image: url(Images/accelerometer-right.png); + right: -8px; + transform-origin: left center; + transform: rotateY(90deg); + background-image: url(Images/accelerometer-right.png); } .orientation-left::before, @@ -171,60 +170,60 @@ .orientation-right::before, .orientation-right::after { - content: ''; - width: 8px; - height: 6px; + content: ''; + width: 8px; + height: 6px; } .orientation-left::before, .orientation-left::after { - background-image: url(Images/accelerometer-left.png); + background-image: url(Images/accelerometer-left.png); } .orientation-right::before, .orientation-right::after { - background-image: url(Images/accelerometer-right.png); + background-image: url(Images/accelerometer-right.png); } .orientation-left::before, .orientation-right::before { - top: -6px; - transform-origin: center bottom; - transform: rotateX(26deg); - background-position: center top; + top: -6px; + transform-origin: center bottom; + transform: rotateX(26deg); + background-position: center top; } .orientation-left::after, .orientation-right::after { - bottom: -6px; - transform-origin: center top; - transform: rotateX(-25deg); - background-position: center bottom; + bottom: -6px; + transform-origin: center top; + transform: rotateX(-25deg); + background-position: center bottom; } .orientation-top, .orientation-bottom { - width: 50px; - height: 8px; - left: 8px; - background-position: center center; + width: 50px; + height: 8px; + left: 8px; + background-position: center center; } .orientation-top { - top: -8px; - transform-origin: center bottom; - transform: rotateX(90deg); - background-image: url(Images/accelerometer-top.png); + top: -8px; + transform-origin: center bottom; + transform: rotateX(90deg); + background-image: url(Images/accelerometer-top.png); } .orientation-bottom { - bottom: -8px; - transform-origin: center top; - transform: rotateX(-90deg); - background-image: url(Images/accelerometer-bottom.png); + bottom: -8px; + transform-origin: center top; + transform: rotateX(-90deg); + background-image: url(Images/accelerometer-bottom.png); } @@ -233,67 +232,67 @@ .orientation-bottom::before, .orientation-bottom::after { - content: ''; - width: 8px; - height: 8px; + content: ''; + width: 8px; + height: 8px; } .orientation-top::before, .orientation-top::after { - background-image: url(Images/accelerometer-top.png); + background-image: url(Images/accelerometer-top.png); } .orientation-bottom::before, .orientation-bottom::after { - background-image: url(Images/accelerometer-bottom.png); + background-image: url(Images/accelerometer-bottom.png); } .orientation-top::before, .orientation-bottom::before { - left: -6px; - transform-origin: right center; - transform: rotateY(-26deg); - background-position: left center; + left: -6px; + transform-origin: right center; + transform: rotateY(-26deg); + background-position: left center; } .orientation-top::after, .orientation-bottom::after { - right: -6px; - transform-origin: left center; - transform: rotateY(26deg); - background-position: right center; + right: -6px; + transform-origin: left center; + transform: rotateY(26deg); + background-position: right center; } .orientation-axis-input-container { - margin-bottom: 10px; + margin-bottom: 10px; } .orientation-axis-input-container input { - max-width: 100px; + max-width: 120px; } .orientation-reset-button { - min-width: 80px; + min-width: 80px; } fieldset.device-orientation-override-section { - margin: 0; - display: flex; + margin: 0; + display: flex; } .panel-section-separator { - height: 2px; - margin-bottom: 8px; - background: #f1f1f1; + height: 2px; + margin-bottom: 8px; + background: #f1f1f1; } .reload-warning { - align-self: center; - margin-left: 10px; + align-self: center; + margin-left: 10px; } button.text-button { - margin: 0 10px; + margin: 0 10px; }
diff --git a/third_party/blink/renderer/devtools/front_end/resources/CookieItemsView.js b/third_party/blink/renderer/devtools/front_end/resources/CookieItemsView.js index c9727b9..e6299eba 100644 --- a/third_party/blink/renderer/devtools/front_end/resources/CookieItemsView.js +++ b/third_party/blink/renderer/devtools/front_end/resources/CookieItemsView.js
@@ -104,7 +104,7 @@ } if (!preview) { - preview = new UI.EmptyWidget(ls`Select a cookie to preview it value`); + preview = new UI.EmptyWidget(ls`Select a cookie to preview its value`); } this._previewValue = value;
diff --git a/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp b/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp index af193ea..5327b2f 100644 --- a/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp +++ b/third_party/blink/renderer/devtools/front_end/resources/resources_strings.grdp
@@ -215,9 +215,6 @@ <message name="IDS_DEVTOOLS_9dce9dd0f39a17c2e029174f5bc86ef9" desc="Text in Background Service View of the Application panel"> Background Sync </message> - <message name="IDS_DEVTOOLS_9ea4dd36a0094fc33b5ea341a1f909ee" desc="Text in Cookie Items View of the Application panel"> - Select a cookie to preview it value - </message> <message name="IDS_DEVTOOLS_9ff9f5649294f7200b671d6389d17d9a" desc="Text in Application Panel Sidebar of the Application panel"> multiEntry </message> @@ -395,7 +392,10 @@ <message name="IDS_DEVTOOLS_ef399b2d446bb37b7c32ad2cc1b6045b" desc="Text in Service Workers View of the Application panel"> stop </message> + <message name="IDS_DEVTOOLS_f75623bb4626a57e8a7a3c0e1c092463" desc="Text in Cookie Items View of the Application panel"> + Select a cookie to preview its value + </message> <message name="IDS_DEVTOOLS_fb1508747fe448fd8b006e923ba1c3ef" desc="Text in Background Service View of the Application panel"> Payment Handler </message> -</grit-part> \ No newline at end of file +</grit-part>
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/EmulationModel.js b/third_party/blink/renderer/devtools/front_end/sdk/EmulationModel.js index da07a4e..0c23e275 100644 --- a/third_party/blink/renderer/devtools/front_end/sdk/EmulationModel.js +++ b/third_party/blink/renderer/devtools/front_end/sdk/EmulationModel.js
@@ -95,14 +95,17 @@ emulateGeolocation(geolocation) { if (!geolocation) { this._emulationAgent.clearGeolocationOverride(); + this._emulationAgent.setTimezoneOverride(''); return; } if (geolocation.error) { this._emulationAgent.setGeolocationOverride(); + this._emulationAgent.setTimezoneOverride(''); } else { this._emulationAgent.setGeolocationOverride( geolocation.latitude, geolocation.longitude, Geolocation.DefaultMockAccuracy); + this._emulationAgent.setTimezoneOverride(geolocation.timezoneId); } } @@ -201,11 +204,13 @@ /** * @param {number} latitude * @param {number} longitude + * @param {string} timezoneId * @param {boolean} error */ - constructor(latitude, longitude, error) { + constructor(latitude, longitude, timezoneId, error) { this.latitude = latitude; this.longitude = longitude; + this.timezoneId = timezoneId; this.error = error; } @@ -214,24 +219,20 @@ */ static parseSetting(value) { if (value) { - const splitError = value.split(':'); - if (splitError.length === 2) { - const splitPosition = splitError[0].split('@'); - if (splitPosition.length === 2) { - return new Geolocation(parseFloat(splitPosition[0]), parseFloat(splitPosition[1]), !!splitError[1]); - } - } + const [position, timezoneId, error] = value.split(':'); + const [latitude, longitude] = position.split('@'); + return new Geolocation(parseFloat(latitude), parseFloat(longitude), timezoneId, Boolean(error)); } - return new Geolocation(0, 0, false); + return new Geolocation(0, 0, '', false); } /** * @param {string} latitudeString * @param {string} longitudeString - * @param {string} errorStatus + * @param {string} timezoneId * @return {?Geolocation} */ - static parseUserInput(latitudeString, longitudeString, errorStatus) { + static parseUserInput(latitudeString, longitudeString, timezoneId) { if (!latitudeString && !longitudeString) { return null; } @@ -245,7 +246,7 @@ const latitude = isLatitudeValid ? parseFloat(latitudeString) : -1; const longitude = isLongitudeValid ? parseFloat(longitudeString) : -1; - return new Geolocation(latitude, longitude, !!errorStatus); + return new Geolocation(latitude, longitude, timezoneId, false); } /** @@ -269,10 +270,24 @@ } /** + * @param {string} value + * @return {{valid: boolean, errorMessage: (string|undefined)}} + */ + static timezoneIdValidator(value) { + // Chromium uses ICU's timezone implementation, which is very + // liberal in what it accepts. ICU does not simply use an allowlist + // but instead tries to make sense of the input, even for + // weird-looking timezone IDs. There's not much point in validating + // the input other than checking if it contains at least one slash. + const valid = value.includes('/'); + return {valid}; + } + + /** * @return {string} */ toSetting() { - return this.latitude + '@' + this.longitude + ':' + (this.error || ''); + return `${this.latitude}@${this.longitude}:${this.timezoneId}:${this.error || ''}`; } } @@ -356,4 +371,4 @@ /** @constructor */ SDK.EmulationModel.DeviceOrientation = DeviceOrientation; -SDK.SDKModel.register(EmulationModel, SDK.Target.Capability.Emulation, true); \ No newline at end of file +SDK.SDKModel.register(EmulationModel, SDK.Target.Capability.Emulation, true);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc index f56acb7..9d49a32 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -113,8 +113,6 @@ namespace blink { -using namespace html_names; - AXLayoutObject::AXLayoutObject(LayoutObject* layout_object, AXObjectCacheImpl& ax_object_cache) : AXNodeObject(layout_object->GetNode(), ax_object_cache), @@ -515,7 +513,7 @@ if (!SupportsARIADragging()) return kGrabbedStateUndefined; - const AtomicString& grabbed = GetAttribute(kAriaGrabbedAttr); + const AtomicString& grabbed = GetAttribute(html_names::kAriaGrabbedAttr); return EqualIgnoringASCIICase(grabbed, "true") ? kGrabbedStateTrue : kGrabbedStateFalse; } @@ -761,7 +759,8 @@ bool AXLayoutObject::HasAriaCellRole(Element* elem) const { DCHECK(elem); - const AtomicString& aria_role_str = elem->FastGetAttribute(kRoleAttr); + const AtomicString& aria_role_str = + elem->FastGetAttribute(html_names::kRoleAttr); if (aria_role_str.IsEmpty()) return false; @@ -875,7 +874,7 @@ auto* element = DynamicTo<Element>(layout_object_->GetNode()); if (!element) return g_null_atom; - return element->getAttribute(kAccesskeyAttr); + return element->getAttribute(html_names::kAccesskeyAttr); } RGBA32 AXLayoutObject::ComputeBackgroundColor() const { @@ -1429,15 +1428,15 @@ // LayoutMenuList will go straight to the text() of its selected item. // This has to be overridden in the case where the selected item has an ARIA // label. - HTMLSelectElement* select_element = - ToHTMLSelectElement(layout_object_->GetNode()); + auto* select_element = To<HTMLSelectElement>(layout_object_->GetNode()); int selected_index = select_element->selectedIndex(); const HeapVector<Member<HTMLElement>>& list_items = select_element->GetListItems(); if (selected_index >= 0 && static_cast<size_t>(selected_index) < list_items.size()) { const AtomicString& overridden_description = - list_items[selected_index]->FastGetAttribute(kAriaLabelAttr); + list_items[selected_index]->FastGetAttribute( + html_names::kAriaLabelAttr); if (!overridden_description.IsNull()) return overridden_description; } @@ -1604,18 +1603,18 @@ // a future version of WAI-ARIA. After that we will re-implement them // following new spec. bool AXLayoutObject::SupportsARIADragging() const { - const AtomicString& grabbed = GetAttribute(kAriaGrabbedAttr); + const AtomicString& grabbed = GetAttribute(html_names::kAriaGrabbedAttr); return EqualIgnoringASCIICase(grabbed, "true") || EqualIgnoringASCIICase(grabbed, "false"); } void AXLayoutObject::Dropeffects( Vector<ax::mojom::Dropeffect>& dropeffects) const { - if (!HasAttribute(kAriaDropeffectAttr)) + if (!HasAttribute(html_names::kAriaDropeffectAttr)) return; Vector<String> str_dropeffects; - TokenVectorFromAttribute(str_dropeffects, kAriaDropeffectAttr); + TokenVectorFromAttribute(str_dropeffects, html_names::kAriaDropeffectAttr); if (str_dropeffects.IsEmpty()) { dropeffects.push_back(ax::mojom::Dropeffect::kNone); @@ -1643,13 +1642,13 @@ } bool AXLayoutObject::SupportsARIAFlowTo() const { - return !GetAttribute(kAriaFlowtoAttr).IsEmpty(); + return !GetAttribute(html_names::kAriaFlowtoAttr).IsEmpty(); } bool AXLayoutObject::SupportsARIAOwns() const { if (!layout_object_) return false; - const AtomicString& aria_owns = GetAttribute(kAriaOwnsAttr); + const AtomicString& aria_owns = GetAttribute(html_names::kAriaOwnsAttr); return !aria_owns.IsEmpty(); } @@ -2534,7 +2533,7 @@ valid_cell_count++; // Any <th> tag -> treat as data table. - if (cell_node->HasTagName(kThTag)) + if (cell_node->HasTagName(html_names::kThTag)) return true; // In this case, the developer explicitly assigned a "data" table @@ -2543,7 +2542,7 @@ HTMLTableCellElement& cell_element = ToHTMLTableCellElement(*cell_node); if (!cell_element.Headers().IsEmpty() || !cell_element.Abbr().IsEmpty() || !cell_element.Axis().IsEmpty() || - !cell_element.FastGetAttribute(kScopeAttr).IsEmpty()) + !cell_element.FastGetAttribute(html_names::kScopeAttr).IsEmpty()) return true; } @@ -2791,7 +2790,7 @@ return false; if (Node* node = cell->ToLayoutObject()->GetNode()) - return node->hasChildren() && node->HasTagName(kTdTag); + return node->hasChildren() && node->HasTagName(html_names::kTdTag); return false; } @@ -2801,7 +2800,7 @@ return false; if (Node* node = cell->ToLayoutObject()->GetNode()) - return node->HasTagName(kThTag); + return node->HasTagName(html_names::kThTag); return false; } @@ -2884,10 +2883,10 @@ if (parent->RoleValue() == ax::mojom::Role::kLayoutTableRow) return ax::mojom::Role::kLayoutTableCell; - if (!GetNode() || !GetNode()->HasTagName(kThTag)) + if (!GetNode() || !GetNode()->HasTagName(html_names::kThTag)) return ax::mojom::Role::kCell; - const AtomicString& scope = GetAttribute(kScopeAttr); + const AtomicString& scope = GetAttribute(html_names::kScopeAttr); if (EqualIgnoringASCIICase(scope, "row") || EqualIgnoringASCIICase(scope, "rowgroup")) return ax::mojom::Role::kRowHeader;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_list.cc b/third_party/blink/renderer/modules/accessibility/ax_list.cc index 5ef457e..576bea1 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_list.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_list.cc
@@ -34,8 +34,6 @@ namespace blink { -using namespace html_names; - AXList::AXList(LayoutObject* layout_object, AXObjectCacheImpl& ax_object_cache) : AXLayoutObject(layout_object, ax_object_cache) {} @@ -51,7 +49,7 @@ return false; Node* node = layout_object_->GetNode(); - return node && node->HasTagName(kDlTag); + return node && node->HasTagName(html_names::kDlTag); } ax::mojom::Role AXList::RoleValue() const {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_list_box.cc b/third_party/blink/renderer/modules/accessibility/ax_list_box.cc index fc60174..3f9c26a9 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_list_box.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_list_box.cc
@@ -51,10 +51,10 @@ } AXObject* AXListBox::ActiveDescendant() { - if (!IsHTMLSelectElement(GetNode())) + auto* select = DynamicTo<HTMLSelectElement>(GetNode()); + if (!select) return nullptr; - HTMLSelectElement* select = ToHTMLSelectElement(GetNode()); int active_index = select->ActiveSelectionEndListIndex(); if (active_index >= 0 && active_index < static_cast<int>(select->length())) { HTMLOptionElement* option = select->item(active_index_); @@ -65,10 +65,10 @@ } void AXListBox::ActiveIndexChanged() { - if (!IsHTMLSelectElement(GetNode())) + auto* select = DynamicTo<HTMLSelectElement>(GetNode()); + if (!select) return; - HTMLSelectElement* select = ToHTMLSelectElement(GetNode()); int active_index = select->ActiveSelectionEndListIndex(); if (active_index == active_index_) return;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc b/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc index d83adca..47a28a72 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_menu_list_popup.cc
@@ -73,11 +73,10 @@ if (!parent_) return -1; - Node* parent_node = parent_->GetNode(); - if (!IsHTMLSelectElement(parent_node)) + auto* html_select_element = DynamicTo<HTMLSelectElement>(parent_->GetNode()); + if (!html_select_element) return -1; - HTMLSelectElement* html_select_element = ToHTMLSelectElement(parent_node); return html_select_element->selectedIndex(); } @@ -93,11 +92,10 @@ if (!parent_) return; - Node* parent_node = parent_->GetNode(); - if (!IsHTMLSelectElement(parent_node)) + auto* html_select_element = DynamicTo<HTMLSelectElement>(parent_->GetNode()); + if (!html_select_element) return; - HTMLSelectElement* html_select_element = ToHTMLSelectElement(parent_node); have_children_ = true; if (active_index_ == -1)
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc index adcd0d2..dadedf3 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -85,7 +85,10 @@ namespace blink { -using namespace html_names; +using html_names::kAltAttr; +using html_names::kTitleAttr; +using html_names::kTypeAttr; +using html_names::kValueAttr; // In ARIA 1.1, default value of aria-level was changed to 2. const int kDefaultHeadingLevel = 2; @@ -215,8 +218,8 @@ // Header and footer tags may also be exposed as landmark roles but not // always. - if (GetNode() && - (GetNode()->HasTagName(kHeaderTag) || GetNode()->HasTagName(kFooterTag))) + if (GetNode() && (GetNode()->HasTagName(html_names::kHeaderTag) || + GetNode()->HasTagName(html_names::kFooterTag))) return kIncludeObject; // All controls are accessible. @@ -457,16 +460,16 @@ static HashSet<QualifiedName>& GetLandmarkRolesNotAllowed() { DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, landmark_roles_not_allowed, ()); if (landmark_roles_not_allowed.IsEmpty()) { - landmark_roles_not_allowed.insert(kArticleTag); - landmark_roles_not_allowed.insert(kAsideTag); - landmark_roles_not_allowed.insert(kNavTag); - landmark_roles_not_allowed.insert(kSectionTag); - landmark_roles_not_allowed.insert(kBlockquoteTag); - landmark_roles_not_allowed.insert(kDetailsTag); - landmark_roles_not_allowed.insert(kFieldsetTag); - landmark_roles_not_allowed.insert(kFigureTag); - landmark_roles_not_allowed.insert(kTdTag); - landmark_roles_not_allowed.insert(kMainTag); + landmark_roles_not_allowed.insert(html_names::kArticleTag); + landmark_roles_not_allowed.insert(html_names::kAsideTag); + landmark_roles_not_allowed.insert(html_names::kNavTag); + landmark_roles_not_allowed.insert(html_names::kSectionTag); + landmark_roles_not_allowed.insert(html_names::kBlockquoteTag); + landmark_roles_not_allowed.insert(html_names::kDetailsTag); + landmark_roles_not_allowed.insert(html_names::kFieldsetTag); + landmark_roles_not_allowed.insert(html_names::kFigureTag); + landmark_roles_not_allowed.insert(html_names::kTdTag); + landmark_roles_not_allowed.insert(html_names::kMainTag); } return landmark_roles_not_allowed; } @@ -578,7 +581,7 @@ return ax::mojom::Role::kTextField; } - if (auto* select_element = ToHTMLSelectElementOrNull(*GetNode())) { + if (auto* select_element = DynamicTo<HTMLSelectElement>(*GetNode())) { return select_element->IsMultiple() ? ax::mojom::Role::kListBox : ax::mojom::Role::kPopUpButton; } @@ -628,52 +631,53 @@ if (IsHTMLVideoElement(*GetNode())) return ax::mojom::Role::kVideo; - if (GetNode()->HasTagName(kDdTag)) + if (GetNode()->HasTagName(html_names::kDdTag)) return ax::mojom::Role::kDescriptionListDetail; - if (GetNode()->HasTagName(kDtTag)) + if (GetNode()->HasTagName(html_names::kDtTag)) return ax::mojom::Role::kDescriptionListTerm; if (GetNode()->nodeName() == "math") return ax::mojom::Role::kMath; - if (GetNode()->HasTagName(kRpTag) || GetNode()->HasTagName(kRtTag)) + if (GetNode()->HasTagName(html_names::kRpTag) || + GetNode()->HasTagName(html_names::kRtTag)) return ax::mojom::Role::kRubyAnnotation; if (IsHTMLFormElement(*GetNode())) return ax::mojom::Role::kForm; - if (GetNode()->HasTagName(kAbbrTag)) + if (GetNode()->HasTagName(html_names::kAbbrTag)) return ax::mojom::Role::kAbbr; - if (GetNode()->HasTagName(kArticleTag)) + if (GetNode()->HasTagName(html_names::kArticleTag)) return ax::mojom::Role::kArticle; - if (GetNode()->HasTagName(kDelTag)) + if (GetNode()->HasTagName(html_names::kDelTag)) return ax::mojom::Role::kContentDeletion; - if (GetNode()->HasTagName(kInsTag)) + if (GetNode()->HasTagName(html_names::kInsTag)) return ax::mojom::Role::kContentInsertion; - if (GetNode()->HasTagName(kMainTag)) + if (GetNode()->HasTagName(html_names::kMainTag)) return ax::mojom::Role::kMain; - if (GetNode()->HasTagName(kMarkTag)) + if (GetNode()->HasTagName(html_names::kMarkTag)) return ax::mojom::Role::kMark; - if (GetNode()->HasTagName(kNavTag)) + if (GetNode()->HasTagName(html_names::kNavTag)) return ax::mojom::Role::kNavigation; - if (GetNode()->HasTagName(kAsideTag)) + if (GetNode()->HasTagName(html_names::kAsideTag)) return ax::mojom::Role::kComplementary; - if (GetNode()->HasTagName(kPreTag)) + if (GetNode()->HasTagName(html_names::kPreTag)) return ax::mojom::Role::kPre; - if (GetNode()->HasTagName(kSectionTag)) + if (GetNode()->HasTagName(html_names::kSectionTag)) return ax::mojom::Role::kSection; - if (GetNode()->HasTagName(kAddressTag)) + if (GetNode()->HasTagName(html_names::kAddressTag)) return ax::mojom::Role::kGenericContainer; if (IsA<HTMLDialogElement>(*GetNode())) @@ -696,28 +700,28 @@ // There should only be one banner/contentInfo per page. If header/footer are // being used within an article or section then it should not be exposed as // whole page's banner/contentInfo but as a generic container role. - if (GetNode()->HasTagName(kHeaderTag)) { + if (GetNode()->HasTagName(html_names::kHeaderTag)) { if (IsDescendantOfElementType(GetLandmarkRolesNotAllowed())) return ax::mojom::Role::kHeaderAsNonLandmark; return ax::mojom::Role::kHeader; } - if (GetNode()->HasTagName(kFooterTag)) { + if (GetNode()->HasTagName(html_names::kFooterTag)) { if (IsDescendantOfElementType(GetLandmarkRolesNotAllowed())) return ax::mojom::Role::kFooterAsNonLandmark; return ax::mojom::Role::kFooter; } - if (GetNode()->HasTagName(kBlockquoteTag)) + if (GetNode()->HasTagName(html_names::kBlockquoteTag)) return ax::mojom::Role::kBlockquote; - if (GetNode()->HasTagName(kCaptionTag)) + if (GetNode()->HasTagName(html_names::kCaptionTag)) return ax::mojom::Role::kCaption; - if (GetNode()->HasTagName(kFigcaptionTag)) + if (GetNode()->HasTagName(html_names::kFigcaptionTag)) return ax::mojom::Role::kFigcaption; - if (GetNode()->HasTagName(kFigureTag)) + if (GetNode()->HasTagName(html_names::kFigureTag)) return ax::mojom::Role::kFigure; if (GetNode()->nodeName() == "TIME") @@ -807,7 +811,7 @@ // also return true if an ancestor is editable. bool AXNodeObject::HasContentEditableAttributeSet() const { const AtomicString& content_editable_value = - GetAttribute(kContenteditableAttr); + GetAttribute(html_names::kContenteditableAttr); if (content_editable_value.IsNull()) return false; // Both "true" (case-insensitive) and the empty string count as true. @@ -1058,8 +1062,8 @@ break; } - return IsHTMLSelectElement(GetNode()) && - ToHTMLSelectElement(*GetNode()).IsMultiple(); + auto* html_select_element = DynamicTo<HTMLSelectElement>(GetNode()); + return html_select_element && html_select_element->IsMultiple(); } bool AXNodeObject::IsNativeCheckboxOrRadio() const { @@ -1252,7 +1256,8 @@ if (GetNode() && IsHTMLSummaryElement(*GetNode())) { if (GetNode()->parentNode() && IsA<HTMLDetailsElement>(GetNode()->parentNode())) - return To<Element>(GetNode()->parentNode())->hasAttribute(kOpenAttr) + return To<Element>(GetNode()->parentNode()) + ->hasAttribute(html_names::kOpenAttr) ? kExpandedExpanded : kExpandedCollapsed; } @@ -1316,22 +1321,22 @@ if (!element) return 0; - if (element->HasTagName(kH1Tag)) + if (element->HasTagName(html_names::kH1Tag)) return 1; - if (element->HasTagName(kH2Tag)) + if (element->HasTagName(html_names::kH2Tag)) return 2; - if (element->HasTagName(kH3Tag)) + if (element->HasTagName(html_names::kH3Tag)) return 3; - if (element->HasTagName(kH4Tag)) + if (element->HasTagName(html_names::kH4Tag)) return 4; - if (element->HasTagName(kH5Tag)) + if (element->HasTagName(html_names::kH5Tag)) return 5; - if (element->HasTagName(kH6Tag)) + if (element->HasTagName(html_names::kH6Tag)) return 6; if (RoleValue() == ax::mojom::Role::kHeading) @@ -1904,14 +1909,15 @@ if (!node) return String(); - if (auto* select_element = ToHTMLSelectElementOrNull(*node)) { + if (auto* select_element = DynamicTo<HTMLSelectElement>(*node)) { int selected_index = select_element->selectedIndex(); const HeapVector<Member<HTMLElement>>& list_items = select_element->GetListItems(); if (selected_index >= 0 && static_cast<wtf_size_t>(selected_index) < list_items.size()) { const AtomicString& overridden_description = - list_items[selected_index]->FastGetAttribute(kAriaLabelAttr); + list_items[selected_index]->FastGetAttribute( + html_names::kAriaLabelAttr); if (!overridden_description.IsNull()) return overridden_description; } @@ -2060,7 +2066,7 @@ // Step 2F / 2G from: http://www.w3.org/TR/accname-aam-1.1 if (in_aria_labelled_by_traversal || NameFromContents(recursive)) { Node* node = GetNode(); - if (!IsHTMLSelectElement(node)) { // Avoid option descendant text + if (!IsA<HTMLSelectElement>(node)) { // Avoid option descendant text name_from = ax::mojom::NameFrom::kContents; if (name_sources) { name_sources->push_back(NameSource(found_text_alternative)); @@ -2673,7 +2679,7 @@ // using AOM. To be extra safe, exclude objects that are clickable themselves. // This won't prevent anyone from having a click handler on the object's // container. - if (!IsClickable() && element->FastHasAttribute(kIdAttr) && + if (!IsClickable() && element->FastHasAttribute(html_names::kIdAttr) && CanBeActiveDescendant()) { return OnNativeClickAction(); } @@ -2784,8 +2790,7 @@ } void AXNodeObject::SelectedOptions(AXObjectVector& options) const { - if (IsHTMLSelectElement(GetNode())) { - HTMLSelectElement* select = ToHTMLSelectElement(GetNode()); + if (auto* select = DynamicTo<HTMLSelectElement>(GetNode())) { for (auto* const option : *select->selectedOptions()) { AXObject* ax_option = AXObjectCache().GetOrCreate(option); if (ax_option) @@ -2877,11 +2882,11 @@ return; } - if (!HasAttribute(kAriaOwnsAttr)) + if (!HasAttribute(html_names::kAriaOwnsAttr)) return; // Case 2: aria-owns attribute - TokenVectorFromAttribute(id_vector, kAriaOwnsAttr); + TokenVectorFromAttribute(id_vector, html_names::kAriaOwnsAttr); AXObjectCache().UpdateAriaOwns(this, id_vector, owned_children); } @@ -2926,8 +2931,9 @@ ++label_index) { Element* label = labels->item(label_index); if (name_sources) { - if (!label->getAttribute(kForAttr).IsEmpty() && - label->getAttribute(kForAttr) == html_element->GetIdAttribute()) { + if (!label->getAttribute(html_names::kForAttr).IsEmpty() && + label->getAttribute(html_names::kForAttr) == + html_element->GetIdAttribute()) { name_sources->back().native_source = kAXTextFromNativeHTMLLabelFor; } else { name_sources->back().native_source = @@ -3081,7 +3087,7 @@ name_from = ax::mojom::NameFrom::kPlaceholder; if (name_sources) { name_sources->push_back( - NameSource(*found_text_alternative, kPlaceholderAttr)); + NameSource(*found_text_alternative, html_names::kPlaceholderAttr)); NameSource& source = name_sources->back(); source.type = name_from; } @@ -3092,7 +3098,7 @@ NameSource& source = name_sources->back(); source.text = text_alternative; source.attribute_value = - html_element->FastGetAttribute(kPlaceholderAttr); + html_element->FastGetAttribute(html_names::kPlaceholderAttr); *found_text_alternative = true; } else { return text_alternative; @@ -3104,8 +3110,8 @@ if (IsTextControl()) { name_from = ax::mojom::NameFrom::kPlaceholder; if (name_sources) { - name_sources->push_back( - NameSource(*found_text_alternative, kAriaPlaceholderAttr)); + name_sources->push_back(NameSource(*found_text_alternative, + html_names::kAriaPlaceholderAttr)); NameSource& source = name_sources->back(); source.type = name_from; } @@ -3127,7 +3133,7 @@ } // 5.7 figure and figcaption Elements - if (GetNode()->HasTagName(kFigureTag)) { + if (GetNode()->HasTagName(html_names::kFigureTag)) { // figcaption name_from = ax::mojom::NameFrom::kRelatedElement; if (name_sources) { @@ -3137,7 +3143,7 @@ } Element* figcaption = nullptr; for (Element& element : ElementTraversal::DescendantsOf(*(GetNode()))) { - if (element.HasTagName(kFigcaptionTag)) { + if (element.HasTagName(html_names::kFigcaptionTag)) { figcaption = &element; break; } @@ -3233,10 +3239,10 @@ name_from = ax::mojom::NameFrom::kAttribute; if (name_sources) { name_sources->push_back( - NameSource(*found_text_alternative, kSummaryAttr)); + NameSource(*found_text_alternative, html_names::kSummaryAttr)); name_sources->back().type = name_from; } - const AtomicString& summary = GetAttribute(kSummaryAttr); + const AtomicString& summary = GetAttribute(html_names::kSummaryAttr); if (!summary.IsNull()) { text_alternative = summary; if (name_sources) { @@ -3332,7 +3338,7 @@ name_from = ax::mojom::NameFrom::kAttribute; if (name_sources) { name_sources->push_back( - NameSource(found_text_alternative, kAriaLabelAttr)); + NameSource(found_text_alternative, html_names::kAriaLabelAttr)); name_sources->back().type = name_from; } if (Element* document_element = document->documentElement()) { @@ -3440,13 +3446,14 @@ description_from = ax::mojom::DescriptionFrom::kRelatedElement; if (description_sources) { description_sources->push_back( - DescriptionSource(found_description, kAriaDescribedbyAttr)); + DescriptionSource(found_description, html_names::kAriaDescribedbyAttr)); description_sources->back().type = description_from; } // aria-describedby overrides any other accessible description, from: // http://rawgit.com/w3c/aria/master/html-aam/html-aam.html - const AtomicString& aria_describedby = GetAttribute(kAriaDescribedbyAttr); + const AtomicString& aria_describedby = + GetAttribute(html_names::kAriaDescribedbyAttr); if (!aria_describedby.IsNull()) { if (description_sources) description_sources->back().attribute_value = aria_describedby; @@ -3582,10 +3589,10 @@ description_from = ax::mojom::DescriptionFrom::kAttribute; if (description_sources) { description_sources->push_back( - DescriptionSource(found_description, kAriaHelpAttr)); + DescriptionSource(found_description, html_names::kAriaHelpAttr)); description_sources->back().type = description_from; } - const AtomicString& help = GetAttribute(kAriaHelpAttr); + const AtomicString& help = GetAttribute(html_names::kAriaHelpAttr); if (!help.IsEmpty()) { description = help; if (description_sources) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 55ecaed..7cd716c 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -68,8 +68,6 @@ namespace blink { -using namespace html_names; - namespace { struct RoleHashTraits : HashTraits<ax::mojom::Role> { @@ -1100,7 +1098,7 @@ element = FlatTreeTraversal::ParentElement(*node); while (element) { - if (element->hasAttribute(kInertAttr)) + if (element->hasAttribute(html_names::kInertAttr)) return AXObjectCache().GetOrCreate(element); element = FlatTreeTraversal::ParentElement(*element); } @@ -1239,7 +1237,7 @@ // aria-labelledby or aria-describedby. if (RuntimeEnabledFeatures::AccessibilityExposeDisplayNoneEnabled()) { if (Element* element = GetElement()) { - if (element->FastHasAttribute(kIdAttr) && + if (element->FastHasAttribute(html_names::kIdAttr) && IsHiddenForTextAlternativeCalculation()) { return true; } @@ -1323,7 +1321,7 @@ return true; // aria-activedescendant focus - return elem->FastHasAttribute(kIdAttr) && CanBeActiveDescendant(); + return elem->FastHasAttribute(html_names::kIdAttr) && CanBeActiveDescendant(); } bool AXObject::CanSetValueAttribute() const { @@ -1676,9 +1674,10 @@ // Check ARIA attributes. const QualifiedName& attr = - HasAttribute(kAriaLabeledbyAttr) && !HasAttribute(kAriaLabelledbyAttr) - ? kAriaLabeledbyAttr - : kAriaLabelledbyAttr; + HasAttribute(html_names::kAriaLabeledbyAttr) && + !HasAttribute(html_names::kAriaLabelledbyAttr) + ? html_names::kAriaLabeledbyAttr + : html_names::kAriaLabelledbyAttr; if (name_sources) { name_sources->push_back(NameSource(*found_text_alternative, attr)); @@ -1721,7 +1720,7 @@ name_from = ax::mojom::NameFrom::kAttribute; if (name_sources) { name_sources->push_back( - NameSource(*found_text_alternative, kAriaLabelAttr)); + NameSource(*found_text_alternative, html_names::kAriaLabelAttr)); name_sources->back().type = name_from; } const AtomicString& aria_label = @@ -1808,9 +1807,9 @@ HeapVector<Member<Element>>& elements, Vector<String>& ids) const { // Try both spellings, but prefer aria-labelledby, which is the official spec. - ElementsFromAttribute(elements, kAriaLabelledbyAttr, ids); + ElementsFromAttribute(elements, html_names::kAriaLabelledbyAttr, ids); if (!ids.size()) - ElementsFromAttribute(elements, kAriaLabeledbyAttr, ids); + ElementsFromAttribute(elements, html_names::kAriaLabeledbyAttr, ids); } String AXObject::TextFromAriaLabelledby(AXObjectSet& visited, @@ -1825,7 +1824,7 @@ Vector<String>& ids) const { AXObjectSet visited; HeapVector<Member<Element>> elements; - ElementsFromAttribute(elements, kAriaDescribedbyAttr, ids); + ElementsFromAttribute(elements, html_names::kAriaDescribedbyAttr, ids); return TextFromElements(true, visited, elements, related_objects); } @@ -2615,7 +2614,7 @@ // 2. The list of languages the browser sends in the [Accept-Language] header. // 3. The browser's default language. - const AtomicString& lang = GetAttribute(kLangAttr); + const AtomicString& lang = GetAttribute(html_names::kLangAttr); if (!lang.IsEmpty()) return lang; @@ -3363,7 +3362,7 @@ // This can be either a button widget with a non-false value of // aria-haspopup or a select element with size of 1. case ax::mojom::Role::kPopUpButton: - return ToHTMLSelectElementOrNull(*GetNode()) ? recursive : false; + return DynamicTo<HTMLSelectElement>(*GetNode()) ? recursive : false; default: return false; }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index 5d7d9fc..ae2f688 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -92,8 +92,6 @@ namespace blink { -using namespace html_names; - namespace { // Return a node for the current layout object or ancestor layout object. Node* GetClosestNodeForLayoutObject(LayoutObject* layout_object) { @@ -393,7 +391,8 @@ return false; // TODO(accessibility) support role strings with multiple roles. - return EqualIgnoringASCIICase(element->getAttribute(kRoleAttr), role); + return EqualIgnoringASCIICase(element->getAttribute(html_names::kRoleAttr), + role); } AXObject* AXObjectCacheImpl::CreateFromRenderer(LayoutObject* layout_object) { @@ -1317,12 +1316,14 @@ DeferTreeUpdate(&AXObjectCacheImpl::HandleAttributeChangedWithCleanLayout, attr_name, element); - if (attr_name != kRoleAttr && attr_name != kTypeAttr && - attr_name != kSizeAttr && attr_name != kAltAttr && - attr_name != kTitleAttr && - (attr_name != kForAttr && !IsA<HTMLLabelElement>(*element)) && - attr_name != kIdAttr && attr_name != kTabindexAttr && - attr_name != kDisabledAttr && + if (attr_name != html_names::kRoleAttr && + attr_name != html_names::kTypeAttr && + attr_name != html_names::kSizeAttr && attr_name != html_names::kAltAttr && + attr_name != html_names::kTitleAttr && + (attr_name != html_names::kForAttr && !IsA<HTMLLabelElement>(*element)) && + attr_name != html_names::kIdAttr && + attr_name != html_names::kTabindexAttr && + attr_name != html_names::kDisabledAttr && !attr_name.LocalName().StartsWith("aria-")) { return false; } @@ -1351,26 +1352,32 @@ Element* element) { DCHECK(element); DCHECK(!element->GetDocument().NeedsLayoutTreeUpdateForNode(*element)); - if (attr_name == kRoleAttr || attr_name == kTypeAttr) { + if (attr_name == html_names::kRoleAttr || + attr_name == html_names::kTypeAttr) { HandleRoleChangeWithCleanLayout(element); - } else if (attr_name == kSizeAttr || attr_name == kAriaHaspopupAttr) { + } else if (attr_name == html_names::kSizeAttr || + attr_name == html_names::kAriaHaspopupAttr) { // Role won't change on edits. HandleRoleChangeIfNotEditableWithCleanLayout(element); - } else if (attr_name == kAltAttr || attr_name == kTitleAttr) { + } else if (attr_name == html_names::kAltAttr || + attr_name == html_names::kTitleAttr) { TextChangedWithCleanLayout(element); - } else if (attr_name == kForAttr && IsA<HTMLLabelElement>(*element)) { + } else if (attr_name == html_names::kForAttr && + IsA<HTMLLabelElement>(*element)) { LabelChangedWithCleanLayout(element); - } else if (attr_name == kIdAttr) { + } else if (attr_name == html_names::kIdAttr) { MaybeNewRelationTarget(element, Get(element)); - } else if (attr_name == kTabindexAttr) { + } else if (attr_name == html_names::kTabindexAttr) { FocusableChangedWithCleanLayout(element); - } else if (attr_name == kDisabledAttr || attr_name == kReadonlyAttr) { + } else if (attr_name == html_names::kDisabledAttr || + attr_name == html_names::kReadonlyAttr) { MarkElementDirty(element, false); - } else if (attr_name == kValueAttr) { + } else if (attr_name == html_names::kValueAttr) { HandleValueChanged(element); - } else if (attr_name == kMinAttr || attr_name == kMaxAttr) { + } else if (attr_name == html_names::kMinAttr || + attr_name == html_names::kMaxAttr) { MarkElementDirty(element, false); - } else if (attr_name == kStepAttr) { + } else if (attr_name == html_names::kStepAttr) { MarkElementDirty(element, false); } @@ -1378,30 +1385,32 @@ return; // Perform updates specific to each attribute. - if (attr_name == kAriaActivedescendantAttr) { + if (attr_name == html_names::kAriaActivedescendantAttr) { HandleActiveDescendantChangedWithCleanLayout(element); - } else if (attr_name == kAriaValuenowAttr || - attr_name == kAriaValuetextAttr) { + } else if (attr_name == html_names::kAriaValuenowAttr || + attr_name == html_names::kAriaValuetextAttr) { HandleValueChanged(element); - } else if (attr_name == kAriaLabelAttr || attr_name == kAriaLabeledbyAttr || - attr_name == kAriaLabelledbyAttr) { + } else if (attr_name == html_names::kAriaLabelAttr || + attr_name == html_names::kAriaLabeledbyAttr || + attr_name == html_names::kAriaLabelledbyAttr) { TextChangedWithCleanLayout(element); - } else if (attr_name == kAriaDescribedbyAttr) { + } else if (attr_name == html_names::kAriaDescribedbyAttr) { // TODO do we need a DescriptionChanged() ? TextChangedWithCleanLayout(element); - } else if (attr_name == kAriaCheckedAttr || attr_name == kAriaPressedAttr) { + } else if (attr_name == html_names::kAriaCheckedAttr || + attr_name == html_names::kAriaPressedAttr) { CheckedStateChanged(element); - } else if (attr_name == kAriaSelectedAttr) { + } else if (attr_name == html_names::kAriaSelectedAttr) { HandleAriaSelectedChangedWithCleanLayout(element); - } else if (attr_name == kAriaExpandedAttr) { + } else if (attr_name == html_names::kAriaExpandedAttr) { HandleAriaExpandedChangeWithCleanLayout(element); - } else if (attr_name == kAriaHiddenAttr) { + } else if (attr_name == html_names::kAriaHiddenAttr) { ChildrenChangedWithCleanLayout(element->parentNode()); - } else if (attr_name == kAriaInvalidAttr) { + } else if (attr_name == html_names::kAriaInvalidAttr) { PostNotification(element, ax::mojom::Event::kInvalidStatusChanged); - } else if (attr_name == kAriaErrormessageAttr) { + } else if (attr_name == html_names::kAriaErrormessageAttr) { MarkElementDirty(element, false); - } else if (attr_name == kAriaOwnsAttr) { + } else if (attr_name == html_names::kAriaOwnsAttr) { ChildrenChangedWithCleanLayout(element); // Ensure aria-owns update fires on original parent as well if (AXObject* obj = GetOrCreate(element)) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc index 6d75c3e..2787cb8 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_relation_cache.cc
@@ -10,8 +10,6 @@ namespace blink { -using namespace html_names; - AXRelationCache::AXRelationCache(AXObjectCacheImpl* object_cache) : object_cache_(object_cache) {} @@ -22,11 +20,11 @@ Document& document = object_cache_->GetDocument(); for (Element& element : ElementTraversal::DescendantsOf(*document.documentElement())) { - const auto& id = element.FastGetAttribute(kForAttr); + const auto& id = element.FastGetAttribute(html_names::kForAttr); if (!id.IsEmpty()) all_previously_seen_label_target_ids_.insert(id); - if (element.FastHasAttribute(kAriaOwnsAttr)) { + if (element.FastHasAttribute(html_names::kAriaOwnsAttr)) { if (AXObject* obj = object_cache_->GetOrCreate(&element)) { obj->ClearChildren(); obj->AddChildren(); @@ -289,7 +287,8 @@ } void AXRelationCache::LabelChanged(Node* node) { - const auto& id = To<HTMLElement>(node)->FastGetAttribute(kForAttr); + const auto& id = + To<HTMLElement>(node)->FastGetAttribute(html_names::kForAttr); if (!id.IsEmpty()) { all_previously_seen_label_target_ids_.insert(id); if (auto* control = To<HTMLLabelElement>(node)->control())
diff --git a/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc b/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc index 52071bca..0999dae 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc
@@ -7,8 +7,6 @@ namespace blink { -using namespace html_names; - class BoolAttributeSetter : public AXSparseAttributeSetter { public: BoolAttributeSetter(AXBoolAttribute attribute) : attribute_(attribute) {} @@ -145,45 +143,47 @@ ax_sparse_attribute_setter_map, ()); if (ax_sparse_attribute_setter_map.IsEmpty()) { ax_sparse_attribute_setter_map.Set( - kAriaActivedescendantAttr, + html_names::kAriaActivedescendantAttr, new ObjectAttributeSetter(AXObjectAttribute::kAriaActiveDescendant)); ax_sparse_attribute_setter_map.Set( - kAriaControlsAttr, new ObjectVectorAttributeSetter( - AXObjectVectorAttribute::kAriaControls)); + html_names::kAriaControlsAttr, + new ObjectVectorAttributeSetter( + AXObjectVectorAttribute::kAriaControls)); ax_sparse_attribute_setter_map.Set( - kAriaFlowtoAttr, + html_names::kAriaFlowtoAttr, new ObjectVectorAttributeSetter(AXObjectVectorAttribute::kAriaFlowTo)); ax_sparse_attribute_setter_map.Set( - kAriaDetailsAttr, + html_names::kAriaDetailsAttr, new ObjectAttributeSetter(AXObjectAttribute::kAriaDetails)); ax_sparse_attribute_setter_map.Set( - kAriaErrormessageAttr, + html_names::kAriaErrormessageAttr, new ObjectAttributeSetter(AXObjectAttribute::kAriaErrorMessage)); ax_sparse_attribute_setter_map.Set( - kAriaKeyshortcutsAttr, + html_names::kAriaKeyshortcutsAttr, new StringAttributeSetter(AXStringAttribute::kAriaKeyShortcuts)); ax_sparse_attribute_setter_map.Set( - kAriaRoledescriptionAttr, + html_names::kAriaRoledescriptionAttr, new StringAttributeSetter(AXStringAttribute::kAriaRoleDescription)); ax_sparse_attribute_setter_map.Set( - kAriaBusyAttr, new BoolAttributeSetter(AXBoolAttribute::kAriaBusy)); + html_names::kAriaBusyAttr, + new BoolAttributeSetter(AXBoolAttribute::kAriaBusy)); ax_sparse_attribute_setter_map.Set( - kAriaColcountAttr, + html_names::kAriaColcountAttr, new IntAttributeSetter(AXIntAttribute::kAriaColumnCount)); ax_sparse_attribute_setter_map.Set( - kAriaColindexAttr, + html_names::kAriaColindexAttr, new UIntAttributeSetter(AXUIntAttribute::kAriaColumnIndex)); ax_sparse_attribute_setter_map.Set( - kAriaColspanAttr, + html_names::kAriaColspanAttr, new UIntAttributeSetter(AXUIntAttribute::kAriaColumnSpan)); ax_sparse_attribute_setter_map.Set( - kAriaRowcountAttr, + html_names::kAriaRowcountAttr, new IntAttributeSetter(AXIntAttribute::kAriaRowCount)); ax_sparse_attribute_setter_map.Set( - kAriaRowindexAttr, + html_names::kAriaRowindexAttr, new UIntAttributeSetter(AXUIntAttribute::kAriaRowIndex)); ax_sparse_attribute_setter_map.Set( - kAriaRowspanAttr, + html_names::kAriaRowspanAttr, new UIntAttributeSetter(AXUIntAttribute::kAriaRowSpan)); } return ax_sparse_attribute_setter_map;
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc index 5c50e64f..909f84af 100644 --- a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc +++ b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
@@ -34,8 +34,7 @@ using protocol::Accessibility::AXValue; using protocol::Maybe; using protocol::Response; - -using namespace html_names; +namespace AXPropertyNameEnum = protocol::Accessibility::AXPropertyNameEnum; namespace { @@ -450,13 +449,14 @@ HeapVector<Member<AXObject>>& objects) override { switch (attribute) { case AXObjectVectorAttribute::kAriaControls: - properties_.emplace_back( - CreateRelatedNodeListProperty(AXPropertyNameEnum::Controls, objects, - kAriaControlsAttr, *ax_object_)); + properties_.emplace_back(CreateRelatedNodeListProperty( + AXPropertyNameEnum::Controls, objects, + html_names::kAriaControlsAttr, *ax_object_)); break; case AXObjectVectorAttribute::kAriaFlowTo: properties_.emplace_back(CreateRelatedNodeListProperty( - AXPropertyNameEnum::Flowto, objects, kAriaFlowtoAttr, *ax_object_)); + AXPropertyNameEnum::Flowto, objects, html_names::kAriaFlowtoAttr, + *ax_object_)); break; } } @@ -467,16 +467,17 @@ AXObject::AXObjectVector results; ax_object.AriaDescribedbyElements(results); if (!results.IsEmpty()) { - properties.emplace_back( - CreateRelatedNodeListProperty(AXPropertyNameEnum::Describedby, results, - kAriaDescribedbyAttr, ax_object)); + properties.emplace_back(CreateRelatedNodeListProperty( + AXPropertyNameEnum::Describedby, results, + html_names::kAriaDescribedbyAttr, ax_object)); } results.clear(); ax_object.AriaOwnsElements(results); if (!results.IsEmpty()) { - properties.emplace_back(CreateRelatedNodeListProperty( - AXPropertyNameEnum::Owns, results, kAriaOwnsAttr, ax_object)); + properties.emplace_back( + CreateRelatedNodeListProperty(AXPropertyNameEnum::Owns, results, + html_names::kAriaOwnsAttr, ax_object)); } results.clear(); }
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc b/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc index 3852bf32..c379a8f00 100644 --- a/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc +++ b/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc
@@ -11,8 +11,7 @@ namespace blink { -using namespace html_names; -using namespace protocol::Accessibility; +using protocol::Accessibility::AXRelatedNode; std::unique_ptr<AXProperty> CreateProperty(const String& name, std::unique_ptr<AXValue> value) { @@ -167,43 +166,46 @@ } String ValueSourceType(ax::mojom::NameFrom name_from) { + namespace SourceType = protocol::Accessibility::AXValueSourceTypeEnum; + switch (name_from) { case ax::mojom::NameFrom::kAttribute: case ax::mojom::NameFrom::kAttributeExplicitlyEmpty: case ax::mojom::NameFrom::kTitle: case ax::mojom::NameFrom::kValue: - return AXValueSourceTypeEnum::Attribute; + return SourceType::Attribute; case ax::mojom::NameFrom::kContents: - return AXValueSourceTypeEnum::Contents; + return SourceType::Contents; case ax::mojom::NameFrom::kPlaceholder: - return AXValueSourceTypeEnum::Placeholder; + return SourceType::Placeholder; case ax::mojom::NameFrom::kCaption: case ax::mojom::NameFrom::kRelatedElement: - return AXValueSourceTypeEnum::RelatedElement; + return SourceType::RelatedElement; default: - return AXValueSourceTypeEnum::Implicit; // TODO(aboxhall): what to do - // here? + return SourceType::Implicit; // TODO(aboxhall): what to do here? } } String NativeSourceType(AXTextFromNativeHTML native_source) { + namespace SourceType = protocol::Accessibility::AXValueNativeSourceTypeEnum; + switch (native_source) { case kAXTextFromNativeHTMLFigcaption: - return AXValueNativeSourceTypeEnum::Figcaption; + return SourceType::Figcaption; case kAXTextFromNativeHTMLLabel: - return AXValueNativeSourceTypeEnum::Label; + return SourceType::Label; case kAXTextFromNativeHTMLLabelFor: - return AXValueNativeSourceTypeEnum::Labelfor; + return SourceType::Labelfor; case kAXTextFromNativeHTMLLabelWrapped: - return AXValueNativeSourceTypeEnum::Labelwrapped; + return SourceType::Labelwrapped; case kAXTextFromNativeHTMLTableCaption: - return AXValueNativeSourceTypeEnum::Tablecaption; + return SourceType::Tablecaption; case kAXTextFromNativeHTMLLegend: - return AXValueNativeSourceTypeEnum::Legend; + return SourceType::Legend; case kAXTextFromNativeHTMLTitleElement: - return AXValueNativeSourceTypeEnum::Title; + return SourceType::Title; default: - return AXValueNativeSourceTypeEnum::Other; + return SourceType::Other; } } @@ -212,8 +214,8 @@ std::unique_ptr<AXValueSource> value_source = AXValueSource::create().setType(type).build(); if (!name_source.related_objects.IsEmpty()) { - if (name_source.attribute == kAriaLabelledbyAttr || - name_source.attribute == kAriaLabeledbyAttr) { + if (name_source.attribute == html_names::kAriaLabelledbyAttr || + name_source.attribute == html_names::kAriaLabeledbyAttr) { std::unique_ptr<AXValue> attribute_value = CreateRelatedNodeListValue( name_source.related_objects, AXValueTypeEnum::IdrefList); if (!name_source.attribute_value.IsNull())
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.h b/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.h index 779815e..d0b5b50 100644 --- a/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.h +++ b/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.h
@@ -12,7 +12,10 @@ namespace blink { -using namespace protocol::Accessibility; +using protocol::Accessibility::AXProperty; +using protocol::Accessibility::AXValue; +using protocol::Accessibility::AXValueSource; +namespace AXValueTypeEnum = protocol::Accessibility::AXValueTypeEnum; std::unique_ptr<AXProperty> CreateProperty(const String& name, std::unique_ptr<AXValue>);
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_rotate_to_fullscreen_delegate_test.cc b/third_party/blink/renderer/modules/media_controls/media_controls_rotate_to_fullscreen_delegate_test.cc index 1db7eaaa..260cd09f 100644 --- a/third_party/blink/renderer/modules/media_controls/media_controls_rotate_to_fullscreen_delegate_test.cc +++ b/third_party/blink/renderer/modules/media_controls/media_controls_rotate_to_fullscreen_delegate_test.cc
@@ -40,8 +40,6 @@ namespace blink { -using namespace html_names; - namespace { class MockVideoWebMediaPlayer : public EmptyWebMediaPlayer { @@ -111,7 +109,7 @@ SetupPageWithClients(&clients, MakeGarbageCollected<StubLocalFrameClient>()); video_ = MakeGarbageCollected<HTMLVideoElement>(GetDocument()); - GetVideo().setAttribute(kControlsAttr, g_empty_atom); + GetVideo().setAttribute(html_names::kControlsAttr, g_empty_atom); // Most tests should call GetDocument().body()->AppendChild(&GetVideo()); // This is not done automatically, so that tests control timing of `Attach`. } @@ -148,7 +146,7 @@ // If scripts are not enabled, controls will always be shown. GetFrame().GetSettings()->SetScriptEnabled(true); - GetVideo().removeAttribute(kControlsAttr); + GetVideo().removeAttribute(html_names::kControlsAttr); } void DispatchEvent(EventTarget& target, const AtomicString& type) {
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.h b/third_party/blink/renderer/modules/mediastream/user_media_processor.h index 6cd0edd..fd16054 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.h
@@ -289,8 +289,7 @@ mojo::Remote<blink::mojom::blink::MediaStreamDispatcherHost> dispatcher_host_; // UserMedia requests are processed sequentially. |current_request_info_| - // contains the request currently being processed, if any, and - // |pending_request_infos_| is a list of queued requests. + // contains the request currently being processed. Member<RequestInfo> current_request_info_; MediaDevicesDispatcherCallback media_devices_dispatcher_cb_; base::OnceClosure request_completed_cb_;
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc index 9825c4d..006b344a 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -596,9 +596,9 @@ : nullptr; } -rtc::Thread* PeerConnectionDependencyFactory::GetWebRtcWorkerThreadRtcThread() - const { +rtc::Thread* PeerConnectionDependencyFactory::GetWebRtcWorkerThreadRtcThread() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + EnsureInitialized(); return chrome_worker_thread_.IsRunning() ? worker_thread_ : nullptr; }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc index 26e4ca3..12a8181 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
@@ -65,8 +65,8 @@ : ice_transport_(ice_transport) {} void InitializeOnMainThread(LocalFrame& frame) override { DCHECK(!worker_thread_rtc_thread_); - worker_thread_rtc_thread_ = - Platform::Current()->GetWebRtcWorkerThreadRtcThread(); + worker_thread_rtc_thread_ = PeerConnectionDependencyFactory::GetInstance() + ->GetWebRtcWorkerThreadRtcThread(); } std::unique_ptr<IceTransportAdapter> ConstructOnWorkerThread( @@ -98,8 +98,8 @@ async_resolver_factory_ = Platform::Current()->CreateWebRtcAsyncResolverFactory(); - worker_thread_rtc_thread_ = - Platform::Current()->GetWebRtcWorkerThreadRtcThread(); + worker_thread_rtc_thread_ = PeerConnectionDependencyFactory::GetInstance() + ->GetWebRtcWorkerThreadRtcThread(); } std::unique_ptr<IceTransportAdapter> ConstructOnWorkerThread(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc index 6efc41f5..8bb0beb 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -7,6 +7,7 @@ #include "third_party/blink/public/platform/web_media_stream.h" #include "third_party/blink/public/platform/web_media_stream_track.h" #include "third_party/blink/public/platform/web_rtc_rtp_source.h" +#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/blink/renderer/core/loader/document_loader.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h" @@ -188,7 +189,8 @@ HeapVector<Member<RTCRtpHeaderExtensionCapability>>()); std::unique_ptr<webrtc::RtpCapabilities> rtc_capabilities = - blink::Platform::Current()->GetRtpSenderCapabilities(kind); + PeerConnectionDependencyFactory::GetInstance()->GetSenderCapabilities( + kind.Utf8()); HeapVector<Member<RTCRtpCodecCapability>> codecs; codecs.ReserveInitialCapacity(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc index fcfb8fa..bc07f07b 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -9,8 +9,8 @@ #include <tuple> #include <utility> -#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/web_rtc_dtmf_sender_handler.h" +#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_track.h" @@ -574,7 +574,8 @@ HeapVector<Member<RTCRtpHeaderExtensionCapability>>()); std::unique_ptr<webrtc::RtpCapabilities> rtc_capabilities = - blink::Platform::Current()->GetRtpSenderCapabilities(kind); + PeerConnectionDependencyFactory::GetInstance()->GetSenderCapabilities( + kind.Utf8()); HeapVector<Member<RTCRtpCodecCapability>> codecs; codecs.ReserveInitialCapacity(
diff --git a/third_party/blink/renderer/modules/sensor/sensor_proxy.cc b/third_party/blink/renderer/modules/sensor/sensor_proxy.cc index f57bd59..bdf81b0 100644 --- a/third_party/blink/renderer/modules/sensor/sensor_proxy.cc +++ b/third_party/blink/renderer/modules/sensor/sensor_proxy.cc
@@ -17,12 +17,10 @@ namespace blink { -using namespace device::mojom::blink; - const char SensorProxy::kDefaultErrorDescription[] = "Could not connect to a sensor"; -SensorProxy::SensorProxy(SensorType sensor_type, +SensorProxy::SensorProxy(device::mojom::blink::SensorType sensor_type, SensorProviderProxy* provider, Page* page) : PageVisibilityObserver(page), @@ -132,7 +130,7 @@ return !focused_frame_origin->CanAccess(this_origin); } -SensorProvider* SensorProxy::sensor_provider() const { +device::mojom::blink::SensorProvider* SensorProxy::sensor_provider() const { return provider_->sensor_provider(); }
diff --git a/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.cc b/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.cc index 4b43f65..9f574c42d 100644 --- a/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.cc +++ b/third_party/blink/renderer/modules/sensor/sensor_proxy_impl.cc
@@ -11,11 +11,11 @@ #include "third_party/blink/renderer/modules/sensor/sensor_reading_remapper.h" #include "third_party/blink/renderer/platform/mojo/mojo_helper.h" +using device::mojom::blink::SensorCreationResult; + namespace blink { -using namespace device::mojom::blink; - -SensorProxyImpl::SensorProxyImpl(SensorType sensor_type, +SensorProxyImpl::SensorProxyImpl(device::mojom::blink::SensorType sensor_type, SensorProviderProxy* provider, Page* page) : SensorProxy(sensor_type, provider, page), @@ -50,7 +50,7 @@ } void SensorProxyImpl::AddConfiguration( - SensorConfigurationPtr configuration, + device::mojom::blink::SensorConfigurationPtr configuration, base::OnceCallback<void(bool)> callback) { DCHECK(IsInitialized()); AddActiveFrequency(configuration->frequency); @@ -59,7 +59,7 @@ } void SensorProxyImpl::RemoveConfiguration( - SensorConfigurationPtr configuration) { + device::mojom::blink::SensorConfigurationPtr configuration) { DCHECK(IsInitialized()); RemoveActiveFrequency(configuration->frequency); sensor_remote_->RemoveConfiguration(std::move(configuration)); @@ -122,7 +122,7 @@ } void SensorProxyImpl::SensorReadingChanged() { - DCHECK_EQ(ReportingMode::ON_CHANGE, mode_); + DCHECK_EQ(device::mojom::blink::ReportingMode::ON_CHANGE, mode_); if (ShouldProcessReadings()) UpdateSensorReading(); } @@ -154,8 +154,9 @@ } } -void SensorProxyImpl::OnSensorCreated(SensorCreationResult result, - SensorInitParamsPtr params) { +void SensorProxyImpl::OnSensorCreated( + SensorCreationResult result, + device::mojom::blink::SensorInitParamsPtr params) { DCHECK_EQ(kInitializing, state_); if (!params) { DCHECK_NE(SensorCreationResult::SUCCESS, result); @@ -216,7 +217,7 @@ } void SensorProxyImpl::UpdatePollingStatus() { - if (mode_ != ReportingMode::CONTINUOUS) + if (mode_ != device::mojom::blink::ReportingMode::CONTINUOUS) return; if (ShouldProcessReadings()) {
diff --git a/third_party/blink/renderer/modules/sensor/sensor_proxy_inspector_impl.cc b/third_party/blink/renderer/modules/sensor/sensor_proxy_inspector_impl.cc index 8a2de5b..2eb8cfdf 100644 --- a/third_party/blink/renderer/modules/sensor/sensor_proxy_inspector_impl.cc +++ b/third_party/blink/renderer/modules/sensor/sensor_proxy_inspector_impl.cc
@@ -14,10 +14,8 @@ namespace blink { -using namespace device::mojom::blink; - SensorProxyInspectorImpl::SensorProxyInspectorImpl( - SensorType sensor_type, + device::mojom::blink::SensorType sensor_type, SensorProviderProxy* provider, Page* page) : SensorProxy(sensor_type, provider, page) {} @@ -41,14 +39,14 @@ } void SensorProxyInspectorImpl::AddConfiguration( - SensorConfigurationPtr configuration, + device::mojom::blink::SensorConfigurationPtr configuration, base::OnceCallback<void(bool)> callback) { DCHECK(IsInitialized()); std::move(callback).Run(true); } void SensorProxyInspectorImpl::RemoveConfiguration( - SensorConfigurationPtr configuration) { + device::mojom::blink::SensorConfigurationPtr configuration) { DCHECK(IsInitialized()); }
diff --git a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc index c0ac6bd..da282b55 100644 --- a/third_party/blink/renderer/modules/webaudio/oscillator_node.cc +++ b/third_party/blink/renderer/modules/webaudio/oscillator_node.cc
@@ -37,8 +37,6 @@ namespace blink { -using namespace vector_math; - OscillatorHandler::OscillatorHandler(AudioNode& node, float sample_rate, const String& oscillator_type, @@ -218,15 +216,16 @@ // Convert from cents to rate scalar. float k = 1.0 / 1200; - Vsmul(detune_values, 1, &k, detune_values, 1, frames_to_process); + vector_math::Vsmul(detune_values, 1, &k, detune_values, 1, + frames_to_process); for (unsigned i = 0; i < frames_to_process; ++i) { detune_values[i] = std::exp2(detune_values[i]); } if (has_frequency_changes) { // Multiply frequencies by detune scalings. - Vmul(detune_values, 1, phase_increments, 1, phase_increments, 1, - frames_to_process); + vector_math::Vmul(detune_values, 1, phase_increments, 1, phase_increments, + 1, frames_to_process); } } else { // Handle ordinary parameter changes if there are no scheduled @@ -240,8 +239,8 @@ ClampFrequency(phase_increments, frames_to_process, Context()->sampleRate() / 2); // Convert from frequency to wavetable increment. - Vsmul(phase_increments, 1, &final_scale, phase_increments, 1, - frames_to_process); + vector_math::Vsmul(phase_increments, 1, &final_scale, phase_increments, 1, + frames_to_process); } return has_sample_accurate_values;
diff --git a/third_party/blink/renderer/modules/webaudio/periodic_wave.cc b/third_party/blink/renderer/modules/webaudio/periodic_wave.cc index 78dafb2d..b8a64742 100644 --- a/third_party/blink/renderer/modules/webaudio/periodic_wave.cc +++ b/third_party/blink/renderer/modules/webaudio/periodic_wave.cc
@@ -49,8 +49,6 @@ const float kCentsPerRange = 1200 / kNumberOfOctaveBands; -using namespace vector_math; - PeriodicWave* PeriodicWave::Create(BaseAudioContext& context, const Vector<float>& real, const Vector<float>& imag, @@ -251,9 +249,9 @@ // arrays. Need to scale the data by fftSize to remove the scaling that the // inverse IFFT would do. float scale = fft_size; - Vsmul(real_data, 1, &scale, real_p, 1, number_of_components); + vector_math::Vsmul(real_data, 1, &scale, real_p, 1, number_of_components); scale = -scale; - Vsmul(imag_data, 1, &scale, imag_p, 1, number_of_components); + vector_math::Vsmul(imag_data, 1, &scale, imag_p, 1, number_of_components); // Find the starting bin where we should start culling. We need to clear // out the highest frequencies to band-limit the waveform. @@ -288,7 +286,7 @@ if (!disable_normalization) { if (!range_index) { float max_value; - Vmaxmgv(data, 1, &max_value, fft_size); + vector_math::Vmaxmgv(data, 1, &max_value, fft_size); if (max_value) normalization_scale = 1.0f / max_value; @@ -296,7 +294,7 @@ } // Apply normalization scale. - Vsmul(data, 1, &normalization_scale, data, 1, fft_size); + vector_math::Vsmul(data, 1, &normalization_scale, data, 1, fft_size); } }
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc index ffa613f..cdc4eb6 100644 --- a/third_party/blink/renderer/modules/xr/xr_session.cc +++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -172,7 +172,6 @@ enabled_features_(std::move(enabled_features)), input_sources_(MakeGarbageCollected<XRInputSourceArray>()), client_receiver_(this, std::move(client_receiver)), - input_binding_(this), callback_collection_( MakeGarbageCollected<XRFrameRequestCallbackCollection>( xr_->GetExecutionContext())), @@ -236,13 +235,10 @@ return event_target_names::kXRSession; } -device::mojom::blink::XRInputSourceButtonListenerAssociatedPtrInfo +mojo::PendingAssociatedRemote<device::mojom::blink::XRInputSourceButtonListener> XRSession::GetInputClickListener() { - DCHECK(!input_binding_); - device::mojom::blink::XRInputSourceButtonListenerAssociatedPtrInfo - input_listener; - input_binding_.Bind(MakeRequest(&input_listener)); - return input_listener; + DCHECK(!input_receiver_.is_bound()); + return input_receiver_.BindNewEndpointAndPassRemote(); } void XRSession::updateRenderState(XRRenderStateInit* init,
diff --git a/third_party/blink/renderer/modules/xr/xr_session.h b/third_party/blink/renderer/modules/xr/xr_session.h index 2cab242..30c9ca5b 100644 --- a/third_party/blink/renderer/modules/xr/xr_session.h +++ b/third_party/blink/renderer/modules/xr/xr_session.h
@@ -7,7 +7,8 @@ #include "base/containers/span.h" #include "device/vr/public/mojom/vr_service.mojom-blink.h" -#include "mojo/public/cpp/bindings/associated_binding.h" +#include "mojo/public/cpp/bindings/associated_receiver.h" +#include "mojo/public/cpp/bindings/pending_associated_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/core/dom/events/event_target.h" @@ -186,7 +187,8 @@ return display_info_; } - device::mojom::blink::XRInputSourceButtonListenerAssociatedPtrInfo + mojo::PendingAssociatedRemote< + device::mojom::blink::XRInputSourceButtonListener> GetInputClickListener(); bool EmulatedPosition() const { @@ -348,8 +350,8 @@ device::mojom::blink::VRDisplayInfoPtr display_info_; mojo::Receiver<device::mojom::blink::XRSessionClient> client_receiver_; - mojo::AssociatedBinding<device::mojom::blink::XRInputSourceButtonListener> - input_binding_; + mojo::AssociatedReceiver<device::mojom::blink::XRInputSourceButtonListener> + input_receiver_{this}; Member<XRFrameRequestCallbackCollection> callback_collection_; // Viewer pose in mojo space.
diff --git a/third_party/blink/renderer/platform/exported/platform.cc b/third_party/blink/renderer/platform/exported/platform.cc index c772ef51..ff12a36a1 100644 --- a/third_party/blink/renderer/platform/exported/platform.cc +++ b/third_party/blink/renderer/platform/exported/platform.cc
@@ -352,14 +352,4 @@ return nullptr; } -std::unique_ptr<webrtc::RtpCapabilities> Platform::GetRtpSenderCapabilities( - const WebString& kind) { - return nullptr; -} - -std::unique_ptr<webrtc::RtpCapabilities> Platform::GetRtpReceiverCapabilities( - const WebString& kind) { - return nullptr; -} - } // namespace blink
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc index c4fd374..bbeca4e 100644 --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -525,10 +525,6 @@ RuntimeEnabledFeatures::SetExpensiveBackgroundTimerThrottlingEnabled(enable); } -void WebRuntimeFeatures::EnableScrollAnchorSerialization(bool enable) { - RuntimeEnabledFeatures::SetScrollAnchorSerializationEnabled(enable); -} - void WebRuntimeFeatures::EnableFetchMetadata(bool enable) { RuntimeEnabledFeatures::SetFetchMetadataEnabled(enable); }
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h b/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h index 9cb65421..b233ca5 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h
@@ -32,6 +32,7 @@ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_RESOURCE_LOADER_OPTIONS_H_ #include "base/memory/scoped_refptr.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/mojom/url_loader_factory.mojom-blink-forward.h" #include "third_party/blink/renderer/platform/loader/fetch/fetch_initiator_info.h" #include "third_party/blink/renderer/platform/loader/fetch/integrity_metadata.h" @@ -112,8 +113,8 @@ // If not null, this URLLoaderFactory should be used to load this resource // rather than whatever factory the system might otherwise use. // Used for example for loading blob: URLs and for prefetch loading. - scoped_refptr< - base::RefCountedData<network::mojom::blink::URLLoaderFactoryPtr>> + scoped_refptr<base::RefCountedData< + mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>> url_loader_factory; };
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 5a0af5e..56317d6 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1447,11 +1447,6 @@ { name: "ScriptStreamingOnPreload", }, - // Serialize and restore scroll anchors. - { - name: "ScrollAnchorSerialization", - status: "test", - }, { name: "ScrollCustomization", },
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 6a67aa4..93118db0 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -5705,3 +5705,8 @@ # Sheriff 2019-10-15 crbug.com/1014327 [ Mac ] external/wpt/preload/onerror-event.html [ Pass Timeout ] + +# Sheriff 2019-10-16 +crbug.com/1014810 virtual/threaded/external/wpt/animation-worklet/stateful-animator.https.html [ Pass Timeout ] +crbug.com/1014812 external/wpt/animation-worklet/playback-rate.https.html [ Pass Timeout Failure ] +crbug.com/1014812 virtual/threaded/external/wpt/animation-worklet/playback-rate.https.html [ Pass Timeout Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json index 2306446..0939c49b 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -176218,6 +176218,9 @@ "web-nfc/META.yml": [ [] ], + "web-nfc/NDEFMessage_constructor.https-expected.txt": [ + [] + ], "web-nfc/NFCReader-document-hidden-manual.https-expected.txt": [ [] ], @@ -176236,6 +176239,9 @@ "web-nfc/resources/nfc-helpers.js": [ [] ], + "web-nfc/resources/support-iframe.html": [ + [] + ], "web-share/META.yml": [ [] ], @@ -212012,6 +212018,12 @@ {} ] ], + "css/css-shadow-parts/simple-inline.html": [ + [ + "css/css-shadow-parts/simple-inline.html", + {} + ] + ], "css/css-shadow-parts/simple.html": [ [ "css/css-shadow-parts/simple.html", @@ -309612,6 +309624,12 @@ {} ] ], + "web-nfc/NFCReader_scan_iframe.https.html": [ + [ + "web-nfc/NFCReader_scan_iframe.https.html", + {} + ] + ], "web-nfc/NFCReadingEvent_constructor.https.html": [ [ "web-nfc/NFCReadingEvent_constructor.https.html", @@ -386312,7 +386330,7 @@ "reftest" ], "css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html": [ - "6e40afe54c9ce9aa50765f778d74640454dcc1ce", + "1f74697489df2d8ed687b40d3681d9918f2ecb0f", "testharness" ], "css/css-multicol/filter-with-abspos.html": [ @@ -386332,7 +386350,7 @@ "reftest" ], "css/css-multicol/going-out-of-flow-after-spanner.html": [ - "2433864333967f26a2354b791cd7b153d26e44f4", + "2fe0e42a7522647b7eca4db1e6f710a9975faaa4", "testharness" ], "css/css-multicol/inheritance.html": [ @@ -390384,7 +390402,7 @@ "reftest" ], "css/css-pseudo/first-line-first-letter-insert-crash.html": [ - "17f035dedf1ef8df71918a1eacb01e1f0b80d46b", + "bc22aae409b80ee62f3079cb31e89b2130da8270", "testharness" ], "css/css-pseudo/first-line-on-ancestor-block-ref.html": [ @@ -390408,7 +390426,7 @@ "support" ], "css/css-pseudo/idlharness.html": [ - "4c113fc9091fb773cabd77f1419fac9a2e99650b", + "eb0652e9eeb374ed1d3bb4bf235b0b3cf13fde06", "testharness" ], "css/css-pseudo/marker-and-other-pseudo-elements-ref.html": [ @@ -391623,6 +391641,10 @@ "a1a19aee4ede175f7e862318105f4625144b6e42", "testharness" ], + "css/css-shadow-parts/simple-inline.html": [ + "f2c3638d1e9cc66dcc8051a00f778bc95cb33129", + "testharness" + ], "css/css-shadow-parts/simple.html": [ "a7f17d9670b137995b0dfc6f43221e16b988376d", "testharness" @@ -401092,11 +401114,11 @@ "reftest" ], "css/css-text/white-space/break-spaces-tab-005.html": [ - "b5cf3f33ec2bb582bb3f322eeed7c45b426f0936", + "81c39aa27fe818a293229a3e819d2394c8824a43", "reftest" ], "css/css-text/white-space/break-spaces-tab-006.html": [ - "85d821a3e4d476e6fdfe74a7a2f9134ffb2629a3", + "34df3bfc1bd2f20abbe29b79124a95ce28a4cfaf", "reftest" ], "css/css-text/white-space/control-chars-000.html": [ @@ -401524,11 +401546,11 @@ "reftest" ], "css/css-text/white-space/pre-wrap-tab-005.html": [ - "993aa92e370b708855aa883591e13251f9015364", + "edbc5974c15cd840a278c49f0438d41932a68b8a", "reftest" ], "css/css-text/white-space/pre-wrap-tab-006.html": [ - "a4c7f3d3ebd9ae73a494769b18f046185672030c", + "4bdb7a21c7c59888f7f20eefe704a14d47b8d9e3", "reftest" ], "css/css-text/white-space/reference/break-spaces-tab-003-ref.html": [ @@ -416620,7 +416642,7 @@ "reftest" ], "css/css-writing-modes/percentage-padding-in-shrink-to-fit.html": [ - "2d4364c886c48c3ef7ebddfb43d2210bdf75e094", + "240a66c9c6b81ba57addbebd456b5c497dcd4d51", "reftest" ], "css/css-writing-modes/reference/available-size-001-ref.html": [ @@ -422776,7 +422798,7 @@ "reftest" ], "css/mediaqueries/mq-calc-006.html": [ - "989ee424867bb49f484324b7a3e90ed608a1342a", + "8f3ac37b057d0c9e53851e76d7144c602c02bb08", "reftest" ], "css/mediaqueries/mq-case-insensitive-001.html": [ @@ -422852,7 +422874,7 @@ "support" ], "css/mediaqueries/test_media_queries.html": [ - "d368acf8b57da4b98825cb4ddc25ae4c44338745", + "881df835f5a95e45487193881d5da89c81602ba9", "testharness" ], "css/mediaqueries/viewport-script-dynamic-ref.html": [ @@ -442780,7 +442802,7 @@ "manual" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt": [ - "9c989202b31c1350473cce70ec2674f7670fedad", + "571eb0149d60b8c75ce2c35a33a93ba1e27ed9ed", "support" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html": [ @@ -442788,7 +442810,7 @@ "testharness" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [ - "72aec0b7542b685945982186f1e2570e80ac6087", + "f16a18d639cc6e528b561d800088fcfebf2c10cf", "testharness" ], "html/browsers/origin/cross-origin-objects/frame-with-then.html": [ @@ -442796,7 +442818,7 @@ "support" ], "html/browsers/origin/cross-origin-objects/frame.html": [ - "3226c8719311f937bcee4ad3b42b840828d0f600", + "ca2dd8ebf829d6f677fdf57b4a6db029a4aa457d", "support" ], "html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html": [ @@ -498740,7 +498762,7 @@ "testharness" ], "svg/animations/syncbase-remove-add-while-running.html": [ - "5b3ae94488f0a83f61cf1b4af4f6c9dc613552dc", + "61b9604a7b6751a156c48431b89fa2f3cd1af551", "testharness" ], "svg/coordinate-systems/abspos.html": [ @@ -511387,8 +511409,12 @@ "32c24570db165422a60a18b767c828dab10c5b9c", "support" ], + "web-nfc/NDEFMessage_constructor.https-expected.txt": [ + "20fd42208617457dbf8f79ef1481254fdeb2b5bf", + "support" + ], "web-nfc/NDEFMessage_constructor.https.html": [ - "19122112f59bbbbb15f4988e841ab7b18042c4e6", + "88c9ec4006e60c27a0c33f154a3f7f419f5ee2a3", "testharness" ], "web-nfc/NDEFRecord_constructor.https.html": [ @@ -511415,6 +511441,10 @@ "638d0c5a1d1b8d0e2e8e8422bd4b9e9488512e54", "testharness" ], + "web-nfc/NFCReader_scan_iframe.https.html": [ + "1f29fe4b41d9028a2381210b8b3d9ccba598b9b2", + "testharness" + ], "web-nfc/NFCReadingEvent_constructor.https.html": [ "20585176b7f89a129fad99f17d068b2deb828f68", "testharness" @@ -511455,6 +511485,10 @@ "ed5cc9c9718d01580460535ea14405c2817c0986", "support" ], + "web-nfc/resources/support-iframe.html": [ + "540eab108b19fe917272ad718445693abb989dbe", + "support" + ], "web-share/META.yml": [ "d2eccca6f424e93cc463fafc5a3b16e5a7ecc565", "support"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html index 6e40afe..1f74697 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html +++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <title>CSS Multi-column Layout Test: extremely tall multicolumn container with extremely tall inline-block inside</title> <link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> -<link rel="help" href="http://www.w3.org/TR/css3-multicol/" title="CSS Multi-column Layout Module Level 1"> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#the-multi-column-model" title="CSS Multi-column Layout Module Level 1"> <meta name="assert" content="This tests that we get no crash if we put an extremely tall inline-block inside an extremely tall multicol container. Engines typically have some maximum limit for how large values they can represent. If the value is large enough to become 'infinity', the engine should still not crash"> <!-- Explanation for the CSS values specified below: This test was written for the Chromium Blink engine, which uses a fixed-point 32 bit integer. In this
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/going-out-of-flow-after-spanner.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/going-out-of-flow-after-spanner.html index 2433864..2fe0e42a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-multicol/going-out-of-flow-after-spanner.html +++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/going-out-of-flow-after-spanner.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <title>Taking the sole box after a spanner out of flow, then remove it</title> <link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> -<link rel="help" href="http://www.w3.org/TR/css3-multicol/" title="CSS Multi-column Layout Module Level 1"> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#the-multi-column-model"> <meta name="assert" content="An absolutely positioned box is still contained by the multicol container if its containing block is inside the multicol container"> <div id="multicol" style="columns:3;"> <div style="position:relative;">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-first-letter-insert-crash.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-first-letter-insert-crash.html index 17f035de..bc22aae 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-first-letter-insert-crash.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/first-line-first-letter-insert-crash.html
@@ -1,6 +1,6 @@ <!DOCTYPE html> <title>Should not crash when inserting an element inside a :first-line pseudo.</title> -<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/"> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo"> <style> p:first-line, p:first-letter { font-family: serif;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/idlharness.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/idlharness.html index 4c113fc..eb0652e9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/idlharness.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/idlharness.html
@@ -1,6 +1,6 @@ <!doctype html> <title>CSS Pseudo Element API IDL tests</title> -<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/"> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#cssom"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/WebIDLParser.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-005.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-005.html index b5cf3f3..81c39aa2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-005.html
@@ -2,7 +2,7 @@ <meta charset="utf-8"> <title>CSS Text level 3 Test: break-space tabs don't hang</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> -<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/break-spaces-tab-005-ref.html"> <meta name="assert" content="a sequence of break-spaces tabs at the end of a line does not hang."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-006.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-006.html index 85d821a3..34df3bf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-tab-006.html
@@ -2,7 +2,7 @@ <meta charset="utf-8"> <title>CSS Text level 3 Test: break-spaces tabs and spaces don't hang</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> -<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/break-spaces-tab-005-ref.html"> <meta name="assert" content="a sequence of break-spaces tabs and spaces at the end of a line does not hang, and can wrap after each tab or space."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-005.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-005.html index 993aa92e..edbc5974 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-005.html
@@ -2,7 +2,7 @@ <meta charset="utf-8"> <title>CSS Text level 3 Test: pre-wrap tabs hang</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> -<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/pre-wrap-001-ref.html"> <meta name="assert" content="a sequence of pre-wrap tabs at the end of a line hangs."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-006.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-006.html index a4c7f3d..4bdb7a2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/pre-wrap-tab-006.html
@@ -2,7 +2,7 @@ <meta charset="utf-8"> <title>CSS Text level 3 Test: pre-wrap tabs and spaces hang</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> -<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/pre-wrap-001-ref.html"> <meta name="assert" content="a sequence of pre-wrap tabs and spaces at the end of a line hangs."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percentage-padding-in-shrink-to-fit.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percentage-padding-in-shrink-to-fit.html index 2d4364c..240a66c9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percentage-padding-in-shrink-to-fit.html +++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/percentage-padding-in-shrink-to-fit.html
@@ -1,6 +1,6 @@ <!DOCTYPE html> <link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> -<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#dimension-mapping"> <link rel="help" href="https://www.w3.org/TR/CSS22/box.html#propdef-padding-top"> <link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=966795"> <link rel="match" href="../reference/nothing.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/mediaqueries/mq-calc-006.html b/third_party/blink/web_tests/external/wpt/css/mediaqueries/mq-calc-006.html index 989ee42..8f3ac37b0 100644 --- a/third_party/blink/web_tests/external/wpt/css/mediaqueries/mq-calc-006.html +++ b/third_party/blink/web_tests/external/wpt/css/mediaqueries/mq-calc-006.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <link rel="author" title="Xiaocheng Hu" href="xiaochengh@chromium.org"> <link rel="help" href="http://www.w3.org/TR/css3-values/#calc-notation"> -<link rel="help" href="http://www.w3.org/TR/css3-mediaqueries/"> +<link rel="help" href="https://www.w3.org/TR/css3-mediaqueries/#units"> <link rel="match" href="../reference/ref-filled-green-100px-square.xht"> <meta name="assert" content="The 'in' unit used in calc is not mistaken as 'px'."> <style>
diff --git a/third_party/blink/web_tests/external/wpt/css/mediaqueries/test_media_queries.html b/third_party/blink/web_tests/external/wpt/css/mediaqueries/test_media_queries.html index d368acf..881df83 100644 --- a/third_party/blink/web_tests/external/wpt/css/mediaqueries/test_media_queries.html +++ b/third_party/blink/web_tests/external/wpt/css/mediaqueries/test_media_queries.html
@@ -5,7 +5,7 @@ <link rel="author" title="L. David Baron" href="https://dbaron.org/"> <link rel="author" title="Anne van Kesteren" href="http://annevankesteren.nl/"> <link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> - <link rel="help" href="http://www.w3.org/TR/css3-mediaqueries/"> + <link rel="help" href="https://www.w3.org/TR/css3-mediaqueries/#media0"> <script type="text/javascript" src="/resources/testharness.js"></script> <script type="text/javascript" src="/resources/testharnessreport.js"></script> </head>
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt index 9c98920..571eb01 100644 --- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt
@@ -6,9 +6,9 @@ FAIL Only whitelisted properties are accessible cross-origin (cross-origin) Blocked a frame with origin "http://web-platform.test:8001" from accessing a cross-origin frame. FAIL Only whitelisted properties are accessible cross-origin (same-origin + document.domain) Blocked a frame with origin "http://web-platform.test:8001" from accessing a cross-origin frame. FAIL Only whitelisted properties are accessible cross-origin (cross-site) Blocked a frame with origin "http://web-platform.test:8001" from accessing a cross-origin frame. -FAIL Only whitelisted properties are usable as cross-origin this objects (cross-origin) promise_test: Unhandled rejection with value: object "SecurityError: Failed to execute 'replace' on 'Location': The current window does not have permission to navigate the target frame to 'javascript:undefined'." -FAIL Only whitelisted properties are usable as cross-origin this objects (same-origin + document.domain) promise_test: Unhandled rejection with value: object "SecurityError: Failed to execute 'replace' on 'Location': The current window does not have permission to navigate the target frame to 'javascript:undefined'." -FAIL Only whitelisted properties are usable as cross-origin this objects (cross-site) promise_test: Unhandled rejection with value: object "SecurityError: Failed to execute 'replace' on 'Location': The current window does not have permission to navigate the target frame to 'javascript:undefined'." +FAIL Only whitelisted properties are usable as cross-origin this objects (cross-origin) promise_test: Unhandled rejection with value: object "SecurityError: Blocked a frame with origin "http://web-platform.test:8001" from accessing a cross-origin frame." +FAIL Only whitelisted properties are usable as cross-origin this objects (same-origin + document.domain) promise_test: Unhandled rejection with value: object "SecurityError: Blocked a frame with origin "http://web-platform.test:8001" from accessing a cross-origin frame." +FAIL Only whitelisted properties are usable as cross-origin this objects (cross-site) promise_test: Unhandled rejection with value: object "SecurityError: Blocked a frame with origin "http://web-platform.test:8001" from accessing a cross-origin frame." PASS [[GetPrototypeOf]] should return null (cross-origin) PASS [[GetPrototypeOf]] should return null (same-origin + document.domain) PASS [[GetPrototypeOf]] should return null (cross-site)
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html index 72aec0b..f16a18d 100644 --- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html +++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html
@@ -148,6 +148,9 @@ assert_throws("SecurityError", function() { win.location.pathname; }, "location.pathname throws cross-origin"); assert_equals(B.frames, 'override', "Overrides visible in the same-origin case"); assert_equals(win.frames, win, "Overrides invisible in the cross-origin case"); + assert_equals(B.focus, 'override', "Overrides visible in the same-origin case"); + checkFunction(win.focus, Function.prototype); + assert_not_equals(win.focus, focus, "Overrides invisible in the cross-origin case"); }, "Basic sanity-checking"); /*
diff --git a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/frame.html b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/frame.html index 3226c87193..ca2dd8e 100644 --- a/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/frame.html +++ b/third_party/blink/web_tests/external/wpt/html/browsers/origin/cross-origin-objects/frame.html
@@ -6,9 +6,10 @@ document.domain = document.domain; } - // Override the |frames| property to test that such overrides are + // Override the |frames| and |focus| property to test that such overrides are // properly ignored cross-origin. window.frames = "override"; + window.focus = "override"; // Also add a |then| property to test that it doesn't get exposed. window.then = "something";
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/syncbase-remove-add-while-running.html b/third_party/blink/web_tests/external/wpt/svg/animations/syncbase-remove-add-while-running.html index 5b3ae94..61b9604a 100644 --- a/third_party/blink/web_tests/external/wpt/svg/animations/syncbase-remove-add-while-running.html +++ b/third_party/blink/web_tests/external/wpt/svg/animations/syncbase-remove-add-while-running.html
@@ -1,4 +1,5 @@ <!DOCTYPE html> +<meta charset="utf-8"> <title>Remove/Add syncbase while animation is running</title> <link rel="help" href="https://www.w3.org/TR/SMIL3/smil-timing.html#q26"> <link rel="author" title="Edvard Thörnros" href="mailto:edvardt@opera.com">
diff --git a/third_party/blink/web_tests/external/wpt/web-nfc/NDEFMessage_constructor.https-expected.txt b/third_party/blink/web_tests/external/wpt/web-nfc/NDEFMessage_constructor.https-expected.txt new file mode 100644 index 0000000..20fd4220 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-nfc/NDEFMessage_constructor.https-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +PASS NDEFMessage constructor without init dict +PASS NDEFMessage constructor with null init dict +FAIL NDEFMessage constructor with a text record assert_true: arrayBuffer() returns an ArrayBuffer expected true got false +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/web-nfc/NDEFMessage_constructor.https.html b/third_party/blink/web_tests/external/wpt/web-nfc/NDEFMessage_constructor.https.html index 1912211..88c9ec40 100644 --- a/third_party/blink/web_tests/external/wpt/web-nfc/NDEFMessage_constructor.https.html +++ b/third_party/blink/web_tests/external/wpt/web-nfc/NDEFMessage_constructor.https.html
@@ -26,8 +26,8 @@ assert_true(typeof message.records[0].text() === 'string'); assert_equals(message.records[0].text(), test_text_data, 'text() contains the same text content'); - assert_equals(message.records[0].arrayBuffer(), null, - 'arrayBuffer() returns null'); + assert_true(message.records[0].arrayBuffer() instanceof ArrayBuffer, + 'arrayBuffer() returns an ArrayBuffer'); assert_equals(message.records[0].json(), null, 'json() returns null'); }, 'NDEFMessage constructor with a text record');
diff --git a/third_party/blink/web_tests/external/wpt/web-nfc/NFCReader_scan_iframe.https.html b/third_party/blink/web_tests/external/wpt/web-nfc/NFCReader_scan_iframe.https.html new file mode 100644 index 0000000..1f29fe4b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-nfc/NFCReader_scan_iframe.https.html
@@ -0,0 +1,40 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>NFCWriter.scan with an focused iframe</title> +<link rel="help" href="https://w3c.github.io/web-nfc/"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/nfc-helpers.js"></script> +<body> +<script> + +nfc_test(async (t, mockNFC) => { + const reader = new NFCReader(); + const controller = new AbortController(); + const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]); + + const promise = readerWatcher.wait_for("reading").then(event => { + assert_true(event instanceof NFCReadingEvent); + controller.abort(); + }); + reader.scan({ signal: controller.signal }); + + const iframe = document.createElement('iframe'); + iframe.src = 'resources/support-iframe.html'; + + const iframeLoadWatcher = new EventWatcher(t, iframe, 'load'); + document.body.appendChild(iframe); + await iframeLoadWatcher.wait_for('load'); + // Focus on iframe + iframe.contentWindow.document.getElementById('foo').focus(); + assert_true(iframe.contentDocument.hasFocus(), 'iframe gains the focus'); + + mockNFC.setReadingMessage(createMessage([createTextRecord(test_text_data)])); + await promise; + + // Remove iframe from main document. + iframe.parentNode.removeChild(iframe); +}, 'Test that NFCWriter.scan is not suspended if iframe gains focus.'); + +</script> +</body> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/web-nfc/resources/support-iframe.html b/third_party/blink/web_tests/external/wpt/web-nfc/resources/support-iframe.html new file mode 100644 index 0000000..540eab10 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-nfc/resources/support-iframe.html
@@ -0,0 +1,3 @@ +<!DOCTYPE HTML> +<meta charset="utf-8"> +<input type="text" id="foo" value="click me!"></input> \ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt index def93e0..c9b71d6 100644 --- a/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt
@@ -9,8 +9,8 @@ PASS 'function alert() { [native code] }' is 'function alert() { [native code] }' PASS 'function atob() { [native code] }' is 'function atob() { [native code] }' PASS 'function atob() { [native code] }' is 'function atob() { [native code] }' -PASS 'function () { [native code] }' is 'function () { [native code] }' -PASS 'function () { [native code] }' is 'function () { [native code] }' +PASS 'function blur() { [native code] }' is 'function blur() { [native code] }' +PASS 'function blur() { [native code] }' is 'function blur() { [native code] }' PASS 'function btoa() { [native code] }' is 'function btoa() { [native code] }' PASS 'function btoa() { [native code] }' is 'function btoa() { [native code] }' PASS 'function captureEvents() { [native code] }' is 'function captureEvents() { [native code] }' @@ -19,14 +19,14 @@ PASS 'function clearInterval() { [native code] }' is 'function clearInterval() { [native code] }' PASS 'function clearTimeout() { [native code] }' is 'function clearTimeout() { [native code] }' PASS 'function clearTimeout() { [native code] }' is 'function clearTimeout() { [native code] }' -PASS 'function () { [native code] }' is 'function () { [native code] }' -PASS 'function () { [native code] }' is 'function () { [native code] }' +PASS 'function close() { [native code] }' is 'function close() { [native code] }' +PASS 'function close() { [native code] }' is 'function close() { [native code] }' PASS 'function confirm() { [native code] }' is 'function confirm() { [native code] }' PASS 'function confirm() { [native code] }' is 'function confirm() { [native code] }' PASS 'function find() { [native code] }' is 'function find() { [native code] }' PASS 'function find() { [native code] }' is 'function find() { [native code] }' -PASS 'function () { [native code] }' is 'function () { [native code] }' -PASS 'function () { [native code] }' is 'function () { [native code] }' +PASS 'function focus() { [native code] }' is 'function focus() { [native code] }' +PASS 'function focus() { [native code] }' is 'function focus() { [native code] }' PASS 'function getComputedStyle() { [native code] }' is 'function getComputedStyle() { [native code] }' PASS 'function getComputedStyle() { [native code] }' is 'function getComputedStyle() { [native code] }' PASS 'function getSelection() { [native code] }' is 'function getSelection() { [native code] }'
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-args-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-args-expected.txt index a6b3772c..6239d767 100644 --- a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-args-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-args-expected.txt
@@ -27,7 +27,7 @@ PASS Posting message ('data', [detached TypedArray]): threw exception TypeError: Failed to execute 'postMessage' on 'Window': Value at index 0 does not have a transferable type. PASS Posting message ('data', [object Object]): threw exception TypeError: Failed to execute 'postMessage' on 'Window': Iterator getter is not callable. PASS Posting message ('data', 1,,2): threw exception TypeError: Failed to execute 'postMessage' on 'Window': Value at index 0 does not have a transferable type. -PASS Posting message ('data', ,function () { [native code] }): threw exception TypeError: Failed to execute 'postMessage' on 'Window': Value at index 0 is an untransferable 'null' value. +PASS Posting message ('data', ,function postMessage() { [native code] }): threw exception TypeError: Failed to execute 'postMessage' on 'Window': Value at index 0 is an untransferable 'null' value. PASS window.postMessage() threw exception TypeError: Failed to execute 'postMessage' on 'Window': 1 argument required, but only 0 present.. PASS Posting message ('a', undefined): threw exception SyntaxError: Failed to execute 'postMessage' on 'Window': Invalid target origin 'undefined' in a call to 'postMessage'. PASS Posting message ('done', undefined) did not throw an exception
diff --git a/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt index c3baeeeb..28fc728 100644 --- a/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/console/console-log-side-effects-expected.txt
@@ -13,7 +13,7 @@ console-log-side-effects.js:34 Boolean {true} console-log-side-effects.js:35 String {"foo"} console-log-side-effects.js:36 {} -console-log-side-effects.js:37 Window {parent: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …} +console-log-side-effects.js:37 Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …} console-log-side-effects.js:43 console-log-side-effects.js:47 {foo: 1, bar: 2} console-log-side-effects.js:48 (3) [1, 2, 3]
diff --git a/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override-expected.txt b/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override-expected.txt index a80192f..81b229e 100644 --- a/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override-expected.txt +++ b/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override-expected.txt
@@ -1,9 +1,9 @@ ----- tests for getting a targetWindow's functions which have custom overrides. The desired behavior is for the targetWindow to return the built-in function, not the override ----- PASS: canGet('targetWindow.focus') should be 'true' and is. -PASS: toString('targetWindow.focus') should be 'function () { [native code] }' and is. +PASS: targetWindow.focus.name should be '' and is. PASS: canGet('targetWindow.blur') should be 'true' and is. -PASS: toString('targetWindow.blur') should be 'function () { [native code] }' and is. +PASS: targetWindow.blur.name should be '' and is. PASS: canGet('targetWindow.close') should be 'true' and is. -PASS: toString('targetWindow.close') should be 'function () { [native code] }' and is. +PASS: targetWindow.close.name should be '' and is.
diff --git a/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override.html b/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override.html index 75d7963..18605b0 100644 --- a/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override.html +++ b/third_party/blink/web_tests/http/tests/security/cross-frame-access-get-override.html
@@ -16,15 +16,15 @@ // Overriden using window.focus = function() { return "new focus" } shouldBeTrue("canGet('targetWindow.focus')"); - shouldBe("toString('targetWindow.focus')", "toString('window.focus')"); + shouldBe("targetWindow.focus.name", "''"); // Overriden using window.__proto__.blur = function() { return "new blur;" } shouldBeTrue("canGet('targetWindow.blur')"); - shouldBe("toString('targetWindow.blur')", "toString('window.blur')"); + shouldBe("targetWindow.blur.name", "''"); // Overriden using window.history.close = "new close" shouldBeTrue("canGet('targetWindow.close')"); - shouldBe("toString('targetWindow.close')", "toString('window.close')"); + shouldBe("targetWindow.close.name", "''"); if (window.testRunner) testRunner.notifyDone();
diff --git a/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override-expected.txt b/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override-expected.txt index 07c5bdf7..7a2517b 100644 --- a/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override-expected.txt +++ b/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override-expected.txt
@@ -3,5 +3,5 @@ PASS: canGet('targetWindow.location.assign') should be 'false' and is. PASS: canGet('targetWindow.location.reload') should be 'false' and is. PASS: canGet('targetWindow.location.replace') should be 'true' and is. -PASS: toString('targetWindow.location.replace') should be 'function () { [native code] }' and is. +PASS: targetWindow.location.replace.name should be '' and is.
diff --git a/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override.html b/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override.html index faa0e8dd..1749c0e 100644 --- a/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override.html +++ b/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-get-override.html
@@ -24,7 +24,7 @@ // Overriden using window.location.replace = "new replace" shouldBeTrue("canGet('targetWindow.location.replace')"); - shouldBe("toString('targetWindow.location.replace')", "toString('window.location.replace')"); + shouldBe("targetWindow.location.replace.name", "''"); if (window.testRunner) testRunner.notifyDone();
diff --git a/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-put-expected.txt b/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-put-expected.txt index 2e9cb15..7079e753 100644 --- a/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-put-expected.txt +++ b/third_party/blink/web_tests/http/tests/security/cross-frame-access-location-put-expected.txt
@@ -12,7 +12,7 @@ ----- tests for putting window.history and its properties ----- PASS: window.location.assign should be 'function assign() { [native code] }' and is. -PASS: window.location.replace should be 'function () { [native code] }' and is. +PASS: window.location.replace should be 'function replace() { [native code] }' and is. PASS: window.location.reload should be 'function reload() { [native code] }' and is. PASS: window.location.toString should be 'function toString() { [native code] }' and is. PASS: window.location.customAttribute should be 'customAttribute' and is.
diff --git a/third_party/blink/web_tests/http/tests/security/cross-frame-access-put-expected.txt b/third_party/blink/web_tests/http/tests/security/cross-frame-access-put-expected.txt index 51a58fa2..2a4ee43 100644 --- a/third_party/blink/web_tests/http/tests/security/cross-frame-access-put-expected.txt +++ b/third_party/blink/web_tests/http/tests/security/cross-frame-access-put-expected.txt
@@ -154,16 +154,16 @@ ALERT: PASS: window.addEventListener should be 'function addEventListener() { [native code] }' and is. ALERT: PASS: window.alert should be 'function alert() { [native code] }' and is. ALERT: PASS: window.atob should be 'function atob() { [native code] }' and is. -ALERT: PASS: window.blur should be 'function () { [native code] }' and is. +ALERT: PASS: window.blur should be 'function blur() { [native code] }' and is. ALERT: PASS: window.btoa should be 'function btoa() { [native code] }' and is. ALERT: PASS: window.captureEvents should be 'function captureEvents() { [native code] }' and is. ALERT: PASS: window.clearInterval should be 'function clearInterval() { [native code] }' and is. ALERT: PASS: window.clearTimeout should be 'function clearTimeout() { [native code] }' and is. -ALERT: PASS: window.close should be 'function () { [native code] }' and is. +ALERT: PASS: window.close should be 'function close() { [native code] }' and is. ALERT: PASS: window.confirm should be 'function confirm() { [native code] }' and is. ALERT: PASS: window.eval should be 'function eval() { [native code] }' and is. ALERT: PASS: window.find should be 'function find() { [native code] }' and is. -ALERT: PASS: window.focus should be 'function () { [native code] }' and is. +ALERT: PASS: window.focus should be 'function focus() { [native code] }' and is. ALERT: PASS: window.getComputedStyle should be 'function getComputedStyle() { [native code] }' and is. ALERT: PASS: window.getMatchedCSSRules should be 'undefined' and is. ALERT: PASS: window.getSelection should be 'function getSelection() { [native code] }' and is.
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt new file mode 100644 index 0000000..e9ecdaa --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt
@@ -0,0 +1,15 @@ +This is a testharness.js-based test. +PASS touch coalesced events attributes in pointerevents +PASS touch pointercancel should not have any coalesced events +PASS touch pointerover should not have any coalesced events +PASS touch pointerenter should not have any coalesced events +PASS touch pointerdown should not have any coalesced events +FAIL touch pointermove should have >2 coalesced events as main thread is busy. assert_greater_than: pointermove should have at least 2 coalesced events. expected a number greater than 1 but got 1 +PASS touch pointermove coalesced events should all be marked as trusted. +PASS touch time stamps of coalesced events must be ascending. +PASS touch pointermove coalesced events should all bubbles and cancelable as false. +PASS touch pointerup should not have any coalesced events +PASS touch pointerout should not have any coalesced events +PASS touch pointerleave should not have any coalesced events +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/mac-retina/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt b/third_party/blink/web_tests/platform/mac-retina/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt new file mode 100644 index 0000000..e9ecdaa --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-retina/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt
@@ -0,0 +1,15 @@ +This is a testharness.js-based test. +PASS touch coalesced events attributes in pointerevents +PASS touch pointercancel should not have any coalesced events +PASS touch pointerover should not have any coalesced events +PASS touch pointerenter should not have any coalesced events +PASS touch pointerdown should not have any coalesced events +FAIL touch pointermove should have >2 coalesced events as main thread is busy. assert_greater_than: pointermove should have at least 2 coalesced events. expected a number greater than 1 but got 1 +PASS touch pointermove coalesced events should all be marked as trusted. +PASS touch time stamps of coalesced events must be ascending. +PASS touch pointermove coalesced events should all bubbles and cancelable as false. +PASS touch pointerup should not have any coalesced events +PASS touch pointerout should not have any coalesced events +PASS touch pointerleave should not have any coalesced events +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt new file mode 100644 index 0000000..379ff10 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/external/wpt/pointerevents/extension/pointerevent_coalesced_events_attributes-expected.txt
@@ -0,0 +1,15 @@ +This is a testharness.js-based test. +PASS touch coalesced events attributes in pointerevents +PASS touch pointercancel should not have any coalesced events +PASS touch pointerover should not have any coalesced events +PASS touch pointerenter should not have any coalesced events +PASS touch pointerdown should not have any coalesced events +PASS touch pointermove should have >2 coalesced events as main thread is busy. +PASS touch pointermove coalesced events should all be marked as trusted. +PASS touch time stamps of coalesced events must be ascending. +PASS touch pointermove coalesced events should all bubbles and cancelable as false. +PASS touch pointerup should not have any coalesced events +PASS touch pointerout should not have any coalesced events +PASS touch pointerleave should not have any coalesced events +Harness: the test ran to completion. +
diff --git a/tools/cros/OWNERS b/tools/cros/OWNERS index bd8a5a9..3150965 100644 --- a/tools/cros/OWNERS +++ b/tools/cros/OWNERS
@@ -5,4 +5,4 @@ tbarzic@chromium.org tengs@chromium.org -# COMPONENT: Speed>Telemetry +# COMPONENT: Test>Telemetry
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 2edb025..30c46ba 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -80,6 +80,7 @@ 'chromium.android.fyi': { 'Android WebView P FYI (rel)': 'android_release_bot_minimal_symbols_arm64_webview_google', + 'Android WebView P OOR-CORS FYI (rel)': 'android_release_bot_minimal_symbols_arm64_webview_google', 'Memory Infra Tester': 'android_release_thumb_bot', 'android-marshmallow-x86-fyi-rel': 'android_release_bot_minimal_symbols_x86_resource_whitelisting', 'android-pie-x86-fyi-rel': 'android_release_bot_minimal_symbols_x86',
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 1fa7dc9f..28ae171 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -4744,9 +4744,7 @@ <enum name="BackForwardCacheHistoryNavigationOutcome"> <int value="0" label="Restored"/> - <int value="1" label="Not cached"/> - <int value="2" label="Evicted"/> - <int value="3" label="Not cached due to the experiment condition"/> + <int value="1" label="Not restored"/> </enum> <enum name="BackForwardNavigationType"> @@ -18319,6 +18317,8 @@ <int value="626" label="TLS13HardeningForLocalAnchorsEnabled"/> <int value="627" label="ForceDisableAudioSandbox"/> <int value="628" label="DeviceLoginScreenScreenMagnifierType"/> + <int value="629" label="CorsMitigationList"/> + <int value="630" label="CorsLegacyModeEnabled"/> </enum> <enum name="EnterprisePolicyInvalidations"> @@ -50756,6 +50756,7 @@ <int value="14" label="Cookies cleared on exit link"/> <int value="15" label="Add new profile button"/> <int value="16" label="Sync settings(sync on) button"/> + <int value="17" label="Edit profile button"/> </enum> <enum name="ProfileNetUserCount"> @@ -54305,6 +54306,7 @@ <int value="6" label="WHITELISTED_BY_POLICY"/> <int value="7" label="ASYNC_SCANNING"/> <int value="8" label="BLOCKED_PASSWORD_PROTECTED"/> + <int value="9" label="BLOCKED_TOO_LARGE"/> </enum> <enum name="SBClientDownloadExtensions"> @@ -59929,6 +59931,8 @@ <int value="43" label="Security Events"/> <int value="44" label="Wi-Fi Configurations"/> <int value="45" label="Web Apps"/> + <int value="46" label="OS Preferences"/> + <int value="47" label="OS Priority Preferences"/> </enum> <enum name="SyncModelTypeStoreInitResult">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 0fc5eb2b..583ab920 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -20540,7 +20540,7 @@ <histogram base="true" name="ChromeOS.Camera.ConfigureStreams.Output.Resolution" units="pixels" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <!-- Name completed by histogram_suffixes name="ChromeOS.Camera.StreamFormat" --> @@ -20552,7 +20552,7 @@ </histogram> <histogram name="ChromeOS.Camera.ConfigureStreamsLatency" units="microseconds" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <owner>wtlee@chromium.org</owner> <summary> Records the process time of ConfigureStreams() method in Chrome OS camera @@ -20561,7 +20561,7 @@ </histogram> <histogram name="ChromeOS.Camera.ErrorType" enum="ChromeOSCameraErrorType" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <owner>wtlee@chromium.org</owner> <summary> Records the type of the error which triggers the Notify() method in Chrome @@ -20570,7 +20570,7 @@ </histogram> <histogram name="ChromeOS.Camera.Facing" enum="ChromeOSCameraFacing" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <owner>wtlee@chromium.org</owner> <summary> Records the camera facing of the camera session in Chrome OS camera service. @@ -20578,7 +20578,7 @@ </histogram> <histogram base="true" name="ChromeOS.Camera.Jpeg.Latency" units="microseconds" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <!-- Name completed by histogram_suffixes name="ChromeOS.Camera.JpegProcessMethod" and name="ChromeOS.Camera.JpegProcessType" --> @@ -20593,7 +20593,7 @@ </histogram> <histogram base="true" name="ChromeOS.Camera.Jpeg.Resolution" units="pixels" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <!-- Name completed by histogram_suffixes name="ChromeOS.Camera.JpegProcessMethod" and name="ChromeOS.Camera.JpegProcessType" --> @@ -20608,7 +20608,7 @@ </histogram> <histogram name="ChromeOS.Camera.OpenDeviceLatency" units="microseconds" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <owner>wtlee@chromium.org</owner> <summary> Records the process time of OpenDevice() method in Chrome OS camera service. @@ -20616,7 +20616,7 @@ </histogram> <histogram name="ChromeOS.Camera.SessionDuration" units="seconds" - expires_after="2019-10-25"> + expires_after="2020-04-25"> <owner>wtlee@chromium.org</owner> <summary>Records the session duration in Chrome OS camera service.</summary> </histogram> @@ -27656,7 +27656,10 @@ </histogram> <histogram name="CustomTabs.DynamicModule.ProportionalSet.OnModuleDestroy" - units="KB" expires_after="2019-11-01"> + units="KB"> + <obsolete> + Removed in October 2019 + </obsolete> <owner>msalama@google.com</owner> <owner>lizeb@chromium.org</owner> <owner>mvanouwerkerk@chromium.org</owner> @@ -27667,7 +27670,10 @@ </histogram> <histogram name="CustomTabs.DynamicModule.ProportionalSet.OnModuleLoad" - units="KB" expires_after="2019-11-01"> + units="KB"> + <obsolete> + Removed in October 2019 + </obsolete> <owner>msalama@google.com</owner> <owner>lizeb@chromium.org</owner> <owner>mvanouwerkerk@chromium.org</owner> @@ -27678,7 +27684,10 @@ </histogram> <histogram name="CustomTabs.DynamicModule.ResidentSet.OnModuleDestroy" - units="KB" expires_after="2020-03-29"> + units="KB"> + <obsolete> + Removed in October 2019 + </obsolete> <owner>msalama@google.com</owner> <owner>lizeb@chromium.org</owner> <owner>mvanouwerkerk@chromium.org</owner> @@ -27688,8 +27697,10 @@ </summary> </histogram> -<histogram name="CustomTabs.DynamicModule.ResidentSet.OnModuleLoad" units="KB" - expires_after="2020-01-26"> +<histogram name="CustomTabs.DynamicModule.ResidentSet.OnModuleLoad" units="KB"> + <obsolete> + Removed in October 2019 + </obsolete> <owner>msalama@google.com</owner> <owner>lizeb@chromium.org</owner> <owner>mvanouwerkerk@chromium.org</owner> @@ -179090,6 +179101,8 @@ <suffix name="MANAGED_USER_WHITELIST" label="MANAGED_USER_WHITELIST"/> <suffix name="MOUNTAIN_SHARE" label="MOUNTAIN_SHARE"/> <suffix name="NIGORI" label="NIGORI"/> + <suffix name="OS_PREFERENCE" label="OS_PREFERENCE"/> + <suffix name="OS_PRIORITY_PREFERENCE" label="OS_PRIORITY_PREFERENCE"/> <suffix name="PASSWORD" label="PASSWORD"/> <suffix name="PREFERENCE" label="PREFERENCE"/> <suffix name="PRINTERS" label="PRINTERS"/>
diff --git a/tools/perf/benchmark.csv b/tools/perf/benchmark.csv index f72e12c6..946ef83 100644 --- a/tools/perf/benchmark.csv +++ b/tools/perf/benchmark.csv
@@ -20,8 +20,8 @@ components_perftests,csharrison@chromium.org,,, dawn_perf_tests,"enga@chromium.org, chrome-gpu-perf-owners@chromium.org",Internals>GPU>Dawn,https://dawn.googlesource.com/dawn/+/HEAD/src/tests/perf_tests/README.md, dromaeo,"jbroman@chromium.org, yukishiino@chromium.org, haraken@chromium.org",Blink>Bindings,, -dummy_benchmark.noisy_benchmark_1,crouleau@chromium.org,Speed>Telemetry,, -dummy_benchmark.stable_benchmark_1,crouleau@chromium.org,Speed>Telemetry,, +dummy_benchmark.noisy_benchmark_1,crouleau@chromium.org,Test>Telemetry,, +dummy_benchmark.stable_benchmark_1,crouleau@chromium.org,Test>Telemetry,, gpu_perftests,"reveman@chromium.org, chrome-gpu-perf-owners@chromium.org",Internals>GPU,, jetstream,hablich@chromium.org,Blink>JavaScript,, jetstream2,"hablich@chromium.org, tcwang@chromium.org",Blink>JavaScript,https://browserbench.org/JetStream/in-depth.html,
diff --git a/tools/perf/benchmarks/dummy_benchmark.py b/tools/perf/benchmarks/dummy_benchmark.py index 1024a5f2..038db83 100644 --- a/tools/perf/benchmarks/dummy_benchmark.py +++ b/tools/perf/benchmarks/dummy_benchmark.py
@@ -10,13 +10,13 @@ import random -from core import perf_benchmark - from telemetry import benchmark from telemetry.page import legacy_page_test +from core import perf_benchmark from page_sets import dummy_story_set + class _DummyTest(legacy_page_test.LegacyPageTest): def __init__(self, avg, std): @@ -34,7 +34,7 @@ page_set = dummy_story_set.DummyStorySet -@benchmark.Info(emails=['crouleau@chromium.org'], component='Speed>Telemetry') +@benchmark.Info(emails=['crouleau@chromium.org'], component='Test>Telemetry') class DummyBenchmarkOne(_DummyBenchmark): """A low noise benchmark with mean=100 & std=1.""" @@ -46,7 +46,7 @@ return 'dummy_benchmark.stable_benchmark_1' -@benchmark.Info(emails=['crouleau@chromium.org'], component='Speed>Telemetry') +@benchmark.Info(emails=['crouleau@chromium.org'], component='Test>Telemetry') class DummyBenchmarkTwo(_DummyBenchmark): """A noisy benchmark with mean=50 & std=20."""
diff --git a/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc b/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc index e4c470b..cc5fad8 100644 --- a/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc +++ b/tools/traffic_annotation/auditor/traffic_annotation_auditor.cc
@@ -137,10 +137,12 @@ TrafficAnnotationAuditor::TrafficAnnotationAuditor( const base::FilePath& source_path, const base::FilePath& build_path, - const base::FilePath& clang_tool_path) + const base::FilePath& clang_tool_path, + const std::vector<std::string>& path_filters) : source_path_(source_path), build_path_(build_path), clang_tool_path_(clang_tool_path), + path_filters_(path_filters), exporter_(source_path), safe_list_loaded_(false) { DCHECK(!source_path.empty()); @@ -184,7 +186,6 @@ bool TrafficAnnotationAuditor::RunExtractor( ExtractorBackend backend, - const std::vector<std::string>& path_filters, bool filter_files_based_on_heuristics, bool use_compile_commands, bool rerun_on_errors, @@ -197,8 +198,7 @@ // Get list of files/folders to process. std::vector<std::string> file_paths; - GenerateFilesListForClangTool(backend, path_filters, - filter_files_based_on_heuristics, + GenerateFilesListForClangTool(backend, filter_files_based_on_heuristics, use_compile_commands, &file_paths); if (file_paths.empty()) return true; @@ -336,35 +336,32 @@ void TrafficAnnotationAuditor::GenerateFilesListForClangTool( ExtractorBackend backend, - const std::vector<std::string>& path_filters, bool filter_files_based_on_heuristics, bool use_compile_commands, std::vector<std::string>* file_paths) { TrafficAnnotationFileFilter filter; - // If |use_compile_commands| is requested or - // |filter_files_based_on_heuristics| is false, we pass all given file paths - // to the running script and the files in the safe list will be later removed - // from the results. - if (!filter_files_based_on_heuristics || use_compile_commands) { - if (backend == ExtractorBackend::PYTHON_SCRIPT) { - // With python_script, simply run on the whole directory. - filter.GetFilesFromGit(absolute_source_path_); - *file_paths = filter.git_files(); - } else if (path_filters.empty()) { + // When using the Clang tool backend and |use_compile_commands| is requested + // or |filter_files_based_on_heuristics| is false, we pass all given file + // paths to the running script and the files in the safe list will be later + // removed from the results. The Python tool requires a good list of file + // paths and cannot implement the same logic. + if (backend == ExtractorBackend::CLANG_TOOL && + (!filter_files_based_on_heuristics || use_compile_commands)) { + if (path_filters_.empty()) { // If no path filter is specified, return current location. The clang tool // will be run from the repository 'src' folder and hence this will point // to repository root. file_paths->push_back("./"); } else { - *file_paths = path_filters; + *file_paths = path_filters_; } return; } // If no path filter is provided, get all relevant files, except the safe // listed ones. - if (path_filters.empty()) { + if (path_filters_.empty()) { filter.GetRelevantFiles( source_path_, safe_list_[static_cast<int>(AuditorException::ExceptionType::ALL)], "", @@ -377,7 +374,7 @@ base::SetCurrentDirectory(source_path_); bool possibly_deleted_files = false; - for (const auto& path_filter : path_filters) { + for (const auto& path_filter : path_filters_) { #if defined(OS_WIN) base::FilePath path = base::FilePath( base::FilePath::StringPieceType((base::UTF8ToWide(path_filter)))); @@ -781,13 +778,12 @@ new_annotations.end()); } -void TrafficAnnotationAuditor::AddMissingAnnotations( - const std::vector<std::string>& path_filters) { +void TrafficAnnotationAuditor::AddMissingAnnotations() { for (const auto& item : exporter_.GetArchivedAnnotations()) { if (item.second.deprecation_date.empty() && exporter_.MatchesCurrentPlatform(item.second) && !item.second.file_path.empty() && - !PathFiltersMatch(path_filters, item.second.file_path)) { + !PathFiltersMatch(path_filters_, item.second.file_path)) { extracted_annotations_.push_back(AnnotationInstance::LoadFromArchive( item.second.type, item.first, item.second.unique_id_hash_code, item.second.second_id_hash_code, item.second.content_hash_code, @@ -798,7 +794,6 @@ } bool TrafficAnnotationAuditor::RunAllChecks( - const std::vector<std::string>& path_filters, bool report_xml_updates) { if (exporter_.GetArchivedAnnotations().empty() && !exporter_.LoadAnnotationsXML()) { @@ -808,8 +803,8 @@ std::set<int> deprecated_ids; exporter_.GetDeprecatedHashCodes(&deprecated_ids); - if (path_filters.size()) - AddMissingAnnotations(path_filters); + if (!path_filters_.empty()) + AddMissingAnnotations(); TrafficAnnotationIDChecker id_checker(GetReservedIDsSet(), deprecated_ids); id_checker.Load(extracted_annotations_);
diff --git a/tools/traffic_annotation/auditor/traffic_annotation_auditor.h b/tools/traffic_annotation/auditor/traffic_annotation_auditor.h index 323f9d6..7df20ea 100644 --- a/tools/traffic_annotation/auditor/traffic_annotation_auditor.h +++ b/tools/traffic_annotation/auditor/traffic_annotation_auditor.h
@@ -57,9 +57,11 @@ // |source_path|: Path to the src directory. // |build_path|: Path to a compiled build directory. // |clang_tool_path|: Path to the 'traffic_annotation_extractor' clang tool. + // |path_filters|: Filters to limit where we're scanning the source. TrafficAnnotationAuditor(const base::FilePath& source_path, const base::FilePath& build_path, - const base::FilePath& clang_tool_path); + const base::FilePath& clang_tool_path, + const std::vector<std::string>& path_filters); ~TrafficAnnotationAuditor(); // Runs traffic_annotation_extractor clang tool (or extractor.py script) and @@ -72,7 +74,6 @@ // tool is run again to record errors. Errors are written to |errors_file| if // it is not empty, otherwise LOG(ERROR). bool RunExtractor(ExtractorBackend backend, - const std::vector<std::string>& path_filters, bool filter_files_based_on_heuristics, bool use_compile_commands, bool rerun_on_errors, @@ -111,8 +112,7 @@ // filters are passed so that the data for files that were not tested would be // read from annotations.xml. If |report_xml_updates| is set and // annotations.xml requires updates, the updates are added to |errors_|. - bool RunAllChecks(const std::vector<std::string>& path_filters, - bool report_xml_updates); + bool RunAllChecks(bool report_xml_updates); // Returns a mapping of reserved unique ids' hash codes to the unique ids' // texts. This list includes all unique ids that are defined in @@ -166,10 +166,13 @@ // Returns the path to clang internal libraries. base::FilePath GetClangLibraryPath(); + void ClearPathFilters() { path_filters_.clear(); } + private: const base::FilePath source_path_; const base::FilePath build_path_; const base::FilePath clang_tool_path_; + std::vector<std::string> path_filters_; base::FilePath absolute_source_path_; @@ -193,14 +196,13 @@ // 1- Not deprecated. // 2- OS list includes current platform. // 2- Has a path (is not a reserved word). - // 3- Path matches an item in |path_filters|. - void AddMissingAnnotations(const std::vector<std::string>& path_filters); + // 3- Path matches an item in |path_filters_|. + void AddMissingAnnotations(); // Generates files list to Run clang tool on. Please refer to RunExtractor // function's comment. void GenerateFilesListForClangTool( ExtractorBackend backend, - const std::vector<std::string>& path_filters, bool filter_files_based_on_heuristics, bool use_compile_commands, std::vector<std::string>* file_paths);
diff --git a/tools/traffic_annotation/auditor/traffic_annotation_auditor_ui.cc b/tools/traffic_annotation/auditor/traffic_annotation_auditor_ui.cc index f247145..a3815e5 100644 --- a/tools/traffic_annotation/auditor/traffic_annotation_auditor_ui.cc +++ b/tools/traffic_annotation/auditor/traffic_annotation_auditor_ui.cc
@@ -70,7 +70,11 @@ Tool or extractor.py). Defaults to "python_script". path_filters Optional paths to filter which files the tool is run on. It can also include deleted files names when auditor is - run on a partial repository. + run on a partial repository. These are ignored if all of + the following are true: + - Not using --extractor-input + - Using --no-filtering OR --all-files + - Using the python extractor Example: traffic_annotation_auditor --build-path=out/Release @@ -376,7 +380,8 @@ .Append(base::FilePath::kParentDirectory); } - TrafficAnnotationAuditor auditor(source_path, build_path, tool_path); + TrafficAnnotationAuditor auditor(source_path, build_path, tool_path, + path_filters); // Extract annotations. if (extractor_input.empty()) { @@ -388,7 +393,15 @@ return error_value; } - if (!auditor.RunExtractor(backend, path_filters, filter_files, all_files, + // If we're using the Python backend, it's fast enough that we can ignore + // any path filters when we say we want to audit everything. + if (backend == ExtractorBackend::PYTHON_SCRIPT && + (!filter_files || all_files)) { + LOG(WARNING) << "The path_filters input is being ignored."; + auditor.ClearPathFilters(); + } + + if (!auditor.RunExtractor(backend, filter_files, all_files, !error_resilient, errors_file)) { LOG(ERROR) << "Failed to run clang tool."; return error_value; @@ -416,7 +429,7 @@ return error_value; // Perform checks. - if (!auditor.RunAllChecks(path_filters, test_only)) { + if (!auditor.RunAllChecks(test_only)) { LOG(ERROR) << "Running checks failed."; return error_value; }
diff --git a/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc b/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc index 935dfcc..a07a7ea5 100644 --- a/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc +++ b/tools/traffic_annotation/auditor/traffic_annotation_auditor_unittest.cc
@@ -74,6 +74,7 @@ base::FilePath clang_tool_path = source_path_.Append(kClangToolPath).Append(platform_name); + std::vector<std::string> path_filters; // As build path is not available and not used in tests, the default (empty) // build path is passed to auditor. @@ -81,7 +82,7 @@ source_path_, source_path_.Append(FILE_PATH_LITERAL("out")) .Append(FILE_PATH_LITERAL("Default")), - clang_tool_path); + clang_tool_path, path_filters); id_checker_ = std::make_unique<TrafficAnnotationIDChecker>( TrafficAnnotationAuditor::GetReservedIDsSet(), kDummyDeprecatedIDs);
diff --git a/tools/traffic_annotation/bin/README.md b/tools/traffic_annotation/bin/README.md index 8ce2ac3..5a6ee361 100644 --- a/tools/traffic_annotation/bin/README.md +++ b/tools/traffic_annotation/bin/README.md
@@ -74,5 +74,5 @@ The following two lines will be updated by the above script, and the modified README should be committed along with the updated .sha1 checksums. -CLANG_REVISION = 'b4160cb94c54f0b31d0ce14694950dac7b6cd83f' -LASTCHANGE=af603aeed8f4a091c4f94605c00084c69c708bca-refs/heads/master@{#696886} \ No newline at end of file +CLANG_REVISION = '64a362e7216a43e3ad44e50a89265e72aeb14294' +LASTCHANGE=79120883ec3483cea3995017488dff0310def70c-refs/heads/master@{#704087}
diff --git a/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1 b/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1 index 83664058..580b26f 100644 --- a/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1 +++ b/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1
@@ -1 +1 @@ -09241cc9dd3f76e7e164799ac5ec909e490cf267 \ No newline at end of file +c4b30752082017388670c8e22a45eee2e00e5849 \ No newline at end of file
diff --git a/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1 b/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1 index e03983e..734a8eb 100644 --- a/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1 +++ b/tools/traffic_annotation/bin/win32/traffic_annotation_auditor.exe.sha1
@@ -1 +1 @@ -e110771a30480e9676c80fc7963c9f9f408f8af2 \ No newline at end of file +fb3084359026d56b2f198979a765334871ec337b \ No newline at end of file
diff --git a/ui/file_manager/file_manager/foreground/css/file_manager.css b/ui/file_manager/file_manager/foreground/css/file_manager.css index 99b7a2be..6489b4d 100644 --- a/ui/file_manager/file_manager/foreground/css/file_manager.css +++ b/ui/file_manager/file_manager/foreground/css/file_manager.css
@@ -461,6 +461,10 @@ display: none; } +.cloud-import-combo-button { + position: relative; +} + .cloud-import-combo-button > .buttons { display: flex; }
diff --git a/ui/message_center/views/message_view.cc b/ui/message_center/views/message_view.cc index 8e33233..e54d4da 100644 --- a/ui/message_center/views/message_view.cc +++ b/ui/message_center/views/message_view.cc
@@ -23,11 +23,11 @@ #include "ui/views/background.h" #include "ui/views/border.h" #include "ui/views/controls/button/image_button.h" +#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/scroll_view.h" #include "ui/views/focus/focus_manager.h" #include "ui/views/style/platform_style.h" -#include "ui/views/view_class_properties.h" #include "ui/views/widget/widget.h" #if defined(OS_WIN) @@ -71,10 +71,26 @@ // static const char MessageView::kViewClassName[] = "MessageView"; +class MessageView::HighlightPathGenerator + : public views::HighlightPathGenerator { + public: + HighlightPathGenerator() = default; + + // views::HighlightPathGenerator: + SkPath GetHighlightPath(const views::View* view) override { + return static_cast<const MessageView*>(view)->GetHighlightPath(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(HighlightPathGenerator); +}; + MessageView::MessageView(const Notification& notification) : notification_id_(notification.id()), slide_out_controller_(this, this) { SetFocusBehavior(FocusBehavior::ALWAYS); focus_ring_ = views::FocusRing::Install(this); + views::HighlightPathGenerator::Install( + this, std::make_unique<HighlightPathGenerator>()); // TODO(amehfooz): Remove explicit color setting after native theme changes. focus_ring_->SetColor(gfx::kGoogleBlue500); @@ -165,7 +181,7 @@ SchedulePaint(); } -void MessageView::UpdateFocusHighlight() { +SkPath MessageView::GetHighlightPath() const { gfx::Rect rect(GetBoundsInScreen().size()); // Shrink focus ring size by -kFocusHaloInset on each side to draw // them on top of the notifications. We need to do this because TrayBubbleView @@ -183,14 +199,7 @@ bottom_radius, bottom_radius, // bottom-right bottom_radius, bottom_radius}; // bottom-left - auto path = std::make_unique<SkPath>(); - path->addRoundRect(gfx::RectToSkRect(rect), radii); - SetProperty(views::kHighlightPathKey, path.release()); -} - -void MessageView::OnBoundsChanged(const gfx::Rect& previous_bounds) { - views::InkDropHostView::OnBoundsChanged(previous_bounds); - UpdateFocusHighlight(); + return SkPath().addRoundRect(gfx::RectToSkRect(rect), radii); } void MessageView::OnContainerAnimationStarted() {
diff --git a/ui/message_center/views/message_view.h b/ui/message_center/views/message_view.h index e3c3181..9fb070b 100644 --- a/ui/message_center/views/message_view.h +++ b/ui/message_center/views/message_view.h
@@ -121,7 +121,6 @@ bool OnKeyPressed(const ui::KeyEvent& event) override; bool OnKeyReleased(const ui::KeyEvent& event) override; void OnPaint(gfx::Canvas* canvas) override; - void OnBoundsChanged(const gfx::Rect& previous_bounds) override; void OnBlur() override; void OnGestureEvent(ui::GestureEvent* event) override; void RemovedFromWidget() override; @@ -166,11 +165,6 @@ // Changes the background color and schedules a paint. virtual void SetDrawBackgroundAsActive(bool active); - // Update the focus ring highlight for the notification. - // Adds a highlight path based on the notification's bounds - // and corner radii. - void UpdateFocusHighlight(); - void SetCornerRadius(int top_radius, int bottom_radius); views::ScrollView* scroller() { return scroller_; } @@ -180,6 +174,12 @@ private: friend class test::MessagePopupCollectionTest; + class HighlightPathGenerator; + + // Gets the highlight path for the notification based on bounds and corner + // radii. + SkPath GetHighlightPath() const; + // Returns the ideal slide mode by calculating the current status. views::SlideOutController::SlideMode CalculateSlideMode() const;
diff --git a/ui/views/controls/webview/webview_unittest.cc b/ui/views/controls/webview/webview_unittest.cc index 49379af..796b071 100644 --- a/ui/views/controls/webview/webview_unittest.cc +++ b/ui/views/controls/webview/webview_unittest.cc
@@ -14,6 +14,7 @@ #include "base/memory/ptr_util.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/mock_render_process_host.h"
diff --git a/ui/views_content_client/views_content_browser_client.h b/ui/views_content_client/views_content_browser_client.h index c0ce520..5159aa85 100644 --- a/ui/views_content_client/views_content_browser_client.h +++ b/ui/views_content_client/views_content_browser_client.h
@@ -9,6 +9,7 @@ #include "base/macros.h" #include "content/public/browser/content_browser_client.h" +#include "storage/browser/quota/quota_settings.h" namespace ui {
diff --git a/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html b/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html index f53ead3..ddb511f 100644 --- a/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html +++ b/ui/webui/resources/cr_components/chromeos/quick_unlock/pin_keyboard.html
@@ -107,7 +107,7 @@ flex-direction: column; font-weight: 400; height: var(--pin-button-height); - justify-content: center; + justify-content: space-between; margin: 0 var(--pin-button-horizontal-margin); min-height: 0; min-width: 0; @@ -133,17 +133,9 @@ .digit-button inner-text { font-family: 'Roboto'; - position: absolute; } - .number { - color: var(--pin-keyboard-number-color, var(--paper-blue-grey-700)); - font-size: 18px; - top: 0; - } - - .letter { - bottom: 0; + inner-text.letter { color: var(--pin-keyboard-letter-color, var(--google-grey-700)); font-size: 12px; margin-top: 8px; @@ -151,6 +143,12 @@ @apply --pin-keyboard-digit-button-letter; } + .number { + color: var(--pin-keyboard-number-color, var(--paper-blue-grey-700)); + font-size: 18px; + height: 16px; + } + #pinInput { --cr-input-error-display: none; --cr-input-input: {
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn index 05f0d52..7c072928a 100644 --- a/weblayer/BUILD.gn +++ b/weblayer/BUILD.gn
@@ -92,6 +92,7 @@ "//net", "//net:net_resources", "//sandbox", + "//services/network/public/mojom", "//services/service_manager/embedder:embedder_result_codes", "//skia", "//third_party/blink/public/strings",
diff --git a/weblayer/browser/DEPS b/weblayer/browser/DEPS index 6a65baa..f5bed443 100644 --- a/weblayer/browser/DEPS +++ b/weblayer/browser/DEPS
@@ -5,6 +5,8 @@ "+mojo/public", "+net", "+sandbox", + "+services/network/network_service.h", + "+services/network/public", "+services/service_manager", "+third_party/blink/public/common", "+ui/aura",
diff --git a/weblayer/browser/content_browser_client_impl.cc b/weblayer/browser/content_browser_client_impl.cc index 5164e09..5b6cf9d 100644 --- a/weblayer/browser/content_browser_client_impl.cc +++ b/weblayer/browser/content_browser_client_impl.cc
@@ -9,11 +9,17 @@ #include "base/command_line.h" #include "base/files/file.h" #include "base/files/file_util.h" +#include "base/path_service.h" #include "base/stl_util.h" #include "build/build_config.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/devtools_manager_delegate.h" +#include "content/public/browser/network_service_instance.h" #include "content/public/common/service_names.mojom.h" #include "content/public/common/user_agent.h" +#include "services/network/network_service.h" +#include "services/network/public/mojom/network_context.mojom.h" +#include "services/network/public/mojom/network_service.mojom.h" #include "third_party/blink/public/common/user_agent/user_agent_metadata.h" #include "url/gurl.h" #include "url/origin.h" @@ -93,6 +99,26 @@ return metadata; } +mojo::Remote<network::mojom::NetworkContext> +ContentBrowserClientImpl::CreateNetworkContext( + content::BrowserContext* context, + bool in_memory, + const base::FilePath& relative_partition_path) { + mojo::Remote<network::mojom::NetworkContext> network_context; + network::mojom::NetworkContextParamsPtr context_params = + network::mojom::NetworkContextParams::New(); + context_params->user_agent = GetUserAgent(); + context_params->accept_language = "en-us,en"; + if (!context->IsOffTheRecord()) { + base::FilePath cookie_path = context->GetPath(); + cookie_path = cookie_path.Append(FILE_PATH_LITERAL("Cookies")); + context_params->cookie_path = cookie_path; + } + content::GetNetworkService()->CreateNetworkContext( + network_context.BindNewPipeAndPassReceiver(), std::move(context_params)); + return network_context; +} + #if defined(OS_LINUX) || defined(OS_ANDROID) void ContentBrowserClientImpl::GetAdditionalMappedFilesForChildProcess( const base::CommandLine& command_line,
diff --git a/weblayer/browser/content_browser_client_impl.h b/weblayer/browser/content_browser_client_impl.h index 43a58a63..9b8a2487 100644 --- a/weblayer/browser/content_browser_client_impl.h +++ b/weblayer/browser/content_browser_client_impl.h
@@ -35,6 +35,10 @@ base::StringPiece name) override; std::string GetUserAgent() override; blink::UserAgentMetadata GetUserAgentMetadata() override; + mojo::Remote<network::mojom::NetworkContext> CreateNetworkContext( + content::BrowserContext* context, + bool in_memory, + const base::FilePath& relative_partition_path) override; #if defined(OS_LINUX) || defined(OS_ANDROID) void GetAdditionalMappedFilesForChildProcess(
diff --git a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java index 6bc733a..76b80b8 100644 --- a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java +++ b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java
@@ -34,6 +34,7 @@ import org.chromium.weblayer.UnsupportedVersionException; import org.chromium.weblayer.WebLayer; +import java.io.File; import java.util.List; /** @@ -171,7 +172,8 @@ } } - BrowserFragment fragment = WebLayer.createBrowserFragment(null); + File profile = new File(getDataDir(), "defaultProfile"); + BrowserFragment fragment = WebLayer.createBrowserFragment(profile.getPath()); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(mMainViewId, fragment);