1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/xpfe/appshell/src/nsChromeTreeOwner.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,597 @@ 1.4 +/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*- 1.5 + * 1.6 + * This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +// Local Includes 1.11 +#include "nsChromeTreeOwner.h" 1.12 +#include "nsXULWindow.h" 1.13 + 1.14 +// Helper Classes 1.15 +#include "nsString.h" 1.16 +#include "nsIEmbeddingSiteWindow.h" 1.17 +#include "nsIServiceManager.h" 1.18 +#include "nsIDocShellTreeItem.h" 1.19 + 1.20 +// Interfaces needed to include 1.21 +#include "nsIPrompt.h" 1.22 +#include "nsIAuthPrompt.h" 1.23 +#include "nsIBrowserDOMWindow.h" 1.24 +#include "nsIWebProgress.h" 1.25 +#include "nsIWidget.h" 1.26 +#include "nsIWindowMediator.h" 1.27 +#include "nsIDOMChromeWindow.h" 1.28 +#include "nsIDOMNode.h" 1.29 +#include "nsIDOMElement.h" 1.30 +#include "nsIDOMNodeList.h" 1.31 +#include "nsIDOMXULElement.h" 1.32 +#include "nsIXULBrowserWindow.h" 1.33 +#include "mozilla/dom/Element.h" 1.34 + 1.35 +using namespace mozilla; 1.36 + 1.37 +//***************************************************************************** 1.38 +// nsChromeTreeOwner string literals 1.39 +//***************************************************************************** 1.40 + 1.41 +struct nsChromeTreeOwnerLiterals 1.42 +{ 1.43 + const nsLiteralString kPersist; 1.44 + const nsLiteralString kScreenX; 1.45 + const nsLiteralString kScreenY; 1.46 + const nsLiteralString kWidth; 1.47 + const nsLiteralString kHeight; 1.48 + const nsLiteralString kSizemode; 1.49 + const nsLiteralString kSpace; 1.50 + 1.51 + nsChromeTreeOwnerLiterals() 1.52 + : NS_LITERAL_STRING_INIT(kPersist,"persist") 1.53 + , NS_LITERAL_STRING_INIT(kScreenX,"screenX") 1.54 + , NS_LITERAL_STRING_INIT(kScreenY,"screenY") 1.55 + , NS_LITERAL_STRING_INIT(kWidth,"width") 1.56 + , NS_LITERAL_STRING_INIT(kHeight,"height") 1.57 + , NS_LITERAL_STRING_INIT(kSizemode,"sizemode") 1.58 + , NS_LITERAL_STRING_INIT(kSpace," ") 1.59 + {} 1.60 +}; 1.61 + 1.62 +static nsChromeTreeOwnerLiterals *gLiterals; 1.63 + 1.64 +nsresult 1.65 +nsChromeTreeOwner::InitGlobals() 1.66 +{ 1.67 + NS_ASSERTION(gLiterals == nullptr, "already initialized"); 1.68 + gLiterals = new nsChromeTreeOwnerLiterals(); 1.69 + if (!gLiterals) 1.70 + return NS_ERROR_OUT_OF_MEMORY; 1.71 + return NS_OK; 1.72 +} 1.73 + 1.74 +void 1.75 +nsChromeTreeOwner::FreeGlobals() 1.76 +{ 1.77 + delete gLiterals; 1.78 + gLiterals = nullptr; 1.79 +} 1.80 + 1.81 +//***************************************************************************** 1.82 +//*** nsChromeTreeOwner: Object Management 1.83 +//***************************************************************************** 1.84 + 1.85 +nsChromeTreeOwner::nsChromeTreeOwner() : mXULWindow(nullptr) 1.86 +{ 1.87 +} 1.88 + 1.89 +nsChromeTreeOwner::~nsChromeTreeOwner() 1.90 +{ 1.91 +} 1.92 + 1.93 +//***************************************************************************** 1.94 +// nsChromeTreeOwner::nsISupports 1.95 +//***************************************************************************** 1.96 + 1.97 +NS_IMPL_ADDREF(nsChromeTreeOwner) 1.98 +NS_IMPL_RELEASE(nsChromeTreeOwner) 1.99 + 1.100 +NS_INTERFACE_MAP_BEGIN(nsChromeTreeOwner) 1.101 + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocShellTreeOwner) 1.102 + NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner) 1.103 + NS_INTERFACE_MAP_ENTRY(nsIBaseWindow) 1.104 + NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) 1.105 + NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) 1.106 + NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) 1.107 +NS_INTERFACE_MAP_END 1.108 + 1.109 +//***************************************************************************** 1.110 +// nsChromeTreeOwner::nsIInterfaceRequestor 1.111 +//***************************************************************************** 1.112 + 1.113 +NS_IMETHODIMP nsChromeTreeOwner::GetInterface(const nsIID& aIID, void** aSink) 1.114 +{ 1.115 + NS_ENSURE_ARG_POINTER(aSink); 1.116 + 1.117 + if(aIID.Equals(NS_GET_IID(nsIPrompt))) { 1.118 + NS_ENSURE_STATE(mXULWindow); 1.119 + return mXULWindow->GetInterface(aIID, aSink); 1.120 + } 1.121 + if(aIID.Equals(NS_GET_IID(nsIAuthPrompt))) { 1.122 + NS_ENSURE_STATE(mXULWindow); 1.123 + return mXULWindow->GetInterface(aIID, aSink); 1.124 + } 1.125 + if(aIID.Equals(NS_GET_IID(nsIWebBrowserChrome))) { 1.126 + NS_ENSURE_STATE(mXULWindow); 1.127 + return mXULWindow->GetInterface(aIID, aSink); 1.128 + } 1.129 + if (aIID.Equals(NS_GET_IID(nsIEmbeddingSiteWindow))) { 1.130 + NS_ENSURE_STATE(mXULWindow); 1.131 + return mXULWindow->GetInterface(aIID, aSink); 1.132 + } 1.133 + if (aIID.Equals(NS_GET_IID(nsIXULWindow))) { 1.134 + NS_ENSURE_STATE(mXULWindow); 1.135 + return mXULWindow->QueryInterface(aIID, aSink); 1.136 + } 1.137 + 1.138 + return QueryInterface(aIID, aSink); 1.139 +} 1.140 + 1.141 +//***************************************************************************** 1.142 +// nsChromeTreeOwner::nsIDocShellTreeOwner 1.143 +//***************************************************************************** 1.144 + 1.145 +NS_IMETHODIMP nsChromeTreeOwner::FindItemWithName(const char16_t* aName, 1.146 + nsIDocShellTreeItem* aRequestor, nsIDocShellTreeItem* aOriginalRequestor, 1.147 + nsIDocShellTreeItem** aFoundItem) 1.148 +{ 1.149 + NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); 1.150 + 1.151 + NS_ENSURE_ARG_POINTER(aFoundItem); 1.152 + 1.153 + *aFoundItem = nullptr; 1.154 + 1.155 + bool fIs_Content = false; 1.156 + 1.157 + /* Special Cases */ 1.158 + if(!aName || !*aName) 1.159 + return NS_OK; 1.160 + 1.161 + nsDependentString name(aName); 1.162 + 1.163 + if(name.LowerCaseEqualsLiteral("_blank")) 1.164 + return NS_OK; 1.165 + // _main is an IE target which should be case-insensitive but isn't 1.166 + // see bug 217886 for details 1.167 + if(name.LowerCaseEqualsLiteral("_content") || name.EqualsLiteral("_main")) 1.168 + { 1.169 + NS_ENSURE_STATE(mXULWindow); 1.170 + fIs_Content = true; 1.171 + mXULWindow->GetPrimaryContentShell(aFoundItem); 1.172 + if(*aFoundItem) 1.173 + return NS_OK; 1.174 + // Otherwise fall through and ask the other windows for a content area. 1.175 + } 1.176 + 1.177 + nsCOMPtr<nsIWindowMediator> windowMediator(do_GetService(kWindowMediatorCID)); 1.178 + NS_ENSURE_TRUE(windowMediator, NS_ERROR_FAILURE); 1.179 + 1.180 + nsCOMPtr<nsISimpleEnumerator> windowEnumerator; 1.181 + NS_ENSURE_SUCCESS(windowMediator->GetXULWindowEnumerator(nullptr, 1.182 + getter_AddRefs(windowEnumerator)), NS_ERROR_FAILURE); 1.183 + 1.184 + bool more; 1.185 + 1.186 + windowEnumerator->HasMoreElements(&more); 1.187 + while(more) 1.188 + { 1.189 + nsCOMPtr<nsISupports> nextWindow = nullptr; 1.190 + windowEnumerator->GetNext(getter_AddRefs(nextWindow)); 1.191 + nsCOMPtr<nsIXULWindow> xulWindow(do_QueryInterface(nextWindow)); 1.192 + NS_ENSURE_TRUE(xulWindow, NS_ERROR_FAILURE); 1.193 + 1.194 + nsCOMPtr<nsIDocShellTreeItem> shellAsTreeItem; 1.195 + 1.196 + if(fIs_Content) 1.197 + { 1.198 + xulWindow->GetPrimaryContentShell(aFoundItem); 1.199 + } 1.200 + else 1.201 + { 1.202 + // Note that we don't look for targetable content shells here... 1.203 + // in fact, we aren't looking for content shells at all! 1.204 + nsCOMPtr<nsIDocShell> shell; 1.205 + xulWindow->GetDocShell(getter_AddRefs(shell)); 1.206 + shellAsTreeItem = do_QueryInterface(shell); 1.207 + if (shellAsTreeItem) { 1.208 + // Get the root tree item of same type, since roots are the only 1.209 + // things that call into the treeowner to look for named items. 1.210 + nsCOMPtr<nsIDocShellTreeItem> root; 1.211 + shellAsTreeItem->GetSameTypeRootTreeItem(getter_AddRefs(root)); 1.212 + shellAsTreeItem = root; 1.213 + } 1.214 + if(shellAsTreeItem && aRequestor != shellAsTreeItem) 1.215 + { 1.216 + // Do this so we can pass in the tree owner as the requestor so the child knows not 1.217 + // to call back up. 1.218 + nsCOMPtr<nsIDocShellTreeOwner> shellOwner; 1.219 + shellAsTreeItem->GetTreeOwner(getter_AddRefs(shellOwner)); 1.220 + nsCOMPtr<nsISupports> shellOwnerSupports(do_QueryInterface(shellOwner)); 1.221 + 1.222 + shellAsTreeItem->FindItemWithName(aName, shellOwnerSupports, 1.223 + aOriginalRequestor, aFoundItem); 1.224 + } 1.225 + } 1.226 + if(*aFoundItem) 1.227 + return NS_OK; 1.228 + windowEnumerator->HasMoreElements(&more); 1.229 + } 1.230 + return NS_OK; 1.231 +} 1.232 + 1.233 +NS_IMETHODIMP 1.234 +nsChromeTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContentShell, 1.235 + bool aPrimary, bool aTargetable, 1.236 + const nsAString& aID) 1.237 +{ 1.238 + NS_ENSURE_STATE(mXULWindow); 1.239 + return mXULWindow->ContentShellAdded(aContentShell, aPrimary, aTargetable, 1.240 + aID); 1.241 +} 1.242 + 1.243 +NS_IMETHODIMP 1.244 +nsChromeTreeOwner::ContentShellRemoved(nsIDocShellTreeItem* aContentShell) 1.245 +{ 1.246 + NS_ENSURE_STATE(mXULWindow); 1.247 + return mXULWindow->ContentShellRemoved(aContentShell); 1.248 +} 1.249 + 1.250 +NS_IMETHODIMP nsChromeTreeOwner::GetPrimaryContentShell(nsIDocShellTreeItem** aShell) 1.251 +{ 1.252 + NS_ENSURE_STATE(mXULWindow); 1.253 + return mXULWindow->GetPrimaryContentShell(aShell); 1.254 +} 1.255 + 1.256 +NS_IMETHODIMP 1.257 +nsChromeTreeOwner::GetContentWindow(JSContext* aCx, JS::MutableHandle<JS::Value> aVal) 1.258 +{ 1.259 + NS_ENSURE_STATE(mXULWindow); 1.260 + 1.261 + nsCOMPtr<nsIDOMWindow> domWin; 1.262 + mXULWindow->GetWindowDOMWindow(getter_AddRefs(domWin)); 1.263 + nsCOMPtr<nsIDOMChromeWindow> chromeWin = do_QueryInterface(domWin); 1.264 + if (!chromeWin) 1.265 + return NS_OK; 1.266 + 1.267 + nsCOMPtr<nsIBrowserDOMWindow> browserDOMWin; 1.268 + chromeWin->GetBrowserDOMWindow(getter_AddRefs(browserDOMWin)); 1.269 + if (!browserDOMWin) 1.270 + return NS_OK; 1.271 + 1.272 + return browserDOMWin->GetContentWindow(aVal); 1.273 +} 1.274 + 1.275 +NS_IMETHODIMP nsChromeTreeOwner::SizeShellTo(nsIDocShellTreeItem* aShellItem, 1.276 + int32_t aCX, int32_t aCY) 1.277 +{ 1.278 + NS_ENSURE_STATE(mXULWindow); 1.279 + return mXULWindow->SizeShellTo(aShellItem, aCX, aCY); 1.280 +} 1.281 + 1.282 +NS_IMETHODIMP 1.283 +nsChromeTreeOwner::SetPersistence(bool aPersistPosition, 1.284 + bool aPersistSize, 1.285 + bool aPersistSizeMode) 1.286 +{ 1.287 + NS_ENSURE_STATE(mXULWindow); 1.288 + nsCOMPtr<dom::Element> docShellElement = mXULWindow->GetWindowDOMElement(); 1.289 + if (!docShellElement) 1.290 + return NS_ERROR_FAILURE; 1.291 + 1.292 + nsAutoString persistString; 1.293 + docShellElement->GetAttribute(gLiterals->kPersist, persistString); 1.294 + 1.295 + bool saveString = false; 1.296 + int32_t index; 1.297 + 1.298 +#define FIND_PERSIST_STRING(aString, aCond) \ 1.299 + index = persistString.Find(aString); \ 1.300 + if (!aCond && index > kNotFound) { \ 1.301 + persistString.Cut(index, aString.Length()); \ 1.302 + saveString = true; \ 1.303 + } else if (aCond && index == kNotFound) { \ 1.304 + persistString.Append(gLiterals->kSpace + aString); \ 1.305 + saveString = true; \ 1.306 + } 1.307 + FIND_PERSIST_STRING(gLiterals->kScreenX, aPersistPosition); 1.308 + FIND_PERSIST_STRING(gLiterals->kScreenY, aPersistPosition); 1.309 + FIND_PERSIST_STRING(gLiterals->kWidth, aPersistSize); 1.310 + FIND_PERSIST_STRING(gLiterals->kHeight, aPersistSize); 1.311 + FIND_PERSIST_STRING(gLiterals->kSizemode, aPersistSizeMode); 1.312 + 1.313 + ErrorResult rv; 1.314 + if (saveString) { 1.315 + docShellElement->SetAttribute(gLiterals->kPersist, persistString, rv); 1.316 + } 1.317 + 1.318 + return NS_OK; 1.319 +} 1.320 + 1.321 +NS_IMETHODIMP 1.322 +nsChromeTreeOwner::GetPersistence(bool* aPersistPosition, 1.323 + bool* aPersistSize, 1.324 + bool* aPersistSizeMode) 1.325 +{ 1.326 + NS_ENSURE_STATE(mXULWindow); 1.327 + nsCOMPtr<dom::Element> docShellElement = mXULWindow->GetWindowDOMElement(); 1.328 + if (!docShellElement) 1.329 + return NS_ERROR_FAILURE; 1.330 + 1.331 + nsAutoString persistString; 1.332 + docShellElement->GetAttribute(gLiterals->kPersist, persistString); 1.333 + 1.334 + // data structure doesn't quite match the question, but it's close enough 1.335 + // for what we want (since this method is never actually called...) 1.336 + if (aPersistPosition) 1.337 + *aPersistPosition = persistString.Find(gLiterals->kScreenX) > kNotFound || 1.338 + persistString.Find(gLiterals->kScreenY) > kNotFound; 1.339 + if (aPersistSize) 1.340 + *aPersistSize = persistString.Find(gLiterals->kWidth) > kNotFound || 1.341 + persistString.Find(gLiterals->kHeight) > kNotFound; 1.342 + if (aPersistSizeMode) 1.343 + *aPersistSizeMode = persistString.Find(gLiterals->kSizemode) > kNotFound; 1.344 + 1.345 + return NS_OK; 1.346 +} 1.347 + 1.348 +NS_IMETHODIMP 1.349 +nsChromeTreeOwner::GetTargetableShellCount(uint32_t* aResult) 1.350 +{ 1.351 + *aResult = 0; 1.352 + return NS_OK; 1.353 +} 1.354 + 1.355 +//***************************************************************************** 1.356 +// nsChromeTreeOwner::nsIBaseWindow 1.357 +//***************************************************************************** 1.358 + 1.359 +NS_IMETHODIMP nsChromeTreeOwner::InitWindow(nativeWindow aParentNativeWindow, 1.360 + nsIWidget* parentWidget, int32_t x, int32_t y, int32_t cx, int32_t cy) 1.361 +{ 1.362 + // Ignore widget parents for now. Don't think those are a vaild thing to call. 1.363 + NS_ENSURE_SUCCESS(SetPositionAndSize(x, y, cx, cy, false), NS_ERROR_FAILURE); 1.364 + 1.365 + return NS_OK; 1.366 +} 1.367 + 1.368 +NS_IMETHODIMP nsChromeTreeOwner::Create() 1.369 +{ 1.370 + NS_ASSERTION(false, "You can't call this"); 1.371 + return NS_ERROR_UNEXPECTED; 1.372 +} 1.373 + 1.374 +NS_IMETHODIMP nsChromeTreeOwner::Destroy() 1.375 +{ 1.376 + NS_ENSURE_STATE(mXULWindow); 1.377 + return mXULWindow->Destroy(); 1.378 +} 1.379 + 1.380 +NS_IMETHODIMP nsChromeTreeOwner::GetUnscaledDevicePixelsPerCSSPixel(double *aScale) 1.381 +{ 1.382 + NS_ENSURE_STATE(mXULWindow); 1.383 + return mXULWindow->GetUnscaledDevicePixelsPerCSSPixel(aScale); 1.384 +} 1.385 + 1.386 +NS_IMETHODIMP nsChromeTreeOwner::SetPosition(int32_t x, int32_t y) 1.387 +{ 1.388 + NS_ENSURE_STATE(mXULWindow); 1.389 + return mXULWindow->SetPosition(x, y); 1.390 +} 1.391 + 1.392 +NS_IMETHODIMP nsChromeTreeOwner::GetPosition(int32_t* x, int32_t* y) 1.393 +{ 1.394 + NS_ENSURE_STATE(mXULWindow); 1.395 + return mXULWindow->GetPosition(x, y); 1.396 +} 1.397 + 1.398 +NS_IMETHODIMP nsChromeTreeOwner::SetSize(int32_t cx, int32_t cy, bool fRepaint) 1.399 +{ 1.400 + NS_ENSURE_STATE(mXULWindow); 1.401 + return mXULWindow->SetSize(cx, cy, fRepaint); 1.402 +} 1.403 + 1.404 +NS_IMETHODIMP nsChromeTreeOwner::GetSize(int32_t* cx, int32_t* cy) 1.405 +{ 1.406 + NS_ENSURE_STATE(mXULWindow); 1.407 + return mXULWindow->GetSize(cx, cy); 1.408 +} 1.409 + 1.410 +NS_IMETHODIMP nsChromeTreeOwner::SetPositionAndSize(int32_t x, int32_t y, int32_t cx, 1.411 + int32_t cy, bool fRepaint) 1.412 +{ 1.413 + NS_ENSURE_STATE(mXULWindow); 1.414 + return mXULWindow->SetPositionAndSize(x, y, cx, cy, fRepaint); 1.415 +} 1.416 + 1.417 +NS_IMETHODIMP nsChromeTreeOwner::GetPositionAndSize(int32_t* x, int32_t* y, int32_t* cx, 1.418 + int32_t* cy) 1.419 +{ 1.420 + NS_ENSURE_STATE(mXULWindow); 1.421 + return mXULWindow->GetPositionAndSize(x, y, cx, cy); 1.422 +} 1.423 + 1.424 +NS_IMETHODIMP nsChromeTreeOwner::Repaint(bool aForce) 1.425 +{ 1.426 + NS_ENSURE_STATE(mXULWindow); 1.427 + return mXULWindow->Repaint(aForce); 1.428 +} 1.429 + 1.430 +NS_IMETHODIMP nsChromeTreeOwner::GetParentWidget(nsIWidget** aParentWidget) 1.431 +{ 1.432 + NS_ENSURE_STATE(mXULWindow); 1.433 + return mXULWindow->GetParentWidget(aParentWidget); 1.434 +} 1.435 + 1.436 +NS_IMETHODIMP nsChromeTreeOwner::SetParentWidget(nsIWidget* aParentWidget) 1.437 +{ 1.438 + NS_ASSERTION(false, "You can't call this"); 1.439 + return NS_ERROR_NOT_IMPLEMENTED; 1.440 +} 1.441 + 1.442 +NS_IMETHODIMP nsChromeTreeOwner::GetParentNativeWindow(nativeWindow* aParentNativeWindow) 1.443 +{ 1.444 + NS_ENSURE_STATE(mXULWindow); 1.445 + return mXULWindow->GetParentNativeWindow(aParentNativeWindow); 1.446 +} 1.447 + 1.448 +NS_IMETHODIMP nsChromeTreeOwner::SetParentNativeWindow(nativeWindow aParentNativeWindow) 1.449 +{ 1.450 + NS_ASSERTION(false, "You can't call this"); 1.451 + return NS_ERROR_NOT_IMPLEMENTED; 1.452 +} 1.453 + 1.454 +NS_IMETHODIMP nsChromeTreeOwner::GetNativeHandle(nsAString& aNativeHandle) 1.455 +{ 1.456 + NS_ENSURE_STATE(mXULWindow); 1.457 + return mXULWindow->GetNativeHandle(aNativeHandle); 1.458 +} 1.459 + 1.460 +NS_IMETHODIMP nsChromeTreeOwner::GetVisibility(bool* aVisibility) 1.461 +{ 1.462 + NS_ENSURE_STATE(mXULWindow); 1.463 + return mXULWindow->GetVisibility(aVisibility); 1.464 +} 1.465 + 1.466 +NS_IMETHODIMP nsChromeTreeOwner::SetVisibility(bool aVisibility) 1.467 +{ 1.468 + NS_ENSURE_STATE(mXULWindow); 1.469 + return mXULWindow->SetVisibility(aVisibility); 1.470 +} 1.471 + 1.472 +NS_IMETHODIMP nsChromeTreeOwner::GetEnabled(bool *aEnabled) 1.473 +{ 1.474 + NS_ENSURE_STATE(mXULWindow); 1.475 + return mXULWindow->GetEnabled(aEnabled); 1.476 +} 1.477 + 1.478 +NS_IMETHODIMP nsChromeTreeOwner::SetEnabled(bool aEnable) 1.479 +{ 1.480 + NS_ENSURE_STATE(mXULWindow); 1.481 + return mXULWindow->SetEnabled(aEnable); 1.482 +} 1.483 + 1.484 +NS_IMETHODIMP nsChromeTreeOwner::GetMainWidget(nsIWidget** aMainWidget) 1.485 +{ 1.486 + NS_ENSURE_ARG_POINTER(aMainWidget); 1.487 + NS_ENSURE_STATE(mXULWindow); 1.488 + 1.489 + *aMainWidget = mXULWindow->mWindow; 1.490 + NS_IF_ADDREF(*aMainWidget); 1.491 + 1.492 + return NS_OK; 1.493 +} 1.494 + 1.495 +NS_IMETHODIMP nsChromeTreeOwner::SetFocus() 1.496 +{ 1.497 + NS_ENSURE_STATE(mXULWindow); 1.498 + return mXULWindow->SetFocus(); 1.499 +} 1.500 + 1.501 +NS_IMETHODIMP nsChromeTreeOwner::GetTitle(char16_t** aTitle) 1.502 +{ 1.503 + NS_ENSURE_STATE(mXULWindow); 1.504 + return mXULWindow->GetTitle(aTitle); 1.505 +} 1.506 + 1.507 +NS_IMETHODIMP nsChromeTreeOwner::SetTitle(const char16_t* aTitle) 1.508 +{ 1.509 + NS_ENSURE_STATE(mXULWindow); 1.510 + return mXULWindow->SetTitle(aTitle); 1.511 +} 1.512 + 1.513 +//***************************************************************************** 1.514 +// nsChromeTreeOwner::nsIWebProgressListener 1.515 +//***************************************************************************** 1.516 + 1.517 +NS_IMETHODIMP 1.518 +nsChromeTreeOwner::OnProgressChange(nsIWebProgress* aWebProgress, 1.519 + nsIRequest* aRequest, 1.520 + int32_t aCurSelfProgress, 1.521 + int32_t aMaxSelfProgress, 1.522 + int32_t aCurTotalProgress, 1.523 + int32_t aMaxTotalProgress) 1.524 +{ 1.525 + return NS_OK; 1.526 +} 1.527 + 1.528 +NS_IMETHODIMP 1.529 +nsChromeTreeOwner::OnStateChange(nsIWebProgress* aWebProgress, 1.530 + nsIRequest* aRequest, 1.531 + uint32_t aProgressStateFlags, 1.532 + nsresult aStatus) 1.533 +{ 1.534 + return NS_OK; 1.535 +} 1.536 + 1.537 +NS_IMETHODIMP nsChromeTreeOwner::OnLocationChange(nsIWebProgress* aWebProgress, 1.538 + nsIRequest* aRequest, 1.539 + nsIURI* aLocation, 1.540 + uint32_t aFlags) 1.541 +{ 1.542 + bool itsForYou = true; 1.543 + 1.544 + if (aWebProgress) { 1.545 + NS_ENSURE_STATE(mXULWindow); 1.546 + nsCOMPtr<nsIDOMWindow> progressWin; 1.547 + aWebProgress->GetDOMWindow(getter_AddRefs(progressWin)); 1.548 + 1.549 + nsCOMPtr<nsIDocShell> docshell; 1.550 + mXULWindow->GetDocShell(getter_AddRefs(docshell)); 1.551 + nsCOMPtr<nsIDOMWindow> ourWin(do_QueryInterface(docshell)); 1.552 + 1.553 + if (ourWin != progressWin) 1.554 + itsForYou = false; 1.555 + } 1.556 + 1.557 + // If loading a new root .xul document, then redo chrome. 1.558 + if (itsForYou) { 1.559 + NS_ENSURE_STATE(mXULWindow); 1.560 + mXULWindow->mChromeLoaded = false; 1.561 + } 1.562 + return NS_OK; 1.563 +} 1.564 + 1.565 +NS_IMETHODIMP 1.566 +nsChromeTreeOwner::OnStatusChange(nsIWebProgress* aWebProgress, 1.567 + nsIRequest* aRequest, 1.568 + nsresult aStatus, 1.569 + const char16_t* aMessage) 1.570 +{ 1.571 + return NS_OK; 1.572 +} 1.573 + 1.574 + 1.575 + 1.576 +NS_IMETHODIMP 1.577 +nsChromeTreeOwner::OnSecurityChange(nsIWebProgress *aWebProgress, 1.578 + nsIRequest *aRequest, 1.579 + uint32_t state) 1.580 +{ 1.581 + return NS_OK; 1.582 +} 1.583 + 1.584 +//***************************************************************************** 1.585 +// nsChromeTreeOwner: Helpers 1.586 +//***************************************************************************** 1.587 + 1.588 +//***************************************************************************** 1.589 +// nsChromeTreeOwner: Accessors 1.590 +//***************************************************************************** 1.591 + 1.592 +void nsChromeTreeOwner::XULWindow(nsXULWindow* aXULWindow) 1.593 +{ 1.594 + mXULWindow = aXULWindow; 1.595 +} 1.596 + 1.597 +nsXULWindow* nsChromeTreeOwner::XULWindow() 1.598 +{ 1.599 + return mXULWindow; 1.600 +}