8000 feat: add events for spellcheck dictionary downloads by trop[bot] · Pull Request #22556 · electron/electron · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

feat: add events for spellcheck dictionary downloads #22556

New issue

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

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

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading < 8000 /div>
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions docs/api/session.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,45 @@ Returns:
Emitted when a render process requests preconnection to a URL, generally due to
a [resource hint](https://w3c.github.io/resource-hints/).

#### Event: 'spellcheck-dictionary-initialized'

Returns:

* `event` Event
* `languageCode` String - The language code of the dictionary file

Emitted when a hunspell dictionary file has been successfully initialized. This
occurs after the file has been downloaded.

#### Event: 'spellcheck-dictionary-download-begin'

Returns:

* `event` Event
* `languageCode` String - The language code of the dictionary file

Emitted when a hunspell dictionary file starts downloading

#### Event: 'spellcheck-dictionary-download-success'

Returns:

* `event` Event
* `languageCode` String - The language code of the dictionary file

Emitted when a hunspell dictionary file has been successfully downloaded

#### Event: 'spellcheck-dictionary-download-failure'

Returns:

* `event` Event
* `languageCode` String - The language code of the dictionary file

Emitted when a hunspell dictionary file download fails. For details
on the failure you should collect a netlog and inspect the download
request.

### Instance Methods

The following methods are available on instances of `Session`:
Expand Down
1 change: 1 addition & 0 deletions patches/chromium/.patches
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,4 @@ fix_route_mouse_event_navigations_through_the_web_contents_delegate.patch
feat_enable_offscreen_rendering_with_viz_compositor.patch
feat_add_support_for_overriding_the_base_spellchecker_download_url.patch
gpu_notify_when_dxdiag_request_fails.patch
feat_allow_embedders_to_add_observers_on_created_hunspell.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <sattard@slack-corp.com>
Date: Sun, 1 Mar 2020 16:33:55 -0800
Subject: feat: allow embedders to add observers on created hunspell
dictionaries


diff --git a/chrome/browser/spellchecker/spellcheck_service.cc b/chrome/browser/spellchecker/spellcheck_service.cc
index 0dc509bafcfab2637aab4ea55769cd06ad3492c9..3b1f02e354c5c5a85e9193859ca8e7497f02cf86 100644
--- a/chrome/browser/spellchecker/spellcheck_service.cc
+++ b/chrome/browser/spellchecker/spellcheck_service.cc
@@ -284,6 +284,9 @@ void SpellcheckService::LoadHunspellDictionaries() {
std::make_unique<SpellcheckHunspellDictionary>(dictionary, context_,
this));
hunspell_dictionaries_.back()->AddObserver(this);
+ if (hunspell_observer_) {
+ hunspell_dictionaries_.back()->AddObserver(hunspell_observer_);
+ }
hunspell_dictionaries_.back()->Load();
}

@@ -297,6 +300,20 @@ SpellcheckService::GetHunspellDictionaries() {
return hunspell_dictionaries_;
}

