Skip to content

Commit 2cf20e5

Browse files
GnorTechrogerwang
authored andcommitted
rebase to Chromium 66
1 parent 8c2782a commit 2cf20e5

25 files changed

+283
-108
lines changed

src/api/BUILD.gn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ json_schema_api("nw_api_registration") {
3838
"//skia",
3939
"//components/sync",
4040
"//third_party/metrics_proto",
41-
"//ui/accessibility:ax_gen",
41+
"//ui/accessibility:ax_enums_mojo",
4242
]
4343

4444
deps += schema_dependencies

src/api/nw_app_api.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
#include "extensions/browser/app_window/native_app_window.h"
2020
#include "extensions/browser/extension_system.h"
2121
#include "extensions/common/error_utils.h"
22-
#include "net/proxy/proxy_config.h"
23-
#include "net/proxy/proxy_config_service_fixed.h"
24-
#include "net/proxy/proxy_service.h"
22+
#include "net/proxy_resolution/proxy_config.h"
23+
#include "net/proxy_resolution/proxy_config_service_fixed.h"
24+
#include "net/proxy_resolution/proxy_service.h"
2525
#include "net/url_request/url_request_context.h"
2626
#include "net/url_request/url_request_context_getter.h"
2727

@@ -32,8 +32,8 @@ void SetProxyConfigCallback(
3232
base::WaitableEvent* done,
3333
const scoped_refptr<net::URLRequestContextGetter>& url_request_context_getter,
3434
const net::ProxyConfig& proxy_config) {
35-
net::ProxyService* proxy_service =
36-
url_request_context_getter->GetURLRequestContext()->proxy_service();
35+
net::ProxyResolutionService* proxy_service =
36+
url_request_context_getter->GetURLRequestContext()->proxy_resolution_service();
3737
proxy_service->ResetConfigService(base::WrapUnique(new net::ProxyConfigServiceFixed(proxy_config)));
3838
done->Signal();
3939
}

src/api/nw_screen_api.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ namespace extensions {
7979
displayResult->scale_factor = gfx_display.device_scale_factor();
8080
displayResult->is_built_in = gfx_display.IsInternal();
8181
displayResult->rotation = gfx_display.RotationAsDegree();
82-
displayResult->touch_support = gfx_display.touch_support();
82+
displayResult->touch_support = (int)gfx_display.touch_support();
8383

8484
gfx::Rect rect = gfx_display.bounds();
8585
DisplayGeometry& bounds = displayResult->bounds;

src/api/nw_window_api.cc

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
#include "base/strings/stringprintf.h"
55
#include "base/strings/utf_string_conversions.h"
66
#include "base/task_scheduler/post_task.h"
7-
#include "base/threading/sequenced_worker_pool.h"
87
#include "content/public/browser/render_widget_host.h"
98
#include "chrome/browser/devtools/devtools_window.h"
109
#include "chrome/browser/extensions/devtools_util.h"
11-
//#include "chrome/browser/ui/webui/print_preview/printer_backend_proxy.h"
1210
#include "components/zoom/zoom_controller.h"
1311
#include "content/nw/src/api/menu/menu.h"
1412
#include "content/nw/src/api/object_manager.h"
@@ -235,15 +233,13 @@ bool NwCurrentWindowInternalCapturePageInternalFunction::RunAsync() {
235233
view->CopyFromSurface(gfx::Rect(), // Copy entire surface area.
236234
gfx::Size(), // Result contains device-level detail.
237235
base::Bind(&NwCurrentWindowInternalCapturePageInternalFunction::CopyFromBackingStoreComplete,
238-
this),
239-
kN32_SkColorType);
236+
this));
240237
return true;
241238
}
242239

