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

Side by Side Diff: Source/core/workers/WorkerEventQueue.cpp

Issue 216523002: Oilpan: Replace most of RefPtrs for Event objects with oilpan's transition types (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All Rights Reserved. 2 * Copyright (C) 2010 Google 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 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 { 44 {
45 } 45 }
46 46
47 WorkerEventQueue::~WorkerEventQueue() 47 WorkerEventQueue::~WorkerEventQueue()
48 { 48 {
49 close(); 49 close();
50 } 50 }
51 51
52 class WorkerEventQueue::EventDispatcherTask : public ExecutionContextTask { 52 class WorkerEventQueue::EventDispatcherTask : public ExecutionContextTask {
53 public: 53 public:
54 static PassOwnPtr<EventDispatcherTask> create(PassRefPtr<Event> event, Worke rEventQueue* eventQueue) 54 static PassOwnPtr<EventDispatcherTask> create(PassRefPtrWillBeRawPtr<Event> event, WorkerEventQueue* eventQueue)
55 { 55 {
56 return adoptPtr(new EventDispatcherTask(event, eventQueue)); 56 return adoptPtr(new EventDispatcherTask(event, eventQueue));
57 } 57 }
58 58
59 virtual ~EventDispatcherTask() 59 virtual ~EventDispatcherTask()
60 { 60 {
61 if (m_event) 61 if (m_event)
62 m_eventQueue->removeEvent(m_event.get()); 62 m_eventQueue->removeEvent(m_event.get());
63 } 63 }
64 64
65 void dispatchEvent(ExecutionContext*, PassRefPtr<Event> event) 65 void dispatchEvent(ExecutionContext*, PassRefPtrWillBeRawPtr<Event> event)
66 { 66 {
67 event->target()->dispatchEvent(event); 67 event->target()->dispatchEvent(event);
68 } 68 }
69 69
70 virtual void performTask(ExecutionContext* context) 70 virtual void performTask(ExecutionContext* context)
71 { 71 {
72 if (m_isCancelled) 72 if (m_isCancelled)
73 return; 73 return;
74 m_eventQueue->removeEvent(m_event.get()); 74 m_eventQueue->removeEvent(m_event.get());
75 dispatchEvent(context, m_event); 75 dispatchEvent(context, m_event);
76 m_event.clear(); 76 m_event.clear();
77 } 77 }
78 78
79 void cancel() 79 void cancel()
80 { 80 {
81 m_isCancelled = true; 81 m_isCancelled = true;
82 m_event.clear(); 82 m_event.clear();
83 } 83 }
84 84
85 private: 85 private:
86 EventDispatcherTask(PassRefPtr<Event> event, WorkerEventQueue* eventQueue) 86 EventDispatcherTask(PassRefPtrWillBeRawPtr<Event> event, WorkerEventQueue* e ventQueue)
87 : m_event(event) 87 : m_event(event)
88 , m_eventQueue(eventQueue) 88 , m_eventQueue(eventQueue)
89 , m_isCancelled(false) 89 , m_isCancelled(false)
90 { 90 {
91 } 91 }
92 92
93 RefPtr<Event> m_event; 93 RefPtrWillBeRawPtr<Event> m_event;
94 WorkerEventQueue* m_eventQueue; 94 WorkerEventQueue* m_eventQueue;
95 bool m_isCancelled; 95 bool m_isCancelled;
96 }; 96 };
97 97
98 void WorkerEventQueue::removeEvent(Event* event) 98 void WorkerEventQueue::removeEvent(Event* event)
99 { 99 {
100 m_eventTaskMap.remove(event); 100 m_eventTaskMap.remove(event);
101 } 101 }
102 102
103 bool WorkerEventQueue::enqueueEvent(PassRefPtr<Event> prpEvent) 103 bool WorkerEventQueue::enqueueEvent(PassRefPtrWillBeRawPtr<Event> prpEvent)
104 { 104 {
105 if (m_isClosed) 105 if (m_isClosed)
106 return false; 106 return false;
107 RefPtr<Event> event = prpEvent; 107 RefPtrWillBeRawPtr<Event> event = prpEvent;
108 OwnPtr<EventDispatcherTask> task = EventDispatcherTask::create(event, this); 108 OwnPtr<EventDispatcherTask> task = EventDispatcherTask::create(event, this);
109 m_eventTaskMap.add(event.release(), task.get()); 109 m_eventTaskMap.add(event.release(), task.get());
110 m_executionContext->postTask(task.release()); 110 m_executionContext->postTask(task.release());
111 return true; 111 return true;
112 } 112 }
113 113
114 bool WorkerEventQueue::cancelEvent(Event* event) 114 bool WorkerEventQueue::cancelEvent(Event* event)
115 { 115 {
116 EventDispatcherTask* task = m_eventTaskMap.get(event); 116 EventDispatcherTask* task = m_eventTaskMap.get(event);
117 if (!task) 117 if (!task)
118 return false; 118 return false;
119 task->cancel(); 119 task->cancel();
120 removeEvent(event); 120 removeEvent(event);
121 return true; 121 return true;
122 } 122 }
123 123
124 void WorkerEventQueue::close() 124 void WorkerEventQueue::close()
125 { 125 {
126 m_isClosed = true; 126 m_isClosed = true;
127 for (EventTaskMap::iterator it = m_eventTaskMap.begin(); it != m_eventTaskMa p.end(); ++it) { 127 for (EventTaskMap::iterator it = m_eventTaskMap.begin(); it != m_eventTaskMa p.end(); ++it) {
128 EventDispatcherTask* task = it->value; 128 EventDispatcherTask* task = it->value;
129 task->cancel(); 129 task->cancel();
130 } 130 }
131 m_eventTaskMap.clear(); 131 m_eventTaskMap.clear();
132 } 132 }
133 133
134 } 134 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698