Skip to content

Commit 341c569

Browse files
authored
chore: backport Chromium fixes (electron#24420)
* Backport 1063177 (https://chromium-review.googlesource.com/c/chromium/src/+/2111393/) * update patches Co-authored-by: Andrey Belenko <anbelen@microsoft.com>
1 parent 5f93e88 commit 341c569

File tree

2 files changed

+145
-0
lines changed

2 files changed

+145
-0
lines changed

patches/chromium/.patches

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,4 @@ introduce_a_mutex_for_the_rendering_loop_in_baseaudiocontext.patch
126126
fix_default_to_ntlm_v2_in_network_service.patch
127127
fix_allow_ime_to_insert_zero-length_composition_string.patch
128128
fix_handling_non_client_pointer_events_from_pen_on_windows_10.patch
129+
backport_1063177.patch
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: Andrey Belenko <anbelen@microsoft.com>
3+
Date: Fri, 3 Jul 2020 18:40:01 +0200
4+
Subject: Backport 1063177
5+
(https://chromium-review.googlesource.com/c/chromium/src/+/2111393/)
6+
7+
diff --git a/extensions/browser/api/declarative_net_request/file_sequence_helper.cc b/extensions/browser/api/declarative_net_request/file_sequence_helper.cc
8+
index 705f376b68470e5199101b2d8d41965e8363b490..45d2e82cd4412356ec59c210a65d49608fe2de99 100644
9+
--- a/extensions/browser/api/declarative_net_request/file_sequence_helper.cc
10+
+++ b/extensions/browser/api/declarative_net_request/file_sequence_helper.cc
11+
@@ -6,9 +6,11 @@
12+
13+
#include <utility>
14+
15+
+#include "base/barrier_closure.h"
16+
#include "base/bind.h"
17+
#include "base/files/file_util.h"
18+
#include "base/logging.h"
19+
+#include "base/memory/ref_counted.h"
20+
#include "base/metrics/histogram_functions.h"
21+
#include "base/metrics/histogram_macros.h"
22+
#include "base/stl_util.h"
23+
@@ -31,53 +33,59 @@ namespace {
24+
namespace dnr_api = extensions::api::declarative_net_request;
25+
26+
// A class to help in re-indexing multiple rulesets.
27+
-class ReindexHelper {
28+
+class ReindexHelper : public base::RefCountedThreadSafe<ReindexHelper> {
29+
public:
30+
- // Starts re-indexing rulesets. Must be called on the extension file task
31+
- // runner.
32+
using ReindexCallback = base::OnceCallback<void(LoadRequestData)>;
33+
- static void Start(service_manager::Connector* connector,
34+
- LoadRequestData data,
35+
- ReindexCallback callback) {
36+
- auto* helper = new ReindexHelper(std::move(data), std::move(callback));
37+
- helper->Start(connector);
38+
- }
39+
-
40+
- private:
41+
- // We manage our own lifetime.
42+
ReindexHelper(LoadRequestData data, ReindexCallback callback)
43+
: data_(std::move(data)), callback_(std::move(callback)) {}
44+
- ~ReindexHelper() = default;
45+
-
46+
+
47+
+ // Starts re-indexing rulesets. Must be called on the extension file task
48+
+ // runner.
49+
void Start(service_manager::Connector* connector) {
50+
DCHECK(GetExtensionFileTaskRunner()->RunsTasksInCurrentSequence());
51+
52+
base::Token token = base::Token::CreateRandom();
53+
54+
- // Post tasks to reindex individual rulesets.
55+
- bool did_post_task = false;
56+
+ std::vector<RulesetInfo*> rulesets_to_reindex;
57+
+
58+
for (auto& ruleset : data_.rulesets) {
59+
if (ruleset.did_load_successfully())
60+
continue;
61+
+
62+
+ rulesets_to_reindex.push_back(&ruleset);
63+
+ }
64+
65+
- // Using Unretained is safe since this class manages its own lifetime and
66+
- // |this| won't be deleted until the |callback| returns.
67+
- auto callback = base::BindOnce(&ReindexHelper::OnReindexCompleted,
68+
- base::Unretained(this), &ruleset);
69+
- callback_count_++;
70+
- did_post_task = true;
71+
- ruleset.source().IndexAndPersistJSONRuleset(connector, token,
72+
+ // |done_closure| will be invoked once |barrier_closure| is run
73+
+ // |rulesets_to_reindex.size()| times.
74+
+ base::OnceClosure done_closure =
75+
+ base::BindOnce(&ReindexHelper::OnAllRulesetsReindexed, this);
76+
+ base::RepeatingClosure barrier_closure = base::BarrierClosure(
77+
+ rulesets_to_reindex.size(), std::move(done_closure));
78+
+
79+
+ // Post tasks to reindex individual rulesets.
80+
+ for (RulesetInfo* ruleset : rulesets_to_reindex) {
81+
+ auto callback = base::BindOnce(&ReindexHelper::OnReindexCompleted, this,
82+
+ ruleset, barrier_closure);
83+
+ ruleset->source().IndexAndPersistJSONRuleset(connector, token,
84+
std::move(callback));
85+
}
86+
+ }
87+
+
88+
+private:
89+
+ friend class base::RefCountedThreadSafe<ReindexHelper>;
90+
+ ~ReindexHelper() = default;
91+
92+
- // It's possible that the callbacks return synchronously and we are deleted
93+
- // at this point. Hence don't use any member variables here. Also, if we
94+
- // don't post any task, we'll leak. Ensure that's not the case.
95+
- DCHECK(did_post_task);
96+
+ // Callback invoked when reindexing of all rulesets is completed.
97+
+ void OnAllRulesetsReindexed() {
98+
+ DCHECK(GetExtensionFileTaskRunner()->RunsTasksInCurrentSequence());
99+
+
100+
+ // Our job is done.
101+
+ std::move(callback_).Run(std::move(data_));
102+
}
103+
104+
// Callback invoked when a single ruleset is re-indexed.
105+
void OnReindexCompleted(RulesetInfo* ruleset,
106+
+ base::OnceClosure done_closure,
107+
IndexAndPersistJSONRulesetResult result) {
108+
DCHECK(ruleset);
109+
110+
@@ -108,20 +116,12 @@ class ReindexHelper {
111+
UMA_HISTOGRAM_BOOLEAN(
112+
"Extensions.DeclarativeNetRequest.RulesetReindexSuccessful",
113+
reindexing_success);
114+
-
115+
- callback_count_--;
116+
- DCHECK_GE(callback_count_, 0);
117+
-
118+
- if (callback_count_ == 0) {
119+
- // Our job is done.
120+
- std::move(callback_).Run(std::move(data_));
121+
- delete this;
122+
- }
123+
+
124+
+ std::move(done_closure).Run();
125+
}
126+
127+
LoadRequestData data_;
128+
ReindexCallback callback_;
129+
- int callback_count_ = 0;
130+
131+
DISALLOW_COPY_AND_ASSIGN(ReindexHelper);
132+
};
133+
@@ -382,8 +382,9 @@ void FileSequenceHelper::LoadRulesets(
134+
auto reindex_callback =
135+
base::BindOnce(&FileSequenceHelper::OnRulesetsReindexed,
136+
weak_factory_.GetWeakPtr(), std::move(ui_callback));
137+
- ReindexHelper::Start(connector_.get(), std::move(load_data),
138+
- std::move(reindex_callback));
139+
+ auto reindex_helper = base::MakeRefCounted<ReindexHelper>(
140+
+ std::move(load_data), std::move(reindex_callback));
141+
+ reindex_helper->Start(connector_.get());
142+
}
143+
144+
void FileSequenceHelper::UpdateDynamicRules(

0 commit comments

Comments
 (0)