New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 919167 link

Starred by 2 users

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 1
Type: Bug



Sign in to add a comment

Emoji/character picker doesn't work in PWAs

Project Member Reported by sdy@chromium.org, Jan 4

Issue description

Chrome Version: 73.0.3660.0
OS: macOS 10.14.2

What steps will reproduce the problem?
(1) Install and launch a PWA or shortcut (instructions in other UI>Browser>WebAppInstalls bugs).
(2) Try to use the character picker (cmd+ctrl+space) to input text.

What is the expected result?
The character picker is usable.

What happens instead?
The character picker doesn't appear.
 
The emoji panel is accessible through the "Edit" menu, it's the shortcut that's busted.

In particular, the calls at [0] and [1] end up just calling [NSApp orderFrontCharacterPalette:nil] in the browser process.

The fix would be to route this through the AppShimHost.

[0] https://cs.chromium.org/chromium/src/ui/views/controls/views_text_services_context_menu_base.cc?rcl=baaf98a6d8125f3d490f543498dfdcf383d5eb46&l=82
[1] https://cs.chromium.org/chromium/src/chrome/browser/renderer_context_menu/render_view_context_menu.cc?rcl=baaf98a6d8125f3d490f543498dfdcf383d5eb46&l=2111
[2] https://cs.chromium.org/chromium/src/ui/base/emoji/emoji_panel_helper_mac.mm?rcl=baaf98a6d8125f3d490f543498dfdcf383d5eb46&l=18

Owner: alancutter@chromium.org
Status: Assigned (was: Untriaged)
The emoji picker is also not available via the right click menu (as indicated by [1] in #1).
Here is when it does/doesn't work for PWA windows:
  WebContents:
    Ctrl-cmd-space: ❌
    Context menu: ❌
    Edit menu: ✅
  Views:
    Ctrl-cmd-space: ✅
    Context menu: ❌
    Edit menu: ✅
Screenshots for WIP CL: https://chromium-review.googlesource.com/c/chromium/src/+/1410406

Screen Shot 2019-01-15 at 5.40.05 pm.png
88.4 KB View Download
Screen Shot 2019-01-15 at 5.40.35 pm.png
114 KB View Download
Screen Shot 2019-01-15 at 5.41.42 pm.png
44.7 KB View Download
Screen Shot 2019-01-15 at 5.41.51 pm.png
78.2 KB View Download
Project Member

Comment 5 by bugdroid1@chromium.org, Jan 16

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d0daef0dc485855ed768878c0d3d574597f64920

commit d0daef0dc485855ed768878c0d3d574597f64920
Author: Alan Cutter <alancutter@chromium.org>
Date: Wed Jan 16 05:43:48 2019

Plumb ShowEmojiPanel call through to app shim process on Mac

This CL moves the call to ui::ShowEmojiPanel from the browser process
to the app shim process for PWA windows on Mac via the following path:

RenderViewContextMenu::ExecuteCommand -> BrowserWindow/BrowserView -> Widget -> NativeWidgetMac --mojo--> BridgedNativeWidget/BridgedNativeWidgetImpl -> ui::ShowEmojiPanel()

All other platforms will continue to call ui::ShowEmojiPanel() from
the browser process.

This fixes the "Emoji & Symbols" context menu entry for PWA
text fields (in views and the web) on Mac.

Web contents text field:
https://bugs.chromium.org/p/chromium/issues/attachment?aid=375066&signed_aid=lq0pCXn7JRKe2K7sB--yMg==&inline=1
https://bugs.chromium.org/p/chromium/issues/attachment?aid=375067&signed_aid=zWSSoCeJA0cCWd9UqEC1-g==&inline=1

Views text field:
https://bugs.chromium.org/p/chromium/issues/attachment?aid=375068&signed_aid=7zm-2jnWqB1UCPCk3XbQMA==&inline=1
https://bugs.chromium.org/p/chromium/issues/attachment?aid=375069&signed_aid=l5rcTwTlu-Kk2lKjYW2GyQ==&inline=1

Bug: 919167
Change-Id: Ia080e1bb13979d1cca920407d5a4e8ecacca791e
Reviewed-on: https://chromium-review.googlesource.com/c/1410406
Reviewed-by: Dominick Ng <dominickn@chromium.org>
Reviewed-by: ccameron <ccameron@chromium.org>
Reviewed-by: Elly Fong-Jones <ellyjones@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Alan Cutter <alancutter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#623125}
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/chrome/browser/renderer_context_menu/render_view_context_menu.cc
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/chrome/browser/ui/browser_window.h
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/chrome/browser/ui/views/frame/browser_view.cc
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/chrome/browser/ui/views/frame/browser_view.h
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/chrome/test/base/test_browser_window.h
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views/controls/views_text_services_context_menu_base.cc
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views/widget/native_widget_mac.h
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views/widget/native_widget_mac.mm
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views/widget/native_widget_private.cc
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views/widget/native_widget_private.h
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views/widget/widget.cc
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views/widget/widget.h
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views_bridge_mac/bridged_native_widget_impl.h
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views_bridge_mac/bridged_native_widget_impl.mm
[modify] https://crrev.com/d0daef0dc485855ed768878c0d3d574597f64920/ui/views_bridge_mac/mojo/bridged_native_widget.mojom

Now that d0daef0dc485855ed768878c0d3d574597f64920 has landed the status is:
  WebContents:
    Ctrl-cmd-space: ❌
    Context menu: ✅
    Edit menu: ✅
  Views:
    Ctrl-cmd-space: ✅
    Context menu: ✅
    Edit menu: ✅

Comment 7 by alancutter@chromium.org, Jan 18 (5 days ago)

This appears to be the stack trace for opening the emoji panel via pressing ctrl+cmd+space in a views text field in a PWA window:
libdyld.dylib 6.0        start
app_mode_loader 6.0      main
libchrome_dll.dylib 6.0  ChromeAppModeStart_v4
libbase.dylib 6.0        base::RunLoop::Run()
libbase.dylib 6.0        base::MessageLoopImpl::Run(bool)
libbase.dylib 6.0        base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*)
libbase.dylib 6.0        base::MessagePumpNSApplication::DoRun(base::MessagePump::Delegate*)
AppKit 6.0               -[NSApplication run]
AppKit 5.0               -[NSApplication(NSEvent) sendEvent:]
AppKit 5.0               routeKeyEquivalent
AppKit 5.0               -[NSMenu performKeyEquivalent:]
AppKit 5.0               -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:]
AppKit 5.0               -[NSMenuItem _corePerformAction]
AppKit 5.0               -[NSApplication(NSResponder) sendAction:to:from:]
HIToolbox 5.0            TSMLaunchCharacterPalette


