OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008, 2010 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 22 matching lines...) Expand all Loading... |
33 #include "core/dom/DOMStringList.h" | 33 #include "core/dom/DOMStringList.h" |
34 #include "core/frame/DOMWindowProperty.h" | 34 #include "core/frame/DOMWindowProperty.h" |
35 #include "wtf/PassRefPtr.h" | 35 #include "wtf/PassRefPtr.h" |
36 #include "wtf/RefCounted.h" | 36 #include "wtf/RefCounted.h" |
37 #include "wtf/text/WTFString.h" | 37 #include "wtf/text/WTFString.h" |
38 | 38 |
39 namespace blink { | 39 namespace blink { |
40 | 40 |
41 class LocalDOMWindow; | 41 class LocalDOMWindow; |
42 class ExceptionState; | 42 class ExceptionState; |
43 class LocalFrame; | 43 class Frame; |
44 class KURL; | 44 class KURL; |
45 | 45 |
46 class Location final : public RefCountedWillBeGarbageCollected<Location>, public
ScriptWrappable, public DOMWindowProperty { | 46 // This class corresponds to the JS Location API, which is the only DOM API besi
des Window that is operable |
| 47 // in a RemoteFrame. Rather than making DOMWindowProperty support RemoteFrames a
nd generating a lot |
| 48 // code churn, Location is implemented as a one-off with some custom lifetime ma
nagement code. Namely, |
| 49 // it needs a manual call to reset() from DOMWindow::reset() to ensure it doesn'
t retain a stale Frame pointer. |
| 50 class Location final : public RefCountedWillBeGarbageCollected<Location>, public
ScriptWrappable { |
47 DEFINE_WRAPPERTYPEINFO(); | 51 DEFINE_WRAPPERTYPEINFO(); |
48 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(Location); | |
49 public: | 52 public: |
50 static PassRefPtrWillBeRawPtr<Location> create(LocalFrame* frame) | 53 static PassRefPtrWillBeRawPtr<Location> create(Frame* frame) |
51 { | 54 { |
52 return adoptRefWillBeNoop(new Location(frame)); | 55 return adoptRefWillBeNoop(new Location(frame)); |
53 } | 56 } |
54 | 57 |
| 58 Frame* frame() const { return m_frame.get(); } |
| 59 void reset() { m_frame = nullptr; } |
| 60 |
55 void setHref(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); | 61 void setHref(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); |
56 String href() const; | 62 String href() const; |
57 | 63 |
58 void assign(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, co
nst String&); | 64 void assign(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, co
nst String&); |
59 void replace(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); | 65 void replace(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); |
60 void reload(LocalDOMWindow* callingWindow); | 66 void reload(LocalDOMWindow* callingWindow); |
61 | 67 |
62 void setProtocol(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindo
w, const String&, ExceptionState&); | 68 void setProtocol(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindo
w, const String&, ExceptionState&); |
63 String protocol() const; | 69 String protocol() const; |
64 void setHost(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); | 70 void setHost(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); |
65 String host() const; | 71 String host() const; |
66 void setHostname(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindo
w, const String&); | 72 void setHostname(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindo
w, const String&); |
67 String hostname() const; | 73 String hostname() const; |
68 void setPort(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); | 74 void setPort(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); |
69 String port() const; | 75 String port() const; |
70 void setPathname(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindo
w, const String&); | 76 void setPathname(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindo
w, const String&); |
71 String pathname() const; | 77 String pathname() const; |
72 void setSearch(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow,
const String&); | 78 void setSearch(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow,
const String&); |
73 String search() const; | 79 String search() const; |
74 void setHash(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); | 80 void setHash(LocalDOMWindow* callingWindow, LocalDOMWindow* enteredWindow, c
onst String&); |
75 String hash() const; | 81 String hash() const; |
76 String origin() const; | 82 String origin() const; |
77 | 83 |
78 PassRefPtrWillBeRawPtr<DOMStringList> ancestorOrigins() const; | 84 PassRefPtrWillBeRawPtr<DOMStringList> ancestorOrigins() const; |
79 | 85 |
80 virtual void trace(Visitor*) override; | 86 virtual void trace(Visitor*); |
81 | 87 |
82 private: | 88 private: |
83 explicit Location(LocalFrame*); | 89 explicit Location(Frame*); |
84 | 90 |
85 enum class SetLocation { Normal, ReplaceThisFrame }; | 91 enum class SetLocation { Normal, ReplaceThisFrame }; |
86 void setLocation(const String&, LocalDOMWindow* callingWindow, LocalDOMWindo
w* enteredWindow, SetLocation = SetLocation::Normal); | 92 void setLocation(const String&, LocalDOMWindow* callingWindow, LocalDOMWindo
w* enteredWindow, SetLocation = SetLocation::Normal); |
87 | 93 |
88 const KURL& url() const; | 94 const KURL& url() const; |
| 95 |
| 96 RawPtrWillBeMember<Frame> m_frame; |
89 }; | 97 }; |
90 | 98 |
91 } // namespace blink | 99 } // namespace blink |
92 | 100 |
93 #endif // Location_h | 101 #endif // Location_h |
OLD | NEW |