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

Context used by CssFilter under async flow. More...

#include "css_filter.h"

Inheritance diagram for net_instaweb::CssFilter::Context:
net_instaweb::SingleRewriteContext net_instaweb::RewriteContext

Public Member Functions

 Context (CssFilter *filter, RewriteDriver *driver, RewriteContext *parent, CacheExtender *cache_extender, ImageRewriteFilter *image_rewriter, ImageCombineFilter *image_combiner, ResourceContext *context)
 
void SetupInlineRewrite (HtmlElement *style_element, HtmlCharactersNode *text)
 Setup rewriting for inline, attribute, or external CSS.
 
void SetupAttributeRewrite (HtmlElement *element, HtmlElement::Attribute *src, InlineCssKind inline_css_kind)
 
void SetupExternalRewrite (HtmlElement *element, const GoogleUrl &base_gurl, const GoogleUrl &trim_gurl)
 
void RewriteCssFromNested (RewriteContext *parent, CssHierarchy *hierarchy)
 
virtual bool SendFallbackResponse (StringPiece output_url_base, StringPiece input_contents, AsyncFetch *async_fetch, MessageHandler *handler)
 
CssResourceSlotFactoryslot_factory ()
 
CssHierarchymutable_hierarchy ()
 
- Public Member Functions inherited from net_instaweb::SingleRewriteContext
 SingleRewriteContext (RewriteDriver *driver, RewriteContext *parent, ResourceContext *resource_context)
 
- 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

bool PolicyPermitsRendering () const override
 
void Render () override
 
virtual void Harvest ()
 
virtual bool Partition (OutputPartitions *partitions, OutputResourceVector *outputs)
 SingleRewriteContext takes care of these methods from RewriteContext:
 
virtual void RewriteSingle (const ResourcePtr &input, const OutputResourcePtr &output)
 Subclasses of SingleRewriteContext must override this:
 
virtual const char * id () const
 Returns the filter ID.
 
virtual OutputResourceKind kind () const
 
virtual GoogleString CacheKeySuffix () const
 
virtual const UrlSegmentEncoderencoder () const
 
virtual GoogleString UserAgentCacheKey (const ResourceContext *resource_context) const
 Implements UserAgentCacheKey method of RewriteContext.
 
- Protected Member Functions inherited from net_instaweb::SingleRewriteContext
virtual void Rewrite (int partition_index, CachedResult *partition, const OutputResourcePtr &output)
 
void AddLinkRelCanonical (const ResourcePtr &input, ResponseHeaders *output)
 Adds a link: rel=canonical header pointing to the input URL as canonical.
 
void AddLinkRelCanonicalForFallbackHeaders (ResponseHeaders *output)
 Helper for using above in FixFetchFallbackHeaders()
 
- 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)
 
void StartNestedTasks ()
 
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 void EncodeUserAgentIntoResourceContext (ResourceContext *context)
 
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 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

Context used by CssFilter under async flow.

Member Function Documentation

virtual GoogleString net_instaweb::CssFilter::Context::CacheKeySuffix ( ) const
protectedvirtual

Allows subclasses to add additional text to be appended to the metadata cache key. The default implementation returns "".

Reimplemented from net_instaweb::RewriteContext.

virtual const UrlSegmentEncoder* net_instaweb::CssFilter::Context::encoder ( ) const
protectedvirtual

This final set of protected methods can be optionally overridden by subclasses. All RewriteContexts define how they encode URLs and other associated information needed for a rewrite into a URL. The default implementation handles a single URL with no extra data. The RewriteContext owns the encoder.

Todo:
TODO(jmarantz): remove the encoder from RewriteFilter.

Reimplemented from net_instaweb::RewriteContext.

virtual void net_instaweb::CssFilter::Context::Harvest ( )
protectedvirtual

Once any nested rewrites have completed, the results of these can be incorporated into the rewritten data. For contexts that do not require any nested RewriteContexts, it is OK to skip overriding this method – the empty default implementation is fine.

Reimplemented from net_instaweb::RewriteContext.

virtual OutputResourceKind net_instaweb::CssFilter::Context::kind ( ) const
inlineprotectedvirtual

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.

bool net_instaweb::CssFilter::Context::PolicyPermitsRendering ( ) const
overrideprotectedvirtual

This method gives the context a chance to verify that rendering the result is consistent with the current document's (Content Security) Policy, which may be different than that of the page for which the result was first computed + cached. Most subclasses can just call AreOutputsAllowedByCsp(), with appropriate role.

Implements net_instaweb::RewriteContext.

void net_instaweb::CssFilter::Context::Render ( )
overrideprotectedvirtual

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.

void net_instaweb::CssFilter::Context::RewriteCssFromNested ( RewriteContext parent,
CssHierarchy hierarchy 
)

Starts nested rewrite jobs for any imports or images contained in the CSS. Marked public, so that it's accessible from CssHierarchy.

virtual bool net_instaweb::CssFilter::Context::SendFallbackResponse ( StringPiece  output_url_base,
StringPiece  input_contents,
AsyncFetch async_fetch,
MessageHandler handler 
)
virtual

Specialization to absolutify URLs in input resource in case of rewrite fail or deadline exceeded.

Reimplemented from net_instaweb::RewriteContext.


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