diff --git a/embedding/browser/webBrowser/nsCommandHandler.cpp b/embedding/browser/webBrowser/nsCommandHandler.cpp new file mode 100644 index 000000000000..ebaf189c8a11 --- /dev/null +++ b/embedding/browser/webBrowser/nsCommandHandler.cpp @@ -0,0 +1,141 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * 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 the Mozilla browser. + * + * The Initial Developer of the Original Code is Netscape + * Communications, Inc. Portions created by Netscape are + * Copyright (C) 1999, Mozilla. All Rights Reserved. + * + * Contributor(s): + * Adam Lock + */ + +#include "nsCommandHandler.h" +#include "nsWebBrowser.h" +#include "nsDocShellTreeOwner.h" + +#include "nsIScriptGlobalObject.h" + +nsCommandHandler::nsCommandHandler() : + mWindow(nsnull) +{ + NS_INIT_REFCNT(); +} + +nsCommandHandler::~nsCommandHandler() +{ +} + +nsresult nsCommandHandler::GetCommandHandler(nsICommandHandler **aCommandHandler) +{ + NS_ENSURE_ARG_POINTER(aCommandHandler); + + *aCommandHandler = nsnull; + if (mWindow == nsnull) + { + return NS_ERROR_FAILURE; + } + + nsCOMPtr globalObj( do_QueryInterface(mWindow) ); + if (!globalObj) + { + return NS_ERROR_FAILURE; + } + + nsCOMPtr docShell; + globalObj->GetDocShell(getter_AddRefs(docShell)); + + // Find the treeowner + nsCOMPtr docShellAsTreeItem(do_QueryInterface(docShell)); + nsIWebBrowser *webBrowser = nsnull; + + nsIDocShellTreeOwner *treeOwner = nsnull; + docShellAsTreeItem->GetTreeOwner(&treeOwner); + + // See if the client on the tree owner implements nsICommandHandler + if (treeOwner) + { + nsDocShellTreeOwner *tree = NS_STATIC_CAST(nsDocShellTreeOwner *, treeOwner); + if (tree->mTreeOwner) + { + nsresult rv; + rv = tree->mTreeOwner->QueryInterface(NS_GET_IID(nsICommandHandler), (void **)aCommandHandler); + NS_RELEASE(treeOwner); + return rv; + } + NS_RELEASE(treeOwner); + } + *aCommandHandler = nsnull; + + return NS_OK; +} + +NS_IMPL_ADDREF(nsCommandHandler) +NS_IMPL_RELEASE(nsCommandHandler) + +NS_INTERFACE_MAP_BEGIN(nsCommandHandler) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICommandHandler) + NS_INTERFACE_MAP_ENTRY(nsICommandHandlerInit) + NS_INTERFACE_MAP_ENTRY(nsICommandHandler) +NS_INTERFACE_MAP_END + +/////////////////////////////////////////////////////////////////////////////// +// nsICommandHandlerInit implementation + +/* attribute nsIDocShell docShell; */ +NS_IMETHODIMP nsCommandHandler::GetWindow(nsIDOMWindow * *aWindow) +{ + *aWindow = nsnull; + return NS_OK; +} + +NS_IMETHODIMP nsCommandHandler::SetWindow(nsIDOMWindow * aWindow) +{ + if (aWindow == nsnull) + { + return NS_ERROR_FAILURE; + } + mWindow = aWindow; + return NS_OK; +} + +/////////////////////////////////////////////////////////////////////////////// +// nsICommandHandler implementation + +/* void do (in string aCommand, in string aStatus); */ +NS_IMETHODIMP nsCommandHandler::Exec(const char *aCommand, const char *aStatus) +{ + nsCOMPtr commandHandler; + GetCommandHandler(getter_AddRefs(commandHandler)); + + if (commandHandler) + { + return commandHandler->Exec(aCommand, aStatus); + } + + return NS_OK; +} + +/* void query (in string aCommand, in string aStatus); */ +NS_IMETHODIMP nsCommandHandler::Query(const char *aCommand, const char *aStatus) +{ + nsCOMPtr commandHandler; + GetCommandHandler(getter_AddRefs(commandHandler)); + + if (commandHandler) + { + return commandHandler->Query(aCommand, aStatus); + } + + return NS_OK; +} diff --git a/embedding/browser/webBrowser/nsCommandHandler.h b/embedding/browser/webBrowser/nsCommandHandler.h new file mode 100644 index 000000000000..00d8e1e33ef3 --- /dev/null +++ b/embedding/browser/webBrowser/nsCommandHandler.h @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * 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 the Mozilla browser. + * + * The Initial Developer of the Original Code is Netscape + * Communications, Inc. Portions created by Netscape are + * Copyright (C) 1999, Mozilla. All Rights Reserved. + * + * Contributor(s): + * Adam Lock + */ + +#ifndef NSCOMMANDHANDLER_H +#define NSCOMMANDHANDLER_H + +#include "nsISupports.h" +#include "nsICommandHandler.h" +#include "nsIDOMWindow.h" + +class nsCommandHandler : + public nsICommandHandlerInit, + public nsICommandHandler +{ + nsIDOMWindow *mWindow; + + nsresult GetCommandHandler(nsICommandHandler **aCommandHandler); + +public: + nsCommandHandler(); + + NS_DECL_ISUPPORTS + NS_DECL_NSICOMMANDHANDLERINIT + NS_DECL_NSICOMMANDHANDLER + +protected: + virtual ~nsCommandHandler(); +}; + +#endif \ No newline at end of file diff --git a/embedding/browser/webBrowser/nsICommandHandler.idl b/embedding/browser/webBrowser/nsICommandHandler.idl new file mode 100644 index 000000000000..fa8a7a567c60 --- /dev/null +++ b/embedding/browser/webBrowser/nsICommandHandler.idl @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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): + * Adam Lock + */ + +#include "nsISupports.idl" +#include "domstubs.idl" + +[scriptable, uuid(731C6C50-67D6-11d4-9529-0020183BF181)] +interface nsICommandHandlerInit : nsISupports +{ + attribute nsIDOMWindow window; +}; + +[scriptable, uuid(34A4FCF0-66FC-11d4-9528-0020183BF181)] +interface nsICommandHandler : nsISupports +{ + void exec(in string aCommand, in string aStatus); + void query(in string aCommand, in string aStatus, out string aResult); +}; + + +%{ C++ +// {3A449110-66FD-11d4-9528-0020183BF181} - +#define NS_COMMANDHANDLER_CID \ +{ 0x3a449110, 0x66fd, 0x11d4, { 0x95, 0x28, 0x0, 0x20, 0x18, 0x3b, 0xf1, 0x81 } } +#define NS_COMMANDHANDLER_PROGID \ +"component://netscape/embedding/browser/nsCommandHandler" +%}