Merge "[CherryPick] Refactoring: Move the content of HTMLInputElement::subtreeHasChan...
[framework/web/webkit-efl.git] / Source / WebCore / page / DOMWindowProperty.cpp
1 /*
2  * Copyright (C) 2011 Google, Inc. All Rights Reserved.
3  * Copyright (C) 2012 Apple Inc. All Rights Reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include "config.h"
28 #include "DOMWindowProperty.h"
29
30 #include "DOMWindow.h"
31 #include "Frame.h"
32
33 namespace WebCore {
34
35 DOMWindowProperty::DOMWindowProperty(Frame* frame)
36     : m_frame(frame)
37     , m_associatedDOMWindow(0)
38 {
39     // FIXME: For now it *is* acceptable for a DOMWindowProperty to be created with a null frame.
40     // See fast/dom/navigator-detached-no-crash.html for the recipe.
41     // We should fix that.  <rdar://problem/11567132>
42     if (m_frame) {
43         m_associatedDOMWindow = m_frame->domWindow();
44         m_associatedDOMWindow->registerProperty(this);
45     }
46 }
47
48 DOMWindowProperty::~DOMWindowProperty()
49 {
50     if (m_associatedDOMWindow)
51         m_associatedDOMWindow->unregisterProperty(this);
52
53     m_associatedDOMWindow = 0;
54     m_frame = 0;
55 }
56
57 void DOMWindowProperty::disconnectFrameForPageCache()
58 {
59     // If this property is being disconnected from its Frame to enter the PageCache, it must have
60     // been created with a Frame in the first place.
61     ASSERT(m_frame);
62     ASSERT(m_associatedDOMWindow);
63
64     m_frame = 0;
65 }
66
67 void DOMWindowProperty::reconnectFrameFromPageCache(Frame* frame)
68 {
69     // If this property is being reconnected to its Frame to enter the PageCache, it must have
70     // been disconnected from its Frame in the first place and it should still have an associated DOMWindow.
71     ASSERT(frame);
72     ASSERT(!m_frame);
73     ASSERT(frame->domWindow() == m_associatedDOMWindow);
74
75     m_frame = frame;
76 }
77
78 void DOMWindowProperty::willDestroyGlobalObjectInCachedFrame()
79 {
80     // If the property has been disconnected from its Frame for the page cache, then it must have originally had a Frame
81     // and therefore should still have an associated DOMWindow.
82     ASSERT(!m_frame);
83     ASSERT(m_associatedDOMWindow);
84
85     // DOMWindowProperty lifetime isn't tied directly to the DOMWindow itself so it is important that it unregister
86     // itself from any DOMWindow it is associated with if that DOMWindow is going away.
87     if (m_associatedDOMWindow)
88         m_associatedDOMWindow->unregisterProperty(this);
89     m_associatedDOMWindow = 0;
90     m_frame = 0;
91 }
92
93 void DOMWindowProperty::willDestroyGlobalObjectInFrame()
94 {
95     // If the property is getting this callback it must have been created with a Frame/DOMWindow and it should still have them.
96     ASSERT(m_frame);
97     ASSERT(m_associatedDOMWindow);
98
99     // DOMWindowProperty lifetime isn't tied directly to the DOMWindow itself so it is important that it unregister
100     // itself from any DOMWindow it is associated with if that DOMWindow is going away.
101     if (m_associatedDOMWindow)
102         m_associatedDOMWindow->unregisterProperty(this);
103     m_associatedDOMWindow = 0;
104     m_frame = 0;
105 }
106
107 void DOMWindowProperty::willDetachGlobalObjectFromFrame()
108 {
109     // If the property is getting this callback it must have been created with a Frame/DOMWindow and it should still have them.
110     ASSERT(m_frame);
111     ASSERT(m_associatedDOMWindow);
112 }
113
114 }