243240
void NwCurrentWindowInternalCapturePageInternalFunction::CopyFromBackingStoreComplete(
244-
const SkBitmap& bitmap,
245-
content::ReadbackResponse response) {
246-
if (response == content::READBACK_SUCCESS) {
241+
const SkBitmap& bitmap) {
242+
if (!bitmap.drawsNothing()) {
247243
OnCaptureSuccess(bitmap);
248244
return;
249245
}

src/api/nw_window_api.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
#include <vector>
55

6-
#include "content/public/browser/readback_types.h"
76
#include "extensions/browser/extension_function.h"
87
#include "extensions/common/api/extension_types.h"
98
#include "printing/backend/print_backend.h"
@@ -77,8 +76,7 @@ class NwCurrentWindowInternalCapturePageInternalFunction : public AsyncExtension
7776
private:
7877
typedef api::extension_types::ImageDetails ImageDetails;
7978

80-
void CopyFromBackingStoreComplete(const SkBitmap& bitmap,
81-
content::ReadbackResponse response);
79+
void CopyFromBackingStoreComplete(const SkBitmap& bitmap);
8280
void OnCaptureSuccess(const SkBitmap& bitmap);
8381

8482
// The format (JPEG vs PNG) of the resulting image. Set in RunAsync().

src/browser/nw_chrome_browser_hooks.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ int MainPartsPreCreateThreadsHook() {
288288
base::CreateDirectory(new_storage_dir);
289289

290290
base::FilePath new_dom_storage = new_storage_dir
291-
.Append(content::DOMStorageArea::DatabaseFileNameFromOrigin(origin));
291+
.Append(content::DOMStorageArea::DatabaseFileNameFromOrigin(url::Origin::Create(origin)));
292292
base::FilePath new_dom_journal = new_dom_storage.ReplaceExtension(FILE_PATH_LITERAL("localstorage-journal"));
293293
base::FilePath old_dom_journal = old_dom_storage.ReplaceExtension(FILE_PATH_LITERAL("localstorage-journal"));
294294
if (!base::PathExists(new_dom_journal) && !base::PathExists(new_dom_storage)) {

src/nw_content.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include "nw_package.h"
1111
#include "base/memory/ptr_util.h"
1212
#include "third_party/WebKit/public/web/WebNavigationPolicy.h"
13-
#include "third_party/WebKit/common/page/page_visibility_state.mojom.h"
13+
//#include "third_party/WebKit/common/page/page_visibility_state.mojom.h"
1414

1515
namespace base {
1616
class DictionaryValue;

src/nw_custom_bindings.cc

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,17 @@ using namespace blink;
5757
#undef INTERNAL_TRACE_EVENT_SCOPED_CONTEXT
5858
//#undef INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE
5959
#endif
60+
#undef EXCLUSIVE_LOCKS_REQUIRED
61+
#undef SHARED_LOCKS_REQUIRED
62+
#undef LOCKS_EXCLUDED
63+
#undef LOCK_RETURNED
64+
//#undef EXCLUSIVE_LOCK_FUNCTION
65+
#undef SHARED_LOCK_FUNCTION
66+
//#undef UNLOCK_FUNCTION
67+
//#undef EXCLUSIVE_TRYLOCK_FUNCTION
68+
#undef SHARED_TRYLOCK_FUNCTION
69+
#undef NO_THREAD_SAFETY_ANALYSIS
70+
6071
//#include "third_party/WebKit/Source/config.h"
6172
#include "third_party/WebKit/Source/core/html/HTMLIFrameElement.h"
6273
#include "third_party/WebKit/Source/core/dom/Document.h"
@@ -117,43 +128,47 @@ bool MakePathAbsolute(base::FilePath* file_path) {
117128
}
118129

119130
} // namespace
120-
NWCustomBindings::NWCustomBindings(ScriptContext* context)
121-
: ObjectBackedNativeHandler(context) {
122-
RouteFunction("crashRenderer",
131+
132+
void NWCustomBindings::AddRoutes() {
133+
RouteHandlerFunction("crashRenderer",
123134
base::Bind(&NWCustomBindings::CrashRenderer,
124135
base::Unretained(this)));
125-
RouteFunction("evalScript",
136+
RouteHandlerFunction("evalScript",
126137
base::Bind(&NWCustomBindings::EvalScript,
127138
base::Unretained(this)));
128-
RouteFunction("evalNWBin",
139+
RouteHandlerFunction("evalNWBin",
129140
base::Bind(&NWCustomBindings::EvalNWBin,
130141
base::Unretained(this)));
131-
RouteFunction("getAbsolutePath",
142+
RouteHandlerFunction("getAbsolutePath",
132143
base::Bind(&NWCustomBindings::GetAbsolutePath,
133144
base::Unretained(this)));
134-
RouteFunction("addOriginAccessWhitelistEntry",
145+
RouteHandlerFunction("addOriginAccessWhitelistEntry",
135146
base::Bind(&NWCustomBindings::AddOriginAccessWhitelistEntry,
136147
base::Unretained(this)));
137-
RouteFunction("removeOriginAccessWhitelistEntry",
148+
RouteHandlerFunction("removeOriginAccessWhitelistEntry",
138149
base::Bind(&NWCustomBindings::RemoveOriginAccessWhitelistEntry,
139150
base::Unretained(this)));
140-
RouteFunction("getProxyForURL",
151+
RouteHandlerFunction("getProxyForURL",
141152
base::Bind(&NWCustomBindings::GetProxyForURL,
142153
base::Unretained(this)));
143-
RouteFunction("setDevToolsJail",
154+
RouteHandlerFunction("setDevToolsJail",
144155
base::Bind(&NWCustomBindings::SetDevToolsJail,
145156
base::Unretained(this)));
146-
RouteFunction("getWidgetRoutingID",
157+
RouteHandlerFunction("getWidgetRoutingID",
147158
base::Bind(&NWCustomBindings::GetWidgetRoutingID,
148159
base::Unretained(this)));
149-
RouteFunction("getRoutingID",
160+
RouteHandlerFunction("getRoutingID",
150161
base::Bind(&NWCustomBindings::GetRoutingID,
151162
base::Unretained(this)));
152-
RouteFunction("callInWindow",
163+
RouteHandlerFunction("callInWindow",
153164
base::Bind(&NWCustomBindings::CallInWindow,
154165
base::Unretained(this)));
155166
}
156167

168+
NWCustomBindings::NWCustomBindings(ScriptContext* context)
169+
: ObjectBackedNativeHandler(context) {
170+
}
171+
157172
void NWCustomBindings::CallInWindow(
158173
const v8::FunctionCallbackInfo<v8::Value>& args) {
159174
v8::Local<v8::Context> target_context = args[0]->ToObject()->CreationContext();
@@ -193,6 +208,7 @@ void NWCustomBindings::EvalScript(
193208
content::RenderFrame* render_frame = context()->GetRenderFrame();
194209
if (!render_frame)
195210
return;
211+
v8::Isolate* isolate = args.GetIsolate();
196212
WebFrame* main_frame = render_frame->GetWebFrame();
197213
v8::Handle<v8::Value> result;
198214
v8::Handle<v8::Object> frm = v8::Handle<v8::Object>::Cast(args[0]);
@@ -204,9 +220,9 @@ void NWCustomBindings::EvalScript(
204220
web_frame = blink::WebFrame::FromFrame(iframe->ContentFrame());
205221
}
206222
#if defined(OS_WIN)
207-
base::string16 jscript((WCHAR*)*v8::String::Value(args[1]));
223+
base::string16 jscript((WCHAR*)*v8::String::Value(isolate, args[1]));
208224
#else
209-
base::string16 jscript = *v8::String::Value(args[1]);
225+
base::string16 jscript = *v8::String::Value(isolate, args[1]);
210226
#endif
211227
if (web_frame) {
212228
blink::WebLocalFrame* local_frame = web_frame->ToWebLocalFrame();
@@ -292,7 +308,7 @@ void NWCustomBindings::EvalNWBin(
292308
void NWCustomBindings::GetAbsolutePath(
293309
const v8::FunctionCallbackInfo<v8::Value>& args) {
294310
v8::Isolate* isolate = args.GetIsolate();
295-
base::FilePath path = base::FilePath::FromUTF8Unsafe(*v8::String::Utf8Value(args[0]));
311+
base::FilePath path = base::FilePath::FromUTF8Unsafe(*v8::String::Utf8Value(isolate, args[0]));
296312
MakePathAbsolute(&path);
297313
#if defined(OS_POSIX)
298314
args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, path.value().c_str()));
@@ -304,9 +320,9 @@ void NWCustomBindings::GetAbsolutePath(
304320
void NWCustomBindings::AddOriginAccessWhitelistEntry(const v8::FunctionCallbackInfo<v8::Value>& args) {
305321
v8::Isolate* isolate = args.GetIsolate();
306322

307-
std::string sourceOrigin = *v8::String::Utf8Value(args[0]);
308-
std::string destinationProtocol = *v8::String::Utf8Value(args[1]);
309-
std::string destinationHost = *v8::String::Utf8Value(args[2]);
323+
std::string sourceOrigin = *v8::String::Utf8Value(isolate, args[0]);
324+
std::string destinationProtocol = *v8::String::Utf8Value(isolate, args[1]);
325+
std::string destinationHost = *v8::String::Utf8Value(isolate, args[2]);
310326
bool allowDestinationSubdomains = args[3]->ToBoolean()->Value();
311327

312328
blink::WebSecurityPolicy::AddOriginAccessWhitelistEntry(GURL(sourceOrigin),
@@ -320,9 +336,9 @@ void NWCustomBindings::AddOriginAccessWhitelistEntry(const v8::FunctionCallbackI
320336
void NWCustomBindings::RemoveOriginAccessWhitelistEntry(const v8::FunctionCallbackInfo<v8::Value>& args) {
321337
v8::Isolate* isolate = args.GetIsolate();
322338

323-
std::string sourceOrigin = *v8::String::Utf8Value(args[0]);
324-
std::string destinationProtocol = *v8::String::Utf8Value(args[1]);
325-
std::string destinationHost = *v8::String::Utf8Value(args[2]);
339+
std::string sourceOrigin = *v8::String::Utf8Value(isolate, args[0]);
340+
std::string destinationProtocol = *v8::String::Utf8Value(isolate, args[1]);
341+
std::string destinationHost = *v8::String::Utf8Value(isolate, args[2]);
326342
bool allowDestinationSubdomains = args[3]->ToBoolean()->Value();
327343

328344
blink::WebSecurityPolicy::RemoveOriginAccessWhitelistEntry(GURL(sourceOrigin),
@@ -336,7 +352,7 @@ void NWCustomBindings::RemoveOriginAccessWhitelistEntry(const v8::FunctionCallba
336352
void NWCustomBindings::GetProxyForURL(const v8::FunctionCallbackInfo<v8::Value>& args) {
337353
v8::Isolate* isolate = args.GetIsolate();
338354

339-
std::string url = *v8::String::Utf8Value(args[0]);
355+
std::string url = *v8::String::Utf8Value(isolate, args[0]);
340356
GURL gurl(url);
341357
if (!gurl.is_valid()) {
342358
args.GetReturnValue().Set(isolate->ThrowException(v8::Exception::Error(v8::String::NewFromUtf8(isolate,

src/nw_custom_bindings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class NWCustomBindings : public ObjectBackedNativeHandler {
1515
public:
1616
NWCustomBindings(ScriptContext* context);
1717

18+
void AddRoutes() override;
19+
1820
private:
1921
void CrashRenderer(const v8::FunctionCallbackInfo<v8::Value>& args);
2022
void EvalScript(const v8::FunctionCallbackInfo<v8::Value>& args);

src/nw_version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
#define NW_VERSION_H
2323

2424
#define NW_MAJOR_VERSION 0
25-
#define NW_MINOR_VERSION 29
26-
#define NW_PATCH_VERSION 5
25+
#define NW_MINOR_VERSION 30
26+
#define NW_PATCH_VERSION 0
2727

2828
#define NW_VERSION_IS_RELEASE 1
2929

src/nwjs_browsertest.cc

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,11 @@ class WebContentsHiddenObserver : public content::WebContentsObserver {
165165
}
166166

167167
// WebContentsObserver.
168-
void WasHidden() override {
169-
hidden_observed_ = true;
170-
hidden_callback_.Run();
168+
void OnVisibilityChanged(content::Visibility visibility) override {
169+
if (visibility == content::Visibility::HIDDEN) {
170+
hidden_observed_ = true;
171+
hidden_callback_.Run();
172+
}
171173
}
172174

173175
bool hidden_observed() { return hidden_observed_; }
@@ -291,7 +293,7 @@ class LeftMouseClick {
291293
: web_contents_(web_contents),
292294
mouse_event_(blink::WebInputEvent::kMouseDown,
293295
blink::WebInputEvent::kNoModifiers,
294-
blink::WebInputEvent::kTimeStampForTesting) {
296+
blink::WebInputEvent::GetStaticTimeStampForTests()) {
295297
mouse_event_.button = blink::WebMouseEvent::Button::kLeft;
296298
}
297299

@@ -775,7 +777,7 @@ class NWWebViewTestBase : public extensions::PlatformAppBrowserTest {
775777
void OpenContextMenu(content::WebContents* web_contents) {
776778
blink::WebMouseEvent mouse_event(blink::WebInputEvent::kMouseDown,
777779
blink::WebInputEvent::kNoModifiers,
778-
blink::WebInputEvent::kTimeStampForTesting);
780+
blink::WebInputEvent::GetStaticTimeStampForTests());
779781
mouse_event.button = blink::WebMouseEvent::Button::kRight;
780782
mouse_event.SetPositionInWidget(1, 1);
781783
web_contents->GetRenderViewHost()->GetWidget()->ForwardMouseEvent(
@@ -818,7 +820,7 @@ class NWWebViewTestBase : public extensions::PlatformAppBrowserTest {
818820
~NWWebViewTestBase() override {}
819821

820822
protected:
821-
content::FrameWatcher frame_watcher_;
823+
//content::FrameWatcher frame_watcher_;
822824

823825
private:
824826
bool UsesFakeSpeech() {
@@ -974,7 +976,7 @@ static std::string DumpPdfAccessibilityTree(const ui::AXTreeUpdate& ax_tree) {
974976
ax_tree_dump += std::string(2 * indent, ' ');
975977
ax_tree_dump += ui::ToString(node.role);
976978

977-
std::string name = node.GetStringAttribute(ui::AX_ATTR_NAME);
979+
std::string name = node.GetStringAttribute(ax::mojom::StringAttribute::kName);
978980
base::ReplaceChars(name, "\r", "\\r", &name);
979981
base::ReplaceChars(name, "\n", "\\n", &name);
980982
if (!name.empty())
@@ -1132,13 +1134,8 @@ class FakeDesktopMediaPicker : public DesktopMediaPicker {
11321134
~FakeDesktopMediaPicker() override { expectation_->picker_deleted = true; }
11331135

11341136
// DesktopMediaPicker interface.
1135-
void Show(content::WebContents* web_contents,
1136-
gfx::NativeWindow context,
1137-
gfx::NativeWindow parent,
1138-
const base::string16& app_name,
1139-
const base::string16& target_name,
1137+
void Show(const DesktopMediaPicker::Params& params,
11401138
std::vector<std::unique_ptr<DesktopMediaList>> source_lists,
1141-
bool request_audio,
11421139
const DoneCallback& done_callback) override {
11431140
bool show_screens = false;
11441141
bool show_windows = false;
@@ -1162,7 +1159,8 @@ class FakeDesktopMediaPicker : public DesktopMediaPicker {
11621159
EXPECT_EQ(expectation_->expect_screens, show_screens);
11631160
EXPECT_EQ(expectation_->expect_windows, show_windows);
11641161
EXPECT_EQ(expectation_->expect_tabs, show_tabs);
1165-
EXPECT_EQ(expectation_->expect_audio, request_audio);
1162+
EXPECT_EQ(expectation_->expect_audio, params.request_audio);
1163+
EXPECT_EQ(params.modality, ui::ModalType::MODAL_TYPE_CHILD);
11661164

11671165
if (!expectation_->cancelled) {
11681166
// Post a task to call the callback asynchronously.

src/renderer/nw_extensions_renderer_hooks.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ void willHandleNavigationPolicy(content::RenderView* rv,
570570
v8::Local<v8::Value> val = policy_obj->Get(v8_str("val"));
571571
if (!val->IsString())
572572
return;
573-
v8::String::Utf8Value policy_str(val);
573+
v8::String::Utf8Value policy_str(isolate, val);
574574
if (!strcmp(*policy_str, "ignore"))
575575
*policy = blink::kWebNavigationPolicyIgnore;
576576
else if (!strcmp(*policy_str, "download"))

test/sanity/additional_trust_anchors/ca.cert.pem

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDYDCCAkigAwIBAgIJAP9YBkuuD/ZKMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
3+
BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMSEwHwYDVQQKDBhJbnRlcm5ldCBX
4+
aWRnaXRzIFB0eSBMdGQwHhcNMTgwMjI4MTQ0ODAwWhcNMjgwMjI2MTQ0ODAwWjBF
5+
MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEhMB8GA1UECgwYSW50
6+
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
7+
CgKCAQEAxOqQW22d/zcz/CpZUsNCKaAkNsbVgZbo6c1Kdx02C3KaiyH8ai/qY4AQ
8+
xYOa8GVfqwjO92i3AP3sIsyfo+/6ZC4xSq/+to+pX8qyX8NAVha8tTxsemreu6rw
9+
wfxXyKhN8OVxLvAVhy4DVP9zgojY3Qog2AK/EPpjyL7M5S5hFkk5Z/jFIg5KzlmT
10+
BQADBhnMcj26XWz3IKFrgSJarW+HnVpUZwsW3nrb8kIwifn+qCb51OYbqmaTf6mk
11+
0gTLEiZs5KW7T0IUHhZYhdXQdSDBq5L4ij8ETJcZH3pPuat1XfvVWMLhVM9w1xYF
12+
ny2dhEdsTfd1Qcje+WTZIy4YA7lN/wIDAQABo1MwUTAdBgNVHQ4EFgQUdyYNcQf4
13+
gRBXGLj63PRAW7/ovbEwHwYDVR0jBBgwFoAUdyYNcQf4gRBXGLj63PRAW7/ovbEw
14+
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAFCmVoYP2SOaOr6YW
15+
+YNOGFzlROBDUClT96n0ZeUXcSl+YjrwTBw+OB8HjtPsbY9Ps7d1xztOZlNX/BmW
16+
gKve23te4VeJigc0sDgFvrXCsx8tw+23p82Y3Cc8jYbFgdhYemkUIK900Xq5ZLd2
17+
KmKBSbUI3fSIFFwG0Z4aH9vxuCSEfFWNe0hZAE0TDEAdlog9XCDrQL3wL8+Q1a1V
18+
nYOwexTcDrlDepz3A8Y21shlPZB/0X/1EEtGXGNgJh59DlMKELqG18m32xIuOMCg
19+
p52k0Nd1se/HlCTSjJlW6bqlBni59l7/Dx0rgT6hniGLDU5QIm7hOugJy33hmcCq
20+
TABZvw==
21+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)