| OLD | NEW | 
|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 #include "base/message_loop/message_pump_io_ios.h" | 5 #include "base/message_loop/message_pump_io_ios.h" | 
| 6 | 6 | 
| 7 namespace base { | 7 namespace base { | 
| 8 | 8 | 
| 9 MessagePumpIOSForIO::FileDescriptorWatcher::FileDescriptorWatcher() | 9 MessagePumpIOSForIO::FileDescriptorWatcher::FileDescriptorWatcher() | 
| 10     : is_persistent_(false), | 10     : is_persistent_(false), | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 44   is_persistent_ = is_persistent; | 44   is_persistent_ = is_persistent; | 
| 45   fdref_.reset(fdref); | 45   fdref_.reset(fdref); | 
| 46   callback_types_ = callback_types; | 46   callback_types_ = callback_types; | 
| 47   fd_source_.reset(fd_source); | 47   fd_source_.reset(fd_source); | 
| 48 } | 48 } | 
| 49 | 49 | 
| 50 void MessagePumpIOSForIO::FileDescriptorWatcher::OnFileCanReadWithoutBlocking( | 50 void MessagePumpIOSForIO::FileDescriptorWatcher::OnFileCanReadWithoutBlocking( | 
| 51     int fd, | 51     int fd, | 
| 52     MessagePumpIOSForIO* pump) { | 52     MessagePumpIOSForIO* pump) { | 
| 53   DCHECK(callback_types_ & kCFFileDescriptorReadCallBack); | 53   DCHECK(callback_types_ & kCFFileDescriptorReadCallBack); | 
| 54   pump->WillProcessIOEvent(); |  | 
| 55   watcher_->OnFileCanReadWithoutBlocking(fd); | 54   watcher_->OnFileCanReadWithoutBlocking(fd); | 
| 56   pump->DidProcessIOEvent(); |  | 
| 57 } | 55 } | 
| 58 | 56 | 
| 59 void MessagePumpIOSForIO::FileDescriptorWatcher::OnFileCanWriteWithoutBlocking( | 57 void MessagePumpIOSForIO::FileDescriptorWatcher::OnFileCanWriteWithoutBlocking( | 
| 60     int fd, | 58     int fd, | 
| 61     MessagePumpIOSForIO* pump) { | 59     MessagePumpIOSForIO* pump) { | 
| 62   DCHECK(callback_types_ & kCFFileDescriptorWriteCallBack); | 60   DCHECK(callback_types_ & kCFFileDescriptorWriteCallBack); | 
| 63   pump->WillProcessIOEvent(); |  | 
| 64   watcher_->OnFileCanWriteWithoutBlocking(fd); | 61   watcher_->OnFileCanWriteWithoutBlocking(fd); | 
| 65   pump->DidProcessIOEvent(); |  | 
| 66 } | 62 } | 
| 67 | 63 | 
| 68 MessagePumpIOSForIO::MessagePumpIOSForIO() : weak_factory_(this) { | 64 MessagePumpIOSForIO::MessagePumpIOSForIO() : weak_factory_(this) { | 
| 69 } | 65 } | 
| 70 | 66 | 
| 71 MessagePumpIOSForIO::~MessagePumpIOSForIO() { | 67 MessagePumpIOSForIO::~MessagePumpIOSForIO() { | 
| 72 } | 68 } | 
| 73 | 69 | 
| 74 bool MessagePumpIOSForIO::WatchFileDescriptor( | 70 bool MessagePumpIOSForIO::WatchFileDescriptor( | 
| 75     int fd, | 71     int fd, | 
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 145   controller->set_watcher(delegate); | 141   controller->set_watcher(delegate); | 
| 146   controller->set_pump(weak_factory_.GetWeakPtr()); | 142   controller->set_pump(weak_factory_.GetWeakPtr()); | 
| 147 | 143 | 
| 148   return true; | 144   return true; | 
| 149 } | 145 } | 
| 150 | 146 | 
| 151 void MessagePumpIOSForIO::RemoveRunLoopSource(CFRunLoopSourceRef source) { | 147 void MessagePumpIOSForIO::RemoveRunLoopSource(CFRunLoopSourceRef source) { | 
| 152   CFRunLoopRemoveSource(run_loop(), source, kCFRunLoopCommonModes); | 148   CFRunLoopRemoveSource(run_loop(), source, kCFRunLoopCommonModes); | 
| 153 } | 149 } | 
| 154 | 150 | 
| 155 void MessagePumpIOSForIO::AddIOObserver(IOObserver *obs) { |  | 
| 156   io_observers_.AddObserver(obs); |  | 
| 157 } |  | 
| 158 |  | 
| 159 void MessagePumpIOSForIO::RemoveIOObserver(IOObserver *obs) { |  | 
| 160   io_observers_.RemoveObserver(obs); |  | 
| 161 } |  | 
| 162 |  | 
| 163 void MessagePumpIOSForIO::WillProcessIOEvent() { |  | 
| 164   FOR_EACH_OBSERVER(IOObserver, io_observers_, WillProcessIOEvent()); |  | 
| 165 } |  | 
| 166 |  | 
| 167 void MessagePumpIOSForIO::DidProcessIOEvent() { |  | 
| 168   FOR_EACH_OBSERVER(IOObserver, io_observers_, DidProcessIOEvent()); |  | 
| 169 } |  | 
| 170 |  | 
| 171 // static | 151 // static | 
| 172 void MessagePumpIOSForIO::HandleFdIOEvent(CFFileDescriptorRef fdref, | 152 void MessagePumpIOSForIO::HandleFdIOEvent(CFFileDescriptorRef fdref, | 
| 173                                           CFOptionFlags callback_types, | 153                                           CFOptionFlags callback_types, | 
| 174                                           void* context) { | 154                                           void* context) { | 
| 175   FileDescriptorWatcher* controller = | 155   FileDescriptorWatcher* controller = | 
| 176       static_cast<FileDescriptorWatcher*>(context); | 156       static_cast<FileDescriptorWatcher*>(context); | 
| 177   DCHECK_EQ(fdref, controller->fdref_.get()); | 157   DCHECK_EQ(fdref, controller->fdref_.get()); | 
| 178 | 158 | 
| 179   // Ensure that |fdref| will remain live for the duration of this function | 159   // Ensure that |fdref| will remain live for the duration of this function | 
| 180   // call even if |controller| is deleted or |StopWatchingFileDescriptor()| is | 160   // call even if |controller| is deleted or |StopWatchingFileDescriptor()| is | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 200 | 180 | 
| 201   // Re-enable callbacks after the read/write if the file descriptor is still | 181   // Re-enable callbacks after the read/write if the file descriptor is still | 
| 202   // valid and the controller is persistent. | 182   // valid and the controller is persistent. | 
| 203   if (CFFileDescriptorIsValid(fdref) && controller->is_persistent_) { | 183   if (CFFileDescriptorIsValid(fdref) && controller->is_persistent_) { | 
| 204     DCHECK_EQ(fdref, controller->fdref_.get()); | 184     DCHECK_EQ(fdref, controller->fdref_.get()); | 
| 205     CFFileDescriptorEnableCallBacks(fdref, callback_types); | 185     CFFileDescriptorEnableCallBacks(fdref, callback_types); | 
| 206   } | 186   } | 
| 207 } | 187 } | 
| 208 | 188 | 
| 209 }  // namespace base | 189 }  // namespace base | 
| OLD | NEW | 
|---|