Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: Source/core/frame/DOMWindow.cpp

Issue 24739002: Enable sending MessagePorts to a different renderer (Blink side) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Code review (jochen) Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/events/MessageEvent.cpp ('k') | Source/web/WebDOMMessageEvent.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 : m_window(window) 110 : m_window(window)
111 , m_message(message) 111 , m_message(message)
112 , m_origin(sourceOrigin) 112 , m_origin(sourceOrigin)
113 , m_source(source) 113 , m_source(source)
114 , m_channels(channels) 114 , m_channels(channels)
115 , m_targetOrigin(targetOrigin) 115 , m_targetOrigin(targetOrigin)
116 , m_stackTrace(stackTrace) 116 , m_stackTrace(stackTrace)
117 { 117 {
118 } 118 }
119 119
120 PassRefPtr<MessageEvent> event(ExecutionContext* context) 120 PassRefPtr<MessageEvent> event()
121 { 121 {
122 OwnPtr<MessagePortArray> messagePorts = MessagePort::entanglePorts(*cont ext, m_channels.release()); 122 return MessageEvent::create(m_channels.release(), m_message, m_origin, S tring(), m_source);
123 return MessageEvent::create(messagePorts.release(), m_message, m_origin, String(), m_source); 123
124 } 124 }
125 SecurityOrigin* targetOrigin() const { return m_targetOrigin.get(); } 125 SecurityOrigin* targetOrigin() const { return m_targetOrigin.get(); }
126 ScriptCallStack* stackTrace() const { return m_stackTrace.get(); } 126 ScriptCallStack* stackTrace() const { return m_stackTrace.get(); }
127 127
128 private: 128 private:
129 virtual void fired() 129 virtual void fired()
130 { 130 {
131 m_window->postMessageTimerFired(adoptPtr(this)); 131 m_window->postMessageTimerFired(adoptPtr(this));
132 // This object is deleted now. 132 // This object is deleted now.
133 } 133 }
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 timer->startOneShot(0); 776 timer->startOneShot(0);
777 } 777 }
778 778
779 void DOMWindow::postMessageTimerFired(PassOwnPtr<PostMessageTimer> t) 779 void DOMWindow::postMessageTimerFired(PassOwnPtr<PostMessageTimer> t)
780 { 780 {
781 OwnPtr<PostMessageTimer> timer(t); 781 OwnPtr<PostMessageTimer> timer(t);
782 782
783 if (!document() || !isCurrentlyDisplayedInFrame()) 783 if (!document() || !isCurrentlyDisplayedInFrame())
784 return; 784 return;
785 785
786 RefPtr<MessageEvent> event = timer->event(document()); 786 RefPtr<MessageEvent> event = timer->event();
787 787
788 // Give the embedder a chance to intercept this postMessage because this 788 // Give the embedder a chance to intercept this postMessage because this
789 // DOMWindow might be a proxy for another in browsers that support 789 // DOMWindow might be a proxy for another in browsers that support
790 // postMessage calls across WebKit instances. 790 // postMessage calls across WebKit instances.
791 if (m_frame->loader()->client()->willCheckAndDispatchMessageEvent(timer->tar getOrigin(), event.get())) 791 if (m_frame->loader()->client()->willCheckAndDispatchMessageEvent(timer->tar getOrigin(), event.get()))
792 return; 792 return;
793 793
794 event->entangleMessagePorts(document());
794 dispatchMessageEventWithOriginCheck(timer->targetOrigin(), event, timer->sta ckTrace()); 795 dispatchMessageEventWithOriginCheck(timer->targetOrigin(), event, timer->sta ckTrace());
795 } 796 }
796 797
797 void DOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTarg etOrigin, PassRefPtr<Event> event, PassRefPtr<ScriptCallStack> stackTrace) 798 void DOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTarg etOrigin, PassRefPtr<Event> event, PassRefPtr<ScriptCallStack> stackTrace)
798 { 799 {
799 if (intendedTargetOrigin) { 800 if (intendedTargetOrigin) {
800 // Check target origin now since the target document may have changed si nce the timer was scheduled. 801 // Check target origin now since the target document may have changed si nce the timer was scheduled.
801 if (!intendedTargetOrigin->isSameSchemeHostPort(document()->securityOrig in())) { 802 if (!intendedTargetOrigin->isSameSchemeHostPort(document()->securityOrig in())) {
802 String message = "Unable to post message to " + intendedTargetOrigin ->toString() + 803 String message = "Unable to post message to " + intendedTargetOrigin ->toString() +
803 ". Recipient has origin " + document()->securityOri gin()->toString() + ".\n"; 804 ". Recipient has origin " + document()->securityOri gin()->toString() + ".\n";
(...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after
1766 return static_cast<DOMWindowLifecycleNotifier*>(LifecycleContext::lifecycleN otifier()); 1767 return static_cast<DOMWindowLifecycleNotifier*>(LifecycleContext::lifecycleN otifier());
1767 } 1768 }
1768 1769
1769 PassOwnPtr<LifecycleNotifier> DOMWindow::createLifecycleNotifier() 1770 PassOwnPtr<LifecycleNotifier> DOMWindow::createLifecycleNotifier()
1770 { 1771 {
1771 return DOMWindowLifecycleNotifier::create(this); 1772 return DOMWindowLifecycleNotifier::create(this);
1772 } 1773 }
1773 1774
1774 1775
1775 } // namespace WebCore 1776 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/events/MessageEvent.cpp ('k') | Source/web/WebDOMMessageEvent.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698