Backed out changeset 061b9318815b (bug 846906) for accidentally removing mach.
authorRyan VanderMeulen <ryanvm@gmail.com>
Thu, 04 Apr 2013 10:42:28 -0400
changeset 127672 6b8868104188d18eaff56400e29e2f4f79ea12de
parent 127671 bc837398007ef62e7e7669158651daa4632e6111
child 127673 d5d98779e4011050ebb5171f06aa0da9f2709c29
push id1477
push uservporof@mozilla.com
push dateSun, 07 Apr 2013 09:12:54 +0000
treeherderfx-team@5e01908df6d7 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs846906
milestone23.0a1
backs out061b9318815bcdaaded4cb49a63e8f2adf313d9a
Backed out changeset 061b9318815b (bug 846906) for accidentally removing mach.
docshell/test/chrome/Makefile.in
docshell/test/chrome/test_bug846906.xul
mach
widget/xpwidgets/PuppetWidget.cpp
xpfe/appshell/public/nsIAppShellService.idl
xpfe/appshell/src/nsAppShellService.cpp
--- a/docshell/test/chrome/Makefile.in
+++ b/docshell/test/chrome/Makefile.in
@@ -92,17 +92,16 @@ MOCHITEST_CHROME_FILES =	\
 		bug311007_window.xul \
 		test_principalInherit.xul \
 		test_mozFrameType.xul \
 		mozFrameType_window.xul \
 		test_bug789773.xul \
 		test_private_hidden_window.html \
     docshell_helpers.js \
     generic.html \
-    test_bug846906.xul \
     $(NULL)
 
 ifneq ($(MOZ_WIDGET_TOOLKIT),gtk2)
 MOCHITEST_CHROME_FILES += \
 		test_bug454235.xul \
 		$(NULL)
 else
 $(filter disabled-temporarily--bug-684176, test_bug454235.xul)
