OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_COMMON_FRAME_REPLICATION_STATE_H_ | 5 #ifndef CONTENT_COMMON_FRAME_REPLICATION_STATE_H_ |
6 #define CONTENT_COMMON_FRAME_REPLICATION_STATE_H_ | 6 #define CONTENT_COMMON_FRAME_REPLICATION_STATE_H_ |
7 | 7 |
8 #include "content/common/content_export.h" | 8 #include "content/common/content_export.h" |
9 #include "url/origin.h" | 9 #include "url/origin.h" |
10 | 10 |
(...skipping 25 matching lines...) Expand all Loading... | |
36 inline SandboxFlags operator&(SandboxFlags a, SandboxFlags b) { | 36 inline SandboxFlags operator&(SandboxFlags a, SandboxFlags b) { |
37 return static_cast<SandboxFlags>(static_cast<int>(a) & static_cast<int>(b)); | 37 return static_cast<SandboxFlags>(static_cast<int>(a) & static_cast<int>(b)); |
38 } | 38 } |
39 | 39 |
40 inline SandboxFlags operator~(SandboxFlags flags) { | 40 inline SandboxFlags operator~(SandboxFlags flags) { |
41 return static_cast<SandboxFlags>(~static_cast<int>(flags)); | 41 return static_cast<SandboxFlags>(~static_cast<int>(flags)); |
42 } | 42 } |
43 | 43 |
44 // This structure holds information that needs to be replicated between a | 44 // This structure holds information that needs to be replicated between a |
45 // RenderFrame and any of its associated RenderFrameProxies. | 45 // RenderFrame and any of its associated RenderFrameProxies. |
46 // | |
47 // |origin| is updated whenever a frame navigation commits. |name| is | |
Charlie Reis
2015/04/22 23:41:25
These look great, but maybe it would help to put t
alexmos
2015/04/23 00:07:44
Done.
| |
48 // set when a new child frame is created, using the value of the <iframe> | |
49 // element's "name" attribute (see RenderFrameHostImpl::OnCreateChildFrame), | |
50 // and it is updated dynamically whenever a frame sets its window.name. | |
51 // |sandbox_flags| are initialized for new child frames using the value of the | |
52 // <iframe>'s "sandbox" attribute. They are updated dynamically whenever a | |
53 // parent frame updates an <iframe>'s sandbox attribute via JavaScript. | |
54 // | |
55 // When |name| is updated dynamically, updates are immediately sent to all | |
56 // frame proxies (when in --site-per-process mode). This is needed since other | |
57 // frames may attempt to lookup or navigate a frame using its updated name | |
58 // (e.g., using window.open(url, frame_name)). | |
59 // | |
60 // Updates to |sandbox_flags| are sent to proxies only after a subsequent | |
61 // navigation of the (sandboxed) frame, since the flags only take effect on | |
62 // navigation. The proxies need updated flags so that they can be inherited | |
63 // properly if a proxy ever becomes a parent of a local frame. | |
64 // | |
65 // TODO(alexmos): For now, |origin| updates are also immediately sent to all | |
66 // proxies with --site-per-process. This isn't ideal, since Blink typically | |
67 // needs a proxy's origin only when performing security checks on the ancestors | |
68 // of a local frame. So, as a future improvement, we could delay sending | |
69 // origin updates to proxies until they have a local descendant (if ever). | |
70 // This would reduce leaking a user's browsing history into a compromized | |
71 // renderer. | |
46 struct CONTENT_EXPORT FrameReplicationState { | 72 struct CONTENT_EXPORT FrameReplicationState { |
47 FrameReplicationState(); | 73 FrameReplicationState(); |
48 FrameReplicationState(const std::string& name); | 74 FrameReplicationState(const std::string& name); |
49 ~FrameReplicationState(); | 75 ~FrameReplicationState(); |
50 | 76 |
51 // Current serialized security origin of the frame. Unique origins are | 77 // Current serialized security origin of the frame. Unique origins are |
52 // represented as the string "null" per RFC 6454. | 78 // represented as the string "null" per RFC 6454. |
53 url::Origin origin; | 79 url::Origin origin; |
54 | 80 |
55 // Current sandbox flags of the frame. | 81 // Current sandbox flags of the frame. |
56 SandboxFlags sandbox_flags; | 82 SandboxFlags sandbox_flags; |
57 | 83 |
58 // The assigned name of the frame. This name can be empty, unlike the unique | 84 // The assigned name of the frame. This name can be empty, unlike the unique |
59 // name generated internally in the DOM tree. | 85 // name generated internally in the DOM tree. |
60 std::string name; | 86 std::string name; |
61 | 87 |
62 // TODO(alexmos): Eventually, this structure can also hold other state that | 88 // TODO(alexmos): Eventually, this structure can also hold other state that |
63 // needs to be replicated, such as frame sizing info. | 89 // needs to be replicated, such as frame sizing info. |
64 }; | 90 }; |
65 | 91 |
66 } // namespace content | 92 } // namespace content |
67 | 93 |
68 #endif // CONTENT_COMMON_FRAME_REPLICATION_STATE_H_ | 94 #endif // CONTENT_COMMON_FRAME_REPLICATION_STATE_H_ |
OLD | NEW |