diff --git a/mozilla/browser/components/winhooks/Makefile.in b/mozilla/browser/components/winhooks/Makefile.in
deleted file mode 100755
index 86f9af6d610..00000000000
--- a/mozilla/browser/components/winhooks/Makefile.in
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# The contents of this file are subject to the Netscape Public
-# License Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.mozilla.org/NPL/
-#
-# Software distributed under the License is distributed on an "AS
-# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-# implied. See the License for the specific language governing
-# rights and limitations under the License.
-#
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is Netscape
-# Communications Corporation. Portions created by Netscape are
-# Copyright (C) 1998 Netscape Communications Corporation. All
-# Rights Reserved.
-#
-# Contributor(s):
-#
-
-DEPTH = ../../..
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-MODULE = winhooks
-LIBRARY_NAME = winhooks_s
-
-REQUIRES = \
- xpcom \
- string \
- dom \
- windowwatcher \
- intl \
- appshell \
- necko \
- layout \
- content \
- widget \
- imglib2 \
- gfx \
- locale \
- $(NULL)
-
-CPPSRCS = nsWindowsHooks.cpp
-
-FORCE_STATIC_LIB = 1
-
-include $(topsrcdir)/config/rules.mk
-
-JS_SET_BROWSER_COMPONENT = nsSetDefaultBrowser.js
-
-libs::
- $(INSTALL) $(srcdir)/$(JS_SET_BROWSER_COMPONENT) $(DIST)/bin/components
-
-clobber::
- rm -f $(DIST)/lib/$(LIBRARY_NAME).lib
- rm -f $(DIST)/bin/components/$(JS_SET_BROWSER_COMPONENT)
\ No newline at end of file
diff --git a/mozilla/browser/components/winhooks/dummyWindow.xul b/mozilla/browser/components/winhooks/dummyWindow.xul
deleted file mode 100755
index dc32e749ffc..00000000000
--- a/mozilla/browser/components/winhooks/dummyWindow.xul
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/mozilla/browser/components/winhooks/jar.mn b/mozilla/browser/components/winhooks/jar.mn
deleted file mode 100755
index 9f17c40f801..00000000000
--- a/mozilla/browser/components/winhooks/jar.mn
+++ /dev/null
@@ -1,4 +0,0 @@
-toolkit.jar:
- content/global/dummyWindow.xul (dummyWindow.xul)
-en-win.jar:
- locale/en-US/global-platform/nsWindowsHooks.properties (locale/nsWindowsHooks.properties)
diff --git a/mozilla/browser/components/winhooks/locale/nsWindowsHooks.properties b/mozilla/browser/components/winhooks/locale/nsWindowsHooks.properties
deleted file mode 100755
index e3848a3fb91..00000000000
--- a/mozilla/browser/components/winhooks/locale/nsWindowsHooks.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-yesButtonLabel=Yes
-noButtonLabel=No
-cancelButtonLabel=Cancel
-checkBoxLabel=Check at startup next time, too.
-promptText=%S is not currently set as your default browser. Would you like to make it your default browser?
-prefsLabel=Pr&eferences
diff --git a/mozilla/browser/components/winhooks/nsSetDefaultBrowser.js b/mozilla/browser/components/winhooks/nsSetDefaultBrowser.js
deleted file mode 100755
index 6ea30e9227b..00000000000
--- a/mozilla/browser/components/winhooks/nsSetDefaultBrowser.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Default Browser.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corp.
- * Portions created by the Initial Developer are Copyright (C) 2002
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Bill Law
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/* This file implements the nsICmdLineHandler interface. See nsICmdLineHandler.idl
- * at http://lxr.mozilla.org/seamonkey/source/xpfe/appshell/public/nsICmdLineHandler.idl.
- *
- * This component handles the startup command line argument of the form:
- * -setDefaultBrowser
- * by making the current executable the "default browser." It accomplishes
- * that via use of the nsIWindowsHooks interface (see implementation below).
- *
- * The module is registered under the contractid
- * "@mozilla.org/commandlinehandler/general-startup;1?type=setDefaultBrowser"
- *
- * The implementation consists of a JavaScript "class" named nsKillAll,
- * comprised of:
- * - a JS constructor function
- * - a prototype providing all the interface methods and implementation stuff
- *
- * In addition, this file implements an nsIModule object that registers the
- * nsSetDefaultBrowser component.
- */
-
-/* ctor
- */
-function nsSetDefaultBrowser() {
-}
-
-nsSetDefaultBrowser.prototype = {
-
- // nsICmdLineHandler interface
- get commandLineArgument() { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
- get prefNameForStartup() { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
-
- get chromeUrlForTask() {
- // First, get winhooks service.
- var winHooks = Components.classes[ "@mozilla.org/winhooks;1" ]
- .getService( Components.interfaces.nsIWindowsHooks );
-
- // Next, extract current settings (these are what the user
- // had previously checked on the Advanced/System pref panel).
- var settings = winHooks.settings;
-
- // Now, turn on all "default browser" settings.
- settings.isHandlingHTTP = true;
- settings.isHandlingHTTPS = true;
- settings.isHandlingHTML = true;
- settings.isHandlingXHTML = true;
-
- // Finally, apply the (new) settings.
- winHooks.settings = settings;
-
- // Now, get the cmd line service.
- var cmdLineService = Components.classes[ "@mozilla.org/appshell/commandLineService;1" ]
- .getService( Components.interfaces.nsICmdLineService );
-
- // See if "-setDefaultBrowser" was specified. The value will be "1" if
- // -setDefaultBrowser is in the service's list of cmd line arguments, and
- // null otherwise. -setDefaultBrowser will only be in the service's
- // arg list if the application was not already running. That's because
- // if it was already running, then the service reflects the arguments
- // that were specified when *that* process was started, *not* the ones
- // passed via IPC from the second instance.
- var option = cmdLineService.getCmdLineValue( "-setDefaultBrowser" );
- if (!option) {
- // Already running, so we don't have to worry about opening
- // another window, etc.
- throw Components.results.NS_ERROR_NOT_AVAILABLE;
- }
-
- // Return URL for dummy window that will auto-close. We do this rather
- // than throw NS_ERROR_NOT_AVAILABLE, which *should* work, because it
- // seems that if we don't open a window, we get a crash when trying to
- // release this (or some other) JS component during XPCOM shutdown.
- return "chrome://global/content/dummyWindow.xul";
- },
-
- get helpText() { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
- get handlesArgs() { return false; },
- get defaultArgs() { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
- get openWindowWithArgs() { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
-
- // nsISupports interface
-
- // This "class" supports nsICmdLineHandler and nsISupports.
- QueryInterface: function (iid) {
- if (!iid.equals(Components.interfaces.nsICmdLineHandler) &&
- !iid.equals(Components.interfaces.nsISupports)) {
- throw Components.results.NS_ERROR_NO_INTERFACE;
- }
- return this;
- },
-
- // This Component's module implementation. All the code below is used to get this
- // component registered and accessible via XPCOM.
- module: {
- // registerSelf: Register this component.
- registerSelf: function (compMgr, fileSpec, location, type) {
- var compReg = compMgr.QueryInterface( Components.interfaces.nsIComponentRegistrar );
- compReg.registerFactoryLocation( this.cid,
- "Default Browser Component",
- this.contractId,
- fileSpec,
- location,
- type );
- },
-
- // getClassObject: Return this component's factory object.
- getClassObject: function (compMgr, cid, iid) {
- if (!cid.equals(this.cid))
- throw Components.results.NS_ERROR_NO_INTERFACE;
-
- if (!iid.equals(Components.interfaces.nsIFactory))
- throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
-
- return this.factory;
- },
-
- /* CID for this class */
- cid: Components.ID("{C66E05DC-509C-4972-A1F2-EE5AC34B9800}"),
-
- /* Contract ID for this class */
- contractId: "@mozilla.org/commandlinehandler/general-startup;1?type=setDefaultBrowser",
-
- /* factory object */
- factory: {
- // createInstance: Return a new nsSetDefaultBrowser object.
- createInstance: function (outer, iid) {
- if (outer != null)
- throw Components.results.NS_ERROR_NO_AGGREGATION;
-
- return (new nsSetDefaultBrowser()).QueryInterface(iid);
- }
- },
-
- // canUnload: n/a (returns true)
- canUnload: function(compMgr) {
- return true;
- }
- }
-}
-
-// NSGetModule: Return the nsIModule object.
-function NSGetModule(compMgr, fileSpec) {
- return nsSetDefaultBrowser.prototype.module;
-}
diff --git a/mozilla/browser/components/winhooks/nsWindowsHooks.cpp b/mozilla/browser/components/winhooks/nsWindowsHooks.cpp
deleted file mode 100755
index d97693b0162..00000000000
--- a/mozilla/browser/components/winhooks/nsWindowsHooks.cpp
+++ /dev/null
@@ -1,891 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: NPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Bill Law
- * Syd Logan added turbo mode stuff
- * Joe Elwell
- * Håkan Waara
- * Aaron Kaluszka
- * Blake Ross
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the NPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the NPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef MAX_BUF
-#define MAX_BUF 4096
-#endif
-
-// Implementation utilities.
-#include "nsIDOMWindowInternal.h"
-#include "nsIServiceManager.h"
-#include "nsIPromptService.h"
-#include "nsIStringBundle.h"
-#include "nsIAllocator.h"
-#include "nsICmdLineService.h"
-#include "nsXPIDLString.h"
-#include "nsString.h"
-#include "nsMemory.h"
-#include "nsNetUtil.h"
-#include "nsWindowsHooksUtil.cpp"
-#include "nsWindowsHooks.h"
-#include
-#include
-#include
-
-// for set as wallpaper
-#include "nsIDocument.h"
-#include "nsIContent.h"
-#include "nsIDOMElement.h"
-#include "nsIDOMDocument.h"
-#include "nsIFrame.h"
-#include "nsIPresShell.h"
-#include "nsIImageLoadingContent.h"
-#include "imgIRequest.h"
-#include "imgIContainer.h"
-#include "gfxIImageFrame.h"
-
-#define RUNKEY "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
-
-// Objects that describe the Windows registry entries that we need to tweak.
-static ProtocolRegistryEntry
- http( "http" ),
- https( "https" ),
- ftp( "ftp" ),
- chrome( "chrome" ),
- gopher( "gopher" );
-const char *xhtmExts[] = { ".xht", ".xhtml", 0 };
-const char *htmExts[] = { ".htm", ".html", ".shtml", 0 };
-
-static FileTypeRegistryEntry
- xhtml( xhtmExts, "MozillaXHTML", "XHTML Document", "", "doc-file.ico"),
- mozillaMarkup( htmExts, "MozillaHTML", "HTML Document", "htmlfile", "doc-file.ico");
-
-// Implementation of the nsIWindowsHooksSettings interface.
-// Use standard implementation of nsISupports stuff.
-NS_IMPL_ISUPPORTS1( nsWindowsHooksSettings, nsIWindowsHooksSettings )
-
-nsWindowsHooksSettings::nsWindowsHooksSettings() {
-}
-
-nsWindowsHooksSettings::~nsWindowsHooksSettings() {
-}
-
-// Generic getter.
-NS_IMETHODIMP
-nsWindowsHooksSettings::Get( PRBool *result, PRBool nsWindowsHooksSettings::*member ) {
- NS_ENSURE_ARG( result );
- NS_ENSURE_ARG( member );
- *result = this->*member;
- return NS_OK;
-}
-
-// Generic setter.
-NS_IMETHODIMP
-nsWindowsHooksSettings::Set( PRBool value, PRBool nsWindowsHooksSettings::*member ) {
- NS_ENSURE_ARG( member );
- this->*member = value;
- return NS_OK;
-}
-
-// Macros to define specific getter/setter methods.
-#define DEFINE_GETTER_AND_SETTER( attr, member ) \
-NS_IMETHODIMP \
-nsWindowsHooksSettings::Get##attr ( PRBool *result ) { \
- return this->Get( result, &nsWindowsHooksSettings::member ); \
-} \
-NS_IMETHODIMP \
-nsWindowsHooksSettings::Set##attr ( PRBool value ) { \
- return this->Set( value, &nsWindowsHooksSettings::member ); \
-}
-
-// Define all the getter/setter methods:
-DEFINE_GETTER_AND_SETTER( IsHandlingHTML, mHandleHTML )
-DEFINE_GETTER_AND_SETTER( IsHandlingXHTML, mHandleXHTML )
-DEFINE_GETTER_AND_SETTER( IsHandlingHTTP, mHandleHTTP )
-DEFINE_GETTER_AND_SETTER( IsHandlingHTTPS, mHandleHTTPS )
-DEFINE_GETTER_AND_SETTER( ShowDialog, mShowDialog )
-DEFINE_GETTER_AND_SETTER( HaveBeenSet, mHaveBeenSet )
-
-
-// Implementation of the nsIWindowsHooks interface.
-// Use standard implementation of nsISupports stuff.
-NS_IMPL_ISUPPORTS2( nsWindowsHooks, nsIWindowsHooks, nsIWindowsRegistry )
-
-nsWindowsHooks::nsWindowsHooks() {
-}
-
-nsWindowsHooks::~nsWindowsHooks() {
-}
-
-// Internal GetPreferences.
-NS_IMETHODIMP
-nsWindowsHooks::GetSettings( nsWindowsHooksSettings **result ) {
- nsresult rv = NS_OK;
-
- // Validate input arg.
- NS_ENSURE_ARG( result );
-
- // Allocate prefs object.
- nsWindowsHooksSettings *prefs = *result = new nsWindowsHooksSettings;
- NS_ENSURE_TRUE( prefs, NS_ERROR_OUT_OF_MEMORY );
-
- // Got it, increment ref count.
- NS_ADDREF( prefs );
-
- // Get each registry value and copy to prefs structure.
- prefs->mHandleHTTP = BoolRegistryEntry( "isHandlingHTTP" );
- prefs->mHandleHTTPS = BoolRegistryEntry( "isHandlingHTTPS" );
- prefs->mHandleHTML = BoolRegistryEntry( "isHandlingHTML" );
- prefs->mHandleXHTML = BoolRegistryEntry( "isHandlingXHTML" );
- prefs->mShowDialog = BoolRegistryEntry( "showDialog" );
- prefs->mHaveBeenSet = BoolRegistryEntry( "haveBeenSet" );
-
-#ifdef DEBUG_law
-NS_WARN_IF_FALSE( NS_SUCCEEDED( rv ), "GetPreferences failed" );
-#endif
-
- return rv;
-}
-
-// Public interface uses internal plus a QI to get to the proper result.
-NS_IMETHODIMP
-nsWindowsHooks::GetSettings( nsIWindowsHooksSettings **_retval ) {
- // Allocate prefs object.
- nsWindowsHooksSettings *prefs;
- nsresult rv = this->GetSettings( &prefs );
-
- if ( NS_SUCCEEDED( rv ) ) {
- // QI to proper interface.
- rv = prefs->QueryInterface( NS_GET_IID( nsIWindowsHooksSettings ), (void**)_retval );
- // Release (to undo our Get...).
- NS_RELEASE( prefs );
- }
-
- return rv;
-}
-
-static PRBool misMatch( const PRBool &flag, const ProtocolRegistryEntry &entry ) {
- PRBool result = PR_FALSE;
- // Check if we care.
- if ( flag ) {
- // Compare registry entry setting to what it *should* be.
- if ( entry.currentSetting() != entry.setting ) {
- result = PR_TRUE;
- }
- }
-
- return result;
-}
-
-// isAccessRestricted - Returns PR_TRUE iff this user only has restricted access
-// to the registry keys we need to modify.
-static PRBool isAccessRestricted() {
- char subKey[] = "Software\\Mozilla - Test Key";
- PRBool result = PR_FALSE;
- DWORD dwDisp = 0;
- HKEY key;
- // Try to create/open a subkey under HKLM.
- DWORD rc = ::RegCreateKeyEx( HKEY_LOCAL_MACHINE,
- subKey,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &key,
- &dwDisp );
-
- if ( rc == ERROR_SUCCESS ) {
- // Key was opened; first close it.
- ::RegCloseKey( key );
- // Delete it if we just created it.
- switch( dwDisp ) {
- case REG_CREATED_NEW_KEY:
- ::RegDeleteKey( HKEY_LOCAL_MACHINE, subKey );
- break;
- case REG_OPENED_EXISTING_KEY:
- break;
- }
- } else {
- // Can't create/open it; we don't have access.
- result = PR_TRUE;
- }
-
- return result;
-}
-
-
-
-// Implementation of method that checks whether the settings match what's in the
-// Windows registry.
-NS_IMETHODIMP
-nsWindowsHooksSettings::GetRegistryMatches( PRBool *_retval ) {
- NS_ENSURE_ARG( _retval );
- *_retval = PR_TRUE;
- // Test registry for all selected attributes.
- if ( misMatch( mHandleHTTP, http )
- ||
- misMatch( mHandleHTTPS, https )
- ||
- misMatch( mHandleHTML, mozillaMarkup )
- ||
- misMatch( mHandleXHTML, xhtml ) ) {
- // Registry is out of synch.
- *_retval = PR_FALSE;
- }
- return NS_OK;
-}
-
-// Implementation of method that checks settings versus registry and prompts user
-// if out of synch.
-NS_IMETHODIMP
-nsWindowsHooks::CheckSettings( nsIDOMWindowInternal *aParent,
- PRBool *_retval ) {
- nsresult rv = NS_OK;
- *_retval = PR_FALSE;
-
- // Only do this once!
- static PRBool alreadyChecked = PR_FALSE;
- if ( alreadyChecked ) {
- return NS_OK;
- } else {
- alreadyChecked = PR_TRUE;
- // Don't check further if we don't have sufficient access.
- if ( isAccessRestricted() ) {
- return NS_OK;
- }
- }
-
- // Get settings.
- nsWindowsHooksSettings *settings;
- rv = this->GetSettings( &settings );
-
- if ( NS_SUCCEEDED( rv ) && settings ) {
- // If not set previously, set to defaults so that they are
- // set properly when/if the user says to.
- if ( !settings->mHaveBeenSet ) {
- settings->mHandleHTTP = PR_TRUE;
- settings->mHandleHTTPS = PR_TRUE;
- settings->mHandleHTML = PR_TRUE;
- settings->mHandleXHTML = PR_TRUE;
-
- settings->mShowDialog = PR_TRUE;
- }
-
- // If launched with "-installer" then override mShowDialog.
- PRBool installing = PR_FALSE;
- if ( !settings->mShowDialog ) {
- // Get command line service.
- nsCID cmdLineCID = NS_COMMANDLINE_SERVICE_CID;
- nsCOMPtr cmdLineArgs( do_GetService( cmdLineCID, &rv ) );
- if ( NS_SUCCEEDED( rv ) && cmdLineArgs ) {
- // See if "-installer" was specified.
- nsXPIDLCString installer;
- rv = cmdLineArgs->GetCmdLineValue( "-installer", getter_Copies( installer ) );
- if ( NS_SUCCEEDED( rv ) && installer ) {
- installing = PR_TRUE;
- }
- }
- }
-
- // First, make sure the user cares.
- if ( settings->mShowDialog || installing ) {
- // Look at registry setting for all things that are set.
- PRBool matches = PR_TRUE;
- settings->GetRegistryMatches( &matches );
- if ( !matches ) {
- // Need to prompt user.
- // First:
- // o We need the common dialog service to show the dialog.
- // o We need the string bundle service to fetch the appropriate
- // dialog text.
- nsCID bundleCID = NS_STRINGBUNDLESERVICE_CID;
- nsCOMPtr promptService( do_GetService("@mozilla.org/embedcomp/prompt-service;1"));
- nsCOMPtr bundleService( do_GetService( bundleCID, &rv ) );
-
- if ( promptService && bundleService ) {
- // Next, get bundle that provides text for dialog.
- nsCOMPtr bundle;
- nsCOMPtr brandBundle;
- rv = bundleService->CreateBundle( "chrome://global-platform/locale/nsWindowsHooks.properties",
- getter_AddRefs( bundle ) );
- rv = bundleService->CreateBundle( "chrome://global/locale/brand.properties",
- getter_AddRefs( brandBundle ) );
- if ( NS_SUCCEEDED( rv ) && bundle && brandBundle ) {
- nsXPIDLString text, label, shortName;
- if ( NS_SUCCEEDED( ( rv = brandBundle->GetStringFromName( NS_LITERAL_STRING( "brandShortName" ).get(),
- getter_Copies( shortName ) ) ) ) ) {
- const PRUnichar* formatStrings[] = { shortName.get() };
- if ( NS_SUCCEEDED( ( rv = bundle->FormatStringFromName( NS_LITERAL_STRING( "promptText" ).get(),
- formatStrings, 1, getter_Copies( text ) ) ) )
- &&
- NS_SUCCEEDED( ( rv = bundle->GetStringFromName( NS_LITERAL_STRING( "checkBoxLabel" ).get(),
- getter_Copies( label ) ) ) ) ) {
- // Got the text, now show dialog.
- PRBool showDialog = settings->mShowDialog;
- PRInt32 dlgResult = -1;
- // No checkbox for initial display.
- const PRUnichar *labelArg = 0;
- if ( settings->mHaveBeenSet ) {
- // Subsequent display uses label string.
- labelArg = label;
- }
- // Note that the buttons need to be passed in this order:
- // o Yes
- // o Cancel
- // o No
- rv = promptService->ConfirmEx(aParent, shortName, text,
- (nsIPromptService::BUTTON_TITLE_YES * nsIPromptService::BUTTON_POS_0) +
- (nsIPromptService::BUTTON_TITLE_CANCEL * nsIPromptService::BUTTON_POS_1) +
- (nsIPromptService::BUTTON_TITLE_NO * nsIPromptService::BUTTON_POS_2),
- nsnull, nsnull, nsnull, labelArg, &showDialog, &dlgResult);
-
- if ( NS_SUCCEEDED( rv ) ) {
- // Dialog was shown
- *_retval = PR_TRUE;
-
- // Did they say go ahead?
- switch ( dlgResult ) {
- case 0:
- // User says: make the changes.
- // Remember "show dialog" choice.
- settings->mShowDialog = showDialog;
- // Apply settings; this single line of
- // code will do different things depending
- // on whether this is the first time (i.e.,
- // when "haveBeenSet" is false). The first
- // time, this will set all prefs to true
- // (because that's how we initialized 'em
- // in GetSettings, above) and will update the
- // registry accordingly. On subsequent passes,
- // this will only update the registry (because
- // the settings we got from GetSettings will
- // not have changed).
- //
- // BTW, the term "prefs" in this context does not
- // refer to conventional Mozilla "prefs." Instead,
- // it refers to "Desktop Integration" prefs which
- // are stored in the windows registry.
- rv = SetSettings( settings );
- #ifdef DEBUG_law
- printf( "Yes, SetSettings returned 0x%08X\n", (int)rv );
- #endif
- break;
-
- case 2:
- // User says: Don't mess with Windows.
- // We update only the "showDialog" and
- // "haveBeenSet" keys. Note that this will
- // have the effect of setting all the prefs
- // *off* if the user says no to the initial
- // prompt.
- BoolRegistryEntry( "haveBeenSet" ).set();
- if ( showDialog ) {
- BoolRegistryEntry( "showDialog" ).set();
- } else {
- BoolRegistryEntry( "showDialog" ).reset();
- }
- #ifdef DEBUG_law
- printf( "No, haveBeenSet=1 and showDialog=%d\n", (int)showDialog );
- #endif
- break;
-
- default:
- // User says: I dunno. Make no changes (which
- // should produce the same dialog next time).
- #ifdef DEBUG_law
- printf( "Cancel\n" );
- #endif
- break;
- }
- }
- }
- }
- }
- }
- }
- #ifdef DEBUG_law
- else { printf( "Registry and prefs match\n" ); }
- #endif
- }
- #ifdef DEBUG_law
- else { printf( "showDialog is false and not installing\n" ); }
- #endif
-
- // Release the settings.
- settings->Release();
- }
-
- return rv;
-}
-
-// Utility to set PRBool registry value from getter method.
-nsresult putPRBoolIntoRegistry( const char* valueName,
- nsIWindowsHooksSettings *prefs,
- nsWindowsHooksSettings::getter memFun ) {
- // Use getter method to extract attribute from prefs.
- PRBool boolValue;
- (void)(prefs->*memFun)( &boolValue );
- // Convert to DWORD.
- DWORD dwordValue = boolValue;
- // Store into registry.
- BoolRegistryEntry pref( valueName );
- nsresult rv = boolValue ? pref.set() : pref.reset();
-
- return rv;
-}
-
-/* void setPreferences (in nsIWindowsHooksSettings prefs); */
-NS_IMETHODIMP
-nsWindowsHooks::SetSettings(nsIWindowsHooksSettings *prefs) {
- nsresult rv = NS_ERROR_FAILURE;
-
- putPRBoolIntoRegistry( "isHandlingHTTP", prefs, &nsIWindowsHooksSettings::GetIsHandlingHTTP );
- putPRBoolIntoRegistry( "isHandlingHTTPS", prefs, &nsIWindowsHooksSettings::GetIsHandlingHTTPS );
- putPRBoolIntoRegistry( "isHandlingHTML", prefs, &nsIWindowsHooksSettings::GetIsHandlingHTML );
- putPRBoolIntoRegistry( "isHandlingXHTML", prefs, &nsIWindowsHooksSettings::GetIsHandlingXHTML );
- putPRBoolIntoRegistry( "showDialog", prefs, &nsIWindowsHooksSettings::GetShowDialog );
-
- // Indicate that these settings have indeed been set.
- BoolRegistryEntry( "haveBeenSet" ).set();
-
- rv = SetRegistry();
-
- return rv;
-}
-
-// Get preferences and start handling everything selected.
-NS_IMETHODIMP
-nsWindowsHooks::SetRegistry() {
- nsresult rv = NS_OK;
-
- // Get raw prefs object.
- nsWindowsHooksSettings *prefs;
- rv = this->GetSettings( &prefs );
-
- NS_ENSURE_TRUE( NS_SUCCEEDED( rv ), rv );
-
- if ( prefs->mHandleHTML ) {
- (void) mozillaMarkup.set();
- } else {
- (void) mozillaMarkup.reset();
- }
- if ( prefs->mHandleXHTML ) {
- (void) xhtml.set();
- } else {
- (void) xhtml.reset();
- }
- if ( prefs->mHandleHTTP ) {
- (void) http.set();
- } else {
- (void) http.reset();
- }
- if ( prefs->mHandleHTTPS ) {
- (void) https.set();
- } else {
- (void) https.reset();
- }
- // Call SHChangeNotify() to notify the windows shell that file
- // associations changed, and that an update of the icons need to occur.
- SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
-
- return NS_OK;
-}
-
-NS_IMETHODIMP nsWindowsHooks::GetRegistryEntry( PRInt32 aHKEYConstant, const char *aSubKeyName, const char *aValueName, char **aResult ) {
- NS_ENSURE_ARG( aResult );
- *aResult = 0;
- // Calculate HKEY_* starting point based on input nsIWindowsHooks constant.
- HKEY hKey;
- switch ( aHKEYConstant ) {
- case HKCR:
- hKey = HKEY_CLASSES_ROOT;
- break;
- case HKCC:
- hKey = HKEY_CURRENT_CONFIG;
- break;
- case HKCU:
- hKey = HKEY_CURRENT_USER;
- break;
- case HKLM:
- hKey = HKEY_LOCAL_MACHINE;
- break;
- case HKU:
- hKey = HKEY_USERS;
- break;
- default:
- return NS_ERROR_INVALID_ARG;
- }
-
- // Get requested registry entry.
- nsCAutoString entry( RegistryEntry( hKey, aSubKeyName, aValueName, 0 ).currentSetting() );
-
- // Copy to result.
- *aResult = PL_strdup( entry.get() );
-
- return *aResult ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
-}
-
-nsresult
-WriteBitmap(nsString& aPath, gfxIImageFrame* aImage)
-{
- PRInt32 width, height;
- aImage->GetWidth(&width);
- aImage->GetHeight(&height);
-
- PRUint8* bits;
- PRUint32 length;
- aImage->GetImageData(&bits, &length);
- if (!bits) return NS_ERROR_FAILURE;
-
- PRUint32 bpr;
- aImage->GetImageBytesPerRow(&bpr);
- PRInt32 bitCount = bpr/width;
-
- // initialize these bitmap structs which we will later
- // serialize directly to the head of the bitmap file
- LPBITMAPINFOHEADER bmi = (LPBITMAPINFOHEADER)new BITMAPINFO;
- bmi->biSize = sizeof(BITMAPINFOHEADER);
- bmi->biWidth = width;
- bmi->biHeight = height;
- bmi->biPlanes = 1;
- bmi->biBitCount = (WORD)bitCount*8;
- bmi->biCompression = BI_RGB;
- bmi->biSizeImage = 0; // don't need to set this if bmp is uncompressed
- bmi->biXPelsPerMeter = 0;
- bmi->biYPelsPerMeter = 0;
- bmi->biClrUsed = 0;
- bmi->biClrImportant = 0;
-
- BITMAPFILEHEADER bf;
- bf.bfType = 0x4D42; // 'BM'
- bf.bfReserved1 = 0;
- bf.bfReserved2 = 0;
- bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
- bf.bfSize = bf.bfOffBits + bmi->biSizeImage;
-
- // get a file output stream
- nsresult rv;
- nsCOMPtr path;
- rv = NS_NewLocalFile(aPath, PR_TRUE, getter_AddRefs(path));
-
- if (NS_FAILED(rv))
- return rv;
-
- nsCOMPtr stream;
- NS_NewLocalFileOutputStream(getter_AddRefs(stream), path);
-
- // write the bitmap headers and rgb pixel data to the file
- rv = NS_ERROR_FAILURE;
- if (stream) {
- PRUint32 written;
- stream->Write((const char*)&bf, sizeof(BITMAPFILEHEADER), &written);
- if (written == sizeof(BITMAPFILEHEADER)) {
- stream->Write((const char*)bmi, sizeof(BITMAPINFOHEADER), &written);
- if (written == sizeof(BITMAPINFOHEADER)) {
- stream->Write((const char*)bits, length, &written);
- if (written == length)
- rv = NS_OK;
- }
- }
-
- stream->Close();
- }
-
- return rv;
-}
-
-NS_IMETHODIMP
-nsWindowsHooks::GetDesktopColor(PRUint32* aColors)
-{
- PRUint32 color = ::GetSysColor(COLOR_DESKTOP);
- *aColors = (GetRValue(color) << 16) | (GetGValue(color) << 8) | GetBValue(color);
- return NS_OK;
-
-}
-
-NS_IMETHODIMP
-nsWindowsHooks::SetDesktopColor(PRUint32 aColor)
-{
- int aParameters[2] = { COLOR_BACKGROUND, COLOR_DESKTOP };
- BYTE r = (aColor >> 16);
- BYTE g = (aColor << 16) >> 24;
- BYTE b = (aColor << 24) >> 24;
- COLORREF colors[2] = { RGB(r,g,b), RGB(r,g,b) };
-
- ::SetSysColors(sizeof(aParameters) / sizeof(int), aParameters, colors);
-
- char subKey[] = "Control Panel\\Colors";
- PRBool result = PR_FALSE;
- DWORD dwDisp = 0;
- HKEY key;
- // Try to create/open a subkey under HKLM.
- DWORD rc = ::RegCreateKeyEx(HKEY_CURRENT_USER,
- subKey,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &key,
- &dwDisp);
- if (rc == ERROR_SUCCESS) {
- char* rgb = new char[12];
- sprintf(rgb, "%u %u %u\0", r, g, b);
- ::RegSetValueEx(key, "Background", 0, REG_SZ, (const unsigned char*)rgb, strlen(rgb));
- delete[] rgb;
- }
- return NS_OK;
-
-}
-
-NS_IMETHODIMP
-nsWindowsHooks::SetImageAsWallpaper(nsIDOMElement* aElement, PRBool aUseBackground, PRInt32 position)
-{
- nsresult rv;
-
- nsCOMPtr gfxFrame;
- if (aUseBackground) {
- // XXX write background loading stuff!
- } else {
- nsCOMPtr imageContent = do_QueryInterface(aElement, &rv);
- if (!imageContent) return rv;
-
- // get the image container
- nsCOMPtr request;
- rv = imageContent->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST,
- getter_AddRefs(request));
- if (!request) return rv;
- nsCOMPtr container;
- rv = request->GetImage(getter_AddRefs(container));
- if (!request) return rv;
-
- // get the current frame, which holds the image data
- container->GetCurrentFrame(getter_AddRefs(gfxFrame));
- }
-
- if (!gfxFrame)
- return NS_ERROR_FAILURE;
-
- // get the windows directory ('c:\windows' usually)
- char winDir[256];
- ::GetWindowsDirectory(winDir, sizeof(winDir));
- nsAutoString winPath;
- winPath.AssignWithConversion(winDir);
-
- // get the product brand name from localized strings
- nsXPIDLString brandName;
- nsCID bundleCID = NS_STRINGBUNDLESERVICE_CID;
- nsCOMPtr bundleService(do_GetService(bundleCID));
- if (bundleService) {
- nsCOMPtr brandBundle;
- rv = bundleService->CreateBundle("chrome://global/locale/brand.properties",
- getter_AddRefs(brandBundle));
- if (NS_SUCCEEDED(rv) && brandBundle) {
- if (NS_FAILED(rv = brandBundle->GetStringFromName(NS_LITERAL_STRING("brandShortName").get(),
- getter_Copies(brandName))))
- return rv;
- }
- }
-
- // build the file name
- winPath.Append(NS_LITERAL_STRING("\\").get());
- winPath.Append(brandName);
- winPath.Append(NS_LITERAL_STRING(" Wallpaper.bmp").get());
-
- // write the bitmap to a file in the windows dir
- rv = WriteBitmap(winPath, gfxFrame);
-
- // if the file was written successfully, set it as the system wallpaper
- if (NS_SUCCEEDED(rv)) {
- char subKey[] = "Control Panel\\Desktop";
- PRBool result = PR_FALSE;
- DWORD dwDisp = 0;
- HKEY key;
- // Try to create/open a subkey under HKLM.
- DWORD rc = ::RegCreateKeyEx( HKEY_CURRENT_USER,
- subKey,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &key,
- &dwDisp );
- if (rc == ERROR_SUCCESS) {
- unsigned char tile[2];
- unsigned char style[2];
- if (position == WALLPAPER_TILE) {
- tile[0] = '1';
- style[0] = '1';
- }
- else if (position == WALLPAPER_CENTER) {
- tile[0] = '0';
- style[0] = '0';
- }
- else if (position == WALLPAPER_STRETCH) {
- tile[0] = '0';
- style[0] = '2';
- }
- tile[1] = '\0';
- style[1] = '\0';
- ::RegSetValueEx(key, "TileWallpaper", 0, REG_SZ, tile, sizeof(tile));
- ::RegSetValueEx(key, "WallpaperStyle", 0, REG_SZ, style, sizeof(style));
- ::SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ToNewCString(winPath), SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
- }
- }
- return rv;
-}
-
-NS_IMETHODIMP
-nsWindowsHooks::OpenDefaultClient(const char* aClient)
-{
- nsresult rv;
-
- // The Default Client section of the Windows Registry looks like this:
- //
- // Clients\aClient\
- // e.g. aClient = "Mail"...
- // \Mail\(default) = Client Subkey Name
- // \Client Subkey Name
- // \Client Subkey Name\shell\open\command\
- // \Client Subkey Name\shell\open\command\(default) = path to exe
- //
- nsCAutoString clientKey(NS_LITERAL_CSTRING("SOFTWARE\\Clients\\"));
- clientKey += aClient;
-
- nsXPIDLCString defaultClient;
- rv = GetRegistryEntry(nsIWindowsRegistry::HKLM, clientKey.get(), "",
- getter_Copies(defaultClient));
- if (NS_FAILED(rv) || defaultClient.IsEmpty())
- return rv;
-
- clientKey.Append("\\");
- clientKey.Append(defaultClient.get());
- clientKey.Append("\\shell\\open\\command");
-
- nsXPIDLCString path;
- rv = GetRegistryEntry(nsIWindowsRegistry::HKLM, clientKey.get(), "",
- getter_Copies(path));
- if (NS_FAILED(rv) || path.IsEmpty())
- return rv;
-
- // Look for any embedded environment variables and substitute their
- // values, as |::CreateProcess| is unable to do this.
- PRInt32 end = path.Length();
- PRInt32 cursor = 0, temp = 0;
- char buf[_MAX_PATH];
- do {
- cursor = path.FindChar('%', cursor);
- if (cursor < 0)
- break;
-
- temp = path.FindChar('%', cursor + 1);
-
- ++cursor;
-
- ::ZeroMemory(&buf, sizeof(buf));
- ::GetEnvironmentVariable(nsCAutoString(Substring(path, cursor, temp - cursor)).get(),
- buf, sizeof(buf));
-
- // "+ 2" is to subtract the extra characters used to delimit the environment
- // variable ('%').
- path.Replace((cursor - 1), temp - cursor + 2, nsDependentCString(buf));
-
- ++cursor;
- }
- while (cursor < end);
-
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
-
- ::ZeroMemory(&si, sizeof(STARTUPINFO));
- ::ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-
- char* pathCStr = ToNewCString(path);
- BOOL success = ::CreateProcess(NULL, pathCStr, NULL, NULL, FALSE, 0, NULL,
- NULL, &si, &pi);
- nsCRT::free(pathCStr);
- if (!success)
- return NS_ERROR_FAILURE;
-
- return NS_OK;
-}
-
-NS_IMETHODIMP
-nsWindowsHooks::GetUnreadMailCount(PRUint32* aResult)
-{
- *aResult = 0;
-
- HKEY accountKey;
- if (GetMailAccountKey(&accountKey)) {
- DWORD type, length, unreadCount;
- DWORD result = ::RegQueryValueEx(accountKey, "MessageCount", 0, &type,
- (LPBYTE)&unreadCount, &length);
- if (result == ERROR_SUCCESS) {
- *aResult = unreadCount;
- }
- }
-
- return NS_OK;
-}
-
-PRBool
-nsWindowsHooks::GetMailAccountKey(HKEY* aResult)
-{
- HKEY mailKey;
- DWORD result = ::RegOpenKeyEx(HKEY_CURRENT_USER,
- "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\UnreadMail\\",
- 0, KEY_ENUMERATE_SUB_KEYS, &mailKey);
-
- PRInt32 i = 0;
- do {
- char subkeyName[_MAX_PATH];
- DWORD len = sizeof subkeyName;
- result = ::RegEnumKeyEx(mailKey, i++, subkeyName, &len, 0, 0, 0, 0);
- if (result == ERROR_SUCCESS) {
- HKEY accountKey;
- result = ::RegOpenKeyEx(mailKey, subkeyName, 0, KEY_READ, &accountKey);
- if (result == ERROR_SUCCESS) {
- *aResult = accountKey;
- return PR_TRUE;
- }
- }
- else
- break;
- }
- while (1);
-
- return PR_FALSE;
-}
-
diff --git a/mozilla/browser/components/winhooks/nsWindowsHooks.h b/mozilla/browser/components/winhooks/nsWindowsHooks.h
deleted file mode 100755
index 46e35b97785..00000000000
--- a/mozilla/browser/components/winhooks/nsWindowsHooks.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: NPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Aaron Kaluszka
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the NPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the NPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef nswindowshooks_h____
-#define nswindowshooks_h____
-
-#include "nscore.h"
-#include "nsIWindowsHooks.h"
-
-#include
-
-#ifndef MAX_BUF
-#define MAX_BUF 4096
-#endif
-
-/* c09bc130-0a71-11d4-8076-00600811a9c3 */
-#define NS_IWINDOWSHOOKS_CID \
- { 0xc09bc130, 0x0a71, 0x11d4, {0x80, 0x76, 0x00, 0x60, 0x08, 0x11, 0xa9, 0xc3} }
-
-class nsWindowsHooksSettings : public nsIWindowsHooksSettings {
-public:
- // ctor/dtor
- nsWindowsHooksSettings();
- virtual ~nsWindowsHooksSettings();
-
- // Declare all interface methods we must implement.
- NS_DECL_ISUPPORTS
- NS_DECL_NSIWINDOWSHOOKSSETTINGS
-
- // Typedef for nsIWindowsHooksSettings getter/setter member functions.
- typedef
- NS_STDCALL_FUNCPROTO(nsresult,
- getter,
- nsIWindowsHooksSettings, GetShowDialog,
- (PRBool*));
-
- typedef
- NS_STDCALL_FUNCPROTO(nsresult,
- setter,
- nsIWindowsHooksSettings, SetShowDialog,
- (PRBool));
-
-protected:
- // General purpose getter.
- NS_IMETHOD Get( PRBool *result, PRBool nsWindowsHooksSettings::*member );
- // General purpose setter.
- NS_IMETHOD Set( PRBool value, PRBool nsWindowsHooksSettings::*member );
-
-private:
- // Internet shortcut protocols.
- PRBool mHandleHTTP;
- PRBool mHandleHTTPS;
- // File types.
- PRBool mHandleHTML;
- PRBool mHandleXHTML;
- // Dialog
- PRBool mShowDialog;
-
- // Special member to handle initialization.
- PRBool mHaveBeenSet;
- NS_IMETHOD GetHaveBeenSet( PRBool * );
- NS_IMETHOD SetHaveBeenSet( PRBool );
-
- // Give nsWindowsHooks full access.
- friend class nsWindowsHooks;
-}; // nsWindowsHooksSettings
-
-class nsWindowsHooks : public nsIWindowsHooks, public nsIWindowsRegistry {
-public:
- // ctor/dtor
- nsWindowsHooks();
- virtual ~nsWindowsHooks();
-
- // Declare all interface methods we must implement.
- NS_DECL_ISUPPORTS
- NS_DECL_NSIWINDOWSHOOKS
- NS_DECL_NSIWINDOWSREGISTRY
-
-protected:
- // Internal flavor of GetPreferences.
- NS_IMETHOD GetSettings( nsWindowsHooksSettings ** );
-
- PRBool GetMailAccountKey(HKEY* aResult);
-
- // Set registry according to settings.
- NS_IMETHOD SetRegistry();
- char mShortcutPath[MAX_BUF];
- char mShortcutName[MAX_BUF];
- char mShortcutBase[MAX_BUF];
- char mShortcutProg[MAX_BUF];
-}; // nsWindowsHooksSettings
-
-#endif // nswindowshooks_h____
diff --git a/mozilla/browser/components/winhooks/nsWindowsHooksUtil.cpp b/mozilla/browser/components/winhooks/nsWindowsHooksUtil.cpp
deleted file mode 100755
index 20f58f1f61f..00000000000
--- a/mozilla/browser/components/winhooks/nsWindowsHooksUtil.cpp
+++ /dev/null
@@ -1,795 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: NPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Bill Law
- * Dean Tessman
- * Blake Ross
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the NPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the NPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-#include
-#include
-#include
-
-#include "nsString.h"
-#include "nsINativeAppSupportWin.h"
-#include "nsIStringBundle.h"
-#include "nsDirectoryService.h"
-#include "nsAppDirectoryServiceDefs.h"
-
-#define MOZ_HWND_BROADCAST_MSG_TIMEOUT 5000
-#define MOZ_CLIENT_BROWSER_KEY "Software\\Clients\\StartMenuInternet"
-
-// Where Mozilla stores its own registry values.
-const char * const mozillaKeyName = "Software\\Mozilla\\Desktop";
-
-static const char shortcutSuffix[] = " -url \"%1\"";
-static const char chromeSuffix[] = " -chrome \"%1\"";
-static const char iconSuffix[] = ",0";
-
-// Returns the (fully-qualified) name of this executable.
-static nsCString thisApplication() {
- static nsCAutoString result;
-
- if ( result.IsEmpty() ) {
- char buffer[MAX_PATH] = { 0 };
- DWORD len = ::GetModuleFileName( NULL, buffer, sizeof buffer );
- len = ::GetShortPathName( buffer, buffer, sizeof buffer );
-
- result = buffer;
- ToUpperCase(result);
- }
-
- return result;
-}
-
-// Returns the "short" name of this application (in upper case). This is for
-// use as a StartMenuInternet value.
-static nsCString shortAppName() {
- static nsCAutoString result;
-
- if ( result.IsEmpty() ) {
- // Find last backslash in thisApplication().
- nsCAutoString thisApp( thisApplication() );
- PRInt32 n = thisApp.RFind( "\\" );
- if ( n != kNotFound ) {
- // Use what comes after the last backslash.
- result = (const char*)thisApp.get() + n + 1;
- } else {
- // Use entire string.
- result = thisApp;
- }
- }
-
- return result;
-}
-
-// RegistryEntry
-//
-// Generic registry entry (no saving of previous values). Each is comprised of:
-// o A base HKEY
-// o A subkey name.
-// o An optional value name (empty for the "default" value).
-// o The registry setting we'd like this entry to have when set.
-struct RegistryEntry {
- HKEY baseKey; // e.g., HKEY_CURRENT_USER
- PRBool isNull; // i.e., should use ::RegDeleteValue
- nsCString keyName; // Key name.
- nsCString valueName; // Value name (can be empty, which implies NULL).
- nsCString setting; // What we set it to.
-
- RegistryEntry( HKEY baseKey, const char* keyName, const char* valueName, const char* setting )
- : baseKey( baseKey ), isNull( setting == 0 ), keyName( keyName ), valueName( valueName ), setting( setting ? setting : "" ) {
- }
-
- PRBool isAlreadySet() const;
- nsresult set();
- nsresult reset();
- nsCString currentSetting( PRBool *currentUndefined = 0 ) const;
-
- // Return value name in proper form for passing to ::Reg functions
- // (i.e., emptry string is converted to a NULL pointer).
- const char* valueNameArg() const {
- return valueName.IsEmpty() ? NULL : valueName.get();
- }
-
- nsCString fullName() const;
-};
-
-// BoolRegistryEntry
-//
-// These are used to store the "windows integration" preferences.
-// You can query the value via operator void* (i.e., if ( boolPref )... ).
-// These are stored under HKEY_LOCAL_MACHINE\Software\Mozilla\Desktop.
-// Set sets the stored value to "1". Reset deletes it (which implies 0).
-struct BoolRegistryEntry : public RegistryEntry {
- BoolRegistryEntry( const char *name )
- : RegistryEntry( HKEY_LOCAL_MACHINE, mozillaKeyName, name, "1" ) {
- }
- operator PRBool();
-};
-
-// SavedRegistryEntry
-//
-// Like a plain RegistryEntry, but set/reset save/restore the
-// it had before we set it.
-struct SavedRegistryEntry : public RegistryEntry {
- SavedRegistryEntry( HKEY baseKey, const char *keyName, const char *valueName, const char *setting )
- : RegistryEntry( baseKey, keyName, valueName, setting ) {
- }
- nsresult set();
- nsresult reset();
-};
-
-// ProtocolRegistryEntry
-//
-// For setting entries for a given Internet Shortcut protocol.
-// The key name is calculated as
-// HKEY_LOCAL_MACHINE\Software\Classes\protocol\shell\open\command.
-// The setting is this executable (with appropriate suffix).
-// Set/reset are trickier in this case.
-struct ProtocolRegistryEntry : public SavedRegistryEntry {
- nsCString protocol;
- ProtocolRegistryEntry( const char* protocol )
- : SavedRegistryEntry( HKEY_LOCAL_MACHINE, "", "", thisApplication().get() ),
- protocol( protocol ) {
- keyName = "Software\\Classes\\";
- keyName += protocol;
- keyName += "\\shell\\open\\command";
-
- // Append appropriate suffix to setting.
- if ( this->protocol.Equals( "chrome" ) || this->protocol.Equals( "MozillaXUL" ) ) {
- // Use "-chrome" command line flag.
- setting += chromeSuffix;
- } else {
- // Use standard "-url" command line flag.
- setting += shortcutSuffix;
- }
- }
- nsresult set();
- nsresult reset();
-};
-
-// ProtocolIconRegistryEntry
-//
-// For setting icon entries for a given Internet Shortcut protocol.
-// The key name is calculated as
-// HKEY_LOCAL_MACHINE\Software\Classes\protocol\DefaultIcon.
-// The setting is this executable (with appropriate suffix).
-struct ProtocolIconRegistryEntry : public SavedRegistryEntry {
- nsCString protocol;
- ProtocolIconRegistryEntry( const char* aprotocol )
- : SavedRegistryEntry( HKEY_LOCAL_MACHINE, "", "", thisApplication().get() ),
- protocol( aprotocol ) {
- keyName = NS_LITERAL_CSTRING("Software\\Classes\\") + protocol + NS_LITERAL_CSTRING("\\DefaultIcon");
-
- // Append appropriate suffix to setting.
- setting += iconSuffix;
- }
-};
-
-// DDERegistryEntry
-//
-// Like a protocol registry entry, but for the shell\open\ddeexec subkey.
-//
-// We need to remove this subkey entirely to ensure we work properly with
-// various programs on various platforms (see Bugzilla bugs 59078, 58770, etc.).
-//
-// We don't try to save everything, though. We do save the known useful info
-// under the ddeexec subkey:
-// ddeexec\@
-// ddeexec\NoActivateHandler
-// ddeexec\Application\@
-// ddeexec\Topic\@
-//
-// set/reset save/restore these values and remove/restore the ddeexec subkey
-struct DDERegistryEntry : public SavedRegistryEntry {
- DDERegistryEntry( const char *protocol )
- : SavedRegistryEntry( HKEY_LOCAL_MACHINE, "", "", 0 ),
- activate( HKEY_LOCAL_MACHINE, "", "NoActivateHandler", 0 ),
- app( HKEY_LOCAL_MACHINE, "", "", 0 ),
- topic( HKEY_LOCAL_MACHINE, "", "", 0 ) {
- // Derive keyName from protocol.
- keyName = "Software\\Classes\\";
- keyName += protocol;
- keyName += "\\shell\\open\\ddeexec";
- // Set subkey names.
- activate.keyName = keyName;
- app.keyName = keyName;
- app.keyName += "\\Application";
- topic.keyName = keyName;
- topic.keyName += "\\Topic";
- }
- nsresult set();
- nsresult reset();
- SavedRegistryEntry activate, app, topic;
-};
-
-// FileTypeRegistryEntry
-//
-// For setting entries relating to a file extension (or extensions).
-// This object itself is for the "file type" associated with the extension.
-// Set/reset manage the mapping from extension to the file type, as well.
-// The description is taken from defDescKey if available. Otherwise desc
-// is used.
-struct FileTypeRegistryEntry : public ProtocolRegistryEntry {
- nsCString fileType;
- const char **ext;
- nsCString desc;
- nsCString defDescKey;
- nsCString iconFile;
- FileTypeRegistryEntry ( const char **ext, const char *fileType,
- const char *desc, const char *defDescKey, const char *iconFile )
- : ProtocolRegistryEntry( fileType ),
- fileType( fileType ),
- ext( ext ),
- desc( desc ),
- defDescKey(defDescKey),
- iconFile(iconFile) {
- }
- nsresult set();
- nsresult reset();
-};
-
-// Generate the "full" name of this registry entry.
-nsCString RegistryEntry::fullName() const {
- nsCString result;
- if ( baseKey == HKEY_CURRENT_USER ) {
- result = "HKEY_CURRENT_USER\\";
- } else if ( baseKey == HKEY_LOCAL_MACHINE ) {
- result = "HKEY_LOCAL_MACHINE\\";
- } else {
- result = "\\";
- }
- result += keyName;
- if ( !valueName.IsEmpty() ) {
- result += "[";
- result += valueName;
- result += "]";
- }
- return result;
-}
-
-// Tests whether registry entry already has desired setting.
-PRBool RegistryEntry::isAlreadySet() const {
- PRBool result = FALSE;
-
- nsCAutoString current( currentSetting() );
-
- result = ( current == setting );
-
- return result;
-}
-
-// Gives registry entry the desired setting.
-nsresult RegistryEntry::set() {
-#ifdef DEBUG_law
-if ( isNull && setting.IsEmpty() ) printf( "Deleting %s\n", fullName().get() );
-else printf( "Setting %s=%s\n", fullName().get(), setting.get() );
-#endif
- nsresult result = NS_ERROR_FAILURE;
-
- HKEY key;
- LONG rc = ::RegOpenKey( baseKey, keyName.get(), &key );
-
- // See if key doesn't exist yet...
- if ( rc == ERROR_FILE_NOT_FOUND ) {
- rc = ::RegCreateKey( baseKey, keyName.get(), &key );
- }
- if ( rc == ERROR_SUCCESS ) {
- if ( isNull && setting.IsEmpty() ) {
- // This means we need to actually remove the value, not merely set it to an
- // empty string.
- rc = ::RegDeleteValue( key, valueNameArg() );
- if ( rc == ERROR_SUCCESS ) {
- result = NS_OK;
- }
- } else {
- // Get current value to see if it is set properly already.
- char buffer[4096] = { 0 };
- DWORD len = sizeof buffer;
- rc = ::RegQueryValueEx( key, valueNameArg(), NULL, NULL, (LPBYTE)buffer, &len );
- if ( rc != ERROR_SUCCESS || strcmp( setting.get(), buffer ) != 0 ) {
- rc = ::RegSetValueEx( key, valueNameArg(), 0, REG_SZ, (LPBYTE)setting.get(), setting.Length() );
-#ifdef DEBUG_law
-NS_WARN_IF_FALSE( rc == ERROR_SUCCESS, fullName().get() );
-#endif
- if ( rc == ERROR_SUCCESS ) {
- result = NS_OK;
- }
- } else {
- // Already has desired setting.
- result = NS_OK;
- }
- }
- ::RegCloseKey( key );
- } else {
-#ifdef DEBUG_law
-NS_WARN_IF_FALSE( rc == ERROR_SUCCESS, fullName().get() );
-#endif
- }
- return result;
-}
-
-// Get current setting, set new one, then save the previous.
-nsresult SavedRegistryEntry::set() {
- nsresult rv = NS_OK;
- PRBool currentlyUndefined = PR_TRUE;
- nsCAutoString prev( currentSetting( ¤tlyUndefined ) );
- // See if value is changing.
- // We need an extra check for the case where we have an empty entry
- // and we need to remove it entirely.
- if ( setting != prev || ( !currentlyUndefined && isNull ) ) {
- // Set new.
- rv = RegistryEntry::set();
- if ( NS_SUCCEEDED( rv ) ) {
- // Save old.
- RegistryEntry tmp( HKEY_LOCAL_MACHINE, "Software\\Mozilla\\Desktop", fullName().get(), prev.get() );
- tmp.set();
- }
- }
- return rv;
-}
-
-// setWindowsXP
-//
-// We need to:
-// a. Make sure this application is registered as a "Start Menu
-// internet app" under HKLM\Software\Clients\StartMenuInternet.
-// b. Make this app the default "Start Menu internet app" for this
-// user.
-static void setWindowsXP() {
- // We test for the presence of this subkey as a WindowsXP test.
- // We do it this way so that vagueries of future Windows versions
- // are handled as best we can.
- HKEY key;
- nsCAutoString baseKey( NS_LITERAL_CSTRING( "Software\\Clients\\StartMenuInternet" ) );
- LONG rc = ::RegOpenKey( HKEY_LOCAL_MACHINE, baseKey.get(), &key );
- if ( rc == ERROR_SUCCESS ) {
- // OK, this is WindowsXP (or equivalent). Add this application to the
- // set registered as "Start Menu internet apps." These entries go
- // under the subkey MOZILLA.EXE (or whatever the name of this executable is),
- // that subkey name is generated by the utility function shortAppName.
- if ( rc == ERROR_SUCCESS ) {
- // The next 3 go under this subkey.
- nsCAutoString subkey( baseKey + NS_LITERAL_CSTRING( "\\" ) + shortAppName() );
- // Pretty name. This goes into the LocalizedString value. It is the
- // name of the executable (preceded by '@'), followed by ",-nnn" where
- // nnn is the resource identifier of the string in the .exe. That value
- // comes from nsINativeAppSupportWin.h.
- char buffer[ _MAX_PATH + 8 ]; // Path, plus '@', comma, minus, and digits (5)
- _snprintf( buffer, sizeof buffer, "@%s,-%d", thisApplication().get(), IDS_STARTMENU_APPNAME );
- RegistryEntry tmp_entry1( HKEY_LOCAL_MACHINE,
- subkey.get(),
- "LocalizedString",
- buffer );
- tmp_entry1.set();
- // Default icon (from .exe resource).
- RegistryEntry tmp_entry2( HKEY_LOCAL_MACHINE,
- nsCAutoString( subkey + NS_LITERAL_CSTRING( "\\DefaultIcon" ) ).get(),
- "",
- nsCAutoString( thisApplication() + NS_LITERAL_CSTRING( ",0" ) ).get() );
- tmp_entry2.set();
- // Command to open.
- RegistryEntry tmp_entry3( HKEY_LOCAL_MACHINE,
- nsCAutoString( subkey + NS_LITERAL_CSTRING( "\\shell\\open\\command" ) ).get(),
- "",
- thisApplication().get() );
- tmp_entry3.set();
- // "Properties" verb. The default value is the text that will appear in the menu.
- // The default value under the command subkey is the name of this application, with
- // arguments to cause the Preferences window to appear.
- nsCOMPtr bundleService( do_GetService( "@mozilla.org/intl/stringbundle;1" ) );
- nsCOMPtr bundle;
- nsXPIDLString label;
- if ( bundleService &&
- NS_SUCCEEDED( bundleService->CreateBundle( "chrome://global-platform/locale/nsWindowsHooks.properties",
- getter_AddRefs( bundle ) ) ) &&
- NS_SUCCEEDED( bundle->GetStringFromName( NS_LITERAL_STRING( "prefsLabel" ).get(), getter_Copies( label ) ) ) ) {
- // Set the label that will appear in the start menu context menu.
- RegistryEntry tmp_entry4( HKEY_LOCAL_MACHINE,
- nsCAutoString( subkey + NS_LITERAL_CSTRING( "\\shell\\properties" ) ).get(),
- "",
- NS_ConvertUCS2toUTF8( label ).get() );
- tmp_entry4.set();
- }
- RegistryEntry tmp_entry5( HKEY_LOCAL_MACHINE,
- nsCAutoString( subkey + NS_LITERAL_CSTRING( "\\shell\\properties\\command" ) ).get(),
- "", nsCAutoString( thisApplication() +
-#ifndef MOZ_PHOENIX
- NS_LITERAL_CSTRING(" -chrome \"chrome://communicator/content/pref/pref.xul\"") ).get()
-#else
- NS_LITERAL_CSTRING(" -chrome \"chrome://browser/content/pref/pref.xul\"") ).get()
-#endif
- );
- tmp_entry5.set();
-
- // Now we need to select our application as the default start menu internet application.
- // This is accomplished by first trying to store our subkey name in
- // HKLM\Software\Clients\StartMenuInternet's default value. See
- // http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q297878 for detail.
- SavedRegistryEntry hklmAppEntry( HKEY_LOCAL_MACHINE, baseKey.get(), "", shortAppName().get() );
- hklmAppEntry.set();
- // That may or may not have worked (depending on whether we have sufficient access).
- if ( hklmAppEntry.currentSetting() == hklmAppEntry.setting ) {
- // We've set the hklm entry, so we can delete the one under hkcu.
- SavedRegistryEntry tmp_entry6( HKEY_CURRENT_USER, baseKey.get(), "", 0 );
- tmp_entry6.set();
- } else {
- // All we can do is set the default start menu internet app for this user.
- SavedRegistryEntry tmp_entry7( HKEY_CURRENT_USER, baseKey.get(), "", shortAppName().get() );
- }
- // Notify the system of the changes.
- ::SendMessageTimeout( HWND_BROADCAST,
- WM_SETTINGCHANGE,
- 0,
- (LPARAM)MOZ_CLIENT_BROWSER_KEY,
- SMTO_NORMAL|SMTO_ABORTIFHUNG,
- MOZ_HWND_BROADCAST_MSG_TIMEOUT,
- NULL);
- }
- }
-}
-
-// Set this entry and its corresponding DDE entry. The DDE entry
-// must be turned off to stop Windows from trying to use DDE.
-nsresult ProtocolRegistryEntry::set() {
- // If the protocol is http, then we have to do special stuff.
- // We must take care of this first because setting the "protocol entry"
- // for http will cause WindowsXP to do stuff automatically for us,
- // thereby making it impossible for us to propertly reset.
- if ( protocol == NS_LITERAL_CSTRING( "http" ) ) {
- setWindowsXP();
- }
-
- // Set this entry.
- nsresult rv = SavedRegistryEntry::set();
-
- // Save and set corresponding DDE entry(ies).
- DDERegistryEntry( protocol.get() ).set();
- // Set icon.
- ProtocolIconRegistryEntry( protocol.get() ).set();
-
- return rv;
-}
-
-// Not being a "saved" entry, we can't restore, so just delete it.
-nsresult RegistryEntry::reset() {
- HKEY key;
- LONG rc = ::RegOpenKey( baseKey, keyName.get(), &key );
- if ( rc == ERROR_SUCCESS ) {
- rc = ::RegDeleteValue( key, valueNameArg() );
-#ifdef DEBUG_law
-if ( rc == ERROR_SUCCESS ) printf( "Deleting key=%s\n", (const char*)fullName().get() );
-#endif
- }
- return NS_OK;
-}
-
-// Resets registry entry to the saved value (if there is one). We first
-// ensure that we still "own" that entry (by comparing its value to what
-// we would set it to).
-nsresult SavedRegistryEntry::reset() {
- nsresult result = NS_OK;
-
- // Get current setting for this key/value.
- nsCAutoString current( currentSetting() );
-
- // Test if we "own" it.
- if ( current == setting ) {
- // Unset it, then. First get saved value it had previously.
- PRBool noSavedValue = PR_TRUE;
- RegistryEntry saved = RegistryEntry( HKEY_LOCAL_MACHINE, mozillaKeyName, fullName().get(), "" );
- // There are 3 cases:
- // - no saved entry
- // - empty saved entry
- // - a non-empty saved entry
- // We delete the current entry in the first case, and restore
- // the saved entry (empty or otherwise) in the other two.
- setting = saved.currentSetting( &noSavedValue );
- if ( !setting.IsEmpty() || !noSavedValue ) {
- // Set to previous value.
- isNull = PR_FALSE; // Since we're resetting and the saved value may be empty, we
- // need to make sure set() doesn't mistakenly delete this entry.
- result = RegistryEntry::set();
- // Remove saved entry.
- saved.reset();
- } else {
- // No saved value, just delete this entry.
- result = RegistryEntry::reset();
- }
- }
-
- return result;
-}
-
-// resetWindowsXP
-//
-// This function undoes "setWindowsXP," more or less. It only needs to restore the selected
-// default Start Menu internet application. The registration of this application as one of
-// the start menu internet apps can remain. There is no check for the presence of anything
-// because the SaveRegistryEntry::reset calls will have no effect if there is no value at that
-// location (or, if that value has been changed by another application).
-static void resetWindowsXP() {
- NS_NAMED_LITERAL_CSTRING( baseKey, "Software\\Clients\\StartMenuInternet" );
- // First, try to restore the HKLM setting. This will fail if either we didn't
- // set that, or, if we don't have access).
- SavedRegistryEntry tmp_entry8( HKEY_LOCAL_MACHINE, baseKey.get(), "", shortAppName().get() );
- tmp_entry8.reset();
-
- // The HKCU setting is trickier. We may have set it, but we may also have
- // removed it (see setWindowsXP(), above). We first try to reverse the
- // setting. If we had removed it, then this will fail.
- SavedRegistryEntry tmp_entry9( HKEY_CURRENT_USER, baseKey.get(), "", shortAppName().get() );
- tmp_entry9.reset();
- // Now, try to reverse the removal of this key. This will fail if there is a current
- // setting, and will only work if this key is unset, and, we have a saved value.
- SavedRegistryEntry tmp_entry10( HKEY_CURRENT_USER, baseKey.get(), "", 0 );
- tmp_entry10.reset();
-
- // Notify the system of the changes.
- ::SendMessageTimeout( HWND_BROADCAST,
- WM_SETTINGCHANGE,
- 0,
- (LPARAM)MOZ_CLIENT_BROWSER_KEY,
- SMTO_NORMAL|SMTO_ABORTIFHUNG,
- MOZ_HWND_BROADCAST_MSG_TIMEOUT,
- NULL);
-}
-
-// Restore this entry and corresponding DDE entry.
-nsresult ProtocolRegistryEntry::reset() {
- // Restore this entry.
- nsresult rv = SavedRegistryEntry::reset();
-
- // Do same for corresponding DDE entry.
- DDERegistryEntry( protocol.get() ).reset();
- // Reset icon.
- ProtocolIconRegistryEntry( protocol.get() ).reset();
-
- // For http:, on WindowsXP, we need to do some extra cleanup.
- if ( protocol == NS_LITERAL_CSTRING( "http" ) ) {
- resetWindowsXP();
- }
-
- return rv;
-}
-
-static DWORD deleteKey( HKEY baseKey, const char *keyName ) {
- // Make sure input subkey isn't null.
- DWORD rc;
- if ( keyName && ::strlen(keyName) ) {
- // Open subkey.
- HKEY key;
- rc = ::RegOpenKeyEx( baseKey,
- keyName,
- 0,
- KEY_ENUMERATE_SUB_KEYS | DELETE,
- &key );
- // Continue till we get an error or are done.
- while ( rc == ERROR_SUCCESS ) {
- char subkeyName[_MAX_PATH];
- DWORD len = sizeof subkeyName;
- // Get first subkey name. Note that we always get the
- // first one, then delete it. So we need to get
- // the first one next time, also.
- rc = ::RegEnumKeyEx( key,
- 0,
- subkeyName,
- &len,
- 0,
- 0,
- 0,
- 0 );
- if ( rc == ERROR_NO_MORE_ITEMS ) {
- // No more subkeys. Delete the main one.
- rc = ::RegDeleteKey( baseKey, keyName );
- break;
- } else if ( rc == ERROR_SUCCESS ) {
- // Another subkey, delete it, recursively.
- rc = deleteKey( key, subkeyName );
- }
- }
- // Close the key we opened.
- ::RegCloseKey( key );
- } else {
- rc = ERROR_BADKEY;
- }
- return rc;
-}
-
-// Set the "dde" entry by deleting the main ddexec subkey
-// under HKLM\Software\Classes\\shell\open.
-// We "set" the various subkeys in order to preserve useful
-// information.
-nsresult DDERegistryEntry::set() {
- nsresult rv = SavedRegistryEntry::set();
- rv = activate.set();
- rv = app.set();
- rv = topic.set();
- // We've saved what we can. Now recurse through this key and
- // subkeys. This is necessary due to the fact that
- // ::RegDeleteKey won't work on WinNT (and Win2k?) if there are
- // subkeys.
- if ( deleteKey( baseKey, keyName.get() ) != ERROR_SUCCESS ) {
- rv = NS_ERROR_FAILURE;
- }
- return rv;
-}
-
-// Reset the main (ddeexec) value but also the Application and Topic.
-// We reset the app/topic even though we no longer set them. This
-// handles cases where the user installed a prior version, and then
-// upgraded.
-nsresult DDERegistryEntry::reset() {
- nsresult rv = SavedRegistryEntry::reset();
- rv = activate.reset();
- rv = app.reset();
- rv = topic.reset();
- return rv;
-}
-
-// Return current setting for this registry entry.
-// Optionally, the caller can ask that a boolean be set to indicate whether
-// the registry value is undefined. This flag can be used to distinguish
-// between not defined at all versus simply empty (both of which return an
-// empty string).
-nsCString RegistryEntry::currentSetting( PRBool *currentlyUndefined ) const {
- nsCString result;
-
- if ( currentlyUndefined ) {
- *currentlyUndefined = PR_TRUE;
- }
-
- HKEY key;
- LONG rc = ::RegOpenKey( baseKey, keyName.get(), &key );
- if ( rc == ERROR_SUCCESS ) {
- char buffer[4096] = { 0 };
- DWORD len = sizeof buffer;
- rc = ::RegQueryValueEx( key, valueNameArg(), NULL, NULL, (LPBYTE)buffer, &len );
- if ( rc == ERROR_SUCCESS ) {
- result = buffer;
- if ( currentlyUndefined ) {
- *currentlyUndefined = PR_FALSE; // Indicate entry is present.
- }
- }
- ::RegCloseKey( key );
- }
-
- return result;
-}
-
-// For each file extension, map it to this entry's file type.
-// Set the file type so this application opens files of that type.
-nsresult FileTypeRegistryEntry::set() {
- nsresult rv = NS_OK;
-
- // Set file extensions.
- for ( int i = 0; NS_SUCCEEDED( rv ) && ext[i]; i++ ) {
- nsCAutoString thisExt( "Software\\Classes\\" );
- thisExt += ext[i];
- rv = SavedRegistryEntry( HKEY_LOCAL_MACHINE, thisExt.get(), "", fileType.get() ).set();
- }
-
- // If OK, set file type opener.
- if ( NS_SUCCEEDED( rv ) ) {
- rv = ProtocolRegistryEntry::set();
-
- // If we just created this file type entry, set description and default icon.
- if ( NS_SUCCEEDED( rv ) ) {
- nsCAutoString iconFileToUse( "%1" );
- nsCAutoString descKey( "Software\\Classes\\" );
- descKey += protocol;
- RegistryEntry descEntry( HKEY_LOCAL_MACHINE, descKey.get(), NULL, "" );
- if ( descEntry.currentSetting().IsEmpty() ) {
- nsCAutoString defaultDescKey( "Software\\Classes\\" );
- defaultDescKey += defDescKey;
- RegistryEntry defaultDescEntry( HKEY_LOCAL_MACHINE, defaultDescKey.get(), NULL, "" );
-
- descEntry.setting = defaultDescEntry.currentSetting();
- if ( descEntry.setting.IsEmpty() )
- descEntry.setting = desc;
- descEntry.set();
- }
- nsCAutoString iconKey( "Software\\Classes\\" );
- iconKey += protocol;
- iconKey += "\\DefaultIcon";
-
- if ( !iconFile.Equals(iconFileToUse) ) {
- iconFileToUse = thisApplication() + NS_LITERAL_CSTRING( ",0" );
-
- // Check to see if there's an icon file name associated with this extension.
- // If there is, then we need to use this icon file. If not, then we default
- // to the main app's icon.
- if ( !iconFile.IsEmpty() ) {
- nsCOMPtr iconFileSpec;
- PRBool flagExists;
-
- // Use the directory service to get the path to the chrome folder. The
- // icons will be located in [chrome dir]\icons\default.
- // The abs path to the icon has to be in the short filename
- // format, else it won't work under win9x systems.
- rv = NS_GetSpecialDirectory( NS_APP_CHROME_DIR, getter_AddRefs( iconFileSpec ) );
- if ( NS_SUCCEEDED( rv ) ) {
- iconFileSpec->AppendNative( NS_LITERAL_CSTRING( "icons" ) );
- iconFileSpec->AppendNative( NS_LITERAL_CSTRING( "default" ) );
- iconFileSpec->AppendNative( iconFile );
-
- // Check to make sure that the icon file exists on disk.
- iconFileSpec->Exists( &flagExists );
- if ( flagExists ) {
- rv = iconFileSpec->GetNativePath( iconFileToUse );
- if ( NS_SUCCEEDED( rv ) ) {
- TCHAR buffer[MAX_PATH];
- DWORD len;
-
- // Get the short path name (8.3) format for iconFileToUse
- // else it won't work under win9x.
- len = ::GetShortPathName( iconFileToUse.get(), buffer, sizeof buffer );
- NS_ASSERTION ( (len > 0) && ( len < sizeof buffer ), "GetShortPathName failed!" );
- iconFileToUse.Assign( buffer );
- iconFileToUse.Append( NS_LITERAL_CSTRING( ",0" ) );
- }
- }
- }
- }
- }
-
- RegistryEntry iconEntry( HKEY_LOCAL_MACHINE, iconKey.get(), NULL, iconFileToUse.get() );
- if( !iconEntry.currentSetting().Equals( iconFileToUse ) )
- iconEntry.set();
- }
- }
-
- return rv;
-}
-
-// Basically, the inverse of set().
-// First, reset the opener for this entry's file type.
-// Then, reset the file type associated with each extension.
-nsresult FileTypeRegistryEntry::reset() {
- nsresult rv = ProtocolRegistryEntry::reset();
-
- for ( int i = 0; ext[ i ]; i++ ) {
- nsCAutoString thisExt( "Software\\Classes\\" );
- thisExt += ext[i];
- (void)SavedRegistryEntry( HKEY_LOCAL_MACHINE, thisExt.get(), "", fileType.get() ).reset();
- }
-
- return rv;
-}
-
-// Convert current registry setting to boolean.
-BoolRegistryEntry::operator PRBool() {
- return currentSetting().Equals( "1" ) ? PR_TRUE : PR_FALSE;
-}
diff --git a/mozilla/browser/components/winhooks/public/Makefile.in b/mozilla/browser/components/winhooks/public/Makefile.in
deleted file mode 100755
index 7a50b9b37a7..00000000000
--- a/mozilla/browser/components/winhooks/public/Makefile.in
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# The contents of this file are subject to the Mozilla Public
-# License Version 1.1 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS
-# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-# implied. See the License for the specific language governing
-# rights and limitations under the License.
-#
-# The Original Code is mozilla.org code
-#
-# The Initial Developer of the Original Code is Netscape
-# Communications Corporation. Portions created by Netscape are
-# Copyright (C) 2001 Netscape Communications Corporation. All
-# Rights Reserved.
-#
-# Contributor(s):
-#
-
-DEPTH = ../../../..
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-MODULE = winhooks
-XPIDL_MODULE = winhooks
-
-XPIDLSRCS = nsIWindowsHooks.idl
-
-include $(topsrcdir)/config/rules.mk
diff --git a/mozilla/browser/components/winhooks/public/nsIWindowsHooks.idl b/mozilla/browser/components/winhooks/public/nsIWindowsHooks.idl
deleted file mode 100755
index 459b30a947e..00000000000
--- a/mozilla/browser/components/winhooks/public/nsIWindowsHooks.idl
+++ /dev/null
@@ -1,254 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: NPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Bill Law
- * Aaron Kaluszka
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the NPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the NPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsISupports.idl"
-
-
-/* These interface provides support for integrating Mozilla into Windows.
- * This integration consists primarily of setting Mozilla as the "default
- * browser." Or more precisely, setting Mozilla as the executable to
- * handle certain file types.
- *
- * There are two subtly different types of desktop objects that Mozilla
- * can be configured to "handle:"
- * o File types (based on file extension)
- * o Internet shortcuts (based on URL protocol).
- *
- * While these are different types of objects, the mechanism by which
- * applications are matched with them is essentially the same.
- *
- * In the case of files, there is one more level of indirection. File
- * extensions are assigned a "file type" via a Windows registry entry.
- * For example, given the file extension ".foo", the file type is
- * determined by examing the value stored in the "default" value stored
- * at the registry key HKEY_LOCAL_MACHINE\Software\Classes\.foo.
- *
- * Once you have the "file type" then you use that the same way you use
- * Internet Shortcut protocol names to determine which application to
- * launch. The application is specified by the default value stored in
- * the registry key
- * HKEY_LOCAL_MACHINE\Software\Classes\\shell\open\command, where
- * is the "file type" or protocol name.
- *
- * If there are additional keys under "shell" then these appear on the
- * context menu for files/shortcuts of this type. Typically, there are
- * entries for "print." But Mozilla does not currently support a command
- * line option to print so we don't offer that.
- *
- * Previously, Netscape Communicator made itself the handler of standard
- * web things by creating a new file type "NetscapeMarkup" and mapping
- * extensions to that (.htm, .html, .shtml, .xbm), or, by setting itself
- * up as the "handler" for the file types of other web things (.jpg, .gif)
- * and Internet Shortcut protocols (ftp, gopher, http, https, mailto, news,
- * snews).
- *
- * In order to better enable Mozilla to co-exist with other browsers
- * (including Communicator), it will create yet another new file type,
- * "MozillaMarkup," that will be used to make Mozilla the default handler
- * for certain file extensions. This will be done by remapping those
- * extensions to this new type.
- *
- * Mozilla will attempt to remember the original mapping and restore it
- * when the user decides to no longer have Mozilla be the default handler
- * for that extension.
- *
- * Mozilla will drop support for some items that are no longer germane:
- * the .shtml file extension and the gopher: protocol. We will also, perhaps
- * only temporarily, drop support for protocols that aren't accessible from
- * the command line: mailto:, news:, and snews:.
- *
- * We will be adding support for the chrome: protocol (using the "-chrome"
- * command line option) and for .png, .xul and .xml file extensions.
- *
- * Missing Features:
- *
- * Currently, there is no way to extend the set of file types or protocols
- * that Mozilla can be associated with (save manually tweaking the Windows
- * registry). This is likely to be a problem for branded Mozilla browsers
- * that might support specialized file types or protocols (e.g., .aim files).
- *
- * The plan is to extend this interface so that such file types and protocols
- * can be set up using the implementation of the interfaces defined here.
- */
-
-interface nsIDOMWindowInternal;
-interface nsIDOMElement;
-
-/* nsIWindowsHooksSettings
- *
- * This interface is used to get/set the user preferences relating to
- * "windows hooks" (aka "windows integration"). It is basically just
- * a conglomeration of a bunch of boolean attributes; it exists mainly
- * for historical reasons (it corresponds to the internal Prefs struct
- * that was in nsIDefaultBrowser.h in Mozilla Classic).
- */
-[scriptable, uuid(4ce9aa90-0a6a-11d4-8076-00600811a9c3)]
-interface nsIWindowsHooksSettings : nsISupports {
-
- // Internet shortcuts (based on "protocol").
- attribute boolean isHandlingHTTP;
- attribute boolean isHandlingHTTPS;
-
- // File handling (based on extension).
- attribute boolean isHandlingHTML;
- attribute boolean isHandlingXHTML;
-
- // Nag dialog flag. Set this so that dialog
- // appears on startup if there is a mismatch
- // between registry and these settings.
- attribute boolean showDialog;
-
- // Registry mismatch indicator.
- // This is true if the Win32 registry is
- // currently set to match the preferences
- // in this object.
- readonly attribute boolean registryMatches;
-};
-
-/* nsIWindowsHooks
- *
- * This interface describes the service that you can use to
- * get/set the various windows integration features specified
- * by the nsIWindowsHooksPrefs attributes.
- */
-[scriptable, uuid(19c9fbb0-06a3-11d4-8076-00600811a9c3)]
-interface nsIWindowsHooks : nsISupports
-{
- /**
- * See nsIWindowsHooksSettings; The Windows Registry is updated when
- * this attribute is set.
- */
- attribute nsIWindowsHooksSettings settings;
-
- /**
- * Check that registry matches settings and if not, prompt user for whether
- * to reset. This is controlled by the showDialog setting. This will
- * perform the check only the first time the service is called.
- *
- * @param aParent parent window for any dialogs that will appear.
- * @return true if the windows integration dialog was shown, false if not.
- */
- boolean checkSettings(in nsIDOMWindowInternal aParent);
-
- const PRInt32 WALLPAPER_TILE = 0;
- const PRInt32 WALLPAPER_STRETCH = 1;
- const PRInt32 WALLPAPER_CENTER = 2;
-
- /**
- * Sets the desktop background image using either the HTML
- * element supplied or the background image of the element supplied.
- *
- * @param aImageElement Either a HTML
element or an element with
- * a background image from which to source the
- * background image.
- * @param useBackground Determines whether or not to interpret aImageElement
- * as a HTML
element or as another element whose
- * background image should be used.
- * @param position How to place the image on the desktop
- */
- void setImageAsWallpaper(in nsIDOMElement aImageElement, in boolean useBackground, in PRInt32 position);
-
- /**
- * Retrieves the current desktop background color.
- */
- PRUint32 getDesktopColor();
-
- /**
- * Sets the current desktop background color.
- *
- * @param color The color to use, in rgb format.
- */
- void setDesktopColor(in PRUint32 color);
-
- /**
- * Launches one of the Windows default clients.
- *
- * @param aClient The client type to open, as specified in the Windows Registry under:
- * HKEY_LOCAL_MACHINE\Software\Clients\
- * Typical values include "Mail", "News", "Contacts" etc.
- */
- void openDefaultClient(in string aClient);
-
- /**
- * Retrieve the number of unread mail messages from the system for the current user.
- *
- * @return The number of unread (new) mail messages for the current user.
- */
- readonly attribute unsigned long unreadMailCount;
-
-};
-
-/* nsIWindowsRegistry
- *
- * This interface describes the service that you can use to
- * get/set Win32 registry entries.
- *
- * Notice: This interface is incomplete and should be used at your own risk!
- */
-[scriptable, uuid(e07e7430-8d11-417c-83ee-c994400c452f)]
-interface nsIWindowsRegistry : nsISupports {
- /**
- * Valid starting keys for the Windows Registry.
- */
- const long HKCR = 0; // HKEY_CLASSES_ROOT
- const long HKCC = 1; // HKEY_CURRENT_CONFIG
- const long HKCU = 2; // HKEY_CURRENT_USER
- const long HKLM = 3; // HKEY_LOCAL_MACHINE
- const long HKU = 4; // HKEY_USERS
-
- /**
- * Retrieves a Windows Registry entry value.
- *
- * @param aHKeyConstant The starting key, using the constants defined above.
- * @param aSubKeyName The sub key to locate
- * @param aValueName The value to locate in the sub key. The empty string
- * returns the default value of the sub key.
- * @return The value of the specified sub key/value, truncated to 4096 bytes.
- */
- string getRegistryEntry(in long aHKeyConstant, in string aSubKeyName, in string aValueName);
-};
-
-%{C++
-#define NS_IWINDOWSHOOKS_CONTRACTID "@mozilla.org/winhooks;1"
-#define NS_IWINDOWSHOOKS_CLASSNAME "Mozilla Windows Integration Hooks"
-
-// XXXben - get rid of this
-// The key that is used to write the quick launch appname in the windows registry
-#define NS_QUICKLAUNCH_RUN_KEY "Mozilla Quick Launch"
-%}