There doesn't seem to be any Chromium code in between the key routing and the launching of the emoji panel.

Comment 8 by alancutter@chromium.org, Jan 18 (5 days ago)

My mistake, there is Chromium code in there, I just wasn't running debug.

#0  TSMLaunchCharacterPalette ()
#1  -[NSApplication(NSResponder) sendAction:to:from:] ()
#2  ::__43-[BrowserCrApplication sendAction:to:from:]_block_invoke()
#3  base::mac::CallWithEHFrame(void () block_pointer)
#4  ::-[BrowserCrApplication sendAction:to:from:](SEL, id, id)
#5  -[NSMenuItem _corePerformAction] ()
#6  -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] ()
#7  -[NSMenu performKeyEquivalent:] ()
#8  routeKeyEquivalent ()
#9  -[NSApplication(NSEvent) sendEvent:] ()
#10 ::__34-[BrowserCrApplication sendEvent:]_block_invoke()
#11 base::mac::CallWithEHFrame(void () block_pointer)
#12 ::-[BrowserCrApplication sendEvent:](NSEvent *)
#13 -[NSApplication run] ()
#14 base::MessagePumpNSApplication::DoRun(base::MessagePump::Delegate*)
#15 base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*)
#16 base::MessageLoopImpl::Run(bool)
#17 base::RunLoop::Run()
#18 ChromeBrowserMainParts::MainMessageLoopRun(int*)
#19 content::BrowserMainLoop::RunMainMessageLoopParts()
#20 content::BrowserMainRunnerImpl::Run()
#21 content::BrowserMain(content::MainFunctionParams const&)

Comment 9 by alancutter@chromium.org, Yesterday (28 hours ago)

For some reason the NSEvent that comes through BrowserFrameMac::HandleKeyboardEvent() has type NSEventTypeFlagsChanged instead of NSEventTypeKeyDown (resulting in ShouldHandleKeyboardEvent(event) being false) on the final space key down of ctrl+cmd+space when performed in a PWA WebContents but not in a main browser WebContents.

Sign in to add a comment