mirror of
https://github.com/electron/electron.git
synced 2026-02-06 05:05:16 -05:00
Fix crash that happens when the PDF viewer is refreshed.
The root cause is the PdfViewerHandler instanceis destroyed but not removed from the list of observer in WebContentsZoomController
This commit is contained in:
@@ -58,7 +58,9 @@ void PopulateStreamInfo(base::DictionaryValue* stream_info,
|
||||
PdfViewerHandler::PdfViewerHandler(const std::string& src)
|
||||
: stream_(nullptr), original_url_(src) {}
|
||||
|
||||
PdfViewerHandler::~PdfViewerHandler() {}
|
||||
PdfViewerHandler::~PdfViewerHandler() {
|
||||
RemoveObserver();
|
||||
}
|
||||
|
||||
void PdfViewerHandler::SetPdfResourceStream(content::StreamInfo* stream) {
|
||||
stream_ = stream;
|
||||
@@ -90,15 +92,11 @@ void PdfViewerHandler::RegisterMessages() {
|
||||
}
|
||||
|
||||
void PdfViewerHandler::OnJavascriptAllowed() {
|
||||
auto zoom_controller = WebContentsZoomController::FromWebContents(
|
||||
web_ui()->GetWebContents());
|
||||
zoom_controller->AddObserver(this);
|
||||
AddObserver();
|
||||
}
|
||||
|
||||
void PdfViewerHandler::OnJavascriptDisallowed() {
|
||||
auto zoom_controller = WebContentsZoomController::FromWebContents(
|
||||
web_ui()->GetWebContents());
|
||||
zoom_controller->RemoveObserver(this);
|
||||
RemoveObserver();
|
||||
}
|
||||
|
||||
void PdfViewerHandler::Initialize(const base::ListValue* args) {
|
||||
@@ -214,4 +212,16 @@ void PdfViewerHandler::OnZoomLevelChanged(content::WebContents* web_contents,
|
||||
}
|
||||
}
|
||||
|
||||
void PdfViewerHandler::AddObserver() {
|
||||
auto zoom_controller =
|
||||
WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
|
||||
zoom_controller->AddObserver(this);
|
||||
}
|
||||
|
||||
void PdfViewerHandler::RemoveObserver() {
|
||||
auto zoom_controller =
|
||||
WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
|
||||
zoom_controller->RemoveObserver(this);
|
||||
}
|
||||
|
||||
} // namespace atom
|
||||
|
||||
@@ -45,7 +45,8 @@ class PdfViewerHandler : public content::WebUIMessageHandler,
|
||||
void Reload(const base::ListValue* args);
|
||||
void OnZoomLevelChanged(content::WebContents* web_contents, double level,
|
||||
bool is_temporary);
|
||||
|
||||
void AddObserver();
|
||||
void RemoveObserver();
|
||||
std::unique_ptr<base::Value> initialize_callback_id_;
|
||||
content::StreamInfo* stream_;
|
||||
std::string original_url_;
|
||||
|
||||
Reference in New Issue
Block a user