Closed
Bug 941468
Opened 12 years ago
Closed 12 years ago
Authorizing a Google calendar account doesn't display keyboard to enter details
Categories
(Firefox OS Graveyard :: General, defect)
Firefox OS Graveyard
General
Tracking
(blocking-b2g:koi+, firefox26 wontfix, firefox27 wontfix, firefox28 fixed, b2g-v1.2 fixed)
People
(Reporter: cajbir, Assigned: kanru)
References
Details
(Keywords: regression, Whiteboard: [Fugu] [v1.2f-uplift-needed])
Attachments
(3 files, 3 obsolete files)
|
462.28 KB,
text/plain
|
Details | |
|
3.30 KB,
patch
|
xyuan
:
review+
|
Details | Diff | Splinter Review |
|
3.47 KB,
patch
|
Details | Diff | Splinter Review |
When adding a Google Calendar the OAuth browser page requesting login details doesn't display the keyboard. This means you can't type in the username or password and so can't add the calendar.
Steps to reproduce:
1) Start Calendar
2) Press settings in top left
3) Press '+' to add a calendar
4) Choose 'Google'
5) Press in the 'Email' field in the authorization page
Expected results:
6) Keyboard appears to type email
Actual results:
6) No keyboard appears
Tested on a ZTE open running 'master' branch. Git commit gaia 298e6c5af4fe0cc0c4cfd88f7973bdd08e33aa51 and gecko 017ed20347cae2cd892d7ef144e7b36cd44f0185.
Comment 1•12 years ago
|
||
That sounds like a very recent regression.
blocking-b2g: --- → 1.3?
Component: Gaia::Calendar → Gaia::Keyboard
Keywords: regression,
regressionwindow-wanted
Updated•12 years ago
|
QA Contact: jzimbrick
Comment 2•12 years ago
|
||
Regression Window:
Last Working Environmental Variables:
Device: Buri v1.3 Mozilla RIL
BuildID: 20131118040206
Gaia: 28e7dd59cf5b8ad9b197c59fbf92603e934e0474
Gecko: d58ab6f6ca0a
Version: 28.0a1
Base Image: V1.2_20131115
First Broken Environmental Variables:
Device: Buri v1.3 Mozilla RIL
BuildID: 20131118094134
Gaia: 5d2ce56dbfbba702a487cd17efd19cdd62b2ff57
Gecko: f2adb62d07eb
Version: 28.0a1
Base Image: V1.2_20131115
Keywords: regressionwindow-wanted
Comment 4•12 years ago
|
||
isn't this fallout from the OOP keyboard stuff? Nothing in calendar has changed here
Comment 5•12 years ago
|
||
adding logcat from dup
Comment 7•12 years ago
|
||
I can reproduce this on a recent 1.2 build on a keon from Geeksphone and the current master on a hamachi, nominating for koi+ just in case it's reproduceable on 1.2 on other devices.
It doesn't reproduce on the Facebook authentication popup in the contacts app so it doesn't seem to be a general keyboard issue.
blocking-b2g: 1.3? → koi?
Updated•12 years ago
|
Keywords: qawanted,
regressionwindow-wanted
Comment 8•12 years ago
|
||
(In reply to Ben Francis [:benfrancis] from comment #7)
> I can reproduce this on a recent 1.2 build on a keon from Geeksphone and the
> current master on a hamachi, nominating for koi+ just in case it's
> reproduceable on 1.2 on other devices.
>
> It doesn't reproduce on the Facebook authentication popup in the contacts
> app so it doesn't seem to be a general keyboard issue.
There's already a window present here on comment 2.
Keywords: regressionwindow-wanted
Comment 9•12 years ago
|
||
There's no commits in the regression range for Gaia in the keyboard app. This seems like a gecko bug.
Leaving QA Wanted to confirm this reproduces on a production device on 1.2.
Comment 10•12 years ago
|
||
(In reply to Jason Smith [:jsmith] from comment #9)
>
> Leaving QA Wanted to confirm this reproduces on a production device on 1.2.
a dup bug 942773 was filed against 1.2, Buri device, so yes, it does repro
Keywords: qawanted
Comment 11•12 years ago
|
||
(In reply to Natalya Kot [:nkot] from comment #10)
> (In reply to Jason Smith [:jsmith] from comment #9)
> >
> > Leaving QA Wanted to confirm this reproduces on a production device on 1.2.
>
> a dup bug 942773 was filed against 1.2, Buri device, so yes, it does repro
sorry, i meant dup bug 942232
Comment 12•12 years ago
|
||
Suspected patch to cause this is bug 931746.
http://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=d58ab6f6ca0a&tochange=f2adb62d07eb
Blocks: 931746
Component: Gaia::Keyboard → General
Comment 13•12 years ago
|
||
I experience the same bug on a recent build.
Phone: ZTE Open
Version ID: 20131130151708
FFOS version: 1.2.0.0-prerelease
Git commit: 075e60c878b0eca68fba9e00bc85cb6eac03578a
Comment 14•12 years ago
|
||
Dylan
Please have someone look at it as it seems to be a calendar issue.
Flags: needinfo?(doliver)
Comment 15•12 years ago
|
||
(In reply to Jason Smith [:jsmith] from comment #12)
> Suspected patch to cause this is bug 931746.
>
> http://hg.mozilla.org/mozilla-central/
> pushloghtml?fromchange=d58ab6f6ca0a&tochange=f2adb62d07eb
Kanru, is this a known regression? Do you need assistance from someone familiar with Calendar to help research it?
Flags: needinfo?(doliver) → needinfo?(kchen)
Comment 16•12 years ago
|
||
Gareth is on PTO this week so I will take a look. The root cause is very unlikely calendar (nothing here has changed since 1.0.1). I will report back tomorrow.
Flags: needinfo?(jlal)
| Assignee | ||
Comment 17•12 years ago
|
||
Yes, it's a regression from bug 931746. I'll take a look.
Assignee: nobody → kchen
Flags: needinfo?(kchen)
| Assignee | ||
Comment 18•12 years ago
|
||
The OAuth2 page has an in-process browser frame in a remote app frame. The remote app frame message manager MMc1_1 is connected to the chrome window (Keyboard.jsm) via parent frame message manager MMp1_1. MMp1_1 is registered to Keyboard.jsm when we created the remote app frame. However the in-process browser frame has frame message manager MMp1_1_1 and MMc1_1_1 which are not know to the Keyboard.jsm. So when we filter out the message from the parent frame in bug 931746, Keyboard.jsm couldn't receive any message from the in-process browser.
Parent side Child side
------------- ------------
global MMg (B2G)
|
+-->window MMw1 (Keyboard.jsm)
|
+-->frame MMp1_1<------------>frame MMc1_1 (Calendar)
frame MMp1_1_1<--->frame MMc1_1_1 (OAuth2)
Updated•12 years ago
|
blocking-b2g: koi? → koi+
| Assignee | ||
Comment 19•12 years ago
|
||
Connect browser-element message managers so we could use the global manager. Part 2 will make the "remote in-process" mm also connect to its parent.
Attachment #8342303 -
Flags: feedback?(bugs)
Comment 20•12 years ago
|
||
Comment on attachment 8342303 [details] [diff] [review]
Part 1. Make all browser-element message manager connected
>+ nsCOMPtr<nsIContent> frameElement = mOwnerContent;
This could be just nsIContent*
>+ while (frameElement) {
>+ nsPIDOMWindow* win = frameElement->OwnerDoc()->GetWindow();
>+ if (win) {
>+ frameElement = win->GetFrameElementInternal();
>+ if (!frameElement) {
>+ break;
>+ }
>+ }
>+ nsCOMPtr<nsIFrameLoaderOwner> loaderOwner = do_QueryInterface(frameElement);
>+ nsRefPtr<nsFrameLoader> frameLoader = loaderOwner->GetFrameLoader();
>+ if (frameLoader->OwnerIsBrowserOrAppFrame()) {
>+ parentManager = frameLoader->mMessageManager;
>+ break;
>+ }
>+ }
Hmm, the setup becomes a bit odd. leaf message manager gets children.
Also, special casing OwnerIsBrowserOrAppFrame feels wrong.
How is the message passing supposed to work in this setup?
Why can't events be used for in-process communication when need to deal with not-at-chrome-boundary message manager communication with global mm?
(I'm not saying no to this, but this feels quite risky, and I don't quite understand what kind of message passing we want in this case. And what kind of frame script loading?)
Attachment #8342303 -
Flags: feedback?(bugs)
| Assignee | ||
Comment 21•12 years ago
|
||
(In reply to Olli Pettay [:smaug] from comment #20)
> Hmm, the setup becomes a bit odd. leaf message manager gets children.
Maybe make all message managers the children of the chrome window?
> Also, special casing OwnerIsBrowserOrAppFrame feels wrong.
Agree.
> How is the message passing supposed to work in this setup?
>
>
> Why can't events be used for in-process communication when need to deal with
> not-at-chrome-boundary message manager communication with global mm?
Hmm, either way I don't know how to do bidirectional communication. In current setup the parent wmm needs to send message to the child. So the top message manager has to pass the message/event to the correct child. I could include message id in each message and response but that looks ugly...
parent child
---------- ---------
pwmm1 <-----------------> cwmm1
|
+--> pwmm2 <----> cwmm2
Maybe we could make pwmm2 created correctly at parent side...
parent child
---------- ---------
pwmm1 <-----------------> cwmm1
pwmm2 <-----------------> cwmm2
Maybe simply make the second iframe remote could fix this bug.
But since bug 931746 isn't blocking, I'm going to back it out first.
| Assignee | ||
Comment 22•12 years ago
|
||
The top level forms.js is capable to handle all events from its descendents so load it only once here could avoid duplication and make in-process & oop use the same flow.
Attachment #8342303 -
Attachment is obsolete: true
Attachment #8343649 -
Flags: review?(xyuan)
Comment 23•12 years ago
|
||
Comment on attachment 8343649 [details] [diff] [review]
Only load forms.js once per-process
Review of attachment 8343649 [details] [diff] [review]:
-----------------------------------------------------------------
Looks good expect a few concerns as following.
::: dom/browser-element/BrowserElementChild.js
@@ +23,5 @@
> docShell.setFullscreenAllowed(infos.fullscreenAllowed);
>
>
> +function parentDocShell(docshell) {
> + let treeitem = docshell.QueryInterface(Ci.nsIDocShellTreeItem);
if docshell is null, we'll get an error here.
@@ +30,5 @@
> +
> +function isTopBrowserElement(docShell) {
> + while (docShell) {
> + docShell = parentDocShell(docShell);
> + if (docShell && docShell.isBrowserOrApp) {
if docShell is null, should we return true here?
::: dom/inputmethod/Keyboard.jsm
@@ -88,5 @@
> - mm.loadFrameScript(kFormsFrameScript, true);
> - }
> - } catch (e) {
> - dump('Error loading ' + kFormsFrameScript + ' as frame script: ' + e + '\n');
> - }
Please make sure this doesn't break gaia keyboard on Firefox Nightly.
::: dom/inputmethod/forms.js
@@ -345,5 @@
> break;
> }
>
> - // Only handle the event from our descendants
> - if (target instanceof HTMLElement &&
You also need to remove the line of
|let HTMLElement = Ci.nsIDOMHTMLElement|
at the beginning of this file.
Attachment #8343649 -
Flags: review?(xyuan) → feedback+
| Assignee | ||
Comment 24•12 years ago
|
||
(In reply to Yuan Xulei [:yxl] from comment #23)
> Comment on attachment 8343649 [details] [diff] [review]
> Only load forms.js once per-process
>
> Review of attachment 8343649 [details] [diff] [review]:
> -----------------------------------------------------------------
>
> Looks good expect a few concerns as following.
>
> ::: dom/browser-element/BrowserElementChild.js
> @@ +23,5 @@
> > docShell.setFullscreenAllowed(infos.fullscreenAllowed);
> >
> >
> > +function parentDocShell(docshell) {
> > + let treeitem = docshell.QueryInterface(Ci.nsIDocShellTreeItem);
>
> if docshell is null, we'll get an error here.
There is always a current docShell so I think it's unlikely this utilitiy function will get a null docshell. I'll return null here.
>
> @@ +30,5 @@
> > +
> > +function isTopBrowserElement(docShell) {
> > + while (docShell) {
> > + docShell = parentDocShell(docShell);
> > + if (docShell && docShell.isBrowserOrApp) {
>
> if docShell is null, should we return true here?
We return true right after the while loop.
> ::: dom/inputmethod/Keyboard.jsm
> @@ -88,5 @@
> > - mm.loadFrameScript(kFormsFrameScript, true);
> > - }
> > - } catch (e) {
> > - dump('Error loading ' + kFormsFrameScript + ' as frame script: ' + e + '\n');
> > - }
>
> Please make sure this doesn't break gaia keyboard on Firefox Nightly.
Yeah, it works great!
> ::: dom/inputmethod/forms.js
> @@ -345,5 @@
> > break;
> > }
> >
> > - // Only handle the event from our descendants
> > - if (target instanceof HTMLElement &&
>
> You also need to remove the line of
> |let HTMLElement = Ci.nsIDOMHTMLElement|
> at the beginning of this file.
OK
| Assignee | ||
Comment 25•12 years ago
|
||
Attachment #8343649 -
Attachment is obsolete: true
Attachment #8344161 -
Flags: review?(xyuan)
Comment 26•12 years ago
|
||
Comment on attachment 8344161 [details] [diff] [review]
Only load forms.js once per-process v1.1
Review of attachment 8344161 [details] [diff] [review]:
-----------------------------------------------------------------
Kanru, thanks! r=me if the following comments is addressed :-)
::: dom/browser-element/BrowserElementChild.js
@@ +27,5 @@
> + if (!docshell) {
> + return null;
> + }
> + let treeitem = docshell.QueryInterface(Ci.nsIDocShellTreeItem);
> + return treeitem.parent ? treeitem.parent.QueryInterface(Ci.nsIDocShell) : null;
This line indicates the parent doc shell may be null.
@@ +32,5 @@
> +}
> +
> +function isTopBrowserElement(docShell) {
> + while (docShell) {
> + docShell = parentDocShell(docShell);
I don't want to nitpick, but if we get null parent doc shell, the while loop goes infinite. Though it is unlikely to happen, we need guard against it.
Attachment #8344161 -
Flags: review?(xyuan) → review+
| Assignee | ||
Comment 27•12 years ago
|
||
(In reply to Yuan Xulei [:yxl] from comment #26)
> Comment on attachment 8344161 [details] [diff] [review]
> Only load forms.js once per-process v1.1
>
> Review of attachment 8344161 [details] [diff] [review]:
> -----------------------------------------------------------------
>
> Kanru, thanks! r=me if the following comments is addressed :-)
>
> ::: dom/browser-element/BrowserElementChild.js
> @@ +27,5 @@
> > + if (!docshell) {
> > + return null;
> > + }
> > + let treeitem = docshell.QueryInterface(Ci.nsIDocShellTreeItem);
> > + return treeitem.parent ? treeitem.parent.QueryInterface(Ci.nsIDocShell) : null;
>
> This line indicates the parent doc shell may be null.
It is possible and we use it to check if this is the top docShell.
> @@ +32,5 @@
> > +}
> > +
> > +function isTopBrowserElement(docShell) {
> > + while (docShell) {
> > + docShell = parentDocShell(docShell);
>
> I don't want to nitpick, but if we get null parent doc shell, the while loop
> goes infinite. Though it is unlikely to happen, we need guard against it.
I don't understand. The while loop should stop if docShell is null.
Comment 28•12 years ago
|
||
(In reply to Kan-Ru Chen [:kanru] from comment #27)
>
> > @@ +32,5 @@
> > > +}
> > > +
> > > +function isTopBrowserElement(docShell) {
> > > + while (docShell) {
> > > + docShell = parentDocShell(docShell);
> >
> > I don't want to nitpick, but if we get null parent doc shell, the while loop
> > goes infinite. Though it is unlikely to happen, we need guard against it.
>
> I don't understand. The while loop should stop if docShell is null.
Sorry, I made a mistake. The loop won't go infinite :-)
| Assignee | ||
Comment 29•12 years ago
|
||
| Assignee | ||
Comment 30•12 years ago
|
||
not tested yet
Comment 31•12 years ago
|
||
Because 1.2 is going to be finished, should we mark this bug from koi+ to 1.3+? Thanks.
Comment 32•12 years ago
|
||
Status: NEW → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Comment 33•12 years ago
|
||
status-b2g-v1.2:
--- → fixed
status-firefox26:
--- → wontfix
status-firefox27:
--- → wontfix
status-firefox28:
--- → fixed
Flags: needinfo?(jlal)
Target Milestone: --- → 1.3 Sprint 6 - 12/6
Comment 35•12 years ago
|
||
Pushed as an interdiff with the previous patch.
https://hg.mozilla.org/releases/mozilla-b2g26_v1_2/rev/4d1c05b3d6f1
Updated•12 years ago
|
Whiteboard: [Fugu] [v1.2f-uplift-needed]
You need to log in
before you can comment on or make changes to this bug.
Description
•