| OLD | NEW | 
|     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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   111 class PostMessageTimer final : public NoBaseWillBeGarbageCollectedFinalized<Post
      MessageTimer>, public SuspendableTimer { |   111 class PostMessageTimer final : public NoBaseWillBeGarbageCollectedFinalized<Post
      MessageTimer>, public SuspendableTimer { | 
|   112     WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PostMessageTimer); |   112     WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PostMessageTimer); | 
|   113 public: |   113 public: | 
|   114     PostMessageTimer(LocalDOMWindow& window, PassRefPtrWillBeRawPtr<MessageEvent
      > event, PassRefPtrWillBeRawPtr<LocalDOMWindow> source, SecurityOrigin* targetOr
      igin, PassRefPtrWillBeRawPtr<ScriptCallStack> stackTrace, UserGestureToken* user
      GestureToken) |   114     PostMessageTimer(LocalDOMWindow& window, PassRefPtrWillBeRawPtr<MessageEvent
      > event, PassRefPtrWillBeRawPtr<LocalDOMWindow> source, SecurityOrigin* targetOr
      igin, PassRefPtrWillBeRawPtr<ScriptCallStack> stackTrace, UserGestureToken* user
      GestureToken) | 
|   115         : SuspendableTimer(window.document()) |   115         : SuspendableTimer(window.document()) | 
|   116         , m_event(event) |   116         , m_event(event) | 
|   117         , m_window(&window) |   117         , m_window(&window) | 
|   118         , m_targetOrigin(targetOrigin) |   118         , m_targetOrigin(targetOrigin) | 
|   119         , m_stackTrace(stackTrace) |   119         , m_stackTrace(stackTrace) | 
|   120         , m_userGestureToken(userGestureToken) |   120         , m_userGestureToken(userGestureToken) | 
 |   121         , m_preventDestruction(false) | 
|   121     { |   122     { | 
|   122         m_asyncOperationId = InspectorInstrumentation::traceAsyncOperationStarti
      ng(executionContext(), "postMessage"); |   123         m_asyncOperationId = InspectorInstrumentation::traceAsyncOperationStarti
      ng(executionContext(), "postMessage"); | 
|   123     } |   124     } | 
|   124  |   125  | 
|   125     PassRefPtrWillBeRawPtr<MessageEvent> event() const { return m_event.get(); } |   126     PassRefPtrWillBeRawPtr<MessageEvent> event() const { return m_event.get(); } | 
|   126     SecurityOrigin* targetOrigin() const { return m_targetOrigin.get(); } |   127     SecurityOrigin* targetOrigin() const { return m_targetOrigin.get(); } | 
|   127     ScriptCallStack* stackTrace() const { return m_stackTrace.get(); } |   128     ScriptCallStack* stackTrace() const { return m_stackTrace.get(); } | 
|   128     UserGestureToken* userGestureToken() const { return m_userGestureToken.get()
      ; } |   129     UserGestureToken* userGestureToken() const { return m_userGestureToken.get()
      ; } | 
 |   130     virtual void stop() override | 
 |   131     { | 
 |   132         SuspendableTimer::stop(); | 
 |   133  | 
 |   134         if (!m_preventDestruction) { | 
 |   135             // Will destroy this object | 
 |   136             m_window->removePostMessageTimer(this); | 
 |   137         } | 
 |   138     } | 
