|
1 /* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*- |
|
2 * |
|
3 * This Source Code Form is subject to the terms of the Mozilla Public |
|
4 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
6 |
|
7 // Local Includes |
|
8 #include "nsChromeTreeOwner.h" |
|
9 #include "nsXULWindow.h" |
|
10 |
|
11 // Helper Classes |
|
12 #include "nsString.h" |
|
13 #include "nsIEmbeddingSiteWindow.h" |
|
14 #include "nsIServiceManager.h" |
|
15 #include "nsIDocShellTreeItem.h" |
|
16 |
|
17 // Interfaces needed to include |
|
18 #include "nsIPrompt.h" |
|
19 #include "nsIAuthPrompt.h" |
|
20 #include "nsIBrowserDOMWindow.h" |
|
21 #include "nsIWebProgress.h" |
|
22 #include "nsIWidget.h" |
|
23 #include "nsIWindowMediator.h" |
|
24 #include "nsIDOMChromeWindow.h" |
|
25 #include "nsIDOMNode.h" |
|
26 #include "nsIDOMElement.h" |
|
27 #include "nsIDOMNodeList.h" |
|
28 #include "nsIDOMXULElement.h" |
|
29 #include "nsIXULBrowserWindow.h" |
|
30 #include "mozilla/dom/Element.h" |
|
31 |
|
32 using namespace mozilla; |
|
33 |
|
34 //***************************************************************************** |
|
35 // nsChromeTreeOwner string literals |
|
36 //***************************************************************************** |
|
37 |
|
38 struct nsChromeTreeOwnerLiterals |
|
39 { |
|
40 const nsLiteralString kPersist; |
|
41 const nsLiteralString kScreenX; |
|
42 const nsLiteralString kScreenY; |
|
43 const nsLiteralString kWidth; |
|
44 const nsLiteralString kHeight; |
|
45 const nsLiteralString kSizemode; |
|
46 const nsLiteralString kSpace; |
|
47 |
|
48 nsChromeTreeOwnerLiterals() |
|
49 : NS_LITERAL_STRING_INIT(kPersist,"persist") |
|
50 , NS_LITERAL_STRING_INIT(kScreenX,"screenX") |
|
51 , NS_LITERAL_STRING_INIT(kScreenY,"screenY") |
|
52 , NS_LITERAL_STRING_INIT(kWidth,"width") |
|
53 , NS_LITERAL_STRING_INIT(kHeight,"height") |
|
54 , NS_LITERAL_STRING_INIT(kSizemode,"sizemode") |
|
55 , NS_LITERAL_STRING_INIT(kSpace," ") |
|
56 {} |
|
57 }; |
|
58 |
|
59 static nsChromeTreeOwnerLiterals *gLiterals; |
|
60 |
|
61 nsresult |
|
62 nsChromeTreeOwner::InitGlobals() |
|
63 { |
|
64 NS_ASSERTION(gLiterals == nullptr, "already initialized"); |
|
65 gLiterals = new nsChromeTreeOwnerLiterals(); |
|
66 if (!gLiterals) |
|
67 return NS_ERROR_OUT_OF_MEMORY; |
|
68 return NS_OK; |
|
69 } |
|
70 |
|
71 void |
|
72 nsChromeTreeOwner::FreeGlobals() |
|
73 { |
|
74 delete gLiterals; |
|
75 gLiterals = nullptr; |
|
76 } |
|
77 |
|
78 //***************************************************************************** |
|
79 //*** nsChromeTreeOwner: Object Management |
|
80 //***************************************************************************** |
|
81 |
|
82 nsChromeTreeOwner::nsChromeTreeOwner() : mXULWindow(nullptr) |
|
83 { |
|
84 } |
|
85 |
|
86 nsChromeTreeOwner::~nsChromeTreeOwner() |
|
87 { |
|
88 } |
|
89 |
|
90 //***************************************************************************** |
|
91 // nsChromeTreeOwner::nsISupports |
|
92 //***************************************************************************** |
|
93 |
|
94 NS_IMPL_ADDREF(nsChromeTreeOwner) |
|
95 NS_IMPL_RELEASE(nsChromeTreeOwner) |
|
96 |
|
97 NS_INTERFACE_MAP_BEGIN(nsChromeTreeOwner) |
|
98 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocShellTreeOwner) |
|
99 NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner) |
|
100 NS_INTERFACE_MAP_ENTRY(nsIBaseWindow) |
|
101 NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) |
|
102 NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) |
|
103 NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) |
|
104 NS_INTERFACE_MAP_END |
|
105 |
|
106 //***************************************************************************** |
|
107 // nsChromeTreeOwner::nsIInterfaceRequestor |
|
108 //***************************************************************************** |
|
109 |
|
110 NS_IMETHODIMP nsChromeTreeOwner::GetInterface(const nsIID& aIID, void** aSink) |
|
111 { |
|
112 NS_ENSURE_ARG_POINTER(aSink); |
|
113 |
|
114 if(aIID.Equals(NS_GET_IID(nsIPrompt))) { |
|
115 NS_ENSURE_STATE(mXULWindow); |
|
116 return mXULWindow->GetInterface(aIID, aSink); |
|
117 } |
|
118 if(aIID.Equals(NS_GET_IID(nsIAuthPrompt))) { |
|
119 NS_ENSURE_STATE(mXULWindow); |
|
120 return mXULWindow->GetInterface(aIID, aSink); |
|
121 } |
|
122 if(aIID.Equals(NS_GET_IID(nsIWebBrowserChrome))) { |
|
123 NS_ENSURE_STATE(mXULWindow); |
|
124 return mXULWindow->GetInterface(aIID, aSink); |
|
125 } |
|
126 if (aIID.Equals(NS_GET_IID(nsIEmbeddingSiteWindow))) { |
|
127 NS_ENSURE_STATE(mXULWindow); |
|
128 return mXULWindow->GetInterface(aIID, aSink); |
|
129 } |
|
130 if (aIID.Equals(NS_GET_IID(nsIXULWindow))) { |
|
131 NS_ENSURE_STATE(mXULWindow); |
|
132 return mXULWindow->QueryInterface(aIID, aSink); |
|
133 } |
|
134 |
|
135 return QueryInterface(aIID, aSink); |
|
136 } |
|
137 |
|
138 //***************************************************************************** |
|
139 // nsChromeTreeOwner::nsIDocShellTreeOwner |
|
140 //***************************************************************************** |
|
141 |
|
142 NS_IMETHODIMP nsChromeTreeOwner::FindItemWithName(const char16_t* aName, |
|
143 nsIDocShellTreeItem* aRequestor, nsIDocShellTreeItem* aOriginalRequestor, |
|
144 nsIDocShellTreeItem** aFoundItem) |
|
145 { |
|
146 NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); |
|
147 |
|
148 NS_ENSURE_ARG_POINTER(aFoundItem); |
|
149 |
|
150 *aFoundItem = nullptr; |
|
151 |
|
152 bool fIs_Content = false; |
|
153 |
|
154 /* Special Cases */ |
|
155 if(!aName || !*aName) |
|
156 return NS_OK; |
|
157 |
|
158 nsDependentString name(aName); |
|
159 |
|
160 if(name.LowerCaseEqualsLiteral("_blank")) |
|
161 return NS_OK; |
|
162 // _main is an IE target which should be case-insensitive but isn't |
|
163 // see bug 217886 for details |
|
164 if(name.LowerCaseEqualsLiteral("_content") || name.EqualsLiteral("_main")) |
|
165 { |
|
166 NS_ENSURE_STATE(mXULWindow); |
|
167 fIs_Content = true; |
|
168 mXULWindow->GetPrimaryContentShell(aFoundItem); |
|
169 if(*aFoundItem) |
|
170 return NS_OK; |
|
171 // Otherwise fall through and ask the other windows for a content area. |
|
172 } |
|
173 |
|
174 nsCOMPtr<nsIWindowMediator> windowMediator(do_GetService(kWindowMediatorCID)); |
|
175 NS_ENSURE_TRUE(windowMediator, NS_ERROR_FAILURE); |
|
176 |
|
177 nsCOMPtr<nsISimpleEnumerator> windowEnumerator; |
|
178 NS_ENSURE_SUCCESS(windowMediator->GetXULWindowEnumerator(nullptr, |
|
179 getter_AddRefs(windowEnumerator)), NS_ERROR_FAILURE); |
|
180 |
|
181 bool more; |
|
182 |
|
183 windowEnumerator->HasMoreElements(&more); |
|
184 while(more) |
|
185 { |
|
186 nsCOMPtr<nsISupports> nextWindow = nullptr; |
|
187 windowEnumerator->GetNext(getter_AddRefs(nextWindow)); |
|
188 nsCOMPtr<nsIXULWindow> xulWindow(do_QueryInterface(nextWindow)); |
|
189 NS_ENSURE_TRUE(xulWindow, NS_ERROR_FAILURE); |
|
190 |
|
191 nsCOMPtr<nsIDocShellTreeItem> shellAsTreeItem; |
|
192 |
|
193 if(fIs_Content) |
|
194 { |
|
195 xulWindow->GetPrimaryContentShell(aFoundItem); |
|
196 } |
|
197 else |
|
198 { |
|
199 // Note that we don't look for targetable content shells here... |
|
200 // in fact, we aren't looking for content shells at all! |
|
201 nsCOMPtr<nsIDocShell> shell; |
|
202 xulWindow->GetDocShell(getter_AddRefs(shell)); |
|
203 shellAsTreeItem = do_QueryInterface(shell); |
|
204 if (shellAsTreeItem) { |
|
205 // Get the root tree item of same type, since roots are the only |
|
206 // things that call into the treeowner to look for named items. |
|
207 nsCOMPtr<nsIDocShellTreeItem> root; |
|
208 shellAsTreeItem->GetSameTypeRootTreeItem(getter_AddRefs(root)); |
|
209 shellAsTreeItem = root; |
|
210 } |
|
211 if(shellAsTreeItem && aRequestor != shellAsTreeItem) |
|
212 { |
|
213 // Do this so we can pass in the tree owner as the requestor so the child knows not |
|
214 // to call back up. |
|
215 nsCOMPtr<nsIDocShellTreeOwner> shellOwner; |
|
216 shellAsTreeItem->GetTreeOwner(getter_AddRefs(shellOwner)); |
|
217 nsCOMPtr<nsISupports> shellOwnerSupports(do_QueryInterface(shellOwner)); |
|
218 |
|
219 shellAsTreeItem->FindItemWithName(aName, shellOwnerSupports, |
|
220 aOriginalRequestor, aFoundItem); |
|
221 } |
|
222 } |
|
223 if(*aFoundItem) |
|
224 return NS_OK; |
|
225 windowEnumerator->HasMoreElements(&more); |
|
226 } |
|
227 return NS_OK; |
|
228 } |
|
229 |
|
230 NS_IMETHODIMP |
|
231 nsChromeTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContentShell, |
|
232 bool aPrimary, bool aTargetable, |
|
233 const nsAString& aID) |
|
234 { |
|
235 NS_ENSURE_STATE(mXULWindow); |
|
236 return mXULWindow->ContentShellAdded(aContentShell, aPrimary, aTargetable, |
|
237 aID); |
|
238 } |
|
239 |
|
240 NS_IMETHODIMP |
|
241 nsChromeTreeOwner::ContentShellRemoved(nsIDocShellTreeItem* aContentShell) |
|
242 { |
|
243 NS_ENSURE_STATE(mXULWindow); |
|
244 return mXULWindow->ContentShellRemoved(aContentShell); |
|
245 } |
|
246 |
|
247 NS_IMETHODIMP nsChromeTreeOwner::GetPrimaryContentShell(nsIDocShellTreeItem** aShell) |
|
248 { |
|
249 NS_ENSURE_STATE(mXULWindow); |
|
250 return mXULWindow->GetPrimaryContentShell(aShell); |
|
251 } |
|
252 |
|
253 NS_IMETHODIMP |
|
254 nsChromeTreeOwner::GetContentWindow(JSContext* aCx, JS::MutableHandle<JS::Value> aVal) |
|
255 { |
|
256 NS_ENSURE_STATE(mXULWindow); |
|
257 |
|
258 nsCOMPtr<nsIDOMWindow> domWin; |
|
259 mXULWindow->GetWindowDOMWindow(getter_AddRefs(domWin)); |
|
260 nsCOMPtr<nsIDOMChromeWindow> chromeWin = do_QueryInterface(domWin); |
|
261 if (!chromeWin) |
|
262 return NS_OK; |
|
263 |
|
264 nsCOMPtr<nsIBrowserDOMWindow> browserDOMWin; |
|
265 chromeWin->GetBrowserDOMWindow(getter_AddRefs(browserDOMWin)); |
|
266 if (!browserDOMWin) |
|
267 return NS_OK; |
|
268 |
|
269 return browserDOMWin->GetContentWindow(aVal); |
|
270 } |
|
271 |
|
272 NS_IMETHODIMP nsChromeTreeOwner::SizeShellTo(nsIDocShellTreeItem* aShellItem, |
|
273 int32_t aCX, int32_t aCY) |
|
274 { |
|
275 NS_ENSURE_STATE(mXULWindow); |
|
276 return mXULWindow->SizeShellTo(aShellItem, aCX, aCY); |
|
277 } |
|
278 |
|
279 NS_IMETHODIMP |
|
280 nsChromeTreeOwner::SetPersistence(bool aPersistPosition, |
|
281 bool aPersistSize, |
|
282 bool aPersistSizeMode) |
|
283 { |
|
284 NS_ENSURE_STATE(mXULWindow); |
|
285 nsCOMPtr<dom::Element> docShellElement = mXULWindow->GetWindowDOMElement(); |
|
286 if (!docShellElement) |
|
287 return NS_ERROR_FAILURE; |
|
288 |
|
289 nsAutoString persistString; |
|
290 docShellElement->GetAttribute(gLiterals->kPersist, persistString); |
|
291 |
|
292 bool saveString = false; |
|
293 int32_t index; |
|
294 |
|
295 #define FIND_PERSIST_STRING(aString, aCond) \ |
|
296 index = persistString.Find(aString); \ |
|
297 if (!aCond && index > kNotFound) { \ |
|
298 persistString.Cut(index, aString.Length()); \ |
|
299 saveString = true; \ |
|
300 } else if (aCond && index == kNotFound) { \ |
|
301 persistString.Append(gLiterals->kSpace + aString); \ |
|
302 saveString = true; \ |
|
303 } |
|
304 FIND_PERSIST_STRING(gLiterals->kScreenX, aPersistPosition); |
|
305 FIND_PERSIST_STRING(gLiterals->kScreenY, aPersistPosition); |
|
306 FIND_PERSIST_STRING(gLiterals->kWidth, aPersistSize); |
|
307 FIND_PERSIST_STRING(gLiterals->kHeight, aPersistSize); |
|
308 FIND_PERSIST_STRING(gLiterals->kSizemode, aPersistSizeMode); |
|
309 |
|
310 ErrorResult rv; |
|
311 if (saveString) { |
|
312 docShellElement->SetAttribute(gLiterals->kPersist, persistString, rv); |
|
313 } |
|
314 |
|
315 return NS_OK; |
|
316 } |
|
317 |
|
318 NS_IMETHODIMP |
|
319 nsChromeTreeOwner::GetPersistence(bool* aPersistPosition, |
|
320 bool* aPersistSize, |
|
321 bool* aPersistSizeMode) |
|
322 { |
|
323 NS_ENSURE_STATE(mXULWindow); |
|
324 nsCOMPtr<dom::Element> docShellElement = mXULWindow->GetWindowDOMElement(); |
|
325 if (!docShellElement) |
|
326 return NS_ERROR_FAILURE; |
|
327 |
|
328 nsAutoString persistString; |
|
329 docShellElement->GetAttribute(gLiterals->kPersist, persistString); |
|
330 |
|
331 // data structure doesn't quite match the question, but it's close enough |
|
332 // for what we want (since this method is never actually called...) |
|
333 if (aPersistPosition) |
|
334 *aPersistPosition = persistString.Find(gLiterals->kScreenX) > kNotFound || |
|
335 persistString.Find(gLiterals->kScreenY) > kNotFound; |
|
336 if (aPersistSize) |
|
337 *aPersistSize = persistString.Find(gLiterals->kWidth) > kNotFound || |
|
338 persistString.Find(gLiterals->kHeight) > kNotFound; |
|
339 if (aPersistSizeMode) |
|
340 *aPersistSizeMode = persistString.Find(gLiterals->kSizemode) > kNotFound; |
|
341 |
|
342 return NS_OK; |
|
343 } |
|
344 |
|
345 NS_IMETHODIMP |
|
346 nsChromeTreeOwner::GetTargetableShellCount(uint32_t* aResult) |
|
347 { |
|
348 *aResult = 0; |
|
349 return NS_OK; |
|
350 } |
|
351 |
|
352 //***************************************************************************** |
|
353 // nsChromeTreeOwner::nsIBaseWindow |
|
354 //***************************************************************************** |
|
355 |
|
356 NS_IMETHODIMP nsChromeTreeOwner::InitWindow(nativeWindow aParentNativeWindow, |
|
357 nsIWidget* parentWidget, int32_t x, int32_t y, int32_t cx, int32_t cy) |
|
358 { |
|
359 // Ignore widget parents for now. Don't think those are a vaild thing to call. |
|
360 NS_ENSURE_SUCCESS(SetPositionAndSize(x, y, cx, cy, false), NS_ERROR_FAILURE); |
|
361 |
|
362 return NS_OK; |
|
363 } |
|
364 |
|
365 NS_IMETHODIMP nsChromeTreeOwner::Create() |
|
366 { |
|
367 NS_ASSERTION(false, "You can't call this"); |
|
368 return NS_ERROR_UNEXPECTED; |
|
369 } |
|
370 |
|
371 NS_IMETHODIMP nsChromeTreeOwner::Destroy() |
|
372 { |
|
373 NS_ENSURE_STATE(mXULWindow); |
|
374 return mXULWindow->Destroy(); |
|
375 } |
|
376 |
|
377 NS_IMETHODIMP nsChromeTreeOwner::GetUnscaledDevicePixelsPerCSSPixel(double *aScale) |
|
378 { |
|
379 NS_ENSURE_STATE(mXULWindow); |
|
380 return mXULWindow->GetUnscaledDevicePixelsPerCSSPixel(aScale); |
|
381 } |
|
382 |
|
383 NS_IMETHODIMP nsChromeTreeOwner::SetPosition(int32_t x, int32_t y) |
|
384 { |
|
385 NS_ENSURE_STATE(mXULWindow); |
|
386 return mXULWindow->SetPosition(x, y); |
|
387 } |
|
388 |
|
389 NS_IMETHODIMP nsChromeTreeOwner::GetPosition(int32_t* x, int32_t* y) |
|
390 { |
|
391 NS_ENSURE_STATE(mXULWindow); |
|
392 return mXULWindow->GetPosition(x, y); |
|
393 } |
|
394 |
|
395 NS_IMETHODIMP nsChromeTreeOwner::SetSize(int32_t cx, int32_t cy, bool fRepaint) |
|
396 { |
|
397 NS_ENSURE_STATE(mXULWindow); |
|
398 return mXULWindow->SetSize(cx, cy, fRepaint); |
|
399 } |
|
400 |
|
401 NS_IMETHODIMP nsChromeTreeOwner::GetSize(int32_t* cx, int32_t* cy) |
|
402 { |
|
403 NS_ENSURE_STATE(mXULWindow); |
|
404 return mXULWindow->GetSize(cx, cy); |
|
405 } |
|
406 |
|
407 NS_IMETHODIMP nsChromeTreeOwner::SetPositionAndSize(int32_t x, int32_t y, int32_t cx, |
|
408 int32_t cy, bool fRepaint) |
|
409 { |
|
410 NS_ENSURE_STATE(mXULWindow); |
|
411 return mXULWindow->SetPositionAndSize(x, y, cx, cy, fRepaint); |
|
412 } |
|
413 |
|
414 NS_IMETHODIMP nsChromeTreeOwner::GetPositionAndSize(int32_t* x, int32_t* y, int32_t* cx, |
|
415 int32_t* cy) |
|
416 { |
|
417 NS_ENSURE_STATE(mXULWindow); |
|
418 return mXULWindow->GetPositionAndSize(x, y, cx, cy); |
|
419 } |
|
420 |
|
421 NS_IMETHODIMP nsChromeTreeOwner::Repaint(bool aForce) |
|
422 { |
|
423 NS_ENSURE_STATE(mXULWindow); |
|
424 return mXULWindow->Repaint(aForce); |
|
425 } |
|
426 |
|
427 NS_IMETHODIMP nsChromeTreeOwner::GetParentWidget(nsIWidget** aParentWidget) |
|
428 { |
|
429 NS_ENSURE_STATE(mXULWindow); |
|
430 return mXULWindow->GetParentWidget(aParentWidget); |
|
431 } |
|
432 |
|
433 NS_IMETHODIMP nsChromeTreeOwner::SetParentWidget(nsIWidget* aParentWidget) |
|
434 { |
|
435 NS_ASSERTION(false, "You can't call this"); |
|
436 return NS_ERROR_NOT_IMPLEMENTED; |
|
437 } |
|
438 |
|
439 NS_IMETHODIMP nsChromeTreeOwner::GetParentNativeWindow(nativeWindow* aParentNativeWindow) |
|
440 { |
|
441 NS_ENSURE_STATE(mXULWindow); |
|
442 return mXULWindow->GetParentNativeWindow(aParentNativeWindow); |
|
443 } |
|
444 |
|
445 NS_IMETHODIMP nsChromeTreeOwner::SetParentNativeWindow(nativeWindow aParentNativeWindow) |
|
446 { |
|
447 NS_ASSERTION(false, "You can't call this"); |
|
448 return NS_ERROR_NOT_IMPLEMENTED; |
|
449 } |
|
450 |
|
451 NS_IMETHODIMP nsChromeTreeOwner::GetNativeHandle(nsAString& aNativeHandle) |
|
452 { |
|
453 NS_ENSURE_STATE(mXULWindow); |
|
454 return mXULWindow->GetNativeHandle(aNativeHandle); |
|
455 } |
|
456 |
|
457 NS_IMETHODIMP nsChromeTreeOwner::GetVisibility(bool* aVisibility) |
|
458 { |
|
459 NS_ENSURE_STATE(mXULWindow); |
|
460 return mXULWindow->GetVisibility(aVisibility); |
|
461 } |
|
462 |
|
463 NS_IMETHODIMP nsChromeTreeOwner::SetVisibility(bool aVisibility) |
|
464 { |
|
465 NS_ENSURE_STATE(mXULWindow); |
|
466 return mXULWindow->SetVisibility(aVisibility); |
|
467 } |
|
468 |
|
469 NS_IMETHODIMP nsChromeTreeOwner::GetEnabled(bool *aEnabled) |
|
470 { |
|
471 NS_ENSURE_STATE(mXULWindow); |
|
472 return mXULWindow->GetEnabled(aEnabled); |
|
473 } |
|
474 |
|
475 NS_IMETHODIMP nsChromeTreeOwner::SetEnabled(bool aEnable) |
|
476 { |
|
477 NS_ENSURE_STATE(mXULWindow); |
|
478 return mXULWindow->SetEnabled(aEnable); |
|
479 } |
|
480 |
|
481 NS_IMETHODIMP nsChromeTreeOwner::GetMainWidget(nsIWidget** aMainWidget) |
|
482 { |
|
483 NS_ENSURE_ARG_POINTER(aMainWidget); |
|
484 NS_ENSURE_STATE(mXULWindow); |
|
485 |
|
486 *aMainWidget = mXULWindow->mWindow; |
|
487 NS_IF_ADDREF(*aMainWidget); |
|
488 |
|
489 return NS_OK; |
|
490 } |
|
491 |
|
492 NS_IMETHODIMP nsChromeTreeOwner::SetFocus() |
|
493 { |
|
494 NS_ENSURE_STATE(mXULWindow); |
|
495 return mXULWindow->SetFocus(); |
|
496 } |
|
497 |
|
498 NS_IMETHODIMP nsChromeTreeOwner::GetTitle(char16_t** aTitle) |
|
499 { |
|
500 NS_ENSURE_STATE(mXULWindow); |
|
501 return mXULWindow->GetTitle(aTitle); |
|
502 } |
|
503 |
|
504 NS_IMETHODIMP nsChromeTreeOwner::SetTitle(const char16_t* aTitle) |
|
505 { |
|
506 NS_ENSURE_STATE(mXULWindow); |
|
507 return mXULWindow->SetTitle(aTitle); |
|
508 } |
|
509 |
|
510 //***************************************************************************** |
|
511 // nsChromeTreeOwner::nsIWebProgressListener |
|
512 //***************************************************************************** |
|
513 |
|
514 NS_IMETHODIMP |
|
515 nsChromeTreeOwner::OnProgressChange(nsIWebProgress* aWebProgress, |
|
516 nsIRequest* aRequest, |
|
517 int32_t aCurSelfProgress, |
|
518 int32_t aMaxSelfProgress, |
|
519 int32_t aCurTotalProgress, |
|
520 int32_t aMaxTotalProgress) |
|
521 { |
|
522 return NS_OK; |
|
523 } |
|
524 |
|
525 NS_IMETHODIMP |
|
526 nsChromeTreeOwner::OnStateChange(nsIWebProgress* aWebProgress, |
|
527 nsIRequest* aRequest, |
|
528 uint32_t aProgressStateFlags, |
|
529 nsresult aStatus) |
|
530 { |
|
531 return NS_OK; |
|
532 } |
|
533 |
|
534 NS_IMETHODIMP nsChromeTreeOwner::OnLocationChange(nsIWebProgress* aWebProgress, |
|
535 nsIRequest* aRequest, |
|
536 nsIURI* aLocation, |
|
537 uint32_t aFlags) |
|
538 { |
|
539 bool itsForYou = true; |
|
540 |
|
541 if (aWebProgress) { |
|
542 NS_ENSURE_STATE(mXULWindow); |
|
543 nsCOMPtr<nsIDOMWindow> progressWin; |
|
544 aWebProgress->GetDOMWindow(getter_AddRefs(progressWin)); |
|
545 |
|
546 nsCOMPtr<nsIDocShell> docshell; |
|
547 mXULWindow->GetDocShell(getter_AddRefs(docshell)); |
|
548 nsCOMPtr<nsIDOMWindow> ourWin(do_QueryInterface(docshell)); |
|
549 |
|
550 if (ourWin != progressWin) |
|
551 itsForYou = false; |
|
552 } |
|
553 |
|
554 // If loading a new root .xul document, then redo chrome. |
|
555 if (itsForYou) { |
|
556 NS_ENSURE_STATE(mXULWindow); |
|
557 mXULWindow->mChromeLoaded = false; |
|
558 } |
|
559 return NS_OK; |
|
560 } |
|
561 |
|
562 NS_IMETHODIMP |
|
563 nsChromeTreeOwner::OnStatusChange(nsIWebProgress* aWebProgress, |
|
564 nsIRequest* aRequest, |
|
565 nsresult aStatus, |
|
566 const char16_t* aMessage) |
|
567 { |
|
568 return NS_OK; |
|
569 } |
|
570 |
|
571 |
|
572 |
|
573 NS_IMETHODIMP |
|
574 nsChromeTreeOwner::OnSecurityChange(nsIWebProgress *aWebProgress, |
|
575 nsIRequest *aRequest, |
|
576 uint32_t state) |
|
577 { |
|
578 return NS_OK; |
|
579 } |
|
580 |
|
581 //***************************************************************************** |
|
582 // nsChromeTreeOwner: Helpers |
|
583 //***************************************************************************** |
|
584 |
|
585 //***************************************************************************** |
|
586 // nsChromeTreeOwner: Accessors |
|
587 //***************************************************************************** |
|
588 |
|
589 void nsChromeTreeOwner::XULWindow(nsXULWindow* aXULWindow) |
|
590 { |
|
591 mXULWindow = aXULWindow; |
|
592 } |
|
593 |
|
594 nsXULWindow* nsChromeTreeOwner::XULWindow() |
|
595 { |
|
596 return mXULWindow; |
|
597 } |