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

Side by Side Diff: Source/modules/filesystem/DirectoryReader.cpp

Issue 563703002: Oilpan: Enable oilpan for callback classes (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 m_reader->addEntries(entries); 50 m_reader->addEntries(entries);
51 } 51 }
52 52
53 virtual void trace(Visitor* visitor) OVERRIDE 53 virtual void trace(Visitor* visitor) OVERRIDE
54 { 54 {
55 visitor->trace(m_reader); 55 visitor->trace(m_reader);
56 EntriesCallback::trace(visitor); 56 EntriesCallback::trace(visitor);
57 } 57 }
58 58
59 private: 59 private:
60 // FIXME: This Persistent keeps the reader alive until all of the readDirect ory results are received. crbug.com/350285 60 // FIXME: This Persistent keeps the reader alive until all of the readDirect ory results are received. crbug.com/350285
tkent 2014/09/22 02:04:05 Will this FIXME be resolved?
keishi 2014/09/22 05:44:01 I don't think it is resolved, we still need this t
61 PersistentWillBeMember<DirectoryReader> m_reader; 61 Member<DirectoryReader> m_reader;
62 }; 62 };
63 63
64 class DirectoryReader::ErrorCallbackHelper FINAL : public ErrorCallback { 64 class DirectoryReader::ErrorCallbackHelper FINAL : public ErrorCallback {
65 public: 65 public:
66 explicit ErrorCallbackHelper(DirectoryReader* reader) 66 explicit ErrorCallbackHelper(DirectoryReader* reader)
67 : m_reader(reader) 67 : m_reader(reader)
68 { 68 {
69 } 69 }
70 70
71 virtual void handleEvent(FileError* error) OVERRIDE 71 virtual void handleEvent(FileError* error) OVERRIDE
72 { 72 {
73 m_reader->onError(error); 73 m_reader->onError(error);
74 } 74 }
75 75
76 virtual void trace(Visitor* visitor) OVERRIDE 76 virtual void trace(Visitor* visitor) OVERRIDE
77 { 77 {
78 visitor->trace(m_reader); 78 visitor->trace(m_reader);
79 ErrorCallback::trace(visitor); 79 ErrorCallback::trace(visitor);
80 } 80 }
81 81
82 private: 82 private:
83 PersistentWillBeMember<DirectoryReader> m_reader; 83 Member<DirectoryReader> m_reader;
84 }; 84 };
85 85
86 DirectoryReader::DirectoryReader(DOMFileSystemBase* fileSystem, const String& fu llPath) 86 DirectoryReader::DirectoryReader(DOMFileSystemBase* fileSystem, const String& fu llPath)
87 : DirectoryReaderBase(fileSystem, fullPath) 87 : DirectoryReaderBase(fileSystem, fullPath)
88 , m_isReading(false) 88 , m_isReading(false)
89 { 89 {
90 } 90 }
91 91
92 DirectoryReader::~DirectoryReader() 92 DirectoryReader::~DirectoryReader()
93 { 93 {
94 } 94 }
95 95
96 void DirectoryReader::readEntries(PassOwnPtrWillBeRawPtr<EntriesCallback> entrie sCallback, PassOwnPtrWillBeRawPtr<ErrorCallback> errorCallback) 96 void DirectoryReader::readEntries(EntriesCallback* entriesCallback, ErrorCallbac k* errorCallback)
97 { 97 {
98 if (!m_isReading) { 98 if (!m_isReading) {
99 m_isReading = true; 99 m_isReading = true;
100 filesystem()->readDirectory(this, m_fullPath, adoptPtrWillBeNoop(new Ent riesCallbackHelper(this)), adoptPtrWillBeNoop(new ErrorCallbackHelper(this))); 100 filesystem()->readDirectory(this, m_fullPath, new EntriesCallbackHelper( this), new ErrorCallbackHelper(this));
101 } 101 }
102 102
103 if (m_error) { 103 if (m_error) {
104 filesystem()->scheduleCallback(errorCallback, PassRefPtrWillBeRawPtr<Fil eError>(m_error.get())); 104 filesystem()->scheduleCallback(errorCallback, PassRefPtrWillBeRawPtr<Fil eError>(m_error.get()));
105 return; 105 return;
106 } 106 }
107 107
108 if (m_entriesCallback) { 108 if (m_entriesCallback) {
109 // Non-null m_entriesCallback means multiple readEntries() calls are mad e concurrently. We don't allow doing it. 109 // Non-null m_entriesCallback means multiple readEntries() calls are mad e concurrently. We don't allow doing it.
110 filesystem()->scheduleCallback(errorCallback, FileError::create(FileErro r::INVALID_STATE_ERR)); 110 filesystem()->scheduleCallback(errorCallback, FileError::create(FileErro r::INVALID_STATE_ERR));
111 return; 111 return;
112 } 112 }
113 113
114 if (!m_hasMoreEntries || !m_entries.isEmpty()) { 114 if (!m_hasMoreEntries || !m_entries.isEmpty()) {
115 filesystem()->scheduleCallback(entriesCallback, m_entries); 115 filesystem()->scheduleCallback(entriesCallback, m_entries);
116 m_entries.clear(); 116 m_entries.clear();
117 return; 117 return;
118 } 118 }
119 119
120 m_entriesCallback = entriesCallback; 120 m_entriesCallback = entriesCallback;
121 m_errorCallback = errorCallback; 121 m_errorCallback = errorCallback;
122 } 122 }
123 123
124 void DirectoryReader::addEntries(const EntryHeapVector& entries) 124 void DirectoryReader::addEntries(const EntryHeapVector& entries)
125 { 125 {
126 m_entries.appendVector(entries); 126 m_entries.appendVector(entries);
127 m_errorCallback = nullptr; 127 m_errorCallback = nullptr;
128 if (m_entriesCallback) { 128 if (m_entriesCallback) {
129 OwnPtrWillBeRawPtr<EntriesCallback> entriesCallback = m_entriesCallback. release(); 129 EntriesCallback* entriesCallback = m_entriesCallback.release();
130 EntryHeapVector entries; 130 EntryHeapVector entries;
131 entries.swap(m_entries); 131 entries.swap(m_entries);
132 entriesCallback->handleEvent(entries); 132 entriesCallback->handleEvent(entries);
133 } 133 }
134 } 134 }
135 135
136 void DirectoryReader::onError(FileError* error) 136 void DirectoryReader::onError(FileError* error)
137 { 137 {
138 m_error = error; 138 m_error = error;
139 m_entriesCallback = nullptr; 139 m_entriesCallback = nullptr;
140 if (m_errorCallback) { 140 if (m_errorCallback) {
141 OwnPtrWillBeRawPtr<ErrorCallback> errorCallback = m_errorCallback.releas e(); 141 ErrorCallback* errorCallback = m_errorCallback;
tkent 2014/09/22 02:04:05 Are you sure we don't need .release()?
keishi 2014/09/22 05:44:01 Added back.
142 errorCallback->handleEvent(error); 142 errorCallback->handleEvent(error);
143 } 143 }
144 } 144 }
145 145
146 void DirectoryReader::trace(Visitor* visitor) 146 void DirectoryReader::trace(Visitor* visitor)
147 { 147 {
148 visitor->trace(m_entries); 148 visitor->trace(m_entries);
149 visitor->trace(m_error); 149 visitor->trace(m_error);
150 visitor->trace(m_entriesCallback); 150 visitor->trace(m_entriesCallback);
151 visitor->trace(m_errorCallback); 151 visitor->trace(m_errorCallback);
152 DirectoryReaderBase::trace(visitor); 152 DirectoryReaderBase::trace(visitor);
153 } 153 }
154 154
155 } 155 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698