|   129  |   139  | 
|   130     DEFINE_INLINE_VIRTUAL_TRACE() |   140     DEFINE_INLINE_VIRTUAL_TRACE() | 
|   131     { |   141     { | 
|   132         visitor->trace(m_event); |   142         visitor->trace(m_event); | 
|   133         visitor->trace(m_window); |   143         visitor->trace(m_window); | 
|   134         visitor->trace(m_stackTrace); |   144         visitor->trace(m_stackTrace); | 
|   135         SuspendableTimer::trace(visitor); |   145         SuspendableTimer::trace(visitor); | 
|   136     } |   146     } | 
|   137  |   147  | 
|   138 private: |   148 private: | 
|   139     virtual void fired() override |   149     virtual void fired() override | 
|   140     { |   150     { | 
|   141         InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceA
      syncOperationCompletedCallbackStarting(executionContext(), m_asyncOperationId); |   151         InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceA
      syncOperationCompletedCallbackStarting(executionContext(), m_asyncOperationId); | 
 |   152         // Prevent calls to stop triggered from the event handler to | 
 |   153         // kill this object. | 
 |   154         m_preventDestruction = true; | 
|   142         m_window->postMessageTimerFired(this); |   155         m_window->postMessageTimerFired(this); | 
|   143         // This object is deleted now. |   156         // Will destroy this object | 
 |   157         m_window->removePostMessageTimer(this); | 
|   144         InspectorInstrumentation::traceAsyncCallbackCompleted(cookie); |   158         InspectorInstrumentation::traceAsyncCallbackCompleted(cookie); | 
|   145     } |   159     } | 
|   146  |   160  | 
|   147     RefPtrWillBeMember<MessageEvent> m_event; |   161     RefPtrWillBeMember<MessageEvent> m_event; | 
|   148     RawPtrWillBeMember<LocalDOMWindow> m_window; |   162     RawPtrWillBeMember<LocalDOMWindow> m_window; | 
|   149     RefPtr<SecurityOrigin> m_targetOrigin; |   163     RefPtr<SecurityOrigin> m_targetOrigin; | 
|   150     RefPtrWillBeMember<ScriptCallStack> m_stackTrace; |   164     RefPtrWillBeMember<ScriptCallStack> m_stackTrace; | 
|   151     RefPtr<UserGestureToken> m_userGestureToken; |   165     RefPtr<UserGestureToken> m_userGestureToken; | 
|   152     int m_asyncOperationId; |   166     int m_asyncOperationId; | 
 |   167     bool m_preventDestruction; | 
|   153 }; |   168 }; | 
|   154  |   169  | 
|   155 static void updateSuddenTerminationStatus(LocalDOMWindow* domWindow, bool addedL
      istener, FrameLoaderClient::SuddenTerminationDisablerType disablerType) |   170 static void updateSuddenTerminationStatus(LocalDOMWindow* domWindow, bool addedL
      istener, FrameLoaderClient::SuddenTerminationDisablerType disablerType) | 
|   156 { |   171 { | 
|   157     Platform::current()->suddenTerminationChanged(!addedListener); |   172     Platform::current()->suddenTerminationChanged(!addedListener); | 
|   158     if (domWindow->frame() && domWindow->frame()->loader().client()) |   173     if (domWindow->frame() && domWindow->frame()->loader().client()) | 
|   159         domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
      addedListener, disablerType); |   174         domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
      addedListener, disablerType); | 
