00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_TEST_REWRITE_DRIVER_FACTORY_H_
00020 #define NET_INSTAWEB_REWRITER_PUBLIC_TEST_REWRITE_DRIVER_FACTORY_H_
00021
00022 #include <vector>
00023
00024 #include "base/scoped_ptr.h"
00025 #include "net/instaweb/rewriter/public/rewrite_driver_factory.h"
00026 #include "net/instaweb/util/public/basictypes.h"
00027 #include "net/instaweb/util/public/mock_time_cache.h"
00028 #include "net/instaweb/util/public/simple_stats.h"
00029 #include "net/instaweb/util/public/string.h"
00030 #include "net/instaweb/util/public/string_util.h"
00031
00032 namespace net_instaweb {
00033
00034 class CacheInterface;
00035 class CountingUrlAsyncFetcher;
00036 class DelayCache;
00037 class FakeUrlAsyncFetcher;
00038 class FileSystem;
00039 class Hasher;
00040 class HtmlFilter;
00041 class LRUCache;
00042 class MemFileSystem;
00043 class MessageHandler;
00044 class MockHasher;
00045 class MockMessageHandler;
00046 class MockScheduler;
00047 class MockTimer;
00048 class MockUrlFetcher;
00049 class RewriteDriver;
00050 class RewriteFilter;
00051 class RewriteOptions;
00052 class Scheduler;
00053 class ThreadsafeCache;
00054 class Timer;
00055 class UrlAsyncFetcher;
00056 class UrlFetcher;
00057 class UrlNamer;
00058 class WaitUrlAsyncFetcher;
00059
00062 class TestRewriteDriverFactory : public RewriteDriverFactory {
00063 public:
00064 static const int64 kStartTimeMs;
00065 static const char kUrlNamerScheme[];
00066
00067 class CreateFilterCallback {
00068 public:
00069 CreateFilterCallback() {}
00070 virtual ~CreateFilterCallback();
00071 virtual HtmlFilter* Done(RewriteDriver* driver) = 0;
00072
00073 private:
00074 DISALLOW_COPY_AND_ASSIGN(CreateFilterCallback);
00075 };
00076
00077 class CreateRewriterCallback {
00078 public:
00079 CreateRewriterCallback() {}
00080 virtual ~CreateRewriterCallback();
00081 virtual RewriteFilter* Done(RewriteDriver* driver) = 0;
00082
00083 private:
00084 DISALLOW_COPY_AND_ASSIGN(CreateRewriterCallback);
00085 };
00086
00087 class PlatformSpecificConfigurationCallback {
00088 public:
00089 PlatformSpecificConfigurationCallback() {}
00090 virtual ~PlatformSpecificConfigurationCallback();
00091 virtual void Done(RewriteDriver* driver) = 0;
00092
00093 private:
00094 DISALLOW_COPY_AND_ASSIGN(PlatformSpecificConfigurationCallback);
00095 };
00096
00097 TestRewriteDriverFactory(const StringPiece& temp_dir,
00098 MockUrlFetcher* mock_fetcher);
00099 virtual ~TestRewriteDriverFactory();
00100
00101 DelayCache* delay_cache() { return delay_cache_; }
00102 LRUCache* lru_cache() { return lru_cache_; }
00103 MockTimer* mock_timer() { return mock_timer_; }
00104 MockHasher* mock_hasher() { return mock_hasher_; }
00105 MemFileSystem* mem_file_system() { return mem_file_system_; }
00106 FakeUrlAsyncFetcher* mock_url_async_fetcher() {
00107 return mock_url_async_fetcher_.get();
00108 }
00109 WaitUrlAsyncFetcher* wait_url_async_fetcher() {
00110 return wait_url_async_fetcher_.get();
00111 }
00112 CountingUrlAsyncFetcher* counting_url_async_fetcher() {
00113 return counting_url_async_fetcher_;
00114 }
00115 MockTimeCache* mock_time_cache() { return mock_time_cache_.get(); }
00116
00117 void SetupWaitFetcher();
00118 void CallFetcherCallbacksForDriver(RewriteDriver* driver);
00119 MockMessageHandler* mock_message_handler() { return mock_message_handler_; }
00120 MockScheduler* mock_scheduler() { return mock_scheduler_; }
00121 bool use_test_url_namer() const { return use_test_url_namer_; }
00122 void SetUseTestUrlNamer(bool x);
00123
00125 void AddCreateFilterCallback(CreateFilterCallback* callback) {
00126 filter_callback_vector_.push_back(callback);
00127 }
00128
00129 void ClearFilterCallbackVector() {
00130 filter_callback_vector_.clear();
00131 }
00132
00134 void AddCreateRewriterCallback(CreateRewriterCallback* callback) {
00135 rewriter_callback_vector_.push_back(callback);
00136 }
00137
00138 void ClearRewriterCallbackVector() {
00139 rewriter_callback_vector_.clear();
00140 }
00141
00143 void AddPlatformSpecificConfigurationCallback(
00144 PlatformSpecificConfigurationCallback* callback) {
00145 platform_config_vector_.push_back(callback);
00146 }
00147
00148 void ClearPlatformSpecificConfigurationCallback() {
00149 platform_config_vector_.clear();
00150 }
00151
00153 virtual RewriteOptions* NewRewriteOptions();
00154
00155 virtual bool IsDebugClient(const GoogleString& ip) const {
00156 return ip == "127.0.0.1";
00157 }
00158
00161 void set_add_platform_specific_decoding_passes(bool value) {
00162 add_platform_specific_decoding_passes_ = value;
00163 }
00164
00165 bool add_platform_specific_decoding_passes() const {
00166 return add_platform_specific_decoding_passes_;
00167 }
00168
00169 protected:
00170 virtual Hasher* NewHasher();
00171 virtual MessageHandler* DefaultHtmlParseMessageHandler();
00172 virtual MessageHandler* DefaultMessageHandler();
00173 virtual UrlFetcher* DefaultUrlFetcher();
00174 virtual UrlAsyncFetcher* DefaultAsyncUrlFetcher();
00175 virtual FileSystem* DefaultFileSystem();
00176 virtual Timer* DefaultTimer();
00177 virtual CacheInterface* DefaultCacheInterface();
00178 virtual UrlNamer* DefaultUrlNamer();
00179 virtual Scheduler* CreateScheduler();
00180 virtual void AddPlatformSpecificDecodingPasses(RewriteDriver* driver);
00181 virtual void AddPlatformSpecificRewritePasses(RewriteDriver* driver);
00182 virtual void ApplyPlatformSpecificConfiguration(RewriteDriver* driver);
00183
00184 private:
00185 MockTimer* mock_timer_;
00186 MockScheduler* mock_scheduler_;
00187 DelayCache* delay_cache_;
00188 scoped_ptr<ThreadsafeCache> threadsafe_cache_;
00189 LRUCache* lru_cache_;
00190 UrlFetcher* proxy_url_fetcher_;
00191 MockUrlFetcher* mock_url_fetcher_;
00192 scoped_ptr<FakeUrlAsyncFetcher> mock_url_async_fetcher_;
00193 CountingUrlAsyncFetcher* counting_url_async_fetcher_;
00194 scoped_ptr<WaitUrlAsyncFetcher> wait_url_async_fetcher_;
00195 scoped_ptr<MockTimeCache> mock_time_cache_;
00196 MemFileSystem* mem_file_system_;
00197 MockHasher* mock_hasher_;
00198 SimpleStats simple_stats_;
00199 MockMessageHandler* mock_message_handler_;
00200 MockMessageHandler* mock_html_message_handler_;
00201 bool use_test_url_namer_;
00202 bool add_platform_specific_decoding_passes_;
00203 std::vector<CreateFilterCallback*> filter_callback_vector_;
00204 std::vector<CreateRewriterCallback*> rewriter_callback_vector_;
00205 std::vector<PlatformSpecificConfigurationCallback*> platform_config_vector_;
00206 };
00207
00208 }
00209
00210 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_TEST_REWRITE_DRIVER_FACTORY_H_