19 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_DRIVER_FACTORY_H_
20 #define NET_INSTAWEB_REWRITER_PUBLIC_REWRITE_DRIVER_FACTORY_H_
25 #include "pagespeed/kernel/base/basictypes.h"
26 #include "pagespeed/kernel/base/function.h"
27 #include "pagespeed/kernel/base/null_statistics.h"
28 #include "pagespeed/kernel/base/scoped_ptr.h"
29 #include "pagespeed/kernel/base/string.h"
30 #include "pagespeed/kernel/base/string_util.h"
32 namespace pagespeed {
namespace js {
struct JsTokenizerPatterns; } }
34 namespace net_instaweb {
37 class CacheHtmlInfoFinder;
38 class CriticalCssFinder;
39 class CriticalImagesFinder;
40 class CriticalLineInfoFinder;
41 class CriticalSelectorFinder;
43 class FlushEarlyInfoFinder;
44 class ExperimentMatcher;
47 class NamedLockManager;
51 class QueuedWorkerPool;
55 class RewriteOptionsManager;
59 class StaticAssetManager;
63 class UrlAsyncFetcher;
65 class UsageDataReporter;
66 class UserAgentMatcher;
67 class UserAgentNormalizer;
81 kLowPriorityRewriteWorkers,
88 ThreadSystem* thread_system);
103 void set_message_handler(MessageHandler* message_handler);
104 void set_file_system(FileSystem* file_system);
105 void set_hasher(Hasher*
hasher);
106 void set_nonce_generator(NonceGenerator* nonce_generator);
107 void set_url_namer(
UrlNamer* url_namer);
108 void set_signature(SHA1Signature* signature);
109 void set_timer(Timer*
timer);
122 void set_slurp_read_only(
bool read_only);
123 void set_slurp_print_urls(
bool read_only);
140 bool set_filename_prefix(StringPiece p);
145 MessageHandler* html_parse_message_handler();
146 MessageHandler* message_handler();
147 FileSystem* file_system();
148 NonceGenerator* nonce_generator();
153 UserAgentMatcher* user_agent_matcher();
155 SHA1Signature* signature();
156 RewriteOptions* default_options() {
return default_options_.get(); }
157 virtual RewriteOptionsManager* NewRewriteOptionsManager();
164 NamedLockManager* lock_manager();
166 Scheduler* scheduler();
167 UsageDataReporter* usage_data_reporter();
168 const pagespeed::js::JsTokenizerPatterns* js_tokenizer_patterns()
const {
169 return js_tokenizer_patterns_;
171 const std::vector<const UserAgentNormalizer*>& user_agent_normalizers();
178 virtual UrlAsyncFetcher* ComputeDistributedFetcher();
197 virtual void SetupCaches(ServerContext* server_context) = 0;
224 ThreadSystem* thread_system() {
return thread_system_.get(); }
229 return created_directories_;
232 bool async_rewrites() {
return true; }
250 static void Terminate();
277 version_string.CopyToString(&version_string_);
302 return &preferred_webp_qualities_;
307 return &preferred_jpeg_qualities_;
317 bool FetchersComputed()
const;
318 virtual void StopCacheActivity();
319 StringPiece filename_prefix();
331 virtual MessageHandler* DefaultHtmlParseMessageHandler() = 0;
332 virtual MessageHandler* DefaultMessageHandler() = 0;
333 virtual FileSystem* DefaultFileSystem() = 0;
334 virtual NonceGenerator* DefaultNonceGenerator();
335 virtual Timer* DefaultTimer();
336 virtual SHA1Signature* DefaultSignature();
338 virtual Hasher* NewHasher() = 0;
355 virtual UrlAsyncFetcher* DefaultDistributedUrlFetcher() {
return NULL; }
357 virtual CriticalCssFinder* DefaultCriticalCssFinder();
358 virtual CriticalImagesFinder* DefaultCriticalImagesFinder(
359 ServerContext* server_context);
360 virtual CriticalSelectorFinder* DefaultCriticalSelectorFinder(
361 ServerContext* server_context);
365 PropertyCache* cache, ServerContext* server_context);
372 ServerContext* server_context);
382 virtual UserAgentMatcher* DefaultUserAgentMatcher();
383 virtual UsageDataReporter* DefaultUsageDataReporter();
392 std::vector<const UserAgentNormalizer*>* out);
437 void SetupSlurpDirectories();
442 scoped_ptr<MessageHandler> html_parse_message_handler_;
443 scoped_ptr<MessageHandler> message_handler_;
444 scoped_ptr<FileSystem> file_system_;
447 scoped_ptr<UrlAsyncFetcher> base_url_async_fetcher_;
448 scoped_ptr<UrlAsyncFetcher> base_distributed_async_fetcher_;
449 scoped_ptr<Hasher> hasher_;
450 scoped_ptr<NonceGenerator> nonce_generator_;
451 scoped_ptr<SHA1Signature> signature_;
452 scoped_ptr<UrlNamer> url_namer_;
453 scoped_ptr<UserAgentMatcher> user_agent_matcher_;
458 std::vector<const UserAgentNormalizer*> user_agent_normalizers_;
459 scoped_ptr<StaticAssetManager> static_asset_manager_;
460 scoped_ptr<Timer> timer_;
461 scoped_ptr<Scheduler> scheduler_;
462 scoped_ptr<UsageDataReporter> usage_data_reporter_;
464 const pagespeed::js::JsTokenizerPatterns* js_tokenizer_patterns_;
466 GoogleString filename_prefix_;
467 GoogleString slurp_directory_;
469 bool slurp_read_only_;
470 bool slurp_print_urls_;
473 typedef std::set<ServerContext*> ServerContextSet;
474 ServerContextSet server_contexts_;
475 scoped_ptr<AbstractMutex> server_context_mutex_;
479 scoped_ptr<RewriteOptions> default_options_;
488 scoped_ptr<ServerContext> decoding_server_context_;
489 scoped_ptr<RewriteDriver> decoding_driver_;
492 scoped_ptr<NamedLockManager> lock_manager_;
494 scoped_ptr<ThreadSystem> thread_system_;
498 NullStatistics null_statistics_;
499 Statistics* statistics_;
501 StringSet created_directories_;
503 std::vector<QueuedWorkerPool*> worker_pools_;
507 scoped_ptr<RewriteStats> rewrite_stats_;
511 std::vector<Function*> deferred_cleanups_;
515 GoogleString version_string_;
518 GoogleString hostname_;
524 std::vector<int> preferred_webp_qualities_;
525 std::vector<int> preferred_jpeg_qualities_;
532 template<
class T>
class RewriteDriverFactory::Deleter :
public Function {
534 explicit Deleter(T* obj) : obj_(obj) {}
535 virtual void Run() {
delete obj_; }
538 DISALLOW_COPY_AND_ASSIGN(Deleter);
Definition: url_namer.h:37
virtual RewriteOptions * NewRewriteOptions()
virtual CriticalLineInfoFinder * DefaultCriticalLineInfoFinder(ServerContext *server_context)
Default implementation returns a valid CriticalSelectorFinder.
virtual int LowPriorityLoadSheddingThreshold() const
bool slurping_enabled() const
Determines whether Slurping is enabled.
Definition: rewrite_driver_factory.h:143
virtual RewriteOptions * NewRewriteOptionsForQuery()
virtual void InitStaticAssetManager(StaticAssetManager *static_asset_manager)
Initializes the StaticAssetManager.
Definition: rewrite_driver_factory.h:421
virtual void SetupCaches(ServerContext *server_context)=0
virtual void AddPlatformSpecificDecodingPasses(RewriteDriver *driver)
Definition: experiment_matcher.h:38
virtual FlushEarlyInfoFinder * DefaultFlushEarlyInfoFinder()
Default implementation returns NULL.
void RebuildDecodingDriverForTests(ServerContext *server_context)
For use in tests.
void InitializeDefaultOptions()
Definition: static_asset_manager.h:44
const GoogleString & version_string() const
get/set the version placed into the X-[Mod-]Page(s|-S)peed header.
Definition: rewrite_driver_factory.h:275
const StringSet & created_directories() const
Definition: rewrite_driver_factory.h:228
bool TerminateServerContext(ServerContext *server_context)
virtual UrlNamer * DefaultUrlNamer()
void set_force_caching(bool u)
Definition: rewrite_driver_factory.h:127
WorkerPoolCategory
Definition: rewrite_driver_factory.h:78
void set_html_parse_message_handler(MessageHandler *message_handler)
virtual ServerContext * NewServerContext()=0
virtual NamedLockManager * DefaultLockManager()
virtual Scheduler * CreateScheduler()
const std::vector< int > * preferred_jpeg_qualities()
Returns the preferred jpeg image quality vector for client options.
Definition: rewrite_driver_factory.h:306
virtual ServerContext * NewDecodingServerContext()=0
void TakeOwnership(T *obj)
Definition: rewrite_driver_factory.h:287
void AddCreatedDirectory(const GoogleString &dir)
Registers the directory as having been created by us.
Make sure to insert new values above this line.
Definition: rewrite_driver_factory.h:83
void InitStubDecodingServerContext(ServerContext *context)
virtual ExperimentMatcher * NewExperimentMatcher()
void set_base_distributed_async_fetcher(UrlAsyncFetcher *distributed_fetcher)
Takes ownership of distributed_fetcher.
virtual UrlAsyncFetcher * ComputeUrlAsyncFetcher()
virtual void AddPlatformSpecificRewritePasses(RewriteDriver *driver)
const std::vector< int > * preferred_webp_qualities()
Returns the preferred webp image quality vector for client options.
Definition: rewrite_driver_factory.h:301
virtual void AddPlatformSpecificUserAgentNormalizers(std::vector< const UserAgentNormalizer * > *out)
virtual void FetcherSetupHooks()
Called before creating the url fetchers.
void defer_cleanup(Function *f)
Definition: rewrite_driver_factory.h:283
RewriteDriverFactory(const ProcessContext &process_context, ThreadSystem *thread_system)
Takes ownership of thread_system.
virtual UrlAsyncFetcher * DefaultAsyncUrlFetcher()=0
bool SetPreferredWebpQualities(const StringPiece &qualities)
Returns true if the correct number of WebP qualities are parsed and set.
ServerContext * CreateServerContext()
bool SetPreferredJpegQualities(const StringPiece &qualities)
Returns true if the correct number of JPEG qualities are parsed and set.
void set_base_url_async_fetcher(UrlAsyncFetcher *url_fetcher)
void InitServerContext(ServerContext *server_context)
Definition: server_context.h:101
static void Initialize()
Initializes static variables. Initialize/Terminate calls must be paired.
Definition: process_context.h:35
virtual QueuedWorkerPool * CreateWorkerPool(WorkerPoolCategory pool, StringPiece name)
Statistics * statistics()
Definition: rewrite_driver_factory.h:242
virtual StringPiece LockFilePrefix()
virtual void ApplyPlatformSpecificConfiguration(RewriteDriver *driver)
Definition: usage_data_reporter.h:35
void set_slurp_directory(const StringPiece &directory)
virtual CacheHtmlInfoFinder * DefaultCacheHtmlInfoFinder(PropertyCache *cache, ServerContext *server_context)
Default implementation returns NULL.
Helper for users of defer_cleanup; see below.
Definition: rewrite_driver_factory.h:76
void SetStatistics(Statistics *stats)
Does not take ownership of Statistics.
Definition: rewrite_options.h:83
virtual bool IsDebugClient(const GoogleString &ip) const
Base method that returns true if the given ip is a debug ip.
Definition: rewrite_driver_factory.h:292
RewriteStats * rewrite_stats()
Definition: url_async_fetcher.h:33
static void InitStats(Statistics *statistics)
virtual bool UseBeaconResultsInFilters() const =0
Definition: rewrite_driver_factory.h:73