deleted file mode 100644
--- a/docshell/test/chrome/test_bug846906.xul
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
-<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=846906
--->
-<window title="Mozilla Bug 846906"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <title>Test for Bug 846906</title>
-  <script type="application/javascript"
-          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-
-  <!-- test code goes here -->
-  <script type="application/javascript">
-  <![CDATA[
-
-  /** Test for Bug 846906 **/
-  SimpleTest.waitForExplicitFinish();
-
-  var appShellService = Components.classes["@mozilla.org/appshell/appShellService;1"]
-                                  .getService(Components.interfaces.nsIAppShellService);
-  ok(appShellService, "Should be able to get app shell service");
-
-  var webNavigation = appShellService.createWindowlessBrowser();
-  ok(webNavigation, "Should be able to create windowless browser");
-
-  var interfaceRequestor = webNavigation.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
-  ok(interfaceRequestor, "Should be able to query interface requestor interface");
-
-  var docShell = interfaceRequestor.getInterface(Components.interfaces.nsIDocShell);
-  ok(docShell, "Should be able to get doc shell interface");
- 
-  var webNavigation = docShell.QueryInterface(Components.interfaces.nsIWebNavigation);
-  ok(webNavigation, "Should be able to query web navigation interface");
-
-  var document = webNavigation.document;
-  ok(document, "Should be able to get document");
-
-  var iframe = document.createElement("iframe");
-  ok(iframe, "Should be able to create iframe");
-
-  iframe.onload = function () {
-    ok(true, "Should receive initial onload event");
-
-    iframe.onload = function () {
-        ok(true, "Should receive onload event");
-
-        var contentDocument = iframe.contentDocument;
-        ok(contentDocument, "Should be able to get content document");
-
-        var div = contentDocument.getElementById("div1");
-        ok(div, "Should be able to get element by id");
-
-        var rect = div.getBoundingClientRect();
-        ok(rect, "Should be able to get bounding client rect");
-
-        // xxx: can we do better than hardcoding these values here?
-        ok(rect.left == 8);
-        ok(rect.right == 477);
-        ok(rect.top == 8);
-        ok(rect.bottom == 1010);
-
-        SimpleTest.finish();
-    };
-    iframe.setAttribute("src", "http://mochi.test:8888/chrome/docshell/test/chrome/generic.html");
-  };
-  document.documentElement.appendChild(iframe);
-    
-  ]]>
-  </script>
-
-  <!-- test results are displayed in the html:body -->
-  <body xmlns="http://www.w3.org/1999/xhtml">
-  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=846906"
-     target="_blank">Mozilla Bug 846906</a>
-  </body>
-</window>
new file mode 100644
--- /dev/null
+++ b/mach
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from __future__ import print_function, unicode_literals
+
+import os
+import sys
+
+def ancestors(path):
+    while path:
+        yield path
+        (path, child) = os.path.split(path)
+        if child == "":
+            break
+
+def load_mach(topsrcdir):
+    sys.path[0:0] = [os.path.join(topsrcdir, "build")]
+    import mach_bootstrap
+    return mach_bootstrap.bootstrap(topsrcdir)
+
+# Check whether the current directory is within a mach src or obj dir.
+for dir_path in ancestors(os.getcwd()):
+    # If we find a "mozinfo.json" file, we are in the objdir.
+    mozinfo_path = os.path.join(dir_path, "mozinfo.json")
+    if os.path.isfile(mozinfo_path):
+        import json
+        info = json.load(open(mozinfo_path))
+        if "mozconfig" in info and "MOZCONFIG" not in os.environ:
+            # If the MOZCONFIG environment variable is not already set, set it
+            # to the value from mozinfo.json.  This will tell the build system
+            # to look for a config file at the path in $MOZCONFIG rather than
+            # its default locations.
+            #
+            # Note: subprocess requires native strings in os.environ Python
+            # 2.7.2 and earlier on Windows.
+            os.environ[b"MOZCONFIG"] = str(info["mozconfig"])
+
+        if "topsrcdir" in info:
+            # Continue searching for mach_bootstrap in the source directory.
+            dir_path = info["topsrcdir"]
+
+    # If we find the mach bootstrap module, we are in the srcdir.
+    mach_path = os.path.join(dir_path, "build/mach_bootstrap.py")
+    if os.path.isfile(mach_path):
+        mach = load_mach(dir_path)
+        sys.exit(mach.run(sys.argv[1:]))
+
+print("Could not run mach: No mach source directory found")
+sys.exit(1)
--- a/widget/xpwidgets/PuppetWidget.cpp
+++ b/widget/xpwidgets/PuppetWidget.cpp
@@ -31,17 +31,17 @@ InvalidateRegion(nsIWidget* aWidget, con
   while(const nsIntRect* r = it.Next()) {
     aWidget->Invalidate(*r);
   }
 }
 
 /*static*/ already_AddRefed<nsIWidget>
 nsIWidget::CreatePuppetWidget(TabChild* aTabChild)
 {
-  NS_ABORT_IF_FALSE(!aTabChild || nsIWidget::UsePuppetWidgets(),
+  NS_ABORT_IF_FALSE(nsIWidget::UsePuppetWidgets(),
                     "PuppetWidgets not allowed in this configuration");
 
   nsCOMPtr<nsIWidget> widget = new PuppetWidget(aTabChild);
   return widget.forget();
 }
 
 namespace mozilla {
 namespace widget {
--- a/xpfe/appshell/public/nsIAppShellService.idl
+++ b/xpfe/appshell/public/nsIAppShellService.idl
@@ -1,17 +1,16 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsISupports.idl"
 
 interface nsIXULWindow;
-interface nsIWebNavigation;
 interface nsIURI;
 interface nsIDOMWindow;
 interface nsIAppShell;
 
 [ptr] native JSContext(JSContext);
 
 %{C++
 struct JSContext;
@@ -39,18 +38,16 @@ interface nsIAppShellService : nsISuppor
    */
   const long SIZE_TO_CONTENT = -1;
   nsIXULWindow createTopLevelWindow(in nsIXULWindow aParent,
                                     in nsIURI aUrl, 
                                     in uint32_t aChromeMask,
                                     in long aInitialWidth,
                                     in long aInitialHeight);
 
-  nsIWebNavigation createWindowlessBrowser();
-
   [noscript]
   void createHiddenWindow();
 
   void destroyHiddenWindow();
 
   /**
    * Return the (singleton) application hidden window, automatically created
    * and maintained by this AppShellService.
--- a/xpfe/appshell/src/nsAppShellService.cpp
+++ b/xpfe/appshell/src/nsAppShellService.cpp
@@ -41,20 +41,16 @@
 #include "nsIUnicodeDecoder.h"
 #include "nsIChromeRegistry.h"
 #include "nsILoadContext.h"
 #include "nsIWebNavigation.h"
 
 #include "mozilla/Preferences.h"
 #include "mozilla/StartupTimeline.h"
 
-#include "nsEmbedCID.h"
-#include "nsIWebBrowser.h"
-#include "nsIDocShell.h"
-
 using namespace mozilla;
 
 // Default URL for the hidden window, can be overridden by a pref on Mac
 #define DEFAULT_HIDDENWINDOW_URL "resource://gre-resources/hiddenWindow.html"
 
 class nsIAppShell;
 
 nsAppShellService::nsAppShellService() : 
@@ -202,172 +198,16 @@ nsAppShellService::CreateTopLevelWindow(
     if (aChromeMask & nsIWebBrowserChrome::CHROME_DEPENDENT)
       parent = aParent;
     (*aResult)->SetZLevel(CalculateWindowZLevel(parent, aChromeMask));
   }
 
   return rv;
 }
 
-/*
- * This class provides a stub implementation of nsIWebBrowserChrome2, as needed
- * by nsAppShellService::CreateWindowlessBrowser
- */
-class WebBrowserChrome2Stub : public nsIWebBrowserChrome2,
-                              public nsIInterfaceRequestor {
-public:
-    virtual ~WebBrowserChrome2Stub() {}
-    NS_DECL_ISUPPORTS
-    NS_DECL_NSIWEBBROWSERCHROME
-    NS_DECL_NSIWEBBROWSERCHROME2
-    NS_DECL_NSIINTERFACEREQUESTOR
-};
-
-NS_INTERFACE_MAP_BEGIN(WebBrowserChrome2Stub)
-  NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebBrowserChrome)
-  NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
-  NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome2)
-  NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
-NS_INTERFACE_MAP_END
-
-NS_IMPL_ADDREF(WebBrowserChrome2Stub)
-NS_IMPL_RELEASE(WebBrowserChrome2Stub)
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::SetStatus(uint32_t aStatusType, const PRUnichar* aStatus)
-{
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::GetWebBrowser(nsIWebBrowser** aWebBrowser)
-{
-  NS_NOTREACHED("WebBrowserChrome2Stub::GetWebBrowser is not supported");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::SetWebBrowser(nsIWebBrowser* aWebBrowser)
-{
-  NS_NOTREACHED("WebBrowserChrome2Stub::SetWebBrowser is not supported");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::GetChromeFlags(uint32_t* aChromeFlags)
-{
-  *aChromeFlags = 0;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::SetChromeFlags(uint32_t aChromeFlags)
-{
-  NS_NOTREACHED("WebBrowserChrome2Stub::SetChromeFlags is not supported");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::DestroyBrowserWindow()
-{
-  NS_NOTREACHED("WebBrowserChrome2Stub::DestroyBrowserWindow is not supported");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::SizeBrowserTo(int32_t aCX, int32_t aCY)
-{
-  NS_NOTREACHED("WebBrowserChrome2Stub::SizeBrowserTo is not supported");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::ShowAsModal()
-{
-  NS_NOTREACHED("WebBrowserChrome2Stub::ShowAsModal is not supported");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::IsWindowModal(bool* aResult)
-{
-  *aResult = false;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::ExitModalEventLoop(nsresult aStatus)
-{
-  NS_NOTREACHED("WebBrowserChrome2Stub::ExitModalEventLoop is not supported");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::SetStatusWithContext(uint32_t aStatusType,
-                                            const nsAString& aStatusText,
-                                            nsISupports* aStatusContext)
-{
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-WebBrowserChrome2Stub::GetInterface(const nsIID & aIID, void **aSink)
-{
-    return QueryInterface(aIID, aSink);
-}
-
-NS_IMETHODIMP
-nsAppShellService::CreateWindowlessBrowser(nsIWebNavigation **aResult)
-{
-  /* First, we create an instance of nsWebBrowser. Instances of this class have
-   * an associated doc shell, which is what we're interested in.
-   */
-  nsCOMPtr<nsIWebBrowser> browser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID);
-  if (!browser) {
-    NS_ERROR("Couldn't create instance of nsWebBrowser!");
-    return NS_ERROR_FAILURE;
-  }
-
-  /* Next, we set the container window for our instance of nsWebBrowser. Since
-   * we don't actually have a window, we instead set the container window to be
-   * an instance of WebBrowserChrome2Stub, which provides a stub implementation
-   * of nsIWebBrowserChrome2.
-   */
-  nsRefPtr<WebBrowserChrome2Stub> stub = new WebBrowserChrome2Stub();
-  if (!stub) {
-    NS_ERROR("Couldn't create instance of WebBrowserChrome2Stub!");
-    return NS_ERROR_FAILURE;
-  }
-  browser->SetContainerWindow(stub);
-
-  nsCOMPtr<nsIWebNavigation> navigation = do_QueryInterface(browser);
-
-  nsCOMPtr<nsIDocShellTreeItem> item = do_QueryInterface(navigation);
-  item->SetItemType(nsIDocShellTreeItem::typeContentWrapper);
-
-  /* A windowless web browser doesn't have an associated OS level window. To
-   * accomplish this, we initialize the window associated with our instance of
-   * nsWebBrowser with an instance of PuppetWidget, which provides a stub
-   * implementation of nsIWidget.
-   */
-  nsCOMPtr<nsIWidget> widget = nsIWidget::CreatePuppetWidget(nullptr);
-  if (!widget) {
-    NS_ERROR("Couldn't create instance of PuppetWidget");
-    return NS_ERROR_FAILURE;
-  }
-  widget->Create(nullptr, 0, nsIntRect(nsIntPoint(0, 0), nsIntSize(0, 0)),
-                 nullptr, nullptr);
-  nsCOMPtr<nsIBaseWindow> window = do_QueryInterface(navigation);
-  window->InitWindow(0, widget, 0, 0, 0, 0);
-  window->Create();
-
-  navigation.forget(aResult);
-  return NS_OK;
-}
-
 uint32_t
 nsAppShellService::CalculateWindowZLevel(nsIXULWindow *aParent,
                                          uint32_t      aChromeMask)
 {
   uint32_t zLevel;
 
   zLevel = nsIXULWindow::normalZ;
   if (aChromeMask & nsIWebBrowserChrome::CHROME_WINDOW_RAISED)