Optimize phishing page term feature extraction.
[chromium-blink-merge.git] / media / filters / file_data_source.h
blob10e61aa75d8bae7a7df06dad3fafe6e569d84450
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_FILTERS_FILE_DATA_SOURCE_H_
6 #define MEDIA_FILTERS_FILE_DATA_SOURCE_H_
8 #include <string>
10 #include "base/gtest_prod_util.h"
11 #include "base/synchronization/lock.h"
12 #include "media/base/filters.h"
14 namespace media {
16 // Basic data source that treats the URL as a file path, and uses the file
17 // system to read data for a media pipeline.
18 class FileDataSource : public DataSource {
19 public:
20 FileDataSource();
21 virtual ~FileDataSource();
23 PipelineStatus Initialize(const std::string& url);
25 // Implementation of Filter.
26 virtual void set_host(FilterHost* filter_host);
27 virtual void Stop(FilterCallback* callback);
29 // Implementation of DataSource.
30 virtual void Read(int64 position, size_t size, uint8* data,
31 ReadCallback* read_callback);
32 virtual bool GetSize(int64* size_out);
33 virtual bool IsStreaming();
34 virtual void SetPreload(Preload preload);
36 private:
37 // Only allow factories and tests to create this object.
39 // TODO(scherkus): I'm getting tired of these factories getting in the way
40 // of my tests!!!
41 FRIEND_TEST_ALL_PREFIXES(FileDataSourceTest, OpenFile);
42 FRIEND_TEST_ALL_PREFIXES(FileDataSourceTest, ReadData);
43 FRIEND_TEST_ALL_PREFIXES(FileDataSourceTest, Seek);
45 // File handle. NULL if not initialized or an error occurs.
46 FILE* file_;
48 // Size of the file in bytes.
49 int64 file_size_;
51 // Critical section that protects all of the DataSource methods to prevent
52 // a Stop from happening while in the middle of a file I/O operation.
53 // TODO(ralphl): Ideally this would use asynchronous I/O or we will know
54 // that we will block for a short period of time in reads. Otherwise, we can
55 // hang the pipeline Stop.
56 base::Lock lock_;
58 DISALLOW_COPY_AND_ASSIGN(FileDataSource);
61 } // namespace media
63 #endif // MEDIA_FILTERS_FILE_DATA_SOURCE_H_