| Index: content/renderer/pepper_plugin_delegate_impl.cc
|
| diff --git a/content/renderer/pepper_plugin_delegate_impl.cc b/content/renderer/pepper_plugin_delegate_impl.cc
|
| index 1bb13eefc8dfab4c78398712dc96c88470ec8bc1..c52cc2b4409ebbb1ecca5c510761ceec2b6cc1e3 100644
|
| --- a/content/renderer/pepper_plugin_delegate_impl.cc
|
| +++ b/content/renderer/pepper_plugin_delegate_impl.cc
|
| @@ -650,7 +650,7 @@ PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderView* render_view)
|
| has_saved_context_menu_action_(false),
|
| saved_context_menu_action_(0),
|
| id_generator_(0),
|
| - is_pepper_plugin_focused_(false) {
|
| + focused_plugin_(0) {
|
| }
|
|
|
| PepperPluginDelegateImpl::~PepperPluginDelegateImpl() {
|
| @@ -827,12 +827,95 @@ PepperPluginDelegateImpl::GetBitmapForOptimizedPluginPaint(
|
| return NULL;
|
| }
|
|
|
| -void PepperPluginDelegateImpl::PluginFocusChanged(bool focused) {
|
| - is_pepper_plugin_focused_ = focused;
|
| +void PepperPluginDelegateImpl::PluginFocusChanged(
|
| + webkit::ppapi::PluginInstance* instance,
|
| + bool focused) {
|
| + if (focused) {
|
| + focused_plugin_ = instance;
|
| + } else if (focused_plugin_ == instance) {
|
| + focused_plugin_ = 0;
|
| + }
|
| if (render_view_)
|
| render_view_->PpapiPluginFocusChanged();
|
| }
|
|
|
| +void PepperPluginDelegateImpl::PluginTextInputTypeChanged(
|
| + webkit::ppapi::PluginInstance* instance) {
|
| + if (focused_plugin_ == instance && render_view_)
|
| + render_view_->PpapiPluginFocusChanged();
|
| +}
|
| +
|
| +void PepperPluginDelegateImpl::OnImeSetComposition(
|
| + const string16& text,
|
| + const std::vector<WebKit::WebCompositionUnderline>& underlines,
|
| + int selection_start,
|
| + int selection_end) {
|
| + if (!CanComposeInline()) {
|
| + composition_text_ = text;
|
| + } else {
|
| + // TODO(kinaba) currently all composition events are sent directly to
|
| + // plugins. Use DOM event mechanism after WebKit is made aware about
|
| + // plugins supporting composition.
|
| +
|
| + // Empty -> nonempty: composition started.
|
| + if (composition_text_.empty() && !text.empty())
|
| + focused_plugin_->HandleCompositionStart(string16());
|
| + // Nonempty -> empty: composition canceled.
|
| + if (!composition_text_.empty() && text.empty())
|
| + focused_plugin_->HandleCompositionEnd(text);
|
| + composition_text_ = text;
|
| + // Nonempty: composition is ongoing.
|
| + if (!composition_text_.empty())
|
| + focused_plugin_->HandleCompositionUpdate(text, underlines,
|
| + selection_start, selection_end);
|
| + }
|
| +}
|
| +
|
| +void PepperPluginDelegateImpl::OnImeConfirmComposition(const string16& text) {
|
| + if (!text.empty())
|
| + composition_text_ = text;
|
| + if (composition_text_.empty())
|
| + return;
|
| +
|
| + if (!CanComposeInline()) {
|
| + for (size_t i = 0; i < text.size(); ++i) {
|
| + WebKit::WebKeyboardEvent char_event;
|
| + char_event.type = WebKit::WebInputEvent::Char;
|
| + char_event.timeStampSeconds = base::Time::Now().ToDoubleT();
|
| + char_event.modifiers = 0;
|
| + char_event.windowsKeyCode = composition_text_[i];
|
| + char_event.nativeKeyCode = composition_text_[i];
|
| + char_event.text[0] = composition_text_[i];
|
| + char_event.unmodifiedText[0] = composition_text_[i];
|
| + if (render_view_->webwidget())
|
| + render_view_->webwidget()->handleInputEvent(char_event);
|
| + }
|
| + }
|
| + else {
|
| + focused_plugin_->HandleTextInput(composition_text_);
|
| + focused_plugin_->HandleCompositionEnd(composition_text_);
|
| + }
|
| + composition_text_.clear();
|
| +}
|
| +
|
| +WebKit::WebRect PepperPluginDelegateImpl::GetCaretBounds() const {
|
| + if (!focused_plugin_)
|
| + return WebKit::WebRect();
|
| + return focused_plugin_->GetCaretBounds();
|
| +}
|
| +
|
| +WebKit::WebTextInputType PepperPluginDelegateImpl::GetTextInputType() const {
|
| + if (!focused_plugin_)
|
| + return WebKit::WebTextInputTypeNone;
|
| + return focused_plugin_->text_input_type();
|
| +}
|
| +
|
| +bool PepperPluginDelegateImpl::CanComposeInline() const {
|
| + if (!focused_plugin_)
|
| + return false;
|
| + return focused_plugin_->CanComposeInline();
|
| +}
|
| +
|
| void PepperPluginDelegateImpl::PluginCrashed(
|
| webkit::ppapi::PluginInstance* instance) {
|
| subscribed_to_policy_updates_.erase(instance);
|
| @@ -1017,7 +1100,7 @@ void PepperPluginDelegateImpl::OnSetFocus(bool has_focus) {
|
| }
|
|
|
| bool PepperPluginDelegateImpl::IsPluginFocused() const {
|
| - return is_pepper_plugin_focused_;
|
| + return focused_plugin_ != 0;
|
| }
|
|
|
| bool PepperPluginDelegateImpl::OpenFileSystem(
|
|
|