Commit d89b2243 authored by Tommy C. Li's avatar Tommy C. Li Committed by Commit Bot

Plugins: Move NotifyPlaceholderReadyForTestingCallback to base class

Move the
LoadablePluginPlaceholder::DidFinishIconRepositionForTestingCallback
method to the PluginPlaceholderBase base class so that the
PDFPluginPlaceholder can also use it.

This is a followup to:
https://chromium-review.googlesource.com/c/chromium/src/+/1335781

This is patch 2/3 for this objective.

Bug: 887752, 879149, 878871
Change-Id: I14f2205d0d8d7c5fcd14fc2eac84e2b7fd1d52dc
Reviewed-on: https://chromium-review.googlesource.com/c/1335997
Commit-Queue: Tommy Li <tommycli@chromium.org>
Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608401}
parent 3e053208
......@@ -383,8 +383,8 @@ gin::ObjectTemplateBuilder ChromePluginPlaceholder::GetObjectTemplateBuilder(
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnablePluginPlaceholderTesting)) {
builder.SetMethod<void (ChromePluginPlaceholder::*)()>(
"didFinishIconRepositionForTesting",
&ChromePluginPlaceholder::DidFinishIconRepositionForTestingCallback);
"notifyPlaceholderReadyForTesting",
&ChromePluginPlaceholder::NotifyPlaceholderReadyForTestingCallback);
}
return builder;
......
......@@ -4,8 +4,10 @@
#include "chrome/renderer/plugins/pdf_plugin_placeholder.h"
#include "base/command_line.h"
#include "chrome/common/pdf_util.h"
#include "chrome/common/render_messages.h"
#include "content/public/common/content_switches.h"
#include "content/public/renderer/render_thread.h"
#include "gin/object_template_builder.h"
......@@ -32,9 +34,19 @@ v8::Local<v8::Value> PDFPluginPlaceholder::GetV8Handle(v8::Isolate* isolate) {
gin::ObjectTemplateBuilder PDFPluginPlaceholder::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin::Wrappable<PDFPluginPlaceholder>::GetObjectTemplateBuilder(isolate)
.SetMethod<void (PDFPluginPlaceholder::*)()>(
"openPDF", &PDFPluginPlaceholder::OpenPDFCallback);
gin::ObjectTemplateBuilder builder =
gin::Wrappable<PDFPluginPlaceholder>::GetObjectTemplateBuilder(isolate)
.SetMethod<void (PDFPluginPlaceholder::*)()>(
"openPDF", &PDFPluginPlaceholder::OpenPDFCallback);
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnablePluginPlaceholderTesting)) {
builder.SetMethod<void (PDFPluginPlaceholder::*)()>(
"notifyPlaceholderReadyForTesting",
&PDFPluginPlaceholder::NotifyPlaceholderReadyForTestingCallback);
}
return builder;
}
void PDFPluginPlaceholder::OpenPDFCallback() {
......
......@@ -12,8 +12,8 @@
if (plugin.didFinishLoading)
plugin.didFinishLoading();
if (plugin.didFinishIconRepositionForTesting)
plugin.didFinishIconRepositionForTesting();
if (plugin.notifyPlaceholderReadyForTesting)
plugin.notifyPlaceholderReadyForTesting();
}
</script>
</if>
......
......@@ -14,6 +14,9 @@
window.plugin.openPDF();
e.preventDefault();
});
if (plugin.notifyPlaceholderReadyForTesting)
plugin.notifyPlaceholderReadyForTesting();
});
}
......
......@@ -95,10 +95,10 @@
container.style.width = width;
container.style.height = height;
if (plugin.didFinishIconRepositionForTesting) {
if (plugin.notifyPlaceholderReadyForTesting) {
// Defer until reflow complete.
window.setTimeout(function() {
plugin.didFinishIconRepositionForTesting();
plugin.notifyPlaceholderReadyForTesting();
});
}
};
......
......@@ -11,8 +11,8 @@
if (plugin.didFinishLoading)
plugin.didFinishLoading();
if (plugin.didFinishIconRepositionForTesting)
plugin.didFinishIconRepositionForTesting();
if (plugin.notifyPlaceholderReadyForTesting)
plugin.notifyPlaceholderReadyForTesting();
}
</script>
<link rel="stylesheet" href="plugin_placeholders.css"></link>
......
......@@ -16,16 +16,9 @@
#include "base/values.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h"
#include "content/public/renderer/v8_value_converter.h"
#include "third_party/blink/public/platform/web_input_event.h"
#include "third_party/blink/public/web/blink.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_dom_message_event.h"
#include "third_party/blink/public/web/web_element.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_plugin_container.h"
#include "third_party/blink/public/web/web_script_source.h"
#include "third_party/blink/public/web/web_serialized_script_value.h"
#include "third_party/blink/public/web/web_view.h"
#include "url/gurl.h"
#include "url/origin.h"
......@@ -333,27 +326,6 @@ void LoadablePluginPlaceholder::DidFinishLoadingCallback() {
}
}
void LoadablePluginPlaceholder::DidFinishIconRepositionForTestingCallback() {
if (!plugin())
return;
// Set an attribute and post an event, so browser tests can wait for the
// placeholder to be ready to receive simulated user input.
blink::WebElement element = plugin()->Container()->GetElement();
element.SetAttribute("placeholderReady", "true");
base::Value value("placeholderReady");
blink::WebSerializedScriptValue message_data =
blink::WebSerializedScriptValue::Serialize(
blink::MainThreadIsolate(),
content::V8ValueConverter::Create()->ToV8Value(
&value,
element.GetDocument().GetFrame()->MainWorldScriptContext()));
blink::WebDOMMessageEvent msg_event(message_data);
plugin()->Container()->EnqueueMessageEvent(msg_event);
}
void LoadablePluginPlaceholder::SetPluginInfo(
const content::WebPluginInfo& plugin_info) {
plugin_info_ = plugin_info;
......
......@@ -78,7 +78,6 @@ class LoadablePluginPlaceholder : public PluginPlaceholderBase {
// Javascript callbacks:
void LoadCallback();
void DidFinishLoadingCallback();
void DidFinishIconRepositionForTestingCallback();
// True if the power saver heuristic has already been run on this content.
bool heuristic_run_before_;
......
......@@ -8,9 +8,15 @@
#include "content/public/common/web_preferences.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h"
#include "content/public/renderer/v8_value_converter.h"
#include "gin/object_template_builder.h"
#include "third_party/blink/public/web/blink.h"
#include "third_party/blink/public/web/web_dom_message_event.h"
#include "third_party/blink/public/web/web_element.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_plugin_container.h"
#include "third_party/blink/public/web/web_script_source.h"
#include "third_party/blink/public/web/web_serialized_script_value.h"
#include "third_party/re2/src/re2/re2.h"
namespace plugins {
......@@ -111,6 +117,27 @@ void PluginPlaceholderBase::HideCallback() {
HidePlugin();
}
void PluginPlaceholderBase::NotifyPlaceholderReadyForTestingCallback() {
if (!plugin())
return;
// Set an attribute and post an event, so browser tests can wait for the
// placeholder to be ready to receive simulated user input.
blink::WebElement element = plugin()->Container()->GetElement();
element.SetAttribute("placeholderReady", "true");
base::Value value("placeholderReady");
blink::WebSerializedScriptValue message_data =
blink::WebSerializedScriptValue::Serialize(
blink::MainThreadIsolate(),
content::V8ValueConverter::Create()->ToV8Value(
&value,
element.GetDocument().GetFrame()->MainWorldScriptContext()));
blink::WebDOMMessageEvent msg_event(message_data);
plugin()->Container()->EnqueueMessageEvent(msg_event);
}
void PluginPlaceholderBase::OnDestruct() {}
// static
......
......@@ -39,13 +39,13 @@ class PluginPlaceholderBase : public content::RenderFrameObserver,
v8::Isolate* isolate) const override;
bool IsErrorPlaceholder() override;
protected:
// Hide this placeholder.
void HidePlugin();
bool hidden() const { return hidden_; }
// JavaScript callbacks:
void HideCallback();
void NotifyPlaceholderReadyForTestingCallback();
private:
// RenderFrameObserver methods:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment