Page Speed Optimization Libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Protected Member Functions | List of all members
net_instaweb::InlineRewriteContext Class Referenceabstract

#include "inline_rewrite_context.h"

Inheritance diagram for net_instaweb::InlineRewriteContext:

Public Member Functions

 InlineRewriteContext (CommonFilter *filter, HtmlElement *element, HtmlElement::Attribute *src)
 Note that you should also call StartInlining() to do the work.
bool StartInlining ()
- Public Member Functions inherited from net_instaweb::RewriteContext
 RewriteContext (RewriteDriver *driver, RewriteContext *parent, ResourceContext *resource_context)
int num_slots () const
ResourceSlotPtr slot (int index) const
int num_outputs () const
OutputResourcePtr output (int i) const
int num_output_partitions () const
const CachedResult * output_partition (int i) const
CachedResult * mutable_output_partition (int i)
bool chained () const
void AddSlot (const ResourceSlotPtr &slot)
void RemoveLastSlot ()
void AddNestedContext (RewriteContext *context)
void CallFetchInputs ()
void CallLockFailed ()
void CallStartFetchImpl ()
void Initiate ()
bool Fetch (const OutputResourcePtr &output_resource, AsyncFetch *fetch, MessageHandler *message_handler)
bool slow () const
bool is_metadata_cache_miss () const
 This particular rewrite was a metadata cache miss.
bool has_parent () const
 Returns true if this is a nested rewriter.
bool IsNestedIn (StringPiece id) const
void CheckNotFrozen ()
RewriteContextparent ()
 Allows a nested rewriter to walk up its parent hierarchy.
const RewriteContextparent () const
int num_nested () const
 Accessors for the nested rewrites.
RewriteContextnested (int i) const
RewriteDriverDriver () const
void set_force_rewrite (bool x)
 If called with true, forces a rewrite and re-generates the output.
bool rewrite_uncacheable () const
void set_rewrite_uncacheable (bool rewrite_uncacheable)
const ResourceContext * resource_context () const
GoogleString ToString () const
 Returns debug information about this RewriteContext.
GoogleString ToStringWithPrefix (StringPiece prefix) const

Protected Member Functions

virtual bool ShouldInline (const ResourcePtr &resource, GoogleString *explanation) const =0
 Subclasses of InlineRewriteContext must override these: More...
virtual void RenderInline (const ResourcePtr &resource, const StringPiece &text, HtmlElement *element)=0
virtual RewriteDriver::InputRole InputRole () const =0
virtual ResourcePtr CreateResource (const char *url, bool *is_authorized)
virtual bool Partition (OutputPartitions *partitions, OutputResourceVector *outputs)
 InlineRewriteContext takes care of these methods from RewriteContext;.
virtual void Rewrite (int partition_index, CachedResult *partition, const OutputResourcePtr &output)
virtual void Render ()
virtual OutputResourceKind kind () const
HtmlElementget_element () const
- Protected Member Functions inherited from net_instaweb::RewriteContext
ServerContextFindServerContext () const
const RewriteOptionsOptions () const
OutputPartitions * partitions ()
void AddRecheckDependency ()
virtual bool OptimizationOnly () const
virtual void PartitionAsync (OutputPartitions *partitions, OutputResourceVector *outputs)
void PartitionDone (RewriteResult result)
void CrossThreadPartitionDone (RewriteResult result)
void RewriteDone (RewriteResult result, int partition_index)
virtual bool SendFallbackResponse (StringPiece output_url_base, StringPiece contents, AsyncFetch *async_fetch, MessageHandler *handler)
void StartNestedTasks ()
virtual void Harvest ()
virtual bool PolicyPermitsRendering () const =0
bool AreOutputsAllowedByCsp (CspDirective role) const
 Helper that checks that all output resources are OK with CSP as given role.
virtual void WillNotRender ()
virtual void Cancel ()
virtual const UrlSegmentEncoderencoder () const
virtual GoogleString CacheKeySuffix () const
virtual GoogleString UserAgentCacheKey (const ResourceContext *context) const
virtual void EncodeUserAgentIntoResourceContext (ResourceContext *context)
virtual const char * id () const =0
 Returns the filter ID.
void AttachDependentRequestTrace (const StringPiece &label)
RequestTracedependent_request_trace ()
void TracePrintf (const char *fmt,...)
virtual void StartFetchReconstruction ()
void DetachFetch ()
virtual bool DecodeFetchUrls (const OutputResourcePtr &output_resource, MessageHandler *message_handler, GoogleUrlStarVector *url_vector)
virtual void FixFetchFallbackHeaders (const CachedResult &cached_result, ResponseHeaders *headers)
virtual void FetchCallbackDone (bool success)
virtual void FetchTryFallback (const GoogleString &url, const StringPiece &hash)
void Freshen ()
 Freshens resources proactively to avoid expiration in the near future.
bool notify_driver_on_fetch_done () const
void set_notify_driver_on_fetch_done (bool value)
AsyncFetchasync_fetch ()
 Note that the following must only be called in the fetch flow.
bool FetchContextDetached ()
 Is fetch_ detached? Only call this in the fetch flow.
MessageHandlerfetch_message_handler ()
 The message handler for the fetch.
bool stale_rewrite () const
 Indicates whether we are serving a stale rewrite.
virtual int64 GetRewriteDeadlineAlarmMs () const
virtual bool CreationLockBeforeStartFetch () const
 Should the context call LockForCreation before checking the cache?
virtual bool FailOnHashMismatch () const
virtual bool ScheduleViaCentralController ()
virtual bool ScheduleNestedContextViaCentalController () const
void ObtainLockForCreation (ServerContext *server_context, Function *callback)
void ReleaseCreationLock (bool succeeded)

Additional Inherited Members

- Public Types inherited from net_instaweb::RewriteContext
typedef std::vector< InputInfo * > InputInfoStarVector
- Static Public Member Functions inherited from net_instaweb::RewriteContext
static void InitStats (Statistics *stats)
 Initializes statistics.
- Static Public Attributes inherited from net_instaweb::RewriteContext
static const char kNumRewritesAbandonedForLockContention []
static const char kNumDeadlineAlarmInvocations []
static const char kHashMismatchMessage []
- Protected Types inherited from net_instaweb::RewriteContext
typedef std::vector< GoogleUrl * > GoogleUrlStarVector
- Static Protected Member Functions inherited from net_instaweb::RewriteContext
static bool LookupMetadataForOutputResourceImpl (OutputResourcePtr output_resource, const GoogleUrl &gurl, RewriteContext *rewrite_context, RewriteDriver *driver, GoogleString *error_out, CacheLookupResultCallback *callback)

Detailed Description

Class that unifies tasks common to building rewriters for filters that inline resources.

Member Function Documentation

virtual ResourcePtr net_instaweb::InlineRewriteContext::CreateResource ( const char *  url,
bool *  is_authorized 

Subclasses of InlineRewriteContext may override this to customize resource creation. Default version just uses CommonFilter::CreateInputResource(). url is permitted to be NULL. is_authorized is not.

virtual OutputResourceKind net_instaweb::InlineRewriteContext::kind ( ) const

Rewrites come in three flavors, as described in output_resource_kind.h, so this method must be defined by subclasses to indicate which it is.

For example, we will avoid caching output_resource content in the HTTP cache for rewrites that are so quick to complete that it's fine to do the rewrite on every request. extend_cache is obviously in this category, and it's arguable we could treat js minification that way too (though we don't at the moment).

Implements net_instaweb::RewriteContext.

virtual void net_instaweb::InlineRewriteContext::Render ( )

Performs rendering activities that span multiple HTML slots. For example, in a filter that combines N slots to 1, N-1 of the HTML elements might need to be removed. That can be performed in Render(). This method is optional; the base-class implementation is empty.

Note that unlike Harvest(), this method runs in the HTML thread (for top-level rewrites), and only runs if the rewrite completes prior to the rewrite-deadline. If the rewrite does make it by the deadline, RewriteContext::Render() will be invoked regardless of whether any slots were actually optimized successfully.

Reimplemented from net_instaweb::RewriteContext.

virtual void net_instaweb::InlineRewriteContext::Rewrite ( int  partition_index,
CachedResult *  partition,
const OutputResourcePtr output 

Takes a completed rewrite partition and rewrites it. When complete, implementations should call RewriteDone(kRewriteOk) if they successfully created an output resource using RewriteDriver::Write, and RewriteDone(kRewriteFailed) if they didn't. They may also call RewriteDone(kTooBusy) in case system load/resource usage makes it dangerous for the filter to do optimization at this time.

Any information about the inputs or output that may be needed to update the containing document should be stored inside the CachedResult.

If implementors wish to rewrite resources referred to from within the inputs (e.g. images in CSS), they may create nested rewrite contexts and call AddNestedContext() on each, and then StartNestedTasks() when all have been added.

TODO(jmarantz): check for resource completion from a different thread (while we were waiting for resource fetches) when Rewrite gets called.

Implements net_instaweb::RewriteContext.

virtual bool net_instaweb::InlineRewriteContext::ShouldInline ( const ResourcePtr resource,
GoogleString explanation 
) const
protectedpure virtual

Subclasses of InlineRewriteContext must override these:

Return whether the resource should be inlined. If false is returned, this should set *explanation to the reason for the failure. explanation is guaranteed to be non-NULL.

bool net_instaweb::InlineRewriteContext::StartInlining ( )

Starts the actual inlining process, and takes over memory management of this object. Returns true if the process is started, false if it cannot be started because the input resource cannot be created, in which case 'this' is deleted and accordingly no rewriting callbacks are invoked.

The documentation for this class was generated from the following file: