Firefox/Windows 8 Integration: Difference between revisions

no edit summary
No edit summary
 
(93 intermediate revisions by 11 users not shown)
Line 1: Line 1:
== Wiki ==
== Links ==


* [https://wiki.mozilla.org/Firefox/Metro Metro Project] - meeting times, bug lists, project goals, team info, etc.
* [[Firefox/Metro|Metro project page]] - meeting times, bug lists, project goals, team info, etc.
* [[Firefox/Features|General Firefox Product Feature Tracking]] - Firefox feature tracking.
* [[Windows 8 Integration]] - General 3rd party browser collaboration page dedicated to overview, architecture, and challenges for vendors. Early research with Google.
* [https://wiki.mozilla.org/Firefox_Metro_UI Firefox Metro UI wiki] - including comp work and UX bug tracking.
* [[Windows8|Metro Project Status]] - not really in use.
* [[Windows_8_Integration]] - General 3rd party browser collaboration page dedicated to overview, architecture, and challenges for vendors. Early research with Google.
* [https://bugzilla.mozilla.org/buglist.cgi?resolution=---;op_sys=Windows%208;query_format=advanced;list_id=2566504 Windows 8 (desktop)]
* [[Firefox/Windows 8 Metro Style Guides]] - coding standards and UI guidelines
* [[Firefox/Windows 8 Metro Style Guides]] - coding standards and UI guidelines
* [https://mail.mozilla.org/listinfo/metro Mailing list] - archive and subscription info for the metro@mozilla.org discussion list


== Useful Bugzilla Queries ==
== Getting Involved ==
[https://bugzilla.mozilla.org/buglist.cgi?resolution=---;op_sys=Windows%208%20Metro;status_whiteboard_type=notregexp;query_format=advanced;status_whiteboard=completed-elm;list_id=5745479 Win8 Metro]


* Metro Firefox complete list
Contact Brian Bondy with questions (bbondy on [http://irc.mozilla.org IRC]). The Windows 8 integration team can be found in in #windev.


[https://bugzilla.mozilla.org/buglist.cgi?type0-1-0=notsubstring;list_id=5756053;field0-1-0=status_whiteboard;field0-0-0=status_whiteboard;resolution=---;op_sys=Windows%208%20Metro;query_format=advanced;value0-2-0=MetroV1;value0-1-0=feature%3Dstory;field0-2-0=short_desc;type0-0-0=notsubstring;value0-0-0=feature%3Depic;type0-2-0=notsubstring Win8 Metro]
=== Bugzilla ===


* Metro Firefox complete list
Please file front end bugs under the product [https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox%20for%20Metro Firefox for Metro]. Back end bugs should be filed in the appropriate Platform component.
* Minus feature=story, epic, and MetroV1
 
[https://bugzilla.mozilla.org/buglist.cgi?type0-7-0=notsubstring;value0-7-0=feature%3Ddefect;field0-3-0=status_whiteboard;type0-1-0=notequals;type0-5-0=notsubstring;value0-5-0=feature%3Dwork;value0-4-0=feature%3Dstory;list_id=5745413;field0-1-0=blocked;field0-0-0=blocked;type0-4-0=notsubstring;resolution=---;field0-6-0=status_whiteboard;value0-3-0=feature%3Depic;field0-7-0=status_whiteboard;query_format=advanced;value0-2-0=MetroV1;value0-6-0=feature%3Dchange;value0-1-0=842686;type0-3-0=notsubstring;field0-2-0=short_desc;field0-5-0=status_whiteboard;field0-4-0=status_whiteboard;type0-6-0=notsubstring;type0-0-0=notequals;value0-0-0=841214;type0-2-0=notsubstring;product=Firefox%20for%20Metro Untagged Bugs]
* Not blocked by various pm triage tracking bugs
* Whiteboard does not contain feature=epic, work, change, defect, story
* Summary does not contain 'MetroV1'
 
[https://bugzilla.mozilla.org/buglist.cgi?chfield=%5BBug%20creation%5D;chfieldfrom=-72h;known_name=Last%20Three%20Days;columnlist=opendate%2Cbug_severity%2Cpriority%2Cop_sys%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc;resolution=---;op_sys=Windows%20XP;op_sys=Windows%20Vista;op_sys=Windows%207;op_sys=Windows%208;op_sys=Windows%208%20Metro;query_based_on=Last%20Three%20Days;chfieldto=Now;query_format=advanced;product=Firefox%20for%20Metro;list_id=5745420 Last three days]


* Bugs filed against product Metro Firefox in the last three days
===Blockers===


[https://bugzilla.mozilla.org/buglist.cgi?list_id=4351876;resolution=---;op_sys=Windows%208%20Metro;status_whiteboard_type=notregexp;query_format=advanced;product=Core;product=Toolkit;product=www.mozilla.org Platform]
We are using the following whiteboard tags to track bugs that block our release with Firefox 28:


* Core, Toolkit, mozilla.org
* [beta28] - for bugs that must be fixed before Firefox 28 reaches the beta channel
* [release28] - for bugs that mut be fixed before Firefox 28 reaches the release channel


== Getting Involved ==
Queries:
Contact Brian Bondy with questions (bbondy on [http://irc.mozilla.org IRC]). The Windows 8 integration team can be found in in #windev.
 
=== Bugzilla ===


Please file front end bugs under the product [https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox%20for%20Metro Firefox for Metro]. Back end bugs should be filed in the appropriate Platform component.
* [https://bugzilla.mozilla.org/buglist.cgi?quicksearch=ALL+sw:beta28,release28 all blockers]
* [https://bugzilla.mozilla.org/buglist.cgi?quicksearch=sw:beta28,release28+-sw:fixed-in-fx-team open blockers]
* [https://bugzilla.mozilla.org/buglist.cgi?quicksearch=sw:beta28,release28+@nobody unassigned blockers]
* [http://mzl.la/1gU09QW blockers awaiting Beta nomination]
* [http://mzl.la/1ngxYJp blockers awaiting Beta landing]


=== Front End Windows 8 Development ===
=== Front End Windows 8 Development ===
Line 45: Line 35:
* Follow the steps in the Metro Builds section below to get setup
* Follow the steps in the Metro Builds section below to get setup
* The front end code is located in browser/metro
* The front end code is located in browser/metro
* You can find Windows 8 front end bugs here http://goo.gl/YQZiy or by doing an advanced bugzilla search for: OS = Windows 8 Metro, Product = Firefox, Component = General
* Style guidelines of all types can be found on https://wiki.mozilla.org/Firefox/Windows_8_Metro_Style_Guides
* Style guidelines of all types can be found on https://wiki.mozilla.org/Firefox/Windows_8_Metro_Style_Guides


=== Platform Integration Windows 8 Development ===
=== Platform Integration Windows 8 Development ===


* To contribute to platform integration bugs, you will use: C++, C++/CX
* To contribute to platform integration bugs, you will use: C++
* You do need Windows 8 to work on the platform integration code
* You do need Windows 8 to work on the platform integration code
* You can obtain a 90 day free Windows 8 evaluation for developers from Microsoft
* You can obtain a 90 day free Windows 8 evaluation for developers from Microsoft
Line 57: Line 46:
* You can find Windows 8 platform integration bugs here http://goo.gl/B0Xjo or by doing an advanced bugzilla search for: OS = Windows 8 Metro, Product = Core, Component = Widget: Win32
* You can find Windows 8 platform integration bugs here http://goo.gl/B0Xjo or by doing an advanced bugzilla search for: OS = Windows 8 Metro, Product = Core, Component = Widget: Win32


== Metro Builds ==
== Firefox for Windows 8 Builds ==
 
=== Nightly Builds ===
 
Update: 2/19/2013
 
Nightly builds are now being generated on mozilla-central.
 
Nightly builds off the mozilla-central repository are currently available in the [http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/ Firefox build archives].
 
To set these builds up:


* Install the browser using the latest installer
Firefox for Windows 8 is currently included in Nightly, Aurora, and Beta builds of Firefox for Windows. It will reach the release channel with Firefox 28 around March 17th, 2014.
* Open the desktop browser - when the default browser check occurs, select yes to set Firefox as the default. You should also receive a Windows prompt, select Nightly. This will associate Firefox with various protocol handlers and create the Firefox tile.
* To set file handler associations use Window's Control Panel for default program associations. (Options -> Advanced -> General and click the default browser button at the bottom to open this panel.


For the time being, <strong>only the desktop browser can do browser updates</strong> to new builds ({{bug|794936}}, {{bug|794937}}). If prompted to update, make sure to shut the metro browser down first to allow the update to complete.
For more detailed help on installing / setting the browser as the default, visit the [https://support.mozilla.org/en-US/kb/how-do-i-install-windows-8-metro-style-firefox Metro Firefox support page].


=== Nightly Crash Reports ===
=== Browser Crash Reports ===


[https://crash-stats.mozilla.com/topcrasher/byversion/MetroFirefox/22.0a1/7 Firefox for Metro]
[https://crash-stats.mozilla.com/home/products/MetroFirefox Firefox for Metro crash stats]


=== Switching Default Browsers ===
=== Switching Default Browsers ===
Line 101: Line 78:
* Download the newest firefox-(rev).0a1.en-US.win32.zip to your Win8 device
* Download the newest firefox-(rev).0a1.en-US.win32.zip to your Win8 device
* Unpack the main firefox folder to a suitable location
* Unpack the main firefox folder to a suitable location
* Run firefox.exe
* Run firefox.exe on the desktop
* Set Metro Firefox as the default browser through Firefox preferences, which launches Control Panel -> Default Programs
* If prompted by Windows, select Nightly/Aurora/Firefox as the default.
* Open Options -> Advanced -> General and click the "Make Firefox the default browser" button. This will open Windows Control Panel where you will need to select the channel build you are testing and set the defaults.


=== Building Locally ===
=== Building Locally ===


Updated 10/31/2012
Updated 5/21/2013


* Install Visual Studio 2010 or 2012.
* Install Visual Studio 2010 or 2012.
* Install [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Windows_Prerequisites MozillaBuild]
* Install [https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Windows_Prerequisites MozillaBuild] (version 1.7 required)
* Install the [http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx Windows 8.0 SDK]
* Install the [http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx Windows 8.0 SDK]
* If you are using an express version of VS, install [http://www.microsoft.com/en-us/download/details.aspx?id=11800 the windows driver toolkit] - Don't install WDK 8, version 7.1 is needed because it contains the necessary ATL headers that express VS lacks. Then, add the following to start-msvc*.bat file (assuming it was installed on "C:\WinDDK\7600.16385.1"):
* Install [http://www.microsoft.com/en-us/download/confirmation.aspx?id=6812 DirectX SDK (June 2010)]
<pre>
set "INCLUDE=%INCLUDE%;C:\WinDDK\7600.16385.1\inc\atl71"
set "LIB=%LIB%;C:\WinDDK\7600.16385.1\lib\ATL\i386"
</pre>
 
: For VS 2010/8.0 SDK builds, update to the latest start-msvc2010 batch script from [https://hg.mozilla.org/mozilla-build/summary mozilla-build repo].
: For VS2012 builds, use the current start-msvc2011 batch scripts distributed with MozillaBuild.
 
* Modify the the following header in the sdk:


* For VC 2010 builds:
** Modify the the following header in the sdk:
<pre>
<pre>
C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\asyncinfo.h
C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\asyncinfo.h
Line 134: Line 105:
</pre>
</pre>


* Check out mozilla-central.  Make sure the obj directory has "Modify" permissions given to the current user.
If you use both VC 2010 and VC 2012 (or plan to install VC 2012 in the near future) you might want to instead use the following patch, which reverts to the original code under VC 2012 and later:
<pre>
--- asyncinfo.h.orig 2013-05-21 08:47:49 -0400
+++ asyncinfo.h 2013-05-21 08:48:55 -0400
@@ -58,17 +58,21 @@
/* interface __MIDL_itf_asyncinfo_0000_0000 */
/* [local] */
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
#pragma once
#ifdef __cplusplus
namespace ABI { namespace Windows { namespace Foundation {
+#if defined (_MSC_VER) && _MSC_VER >= 1700
enum class AsyncStatus {
+#else
+enum AsyncStatus {
+#endif
  Started = 0,
  Completed,
  Canceled,
  Error,
};
} } } // ABI::Windows:::Foundation
using ABI::Windows::Foundation::AsyncStatus;
#ifndef _HIDE_GLOBAL_ASYNC_STATUS
</pre>
 
* For Express versions of VS:
** Install [http://www.microsoft.com/en-us/download/details.aspx?id=11800 the Windows Driver Toolkit, version 7.1.0] - Version 7.1.0 is needed because it contains the necessary ATL headers that express VS lacks.
** Add the following to start-msvc*.bat file near the end just before the line that reads cd "%USERPROFILE%" (assumes WinDDK was installed in "C:\WinDDK\7600.16385.1"):
<pre>
set "INCLUDE=C:\WinDDK\7600.16385.1\inc\atl71;%INCLUDE%"
set "LIB=C:\WinDDK\7600.16385.1\lib\ATL\i386;%LIB%"
</pre>
 
* [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Get_the_source Check out mozilla-central].  Make sure the obj directory has "Modify" permissions given to the current user.
* Create a standard browser .mozconfig file with the options you prefer and add
* Create a standard browser .mozconfig file with the options you prefer and add


Line 141: Line 148:
</pre>
</pre>


* Config and build m-c
* [https://developer.mozilla.org/en-US/docs/Simple_Firefox_build#Building Build Firefox].


At this point, you should be able to launch the metro browser on the desktop using a command line switch:
At this point, you should be able to launch the metro browser on the desktop using a command line switch:


<pre>
<pre>
(obj)/dist/bin/firefox.exe -metrodesktop
./mach run -metrodesktop
</pre>
</pre>


To register local builds as the default browser:
To run in the real "immersive" (full-screen) Metro environment, first launch the desktop browser by typing:


* For debug builds: run the resulting firefox.exe on the desktop and set as the default through Options menu -> Advanced -> General tab -> Make default button.
<pre>
* For release builds: run the resulting firefox.exe on the desktop and click yes to the default settings dialog, then select 'Nightly' in the Windows 8 prompt.
./mach run
* Open up Control Panel -> Default Programs. You should see 'Metro Firefox' in the list of applications.
</pre>
* Set all Metro Firefox defaults in Default Programs.


At which point you should have a Firefox tile in Win8 that launches the browser.
Then press the "Relaunch in Windows 8 Touch" button in the menu to switch to Metro mode.  See [https://support.mozilla.org/en-US/kb/how-do-i-install-windows-8-metro-style-firefox#w_step-2-launch-windows-8-metro-style-firefox this support page] for details.


Note, for debug builds, see [[Firefox/Windows_8_Integration#Logging_Assertions]].
Note, for debug builds, see [[Firefox/Windows_8_Integration#Logging_Assertions]].
Line 169: Line 175:


Note on the desktop we use the desktop's Win32/Widget backend. This can behave differently from the Win8 WinRT backend. The translational layer for Win32 events is location in /browser/metro/content/base/input.js.
Note on the desktop we use the desktop's Win32/Widget backend. This can behave differently from the Win8 WinRT backend. The translational layer for Win32 events is location in /browser/metro/content/base/input.js.
=== Running Desktop and Metro Simultaneously ===
It's possible to run desktop Firefox and Metro Firefox side-by-side by using different profiles.  However, there are some problems caused by the fact that Metro Firefox will only use the default profile ({{bug|945511}}), and our startup code will always start in desktop mode if any desktop process is running ({{bug|945554}}).
Here's one way to keep desktop Firefox running while testing Metro Firefox in a separate profile:
# [https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles Create a new profile] named "desktop".  (You can use Firefox Sync to keep this in sync with your default profile.)
# Launch desktop Firefox by running <code>firefox.exe -p desktop -no-remote</code>.  (You can create a [http://kb.mozillazine.org/Shortcut_to_a_specific_profile shortcut] to make this more convenient. Instructions for Windows 7+ [http://lifehacker.com/5475752/customize-pinned-shortcuts-on-the-windows-7-taskbar here])
#* If you are making changes to the Metro Firefox source code, it's useful to start desktop Firefox from separate installation rather than your objdir, so you don't need to close it each time you rebuild.
# To launch Metro Firefox, run <code>firefox.exe -no-remote</code> (or <code>./mach run</code>) and then press the ''Windows 8 Touch'' menu button.
#* Or you can launch the Metro UI in a desktop window by running <code>firefox.exe -no-remote -metrodesktop</code> (or <code>./mach run -metrodesktop</code>).
# Use alt-tab or edge/corner gestures to switch between the Metro app and the desktop.


=== Testing ===
=== Testing ===
Line 174: Line 193:
[https://developer.mozilla.org/en-US/docs/Browser_chrome_tests Browser-chrome tests] for Metro Firefox are located in [http://hg.mozilla.org/projects/elm/file/default/browser/metro/base/tests/ browser/metro/base/tests].  The tests run in the Metro environment; Windows 8 is required.
[https://developer.mozilla.org/en-US/docs/Browser_chrome_tests Browser-chrome tests] for Metro Firefox are located in [http://hg.mozilla.org/projects/elm/file/default/browser/metro/base/tests/ browser/metro/base/tests].  The tests run in the Metro environment; Windows 8 is required.


To start the tests, run the following command in the mozilla-build shell, at the top level of your obj-dir:
Currently, some of the selection tests may fail (specifically, browser_selection_frame_textarea.js) if the device and CSS pixels are out of sync. To solve this, you may need to change the following pref in about:config to the following value.


  pymake mochitest-metro-chrome
  layout.css.devPixelsPerPx = 1.0 (default is -1.0, which makes Firefox autoscale CSS pixels)
 
To run all the tests, run the following [[mach]] command in the mozilla-build shell in your mozilla-central source directory:
 
./mach mochitest-metro
To run a single test file or directory,
 
./mach mochitest-metro path/to/test/file.js


The Metro browser will launch, run the tests and exit.  Any failures will be printed to the console.  The complete test log will be written to the file <code>mochitest-metro-chrome.log</code> in the objdir.
The Metro browser will launch, run the tests and exit.  Any failures will be printed to the console.  The complete test log will be written to the file <code>mochitest-metro-chrome.log</code> in the objdir.
We have a library of convenience functions for use in metro-chrome tests, which you can find in '''[http://dxr.mozilla.org/mozilla-central/source/browser/metro/base/tests/mochitest/head.js head.js]'''.  Note: These tests make heavy use of Promises and [https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Task.jsm Task.jsm].


=== Building on Linux or Mac OS X ===
=== Building on Linux or Mac OS X ===
'''This configuration is not official supported or tested.'''  It might break without anyone noticing for a while.  If it doesn't work, let us know and we can help fix it.


You can use the ''--enable-metro'' configure option and the ''-metrodesktop'' command-line flag to build and run the Metro UI on other platforms too.  For details, see [http://limpet.net/mbrubeck/2012/09/19/metro-firefox-without-windows.html Metro Firefox without Windows 8].
You can use the ''--enable-metro'' configure option and the ''-metrodesktop'' command-line flag to build and run the Metro UI on other platforms too.  For details, see [http://limpet.net/mbrubeck/2012/09/19/metro-firefox-without-windows.html Metro Firefox without Windows 8].


On Mac, you might need to run "./mach build browser" after your build completes.  For details, see {{bug|847807}}.
On Mac, you might need to run "./mach build browser" after your build completes.  For details, see {{bug|847807}}.
* there is a problem with html5 EMBED tag. '''an EMBED tag is basically to play media files.''' but we can't use this on mac.


=== Logging Assertions ===
=== Logging Assertions ===


When you're running Metro Firefox with --enable-debug, there will be assertion failure messages that pop up.  Because they appear on the desktop and block the UI, they will make the Metro UI appear to hang until you dismiss them on the desktop. You can set the following environment variable to ensure that they're logged rather than displayed as popups:
When you're running Metro Firefox with --enable-debug, there will be assertion failure messages that show up in the console. The following environment variable is assumed for the Metro environment:


<pre>
<pre>
XPCOM_DEBUG_BREAK=warn
XPCOM_DEBUG_BREAK=warn
</pre>
</pre>
Set up steps:
* From the start screen, type "control panel"
* Search for "Environment"
* Click "Edit environment variables for your account"
* Add the user variable "XPCOM_DEBUG_BREAK" with value "warn"


=== Remote Debug Output ===
=== Remote Debug Output ===
Line 217: Line 243:
<strike>{{bug|762519}}</strike> was filed on getting javascript's dump output going to OutputDebugString as well.
<strike>{{bug|762519}}</strike> was filed on getting javascript's dump output going to OutputDebugString as well.


=== DOM Inspector ===
=== JS Console ===


Getting DOM Inspector attached to builds running on the desktop takes a few tweaks.  
You can access the JavaScript console by typing Control-Shift-J.  You can also set devtools.errorconsole.enabled to "true" in about:config to add an "Open error console" command to the menu button in the navigation bar.
* Install the dom inspector addon (if you do not have it already) on your desktop firefox
* Copy the 'inspector@mozilla.org' folder under your Firefox profile's extension directory over to your MetroFirefox profile extensions directory. (Example: C:\Users\Brian\AppData\Roaming\Mozilla\MetroFirefox\Profiles\amrcb8eg.default\extensions)
* add an entry in inspector's install.rdf file for metrofx and make sure the maxVersion is set correctly.


<pre>
=== Enable Add-ons ===
<em:targetApplication>
  <Description>
    <em:id>{99bceaaa-e3c6-48c1-b981-ef9b46b67d60}</em:id>
    <em:minVersion>1.0a1</em:minVersion>
    <em:maxVersion>19.0a1</em:maxVersion>
  </Description>
</em:targetApplication>
</pre>


* Add the [https://developer.mozilla.org/en/XULRunner_tips startDOMi function] to /browser/metro/base/content/browser.js.
Add-ons are not yet enabled by default in Firefox for Metro, because we have not yet built the UI for users to enable/disable/install/remove add-ons. (We will do this in a future version.) For now, developers and testers can use the following steps to allow Metro Firefox to load add-ons:
* Add a call to startDOMi() below the BrowserUI.init() call.
* Tweak the following extension prefs in metro.js:
<pre>
pref("extensions.autoDisableScopes", 15);
pref("extensions.minCompatibleAppVersion", "4.0");
pref("extensions.strictCompatibility", false);
</pre>


* The extensions.sqlite database file will be created the first time MetroFirefox is run and discovers the inspector@mozilla.org extension content in the profile, but you have to flip a couple of values to make it actually work. Using your favorite sqlite tool (the [https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/ SQLite Manager Add-on] works), find the inspector's entry in the 'addon' table and set the 'active' field to integer 1, and the userDisabled field to integer value 0.
* Open Firefox for Metro.
* Go to "about:config" and set "extensions.defaultProviders.enabled" to "true".
* Restart Firefox for Metro.


=== Venkman Debugger ===
You can then use Firefox for desktop to install, manage, and remove add-ons.  The add-ons that you install in desktop will load in Metro Firefox if they are also marked compatible with the Metro UI.  If you are an extension developer, you can make your add-on compatible with Metro Firefox by adding a targetApplication to your install.rdf file with "id" set to {99bceaaa-e3c6-48c1-b981-ef9b46b67d60}.  (Metro Firefox will also load extensions with a targetApplication of toolkit@mozilla.org, which are compatible with all XUL applications.)


(10/5/12 - Note, since we've changed the app id, this probably doesn't work.)
=== DOM Inspector ===


* Copy the '{f13b157f-b174-47e7-a34d-4815ddfdfeb8}' xpi under your Firefox profile's extension directory over to your MetroFirefox profile extensions directory.
Follow these directions to make the [https://addons.mozilla.org/en-US/firefox/addon/dom-inspector-6622/ DOM Inspector] add-on work in Metro:


* Launch the browser with the '-venkman' command line option.
* Follow the steps above to [[#Enable Add-ons]] and install DOM Inspector using Firefox for desktop.
* Add the [https://developer.mozilla.org/en/XULRunner_tips startDOMi function] to /browser/metro/base/content/browser.js.


=== JS Shell ===
=== Crash Testing ===


For debugging the ede js shell and javascript console are available on the app bar in desktop builds.
To test the Crash Reporter UI and other crash-related behavior, you can make use of install the [http://people.mozilla.com/~tmielczarek/crashme/ Crash Me addon] (sources are on [http://code.google.com/p/crashme/ Google Code].) This extension is already Metro Firefox ready, so you can install it using the steps in [[#Enable Add-ons]] above.


=== WinRT Compiler Generated Code ===
* While in Metro mode, go to about:config and make sure both 'app.crashreporter.prompted' and 'app.crashreporter.autosubmit' preferences are set to false
 
* Open the "Settings" charm and choose the "Crash Now" entry.  Tap/click it to crash.
Compiler switches:
* Restart Metro. You should see the crash dialog as shown here: [https://bug903426.bugzilla.mozilla.org/attachment.cgi?id=8343538 screenshot]
* /d1ZWtokens - dump C++ code generated code for C++/CX.  
* /d1reportAllClassLayout - dump class layouts
* /d1reportSingleClassLayoutXXX - where XXX performs substring matches against the class name.


=== Remote Debugging with a VM ===
=== Remote Debugging with a VM ===
Line 293: Line 301:
Setup steps -
Setup steps -


* Install Win8 on the tablet, use the same login/password you use on the workstation you'll be debugging from.
* In Explorer on the tablet purge any unused space on C, including old Windows installation files, using the system file cleanup option under the drive's properties panel.
* From Explorer purge any unused space on C, including old Windows installation files using the system file cleanup option under the drive's properties panel.
* From Control Panel, bring up the disk manager and split the main disk partition into two. A 20GB partition for mozilla related bits is suitable.
* From Control Panel, bring up the disk manager and split the main partition into two. A 80GB/20GB split is suitable.
* Format the second partition and designate a drive letter for it. Use a drive letter your debugging workstation does not use.
* Format the second partition and designate a drive letter for it. Use a drive letter your main workstation doesn't use.
* Right-click the new mozilla drive in Explorer and select Share. Share the volume using your login credentials or you can also openly share to "Everyone" if your local network is secure. Set permissions on the share to full access.
* Right-click the new drive in Explorer and select Share. Share this volume for your login credentials, you can also openly share it to everyone if your local network is secure. Set permissions on the share to full access.
* On your main workstation browse to the tablet share and map it to a local drive using the same drive letter you used for the tablet drive. This insures object source has the same path info on both machines.
* On your main workstation, map the tablet share to a local drive. Use the same drive letter for both the tablet drive and the mapped workstation drive. This insures object source has the same path info.
* Install Visual Studio and mozilla-build on the tablet.
* Checkout Elm on the second drive of the tablet, build and register the browser.
* Checkout mozilla-central on the mozilla partition of the tablet, then build and register the browser.
* On the tablet, Start + ‘debug’ should bring up remote debug tools folder – run the x64 version if on 64 bit os, x86 otherwise.
* On the tablet, Start + ‘debug’ should bring up a remote debug tools folder via search, open this and launch the remote debug monitor. Run the x64 version if on 64 bit os, x86 otherwise. (Pin this to your start menu for easy access.)
* On the workstation, create a debugging project for the tablet, set debug settings as follows:
* Under the monitor's tools menu, add permission for your login credentials or "Everyone" for remote debugging.
* On the workstation, create a blank C++ debugging project for the tablet, set debug settings as follows:
** Remote command: (common  letter drive):\(path to obj dir)\dist\bin\firefox.exe
** Remote command: (common  letter drive):\(path to obj dir)\dist\bin\firefox.exe
** Working dir – same
** Working dir – same
Line 307: Line 316:
** Attach: Yes
** Attach: Yes


After this you should be able to launch the browser on the tablet and attach to it from Visual Studio on your workstation. You should also be able to browse source on the networked drive, set break points, etc., just like a local debug session.
After this you should be able to launch the browser on the tablet and attach to it from Visual Studio on your workstation. You should also be able to browse source on the networked drive, set break points, etc., just like a local debug session. Most debug output the browser spits out should be transferred over to the remote debugger.


=== Diagnosing Startup Problems ===
Note you might have to fiddle with access permissions a bit. Opening everything up to Everyone saves a lot of time, but might not be the most secure environment, depending on your situation.


Due to the embedded nature of metro browsers, diagnosing startup problems can be a bit of a pain. There are a few things you can do to help devs figure out what's going wrong.
=== Diagnosing Launch Issues ===


<b>
The CEH handles program launch on Windows 8. It's a small win32 program that Explorer launches when the browser is invoked. If issues arise, there are some debugging features built into the program to help diagnose issues.
1) Launch the metro browser interface on desktop to confirm the install is working.
</b>


* Navigate to firefox's install location in explorer
* Open regedit.exe and browse to HKEY_CURRENT_USER/Software/Mozilla/Firefox
* Hold shift, right-click the folder with firefox.exe and select open command prompt.
* Add a new DWORD value names 'CEHDump', value 01
* in the prompt type 'firefox.exe -metrodesktop'
* Run a debug output viewer such as [http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx DebugView].
* Launch the browser.


The metro front end should launch in a window on the desktop. If not, try uninstalling and re-installing. If that doesn't help, please file a bug.
Output from the ceh and launch info from the browser will get dumped to DebugView. You can save this logging info out via the DebugView file menu and post it to bugs for diagnosis.


<b>
To turn off debug output for the CEH, change the registry value from 01 to 00, or delete the CEHDump key.
2) Check Direct3D start up check results
</b>


Using regedit.exe, check under the following key for a value named 'MetroD3DAvailable':
=== Localized Build ===


HKEY_CURRENT_USER\SOFTWARE\Mozilla\Firefox
Language Pack extensions are not yet enabled by default in Firefox for Metro, but you can use l10n binary repack method described [https://developer.mozilla.org/en/docs/Creating_a_Language_Pack here] to get localized build.


If the value is 0, Direct3D startup checks failed. Please file a bug, and post the Graphics section of your desktop browser's about:support section to the bug. If there is no value, please file a bug. If the value is 1, startup checks succeeded.
To create localized binary repack for ''x-testing'' locale that is based on current sources from Mozilla Central create package locally via [https://developer.mozilla.org/en-US/docs/pymake Pymake] instead of downloading it from Mozilla's ftp servers.  


<b>
<pre>
3) Check for submitted crashes reports
$ cd ../firefox-build
</b>
$ pymake package
$ cd ../firefox-build/browser/locales
$ pymake unpack
$ pymake merge-x-testing LOCALE_MERGEDIR=$(PWD)/mergedir
$ pymake installers-x-testing LOCALE_MERGEDIR=$(PWD)/mergedir
</pre>


To check if metro fx is generating and submitting crash reports open explorer to the following path:
Your localized repack will be available at ''../firefox-build/dist'' folder.


C:\Users\(youraccount)\AppData\Roaming\Mozilla\MetroFirefox\Crash Reports\submitted\
Appropriate l10n sources (to use with --with-l10n-base parameter in .mozconfig) can be downloaded from the following locations:


If the folder exists and contains text files please file a bug and copy the contents of a few of the most recent files into the bug.
* [http://hg.mozilla.org/l10n-central/ http://hg.mozilla.org/l10n-central/x-testing]
* [http://hg.mozilla.org/releases/l10n/mozilla-aurora/ http://hg.mozilla.org/releases/l10n/mozilla-aurora/x-testing]
* [http://hg.mozilla.org/releases/l10n/mozilla-beta/ http://hg.mozilla.org/releases/l10n/mozilla-beta/x-testing]
* [http://hg.mozilla.org/releases/l10n/mozilla-release/ http://hg.mozilla.org/releases/l10n/mozilla-release/x-testing]


<b>
Please note that you may need to install [https://developer.mozilla.org/en/docs/Compare-locales compare-locale] python script to successfully perform merge locale step.
4) Check for unsubmitted crashes reports
</b>


Metro firefox can not submit crashes for analysis unless the browser fully starts ({{bug|797023}}).
== Testing Harness ==


To check if metro fx is crashing on startup, open explorer to the following path:
Builds generate a test harness (dist/bin/metrotestharness.exe) that can be used to launch the metro browser into the immersive environment. This harness is also packed up with the test zips used in automation testing.


C:\Users\(youraccount)\AppData\Roaming\Mozilla\MetroFirefox\Crash Reports\
Metro Firefox can't accept standard command line parameters since it must be launched by Windows. The harness acts as a pass through for mozilla command line parameters firefox.exe can accept. Incoming params are written out to an ini file @ dist/bin and read in via [http://mxr.mozilla.org/mozilla-central/source/browser/app/nsBrowserApp.cpp nsBrowserApp] when the browser starts up.


In this folder look for two files:
By default the test harness assumes the default browser (firefox.exe) is in the same folder metrotestharness.exe is located. If you want to launch the default browser at a different location from metrotestharness.exe, you must specify a firefox path using -firefoxpath (fullpath):


LastCrash lastCrashFilename
<pre>metrotestharness.exe -firefoxpath T:\Mozilla\objmcrel\dist\bin\ -url www.mozilla.org</pre>


If both files are present, delete them, and try restarting Metro Firefox again. After doing this, check the folder again. If the files return, a startup crash is likely.
The test harness will need *write* permission to this location to write out a command line arg ini file.


There are two things you can do t this point to help diagnose the problem:
[http://mxr.mozilla.org/mozilla-central/source/browser/metro/shell/testing/metrotestharness.cpp harness source]


<b>Option 1</b>: Use Desktop Firefox to submit the crash report to Mozilla's crash server -
== Using Devtools ==


* open lastCrashFilename with notepad.exe
See [https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging/Firefox_for_Metro Remotely debugging Firefox for Metro] on MDN for instructions.
* copy the temp path and note the file name of the crash report
* open the temp path in explorer and locate the two files associated with the report.


There will be two files, both will have the same file name (a uuid string) and the extensions .dmp and .extra.
Notes:


* shutdown desktop firefox if it is running
* I usually pair on localhost, using an external monitor so I can see metrofx & classicfx at the same time.
* In explorer, copy both files from their location into the follow folder:
* If you are using localhost without an external monitor, beware of windows suspending the metrofx while its waiting for the incoming connection. This will cause the pairing to fail.  In Windows 8.1 you can use split-screen to keep the desktop and the Metro browser visible at the same time.
* While you can pair classic/metrofx running out of the same obj dir, I frequently experienced unexpected hangs and crashes as a result.
* if you close the devtools window, this usually results in the metro browser shutting down


C:\Users\(youraccount)\AppData\Roaming\Mozilla\Firefox\Crash Reports\pending\
=== Using DevTools Profiler ===


* start Desktop Firefox.
* Follow all the set up instructions above to get the prefs set right for dev tools / remote debugging.
* Navigate to 'about:crashes'.
* In classic install the profiler extension from: https://github.com/bgirard/Gecko-Profiler-Addon/raw/master/geckoprofiler.xpi
* find the uuid of the report you copied and click on its link
** Note, by default this extension starts with profiling turned on (for the local build). The toolbar icon will be colored when profiling is active, grayed when off. It's best to keep this extension disabled when not in use.
* In classic set the pref 'profiler.threads' and 'profiler.stackwalk' to true.
* Restart classic
* From the toolbar button dropdown, select TCP, enter the metro browser's ip address, and click connect. You should get a remote connection warning in the metro browser.
* click the 'analyze' button and wait for the profile view to load. (This may take a while without updating the in tab ui. Give it time.)
* After you have finishes collecting data, click 'stop' and wait for the button label to update from 'stop' to 'start'.


If the link does not resolve to a crash server crash report immediately, wait a few minutes and try again. Once the link resolves, file a bug and copy the report's link into the bug report.
For additional detail read {{bug|886555}} on getting things going.


<b>Option 2</b>:
For reference: [https://developer.mozilla.org/en-US/docs/Performance/Profiling_with_the_Built-in_Profiler Profiler Wiki].


File a bug and contact a dev. who you can share your crash report with. Note crash reports can contain user specific info, do not submit these files to bugzilla as attachments.
=== Profiling Local Builds ===


<b>
Profiles generated using the above config will have os symbols when working with nightly builds on the metro device. For profiling local builds, you'll need to follow [https://developer.mozilla.org/en-US/docs/Performance/Profiling_with_the_Built-in_Profiler_and_Local_Symbols_on_Windows these instructions] on setting up and configuring a local snappy symbol server.
4) Logging startup
</b>


..
Example snappy symbol server config:
<pre>
[General]
hostname = 127.0.0.1
portNumber = 8000
enableTracing = 1
remoteSymbolServer = http://symbolapi.mozilla.org:80/
maxCacheEntries = 20000000
prefetchInterval = 12
prefetchThreshold = 48
prefetchMaxSymbolsPerLib = 500
defaultApp = Firefox
defaultOs = Windows


<b>
[SymbolPaths]
5) CEH logging
Firefox = T:\Mozilla\MC-REL\dist\crashreporter-symbols\
</b>
Windows = T:\Temp
 
</pre>
..
 
== Hardware ==
 
[https://docs.google.com/spreadsheet/ccc?key=0AowtJTCuyojddHpMeDV5czhDMkU0bFBKTktQLUhkbnc Asa's Google Docs list of Win8 touch friendly hardware]
 
== Samsung Series 7 ==
 
The Series seven is the first device we started developing with. Details below on getting the hardware set up with Windows 8.
 
* To order, file a bug under mozilla.org, Server Operations: Desktop Issues. See {{bug|738613}}, CC your PM or Asa.
 
* Once you have the tablet, dock, and keyboard, unpack. Charge up the device. It'll be running Win7, ignore all the default software.
 
* Download the 64-bit (3.6 gig) Win8 ISO from \\fs2\IT\Microsoft. Add your name to the list of people who will need product keys in {{bug|783811}}. Burn the ISO to a suitable memory stick. For burning on Windows you'll need to download and install the [http://www.microsoftstore.com/store/msstore/html/pbPage.Help_Win7_usbdvd_dwnTool Windows 7 USB DVD Download Tool] from Microsoft. For burning on mac?
 
* Once you have the ISO burned, plug the USB stick into the tablet's dock. Browse to the USB drive and run "setup.exe". When prompted choose that you want to save nothing from the previous install.
 
* Samsung provides an instruction manual on hooking up the Bluetooth keyboard. You can do this after you've installed Win8 as the Win7 desktop instructions are applicable on Win8 desktop.


* After the tablet is set up, download Firefox nightly or build a local copy and start debugging!
If you run into problems resolving xul symbols, try restarting the symbol server and generating a new profile. Also make sure prefetchMaxSymbolsPerLib in the ini is set to a large value.


=== Firmware Updates ===
Note, for switching back to nightly profiling, set the default symbol server url in classic back to http://symbolapi.mozilla.org/.


For more precise touch input, especially with tap and hold, install the "Touch Screen Sensor Firmware Configuration Updater Tool". Updating the system bios from 7 to 10 doesn't hurt either. Make sure to reboot the system after the install.
== Development and Planning Notes ==
 
[http://www.samsung.com/global/windowspreview/ Samsung Link]
 
=== Samsung Series 7 Tweaks ===
 
* To fix auto changing brightness problems for wipe Win8 installs:
** Open desktop
** click/tap on the battery icon in the taskbar, select "More power options"
** Select your current power plan or create a new plan via the link on the left.
** Under the power plan select "Change advanced power settings"
** scroll down to "Display" and expand
** Find the sub-option "Enable adaptive brightness" and expand
** disable both options under this sub-option
 
== Metro Planning ==


(Older content from the original planning stage)
(Older content from the original planning stage)
Line 439: Line 432:
This is summary of our work / planning for a Win8 Metro browser. For testing purposes we have been working with the /mobile/xul Fennec browser. Moving forward we would like to take the base Fennec XUL code and Metro specific code we've already developed (currently on Elm with some build related work already on mc) and integrate this in with the default Firefox build and install.  
This is summary of our work / planning for a Win8 Metro browser. For testing purposes we have been working with the /mobile/xul Fennec browser. Moving forward we would like to take the base Fennec XUL code and Metro specific code we've already developed (currently on Elm with some build related work already on mc) and integrate this in with the default Firefox build and install.  


We are interested in getting as much feedback as possible from stake holders and from people who have worked with these newer platforms. If you have Win8 up and running in a vm or on a test system, there are details here on how to get builds going, how to register the browser, and test builds for installing.
* [https://bugzilla.mozilla.org/buglist.cgi?resolution=---;op_sys=Windows%208%20Metro;query_format=advanced;list_id=2566518 Metro specific bug list]
* [http://piercedotzler.com/asa/Developing_a_Metro-Style_Enabled_Desktop_Browser.html#_Toc318127097 Developing Metro Style Enabled Desktop Browsers]
* [http://piercedotzler.com/asa/Developing_a_Metro-Style_Enabled_Desktop_Browser.html#_Toc318127097 Developing Metro Style Enabled Desktop Browsers]


Line 447: Line 437:


By in large platform was a nice fit for Metro. We ran into surprisingly few problems. It took us about a week to get a basic version of Fennec running in the environment and most of that time was spent combing through the registration/integration doc Microsoft sent us. Below are some specific details on the areas of the repo we are currently leveraging.
By in large platform was a nice fit for Metro. We ran into surprisingly few problems. It took us about a week to get a basic version of Fennec running in the environment and most of that time was spent combing through the registration/integration doc Microsoft sent us. Below are some specific details on the areas of the repo we are currently leveraging.
<strong>nsBrowserApp</strong>
<strike>Currently using fennec’s nsBrowserApp.</strike>
<strong>chrome interface markup and css</strong> (different)


Metro apps are single window applications. The current desktop UI does not fit this new environment. There are no secondary windows we create. Secondary UI (file pickers, warnings, message boxes, toasts) are all displayed and managed by the os. The interfaces to these features are also async. We will provide interfaces for invoking these. Some have already been integrated on Elm (file picker for example).
Metro apps are single window applications. The current desktop UI does not fit this new environment. There are no secondary windows we create. Secondary UI (file pickers, warnings, message boxes, toasts) are all displayed and managed by the os. The interfaces to these features are also async. We will provide interfaces for invoking these. Some have already been integrated on Elm (file picker for example).


<strong>browser comps</strong> (different)
Due to the differences in view model most of /browser components code can’t be leveraged. Fennec's script based components are currently in use. [http://mxr.mozilla.org/mozilla-central/source/browser/metro/components/]
 
<strong>dictionaries, hyphenation, res, searchplugins, extensions, plugins</strong> (shared)
 
Due to the differences in view model most of /browser components code can’t be leveraged. Fennec's script based components are currently in use. [http://mxr.mozilla.org/mozilla-central/source/mobile/xul/components/]


The current metro browser leverages the Fennec front end app code but we could switch to firefox’s code base and enable / augment what we need for metro.
The current metro browser leverages the Fennec front end app code but we could switch to firefox’s code base and enable / augment what we need for metro.
Line 482: Line 462:
Generally we’re currently leveraging a majority of our common code base without issue. Threading, timers, networking, ssl, layout, gfx, etc. have all fit in really well. Misc. detail -  
Generally we’re currently leveraging a majority of our common code base without issue. Threading, timers, networking, ssl, layout, gfx, etc. have all fit in really well. Misc. detail -  


* gfx - not currently using accelerated layers but plan to in the near future. The surface rendered to in Metro is D2D and there is no GDI fallback. As such there are some issues with blacklisted hardware.
* gfx - The surface rendered to in Metro is D2D and there is no GDI fallback. As such there are some issues with blacklisted hardware.
* e10s - currently using Fennec’s out of process tabs.
* e10s - Currently using in-process content (no child processes).
* Accessibility - not integrated yet.
* Accessibility - not integrated yet.
* Netwerk - no issues.
* Netwerk - no issues.
Line 492: Line 472:
* toolkit - very little of this is in use. Crash reporter UI will need work/integration.
* toolkit - very little of this is in use. Crash reporter UI will need work/integration.
* xpcom - no issues.
* xpcom - no issues.
=== A tentative proposal ===
* Copy mobile/xul code down to browser level in /browser/metro.
* Integrate metro startup into firefox's nsBrowserApp {{bug|747347}}.
* Integrate building this new area into the current desktop firefox build. {{bug|747347}}
* Fixup the firefox installer so that we bring both browsers down in a single unified windows install. {{bug|737833}}
* Share the runtime between the two apps in the install. <strong>[completed]</strong>
* Have nsBrowserApp communicate to xul lib what environment we are running in. <strong>[completed]</strong>
* Dynamically switch out which code path we want in xul lib where necessary. <strong>[completed]</strong>
* Organize dist interface code and browser comps such that desktop firefox install layout remains unchanged. Layer metro specific resources down in such a way that the two sets of resources do not conflict. {{bug|755724}}
* <strike>Share a single profile between both browsers</strike> or Sync two profiles on the same machine.
Elm to mozilla-central migration tracking bug: {{bug|747347}}


==== Pros and Cons ====
==== Pros and Cons ====
Line 519: Line 485:
=== Big Issues ===
=== Big Issues ===


* Windows XP - The current VC11 Beta redist runtime is not compatible with XP. ({{bug|744942}})
* Windows XP - The current VC11 Beta redist runtime is not compatible with XP. (<strike>{{bug|744942}}</strike> - FIXED)
* Profiles – Certain areas of the user’s profile will need to be shared between two concurrently running browser apps. We’ve just begun exploring ways to do this. Potential solution might involve a mysql database connection shim that leverages a profile broker and IPC so both browsers can talk to the same profile. We also might consider using Sync. There are some hurdles here to overcome. <strong>[A decision was made to use Sync initially.]</strong>
* Profiles – Certain areas of the user’s profile will need to be shared between two concurrently running browser apps. We’ve just begun exploring ways to do this. Potential solution might involve a mysql database connection shim that leverages a profile broker and IPC so both browsers can talk to the same profile. We also might consider using Sync. There are some hurdles here to overcome. <strong>[A decision was made to use Sync initially.]</strong>
* Accessibility - This area of the code base will be in heavy use in the Metro environment with touch interfaces. Our accessibility code will require performance work and may require a new UI Automation adapter since Win8 leverages UI Automation exclusively.
* Accessibility - This area of the code base will be in heavy use in the Metro environment with touch interfaces. Our accessibility code will require performance work and may require a new UI Automation adapter since Win8 leverages UI Automation exclusively.
9

edits