|   160 } |   175 } | 
|   161  |   176  | 
|   162 typedef HashCountedSet<LocalDOMWindow*> DOMWindowSet; |   177 typedef HashCountedSet<LocalDOMWindow*> DOMWindowSet; | 
| (...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   653     // Schedule the message. |   668     // Schedule the message. | 
|   654     OwnPtrWillBeRawPtr<PostMessageTimer> timer = adoptPtrWillBeNoop(new PostMess
      ageTimer(*this, event, source, target, stackTrace, UserGestureIndicator::current
      Token())); |   669     OwnPtrWillBeRawPtr<PostMessageTimer> timer = adoptPtrWillBeNoop(new PostMess
      ageTimer(*this, event, source, target, stackTrace, UserGestureIndicator::current
      Token())); | 
|   655     timer->startOneShot(0, FROM_HERE); |   670     timer->startOneShot(0, FROM_HERE); | 
|   656     timer->suspendIfNeeded(); |   671     timer->suspendIfNeeded(); | 
|   657     m_postMessageTimers.add(timer.release()); |   672     m_postMessageTimers.add(timer.release()); | 
|   658 } |   673 } | 
|   659  |   674  | 
|   660 void LocalDOMWindow::postMessageTimerFired(PostMessageTimer* timer) |   675 void LocalDOMWindow::postMessageTimerFired(PostMessageTimer* timer) | 
|   661 { |   676 { | 
|   662     if (!isCurrentlyDisplayedInFrame()) { |   677     if (!isCurrentlyDisplayedInFrame()) { | 
|   663         m_postMessageTimers.remove(timer); |  | 
|   664         return; |   678         return; | 
|   665     } |   679     } | 
|   666  |   680  | 
|   667     RefPtrWillBeRawPtr<MessageEvent> event = timer->event(); |   681     RefPtrWillBeRawPtr<MessageEvent> event = timer->event(); | 
|   668  |   682  | 
|   669     UserGestureIndicator gestureIndicator(timer->userGestureToken()); |   683     UserGestureIndicator gestureIndicator(timer->userGestureToken()); | 
|   670  |   684  | 
|   671     event->entangleMessagePorts(document()); |   685     event->entangleMessagePorts(document()); | 
|   672     dispatchMessageEventWithOriginCheck(timer->targetOrigin(), event, timer->sta
      ckTrace()); |   686     dispatchMessageEventWithOriginCheck(timer->targetOrigin(), event, timer->sta
      ckTrace()); | 
 |   687 } | 
 |   688  | 
 |   689 void LocalDOMWindow::removePostMessageTimer(PostMessageTimer* timer) | 
 |   690 { | 
|   673     m_postMessageTimers.remove(timer); |   691     m_postMessageTimers.remove(timer); | 
|   674 } |   692 } | 
|   675  |   693  | 
|   676 void LocalDOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intende
      dTargetOrigin, PassRefPtrWillBeRawPtr<Event> event, PassRefPtrWillBeRawPtr<Scrip
      tCallStack> stackTrace) |   694 void LocalDOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intende
      dTargetOrigin, PassRefPtrWillBeRawPtr<Event> event, PassRefPtrWillBeRawPtr<Scrip
      tCallStack> stackTrace) | 
|   677 { |   695 { | 
|   678     if (intendedTargetOrigin) { |   696     if (intendedTargetOrigin) { | 
|   679         // Check target origin now since the target document may have changed si
      nce the timer was scheduled. |   697         // Check target origin now since the target document may have changed si
      nce the timer was scheduled. | 
|   680         if (!intendedTargetOrigin->isSameSchemeHostPort(document()->securityOrig
      in())) { |   698         if (!intendedTargetOrigin->isSameSchemeHostPort(document()->securityOrig
      in())) { | 
|   681             String message = ExceptionMessages::failedToExecute("postMessage", "
      DOMWindow", "The target origin provided ('" + intendedTargetOrigin->toString() +
       "') does not match the recipient window's origin ('" + document()->securityOrig
      in()->toString() + "')."); |   699             String message = ExceptionMessages::failedToExecute("postMessage", "
      DOMWindow", "The target origin provided ('" + intendedTargetOrigin->toString() +
       "') does not match the recipient window's origin ('" + document()->securityOrig
      in()->toString() + "')."); | 
|   682             RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::
      create(SecurityMessageSource, ErrorMessageLevel, message); |   700             RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::
      create(SecurityMessageSource, ErrorMessageLevel, message); | 
| (...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1503     DOMWindow::trace(visitor); |  1521     DOMWindow::trace(visitor); | 
|  1504     DOMWindowLifecycleNotifier::trace(visitor); |  1522     DOMWindowLifecycleNotifier::trace(visitor); | 
|  1505 } |  1523 } | 
|  1506  |  1524  | 
|  1507 LocalFrame* LocalDOMWindow::frame() const |  1525 LocalFrame* LocalDOMWindow::frame() const | 
|  1508 { |  1526 { | 
|  1509     return m_frameObserver->frame(); |  1527     return m_frameObserver->frame(); | 
|  1510 } |  1528 } | 
|  1511  |  1529  | 
|  1512 } // namespace blink |  1530 } // namespace blink | 
| OLD | NEW |