embedding/tests/winEmbed/WebBrowserChrome.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/embedding/tests/winEmbed/WebBrowserChrome.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,591 @@
     1.4 +/* ***** BEGIN LICENSE BLOCK *****
     1.5 + * Version: Mozilla-sample-code 1.0
     1.6 + *
     1.7 + * Copyright (c) 2002 Netscape Communications Corporation and
     1.8 + * other contributors
     1.9 + *
    1.10 + * Permission is hereby granted, free of charge, to any person obtaining a
    1.11 + * copy of this Mozilla sample software and associated documentation files
    1.12 + * (the "Software"), to deal in the Software without restriction, including
    1.13 + * without limitation the rights to use, copy, modify, merge, publish,
    1.14 + * distribute, sublicense, and/or sell copies of the Software, and to permit
    1.15 + * persons to whom the Software is furnished to do so, subject to the
    1.16 + * following conditions:
    1.17 + *
    1.18 + * The above copyright notice and this permission notice shall be included
    1.19 + * in all copies or substantial portions of the Software.
    1.20 + *
    1.21 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    1.22 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    1.23 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    1.24 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    1.25 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    1.26 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    1.27 + * DEALINGS IN THE SOFTWARE.
    1.28 + *
    1.29 + * Contributor(s):
    1.30 + *
    1.31 + * ***** END LICENSE BLOCK ***** */
    1.32 +
    1.33 +// Local includes
    1.34 +#include "resource.h"
    1.35 +#include "winEmbed.h"
    1.36 +#include "WebBrowserChrome.h"
    1.37 +
    1.38 +// OS headers
    1.39 +#include <stdio.h>
    1.40 +
    1.41 +// Frozen APIs
    1.42 +
    1.43 +#include "nsStringAPI.h"
    1.44 +#include "nsIComponentManager.h"
    1.45 +#include "nsIDOMWindow.h"
    1.46 +#include "nsIInterfaceRequestor.h"
    1.47 +#include "nsIRequest.h"
    1.48 +#include "nsIURI.h"
    1.49 +#include "nsIWebProgress.h"
    1.50 +#include "nsCWebBrowser.h"
    1.51 +
    1.52 +// Glue APIs (not frozen, but safe to use because they are statically linked)
    1.53 +#include "nsComponentManagerUtils.h"
    1.54 +
    1.55 +// NON-FROZEN APIS!
    1.56 +#include "nsIWebNavigation.h"
    1.57 +
    1.58 +WebBrowserChrome::WebBrowserChrome()
    1.59 +{
    1.60 +    mNativeWindow = nullptr;
    1.61 +    mSizeSet = false;
    1.62 +}
    1.63 +
    1.64 +WebBrowserChrome::~WebBrowserChrome()
    1.65 +{
    1.66 +    WebBrowserChromeUI::Destroyed(this);
    1.67 +}
    1.68 +
    1.69 +nsresult WebBrowserChrome::CreateBrowser(int32_t aX, int32_t aY,
    1.70 +                                         int32_t aCX, int32_t aCY,
    1.71 +                                         nsIWebBrowser **aBrowser)
    1.72 +{
    1.73 +    NS_ENSURE_ARG_POINTER(aBrowser);
    1.74 +    *aBrowser = nullptr;
    1.75 +
    1.76 +    mWebBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID);
    1.77 +    
    1.78 +    if (!mWebBrowser)
    1.79 +        return NS_ERROR_FAILURE;
    1.80 +
    1.81 +    (void)mWebBrowser->SetContainerWindow(static_cast<nsIWebBrowserChrome*>(this));
    1.82 +
    1.83 +    nsCOMPtr<nsIBaseWindow> browserBaseWindow = do_QueryInterface(mWebBrowser);
    1.84 +
    1.85 +    mNativeWindow = WebBrowserChromeUI::CreateNativeWindow(static_cast<nsIWebBrowserChrome*>(this));
    1.86 +
    1.87 +    if (!mNativeWindow)
    1.88 +        return NS_ERROR_FAILURE;
    1.89 +
    1.90 +    browserBaseWindow->InitWindow( mNativeWindow,
    1.91 +                             nullptr, 
    1.92 +                             aX, aY, aCX, aCY);
    1.93 +    browserBaseWindow->Create();
    1.94 +
    1.95 +    nsCOMPtr<nsIWebProgressListener> listener(static_cast<nsIWebProgressListener*>(this));
    1.96 +    nsCOMPtr<nsIWeakReference> thisListener(do_GetWeakReference(listener));
    1.97 +    (void)mWebBrowser->AddWebBrowserListener(thisListener, 
    1.98 +        NS_GET_IID(nsIWebProgressListener));
    1.99 +
   1.100 +    // The window has been created. Now register for history notifications
   1.101 +    mWebBrowser->AddWebBrowserListener(thisListener, NS_GET_IID(nsISHistoryListener));
   1.102 +
   1.103 +    if (mWebBrowser)
   1.104 +    {
   1.105 +      *aBrowser = mWebBrowser;
   1.106 +      NS_ADDREF(*aBrowser);
   1.107 +      return NS_OK;
   1.108 +    }
   1.109 +    return NS_ERROR_FAILURE;
   1.110 +}
   1.111 +
   1.112 +//*****************************************************************************
   1.113 +// WebBrowserChrome::nsISupports
   1.114 +//*****************************************************************************   
   1.115 +
   1.116 +NS_IMPL_ADDREF(WebBrowserChrome)
   1.117 +NS_IMPL_RELEASE(WebBrowserChrome)
   1.118 +
   1.119 +NS_INTERFACE_MAP_BEGIN(WebBrowserChrome)
   1.120 +   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebBrowserChrome)
   1.121 +   NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
   1.122 +   NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
   1.123 +   NS_INTERFACE_MAP_ENTRY(nsIEmbeddingSiteWindow)
   1.124 +   NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) // optional
   1.125 +   NS_INTERFACE_MAP_ENTRY(nsISHistoryListener)
   1.126 +   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   1.127 +   NS_INTERFACE_MAP_ENTRY(nsIObserver)
   1.128 +   NS_INTERFACE_MAP_ENTRY(nsIContextMenuListener)
   1.129 +   NS_INTERFACE_MAP_ENTRY(nsITooltipListener)
   1.130 +NS_INTERFACE_MAP_END
   1.131 +
   1.132 +//*****************************************************************************
   1.133 +// WebBrowserChrome::nsIInterfaceRequestor
   1.134 +//*****************************************************************************   
   1.135 +
   1.136 +NS_IMETHODIMP WebBrowserChrome::GetInterface(const nsIID &aIID, void** aInstancePtr)
   1.137 +{
   1.138 +    NS_ENSURE_ARG_POINTER(aInstancePtr);
   1.139 +
   1.140 +    *aInstancePtr = 0;
   1.141 +    if (aIID.Equals(NS_GET_IID(nsIDOMWindow)))
   1.142 +    {
   1.143 +        if (mWebBrowser)
   1.144 +        {
   1.145 +            return mWebBrowser->GetContentDOMWindow((nsIDOMWindow **) aInstancePtr);
   1.146 +        }
   1.147 +        return NS_ERROR_NOT_INITIALIZED;
   1.148 +    }
   1.149 +    return QueryInterface(aIID, aInstancePtr);
   1.150 +}
   1.151 +
   1.152 +//*****************************************************************************
   1.153 +// WebBrowserChrome::nsIWebBrowserChrome
   1.154 +//*****************************************************************************   
   1.155 +
   1.156 +NS_IMETHODIMP WebBrowserChrome::SetStatus(uint32_t aType, const char16_t* aStatus)
   1.157 +{
   1.158 +    WebBrowserChromeUI::UpdateStatusBarText(this, aStatus);
   1.159 +    return NS_OK;
   1.160 +}
   1.161 +
   1.162 +NS_IMETHODIMP WebBrowserChrome::GetWebBrowser(nsIWebBrowser** aWebBrowser)
   1.163 +{
   1.164 +    NS_ENSURE_ARG_POINTER(aWebBrowser);
   1.165 +    *aWebBrowser = mWebBrowser;
   1.166 +    NS_IF_ADDREF(*aWebBrowser);
   1.167 +    return NS_OK;
   1.168 +}
   1.169 +
   1.170 +NS_IMETHODIMP WebBrowserChrome::SetWebBrowser(nsIWebBrowser* aWebBrowser)
   1.171 +{
   1.172 +    mWebBrowser = aWebBrowser;
   1.173 +    return NS_OK;
   1.174 +}
   1.175 +
   1.176 +NS_IMETHODIMP WebBrowserChrome::GetChromeFlags(uint32_t* aChromeMask)
   1.177 +{
   1.178 +    *aChromeMask = mChromeFlags;
   1.179 +    return NS_OK;
   1.180 +}
   1.181 +
   1.182 +NS_IMETHODIMP WebBrowserChrome::SetChromeFlags(uint32_t aChromeMask)
   1.183 +{
   1.184 +    mChromeFlags = aChromeMask;
   1.185 +    return NS_OK;
   1.186 +}
   1.187 +
   1.188 +NS_IMETHODIMP WebBrowserChrome::DestroyBrowserWindow(void)
   1.189 +{
   1.190 +    WebBrowserChromeUI::Destroy(this);
   1.191 +    return NS_OK;
   1.192 +}
   1.193 +
   1.194 +
   1.195 +// IN: The desired browser client area dimensions.
   1.196 +NS_IMETHODIMP WebBrowserChrome::SizeBrowserTo(int32_t aWidth, int32_t aHeight)
   1.197 +{
   1.198 +  /* This isn't exactly correct: we're setting the whole window to
   1.199 +     the size requested for the browser. At time of writing, though,
   1.200 +     it's fine and useful for winEmbed's purposes. */
   1.201 +  WebBrowserChromeUI::SizeTo(this, aWidth, aHeight);
   1.202 +  mSizeSet = true;
   1.203 +  return NS_OK;
   1.204 +}
   1.205 +
   1.206 +
   1.207 +NS_IMETHODIMP WebBrowserChrome::ShowAsModal(void)
   1.208 +{
   1.209 +  if (mDependentParent)
   1.210 +    AppCallbacks::EnableChromeWindow(mDependentParent, false);
   1.211 +
   1.212 +  mContinueModalLoop = true;
   1.213 +  AppCallbacks::RunEventLoop(mContinueModalLoop);
   1.214 +
   1.215 +  if (mDependentParent)
   1.216 +    AppCallbacks::EnableChromeWindow(mDependentParent, true);
   1.217 +
   1.218 +  return NS_OK;
   1.219 +}
   1.220 +
   1.221 +NS_IMETHODIMP WebBrowserChrome::IsWindowModal(bool *_retval)
   1.222 +{
   1.223 +    *_retval = false;
   1.224 +    return NS_ERROR_NOT_IMPLEMENTED;
   1.225 +}
   1.226 +
   1.227 +NS_IMETHODIMP WebBrowserChrome::ExitModalEventLoop(nsresult aStatus)
   1.228 +{
   1.229 +  mContinueModalLoop = false;
   1.230 +  return NS_OK;
   1.231 +}
   1.232 +
   1.233 +//*****************************************************************************
   1.234 +// WebBrowserChrome::nsIWebBrowserChromeFocus
   1.235 +//*****************************************************************************
   1.236 +
   1.237 +NS_IMETHODIMP WebBrowserChrome::FocusNextElement()
   1.238 +{
   1.239 +    return NS_ERROR_NOT_IMPLEMENTED;
   1.240 +}
   1.241 +
   1.242 +NS_IMETHODIMP WebBrowserChrome::FocusPrevElement()
   1.243 +{
   1.244 +    return NS_ERROR_NOT_IMPLEMENTED;
   1.245 +}
   1.246 +
   1.247 +//*****************************************************************************
   1.248 +// WebBrowserChrome::nsIWebProgressListener
   1.249 +//*****************************************************************************   
   1.250 +
   1.251 +NS_IMETHODIMP WebBrowserChrome::OnProgressChange(nsIWebProgress *progress, nsIRequest *request,
   1.252 +                                                  int32_t curSelfProgress, int32_t maxSelfProgress,
   1.253 +                                                  int32_t curTotalProgress, int32_t maxTotalProgress)
   1.254 +{
   1.255 +    WebBrowserChromeUI::UpdateProgress(this, curTotalProgress, maxTotalProgress);
   1.256 +    return NS_OK;
   1.257 +}
   1.258 +
   1.259 +NS_IMETHODIMP WebBrowserChrome::OnStateChange(nsIWebProgress *progress, nsIRequest *request,
   1.260 +                                               uint32_t progressStateFlags, nsresult status)
   1.261 +{
   1.262 +    if ((progressStateFlags & STATE_START) && (progressStateFlags & STATE_IS_DOCUMENT))
   1.263 +    {
   1.264 +        WebBrowserChromeUI::UpdateBusyState(this, true);
   1.265 +    }
   1.266 +
   1.267 +    if ((progressStateFlags & STATE_STOP) && (progressStateFlags & STATE_IS_DOCUMENT))
   1.268 +    {
   1.269 +        WebBrowserChromeUI::UpdateBusyState(this, false);
   1.270 +        WebBrowserChromeUI::UpdateProgress(this, 0, 100);
   1.271 +        WebBrowserChromeUI::UpdateStatusBarText(this, nullptr);
   1.272 +        ContentFinishedLoading();
   1.273 +    }
   1.274 +
   1.275 +    return NS_OK;
   1.276 +}
   1.277 +
   1.278 +
   1.279 +NS_IMETHODIMP WebBrowserChrome::OnLocationChange(nsIWebProgress* aWebProgress,
   1.280 +                                                 nsIRequest* aRequest,
   1.281 +                                                 nsIURI *location,
   1.282 +                                                 uint32_t aFlags)
   1.283 +{
   1.284 +  bool isSubFrameLoad = false; // Is this a subframe load
   1.285 +  if (aWebProgress) {
   1.286 +    nsCOMPtr<nsIDOMWindow>  domWindow;
   1.287 +    nsCOMPtr<nsIDOMWindow>  topDomWindow;
   1.288 +    aWebProgress->GetDOMWindow(getter_AddRefs(domWindow));
   1.289 +    if (domWindow) { // Get root domWindow
   1.290 +      domWindow->GetTop(getter_AddRefs(topDomWindow));
   1.291 +    }
   1.292 +    if (domWindow != topDomWindow)
   1.293 +      isSubFrameLoad = true;
   1.294 +  }
   1.295 +  if (!isSubFrameLoad)
   1.296 +    WebBrowserChromeUI::UpdateCurrentURI(this);
   1.297 +  return NS_OK;
   1.298 +}
   1.299 +
   1.300 +NS_IMETHODIMP 
   1.301 +WebBrowserChrome::OnStatusChange(nsIWebProgress* aWebProgress,
   1.302 +                                 nsIRequest* aRequest,
   1.303 +                                 nsresult aStatus,
   1.304 +                                 const char16_t* aMessage)
   1.305 +{
   1.306 +    WebBrowserChromeUI::UpdateStatusBarText(this, aMessage);
   1.307 +    return NS_OK;
   1.308 +}
   1.309 +
   1.310 +
   1.311 +
   1.312 +NS_IMETHODIMP 
   1.313 +WebBrowserChrome::OnSecurityChange(nsIWebProgress *aWebProgress, 
   1.314 +                                    nsIRequest *aRequest, 
   1.315 +                                    uint32_t state)
   1.316 +{
   1.317 +    return NS_OK;
   1.318 +}
   1.319 +
   1.320 +//*****************************************************************************
   1.321 +// WebBrowserChrome::nsISHistoryListener
   1.322 +//*****************************************************************************   
   1.323 +
   1.324 +NS_IMETHODIMP
   1.325 +WebBrowserChrome::OnHistoryNewEntry(nsIURI * aNewURI)
   1.326 +{
   1.327 +    return SendHistoryStatusMessage(aNewURI, "add");
   1.328 +}
   1.329 +
   1.330 +NS_IMETHODIMP
   1.331 +WebBrowserChrome::OnHistoryGoBack(nsIURI * aBackURI, bool * aContinue)
   1.332 +{
   1.333 +    // For now, let the operation continue
   1.334 +    *aContinue = true;
   1.335 +    return SendHistoryStatusMessage(aBackURI, "back");
   1.336 +}
   1.337 +
   1.338 +
   1.339 +NS_IMETHODIMP
   1.340 +WebBrowserChrome::OnHistoryGoForward(nsIURI * aForwardURI, bool * aContinue)
   1.341 +{
   1.342 +    // For now, let the operation continue
   1.343 +    *aContinue = true;
   1.344 +    return SendHistoryStatusMessage(aForwardURI, "forward");
   1.345 +}
   1.346 +
   1.347 +
   1.348 +NS_IMETHODIMP
   1.349 +WebBrowserChrome::OnHistoryGotoIndex(int32_t aIndex, nsIURI * aGotoURI, bool * aContinue)
   1.350 +{
   1.351 +    // For now, let the operation continue
   1.352 +    *aContinue = true;
   1.353 +    return SendHistoryStatusMessage(aGotoURI, "goto", aIndex);
   1.354 +}
   1.355 +
   1.356 +NS_IMETHODIMP
   1.357 +WebBrowserChrome::OnHistoryReload(nsIURI * aURI, uint32_t aReloadFlags, bool * aContinue)
   1.358 +{
   1.359 +    // For now, let the operation continue
   1.360 +    *aContinue = true;
   1.361 +    return SendHistoryStatusMessage(aURI, "reload", 0 /* no info to pass here */, aReloadFlags);
   1.362 +}
   1.363 +
   1.364 +NS_IMETHODIMP
   1.365 +WebBrowserChrome::OnHistoryPurge(int32_t aNumEntries, bool *aContinue)
   1.366 +{
   1.367 +    // For now let the operation continue
   1.368 +    *aContinue = false;
   1.369 +    return SendHistoryStatusMessage(nullptr, "purge", aNumEntries);
   1.370 +}
   1.371 +
   1.372 +NS_IMETHODIMP
   1.373 +WebBrowserChrome::OnHistoryReplaceEntry(int32_t aIndex)
   1.374 +{
   1.375 +    return SendHistoryStatusMessage(nullptr, "replace", aIndex);
   1.376 +}
   1.377 +
   1.378 +static void
   1.379 +AppendIntToCString(int32_t info1, nsCString& aResult)
   1.380 +{
   1.381 +  char intstr[10];
   1.382 +  _snprintf(intstr, sizeof(intstr) - 1, "%i", info1);
   1.383 +  intstr[sizeof(intstr) - 1] = '\0';
   1.384 +  aResult.Append(intstr);
   1.385 +}
   1.386 +
   1.387 +nsresult
   1.388 +WebBrowserChrome::SendHistoryStatusMessage(nsIURI * aURI, char * operation, int32_t info1, uint32_t aReloadFlags)
   1.389 +{
   1.390 +    nsCString uriSpec;
   1.391 +    if (aURI)
   1.392 +    {
   1.393 +        aURI->GetSpec(uriSpec);
   1.394 +    }
   1.395 +
   1.396 +    nsCString status;
   1.397 +
   1.398 +    if(!(strcmp(operation, "back")))
   1.399 +    {
   1.400 +        status.Assign("Going back to url: ");
   1.401 +        status.Append(uriSpec);
   1.402 +    }
   1.403 +    else if (!(strcmp(operation, "forward")))
   1.404 +    {
   1.405 +        // Going forward. XXX Get string from a resource file
   1.406 +        status.Assign("Going forward to url: ");
   1.407 +        status.Append(uriSpec);
   1.408 +    }
   1.409 +    else if (!(strcmp(operation, "reload")))
   1.410 +    {
   1.411 +        // Reloading. XXX Get string from a resource file
   1.412 +        if (aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY && 
   1.413 +            aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE)
   1.414 +        {
   1.415 +            status.Assign("Reloading url, (bypassing proxy and cache): ");
   1.416 +        }
   1.417 +        else if (aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY)
   1.418 +        {
   1.419 +            status.Assign("Reloading url, (bypassing proxy): ");
   1.420 +        }
   1.421 +        else if (aReloadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE)
   1.422 +        {
   1.423 +            status.Assign("Reloading url, (bypassing cache): ");
   1.424 +        }
   1.425 +        else
   1.426 +        {
   1.427 +            status.Assign("Reloading url, (normal): ");
   1.428 +        }
   1.429 +        status.Append(uriSpec);
   1.430 +    }
   1.431 +    else if (!(strcmp(operation, "add")))
   1.432 +    {
   1.433 +        status.Assign(uriSpec);
   1.434 +        status.Append(" added to session History");
   1.435 +    }
   1.436 +    else if (!(strcmp(operation, "goto")))
   1.437 +    {
   1.438 +        status.Assign("Going to HistoryIndex: ");
   1.439 +
   1.440 +	AppendIntToCString(info1, status);
   1.441 +
   1.442 +        status.Append(" Url: ");
   1.443 +        status.Append(uriSpec);
   1.444 +    }
   1.445 +    else if (!(strcmp(operation, "purge")))
   1.446 +    {
   1.447 +        AppendIntToCString(info1, status);
   1.448 +        status.Append(" purged from Session History");
   1.449 +    }
   1.450 +    else if (!(strcmp(operation, "replace")))
   1.451 +    {
   1.452 +        status.Assign("Replacing HistoryIndex: ");
   1.453 +        AppendIntToCString(info1, status);
   1.454 +    }
   1.455 +
   1.456 +    nsString wstatus;
   1.457 +    NS_CStringToUTF16(status, NS_CSTRING_ENCODING_UTF8, wstatus);
   1.458 +    WebBrowserChromeUI::UpdateStatusBarText(this, wstatus.get());
   1.459 +
   1.460 +    return NS_OK;
   1.461 +}
   1.462 +
   1.463 +void WebBrowserChrome::ContentFinishedLoading()
   1.464 +{
   1.465 +  // if it was a chrome window and no one has already specified a size,
   1.466 +  // size to content
   1.467 +  if (mWebBrowser && !mSizeSet &&
   1.468 +     (mChromeFlags & nsIWebBrowserChrome::CHROME_OPENAS_CHROME)) {
   1.469 +    nsCOMPtr<nsIDOMWindow> contentWin;
   1.470 +    mWebBrowser->GetContentDOMWindow(getter_AddRefs(contentWin));
   1.471 +    if (contentWin)
   1.472 +        contentWin->SizeToContent();
   1.473 +    WebBrowserChromeUI::ShowWindow(this, true);
   1.474 +  }
   1.475 +}
   1.476 +
   1.477 +
   1.478 +//*****************************************************************************
   1.479 +// WebBrowserChrome::nsIEmbeddingSiteWindow
   1.480 +//*****************************************************************************   
   1.481 +
   1.482 +NS_IMETHODIMP WebBrowserChrome::SetDimensions(uint32_t aFlags, int32_t x, int32_t y, int32_t cx, int32_t cy)
   1.483 +{
   1.484 +    return NS_ERROR_NOT_IMPLEMENTED;
   1.485 +}
   1.486 +
   1.487 +NS_IMETHODIMP WebBrowserChrome::GetDimensions(uint32_t aFlags, int32_t *x, int32_t *y, int32_t *cx, int32_t *cy)
   1.488 +{
   1.489 +    if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION)
   1.490 +    {
   1.491 +        *x = 0;
   1.492 +        *y = 0;
   1.493 +    }
   1.494 +    if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER ||
   1.495 +        aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER)
   1.496 +    {
   1.497 +        *cx = 0;
   1.498 +        *cy = 0;
   1.499 +    }
   1.500 +    return NS_ERROR_NOT_IMPLEMENTED;
   1.501 +}
   1.502 +
   1.503 +/* void setFocus (); */
   1.504 +NS_IMETHODIMP WebBrowserChrome::SetFocus()
   1.505 +{
   1.506 +    WebBrowserChromeUI::SetFocus(this);
   1.507 +    return NS_OK;
   1.508 +}
   1.509 +
   1.510 +/* void blur (); */
   1.511 +NS_IMETHODIMP WebBrowserChrome::Blur()
   1.512 +{
   1.513 +    return NS_ERROR_NOT_IMPLEMENTED;
   1.514 +}
   1.515 +
   1.516 +/* attribute wstring title; */
   1.517 +NS_IMETHODIMP WebBrowserChrome::GetTitle(char16_t * *aTitle)
   1.518 +{
   1.519 +   NS_ENSURE_ARG_POINTER(aTitle);
   1.520 +
   1.521 +   *aTitle = nullptr;
   1.522 +   
   1.523 +   return NS_ERROR_NOT_IMPLEMENTED;
   1.524 +}
   1.525 +NS_IMETHODIMP WebBrowserChrome::SetTitle(const char16_t * aTitle)
   1.526 +{
   1.527 +    return NS_ERROR_NOT_IMPLEMENTED;
   1.528 +}
   1.529 +
   1.530 +/* attribute boolean visibility; */
   1.531 +NS_IMETHODIMP WebBrowserChrome::GetVisibility(bool * aVisibility)
   1.532 +{
   1.533 +    NS_ENSURE_ARG_POINTER(aVisibility);
   1.534 +    *aVisibility = true;
   1.535 +    return NS_OK;
   1.536 +}
   1.537 +NS_IMETHODIMP WebBrowserChrome::SetVisibility(bool aVisibility)
   1.538 +{
   1.539 +    return NS_OK;
   1.540 +}
   1.541 +
   1.542 +/* attribute nativeSiteWindow siteWindow */
   1.543 +NS_IMETHODIMP WebBrowserChrome::GetSiteWindow(void * *aSiteWindow)
   1.544 +{
   1.545 +   NS_ENSURE_ARG_POINTER(aSiteWindow);
   1.546 +
   1.547 +   *aSiteWindow = mNativeWindow;
   1.548 +   return NS_OK;
   1.549 +}
   1.550 +
   1.551 +
   1.552 +//*****************************************************************************
   1.553 +// WebBrowserChrome::nsIObserver
   1.554 +//*****************************************************************************   
   1.555 +
   1.556 +NS_IMETHODIMP WebBrowserChrome::Observe(nsISupports *aSubject, const char *aTopic, const char16_t *someData)
   1.557 +{
   1.558 +    nsresult rv = NS_OK;
   1.559 +    if (strcmp(aTopic, "profile-change-teardown") == 0)
   1.560 +    {
   1.561 +        // A profile change means death for this window
   1.562 +        WebBrowserChromeUI::Destroy(this);
   1.563 +    }
   1.564 +    return rv;
   1.565 +}
   1.566 +
   1.567 +//*****************************************************************************
   1.568 +// WebBrowserChrome::nsIContextMenuListener
   1.569 +//*****************************************************************************   
   1.570 +
   1.571 +/* void OnShowContextMenu (in unsigned long aContextFlags, in nsIDOMEvent aEvent, in nsIDOMNode aNode); */
   1.572 +NS_IMETHODIMP WebBrowserChrome::OnShowContextMenu(uint32_t aContextFlags, nsIDOMEvent *aEvent, nsIDOMNode *aNode)
   1.573 +{
   1.574 +    WebBrowserChromeUI::ShowContextMenu(this, aContextFlags, aEvent, aNode);
   1.575 +    return NS_OK;
   1.576 +}
   1.577 +
   1.578 +//*****************************************************************************
   1.579 +// WebBrowserChrome::nsITooltipListener
   1.580 +//*****************************************************************************   
   1.581 +
   1.582 +/* void OnShowTooltip (in long aXCoords, in long aYCoords, in wstring aTipText); */
   1.583 +NS_IMETHODIMP WebBrowserChrome::OnShowTooltip(int32_t aXCoords, int32_t aYCoords, const char16_t *aTipText)
   1.584 +{
   1.585 +    WebBrowserChromeUI::ShowTooltip(this, aXCoords, aYCoords, aTipText);
   1.586 +    return NS_OK;
   1.587 +}
   1.588 +
   1.589 +/* void OnHideTooltip (); */
   1.590 +NS_IMETHODIMP WebBrowserChrome::OnHideTooltip()
   1.591 +{
   1.592 +    WebBrowserChromeUI::HideTooltip(this);
   1.593 +    return NS_OK;
   1.594 +}

mercurial