+void SpellcheckService::SetHunspellObserver(SpellcheckHunspellDictionary::Observer* observer) {
+ if (hunspell_observer_) {
+ for (auto& dict : hunspell_dictionaries_) {
+ dict->RemoveObserver(hunspell_observer_);
+ }
+ }
+ if (observer) {
+ for (auto& dict : hunspell_dictionaries_) {
+ dict->AddObserver(observer);
+ }
+ }
+ hunspell_observer_ = observer;
+}
+
bool SpellcheckService::LoadExternalDictionary(std::string language,
std::string locale,
std::string path,
diff --git a/chrome/browser/spellchecker/spellcheck_service.h b/chrome/browser/spellchecker/spellcheck_service.h
index 557a0a2a91821a595181481f92b2a2a06dcb1f50..59e24da4be927303df8c4aac87f50778c1c208b0 100644
--- a/chrome/browser/spellchecker/spellcheck_service.h
+++ b/chrome/browser/spellchecker/spellcheck_service.h
@@ -116,6 +116,8 @@ class SpellcheckService : public KeyedService,
const std::vector<std::unique_ptr<SpellcheckHunspellDictionary>>&
GetHunspellDictionaries();

+ void SetHunspellObserver(SpellcheckHunspellDictionary::Observer* observer);
+
// Load a dictionary from a given path. Format specifies how the dictionary
// is stored. Return value is true if successful.
bool LoadExternalDictionary(std::string language,
@@ -213,6 +215,8 @@ class SpellcheckService : public KeyedService,
// A pointer to the BrowserContext which this service refers to.
content::BrowserContext* context_;

+ SpellcheckHunspellDictionary::Observer* hunspell_observer_ = nullptr;
+
std::unique_ptr<SpellCheckHostMetrics> metrics_;

std::unique_ptr<SpellcheckCustomDictionary> custom_dictionary_;
25 changes: 25 additions & 0 deletions shell/browser/api/electron_api_session.cc
Original file line number Diff line number Diff line change
Expand Up @@ -279,11 +279,23 @@ Session::Session(v8::Isolate* isolate, ElectronBrowserContext* browser_context)

Init(isolate);
AttachAsUserData(browser_context);

SpellcheckService* service =
SpellcheckServiceFactory::GetForContext(browser_context_.get());
if (service) {
service->SetHunspellObserver(this);
}
}

Session::~Session() {
content::BrowserContext::GetDownloadManager(browser_context())
->RemoveObserver(this);

SpellcheckService* service =
SpellcheckServiceFactory::GetForContext(browser_context_.get());
if (service) {
service->SetHunspellObserver(nullptr);
}
// TODO(zcbenz): Now since URLRequestContextGetter is gone, is this still
// needed?
// Refs https://github.com/electron/electron/pull/12305.
Expand Down Expand Up @@ -312,6 +324,19 @@ void Session::OnDownloadCreated(content::DownloadManager* manager,
}
}

void Session::OnHunspellDictionaryInitialized(const std::string& language) {
Emit("spellcheck-dictionary-initialized", language);
}
void Session::OnHunspellDictionaryDownloadBegin(const std::string& language) {
Emit("spellcheck-dictionary-download-begin", language);
}
void Session::OnHunspellDictionaryDownloadSuccess(const std::string& language) {
Emit("spellcheck-dictionary-download-success", language);
}
void Session::OnHunspellDictionaryDownloadFailure(const std::string& language) {
Emit("spellcheck-dictionary-download-failure", language);
}

v8::Local<v8::Promise> Session::ResolveProxy(gin_helper::Arguments* args) {
v8::Isolate* isolate = args->isolate();
gin_helper::Promise<std::string> promise(isolate);
Expand Down
12 changes: 11 additions & 1 deletion shell/browser/api/electron_api_session.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <vector>

#include "base/values.h"
#include "chrome/browser/spellchecker/spellcheck_hunspell_dictionary.h"
#include "content/public/browser/download_manager.h"
#include "electron/buildflags/buildflags.h"
#include "gin/handle.h"
Expand Down Expand Up @@ -37,7 +38,8 @@ class ElectronBrowserContext;
namespace api {

class Session : public gin_helper::TrackableObject<Session>,
public content::DownloadManager::Observer {
public content::DownloadManager::Observer,
public SpellcheckHunspellDictionary::Observer {
public:
// Gets or creates Session from the |browser_context|.
static gin::Handle<Session> CreateFrom(
Expand Down Expand Up @@ -116,6 +118,14 @@ class Session : public gin_helper::TrackableObject<Session>,
void OnDownloadCreated(content::DownloadManager* manager,
download::DownloadItem* item) override;

// SpellcheckHunspellDictionary::Observer
void OnHunspellDictionaryInitialized(const std::string& language) override;
void OnHunspellDictionaryDownloadBegin(const std::string& language) override;
void OnHunspellDictionaryDownloadSuccess(
const std::string& language) override;
void OnHunspellDictionaryDownloadFailure(
const std::string& language) override;

private:
// Cached gin_helper::Wrappable objects.
v8::Global<v8::Value> cookies_;
Expand Down
0