Page Speed Optimization Libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Todo List
File mock_time_cache.h
TODO(jmarantz): consider refactoring this as a subclass of DelayCache.
Namespace net_instaweb

TODO(sligocki): Find a way to forward declare FileSystem::InputFile.

TODO(skerner): #include image_spriter.pb.h is needed to allow use of enum ImageFormat. Break this dependency and remove the include.

TODO(huibao): Move LibpngImageLibrary to pagespeed/kernel/image/. Refactor LibpngImageLibrary. This class can be split into 3 parts: reader, writer, and canvas creater. The first two parts can be merged with and png_optimizer.h.

TODO(huibao): Rename GoogleMessageHandler and google_message_handler to reflect the fact that they are not google specific.

TODO(gee): Hmm, this sort of sucks. If your .cc file needs to use the types declared in logging_proto.h, you must also include pagespeed/opt/logging/logging_proto_impl.h See that header file for an explanation of why this is necessary.

Class net_instaweb::_MemberCallback_0_1< C, A1, DeleteAfterRun >
TODO(gee): Fill out other useful specializations.
Class net_instaweb::_MemberCallback_0_2< C, A1, A2, DeleteAfterRun >
TODO(gee): Fill out other useful specializations.
Member net_instaweb::AbstractLogRecord::logging_info ()=0
TODO(gee): Deprecate raw access to proto. Return the LoggingInfo proto wrapped by this class. Calling code must guard any reads and writes to this using mutex().
Member net_instaweb::AbstractLogRecord::LogImageBackgroundRewriteActivity (RewriterApplication::Status status, const GoogleString &url, const char *id, int original_size, int optimized_size, bool is_recompressed, ImageType original_image_type, ImageType optimized_image_type, bool is_resized, int original_width, int original_height, bool is_resized_using_rendered_dimensions, int resized_width, int resized_height)
TODO(huibao): Rename LogImageBackgroundRewriteActivity() to make it clear that it will log even when the rewriting finishes in the line-of-request.
Member net_instaweb::AbstractLogRecord::LogJsDisableFilter (const char *id, bool has_pagespeed_no_defer)
TODO(gee): Change the callsites.
Member net_instaweb::AbstractLogRecord::LogRewriterApplicationStatus (const char *rewriter_id, RewriterApplication::Status status)
TODO(gee): I'd really prefer rewriter_id was an enum.
Class net_instaweb::AbstractPropertyStoreGetCallback
TODO(pulkitg): Revisit this to make this inner class of PropertyStore.
Member net_instaweb::AdminSite::GraphsHandler (const RewriteOptions &options, AdminSource source, const QueryParams &query_params, AsyncFetch *fetch, Statistics *stats)
TODO(xqyin): Integrate this into console page.
Member net_instaweb::ApacheFetch::set_handle_error (bool x)
TODO(jmarantz): consider allowing serf fetches in ipro when running as a reverse-proxy.
Member net_instaweb::ApacheWriter::set_strip_cookies (bool x)
TODO(jefftk): Doesn't actually do anything, because of an old bug.
Member net_instaweb::AssociationSlot::LocationString () const
TODO(sligocki): Improve quality of this diagnostic. Also improve CssResourceSlot::LocationString() which is identical.
Member net_instaweb::AsyncCache::kMaxQueueSize
TODO(jmarantz): Analyze whether we drop operations under load with a non-wedged cache. If it looks like we are dropping Puts the first time we encounter a page then I think we may need to bump this up.
Member net_instaweb::AsyncFetch::IsCachedResultValid (const ResponseHeaders &headers)
TODO(nikhilmadan): Consider making this virtual so that subclass authors are forced to look at this function.
Member net_instaweb::AsyncFetch::Reset ()
TODO(jmarantz): should this also clear the response headers?
Class net_instaweb::BrotliInflater
TODO(jcrowell): Add compression interface that can handle multiple compressors (gzip/deflate, brotli, etc.).
Member net_instaweb::BrotliInflater::Compress (StringPiece in, MessageHandler *handler, Writer *writer)
TODO(jcrowell): add api that takes in &out_string as an argument, to remove string copy.
Class net_instaweb::CacheExtender
TODO(jmarantz): rename this class to something more generic, like RenameUrlFilter or ProxyUrlFilter.
Class net_instaweb::CacheUrlAsyncFetcher
TODO(sligocki): In order to use this for fetching resources for rewriting we'd need to integrate resource locking in this class. Do we want that?
Member net_instaweb::CacheUrlAsyncFetcher::set_response_sequence (Sequence *x)
TODO(jmarantz): this currently only makes sense to call when there is no fetcher, as the implementation does not queue up fetcher-callbacks; only cache callbacks. But if we want to fully implement bandwidth optimization at the expense of latency, we are going to have to add sequencing of fetch callbacks in addition to cache callbacks. This is not hard to do, but we don't need it yet so it's not done.
Class net_instaweb::CachingHeaders
TODO(jmarantz): This class is temporarily in net_instaweb so that it can conveniently reference GoogleString etc. We will move all the files in pagespeed/... to be in namespace pagespeed in a future change.
Member net_instaweb::CachingHeaders::IsCacheable ()
TODO(sligocki): Rename to IsBrowserCacheable().
Class net_instaweb::CategorizedRefcount< ObjectType, EnumType >
TODO(morlovich): Consider having a cap per kind, too? Some are meant to be 0-1 only.
Member net_instaweb::CategorizedRefcount< ObjectType, EnumType >::CategorizedRefcount (ObjectType *object)
TODO(jud): Instead of holding the mutex in this class, pass in the mutex to each function so that thread safety annotation can be used.
Member net_instaweb::CentralControllerCallback< TransactionContext >::SetTransactionContext (TransactionContext *ctx)
TODO(cheesy): It would be nice if this wasn't public, but that causes mutual visibility headaches with the context implementations.
Class net_instaweb::CollapseWhitespaceFilter
TODO(mdsteele): Use the CSS parser (once it's finished) to try to intelligently determine when the CSS "white-space: pre" property is in use; that would make this filter much safer.
Member net_instaweb::ContentType::file_extension () const
TODO(sligocki): Stop returning '.' in file_extension().
Class net_instaweb::CopyOnWriteLogRecord
TODO(gee): I'm pretty sure the functionality can be provided by the previous ALR implementation, but for the time being leave this around to make the refactoring as limited as possible. AbstractLogRecord that copies logging_info() when in WriteLog. This should be useful for testing any logging flow where an owned subordinate log record is needed.
Member net_instaweb::CountingUrlAsyncFetcher::CountingUrlAsyncFetcher (UrlAsyncFetcher *fetcher)
TODO(hujie): We should pass in the mutex at all call-sites instead of creating a new mutex here.
Member net_instaweb::CriticalImagesFinder::cohort () const
TODO(jud): Make this protected. There is a lingering public usage in
Member net_instaweb::CriticalImagesFinder::IsHtmlCriticalImage (StringPiece image_url, RewriteDriver *driver)
TODO(jud): It would be simpler to modify these interfaces to take HtmlElement* instead of GoogleStrings. This would move some complexity in getting the correct URL from the caller into this function. For instance, if an image has been modified by LazyloadImages then the actual src we want to check is in the data-pagespeed-lazy-src attribute, not in src.
Class net_instaweb::CriticalImagesInfo
TODO(jud): Instead of a separate CriticalImagesInfo that gets populated from the CriticalImages protobuf value, we could just store the protobuf value in RewriteDriver and eliminate CriticalImagesInfo. Revisit this when updating this class to support multiple beacon responses.
Namespace net_instaweb::css_util
TODO(nforman): remove this namespace and put everything into the StyleExtractor class.
Member net_instaweb::CssAbsolutify::AbsolutifyUrls (Css::Stylesheet *stylesheet, const GoogleUrl &base, bool handle_parseable_ruleset_sections, bool handle_unparseable_sections, RewriteDriver *driver, MessageHandler *handler)
TODO(sligocki): Remove handle_ bools, and always handle both. Also, absolutify imports in this function. Returns true if any URLs were absolutified, false if not.
Member net_instaweb::CssFilter::CssFilter (RewriteDriver *driver, CacheExtender *cache_extender, ImageRewriteFilter *image_rewriter, ImageCombineFilter *image_combiner)
TODO(sligocki): Temporary pattern until we figure out a better way to do this without passing all filters around everywhere.
Member net_instaweb::CssHierarchy::CheckCharsetOk (const ResourcePtr &resource, GoogleString *failure_reason)
TODO(matterbury): A potential future enhancement is to allow 'compatible' charsets, like a US-ASCII child in a UTF-8 parent, since US-ASCII is a subset of UTF-8.
Class net_instaweb::CssMinify
TODO(nikhilmadan): Move to pagespeed/kernel/css/.
Member net_instaweb::CssRewriteTestBase::kNoClearFetcher
TODO(sligocki): Why would we ever want to clear fetcher?
Member net_instaweb::CssRewriteTestBase::kNoOtherContexts
TODO(sligocki): Explain why we turn off other contexts.
Member net_instaweb::CssRewriteTestBase::kNoStatCheck
TODO(sligocki): Explain why we turn off stats check at each use-site.
Class net_instaweb::DecodeRewrittenUrlsFilter
TODO(sriharis): Also do this for URLs in CSS.
Class net_instaweb::DependencyTracker
TODO(morlovich): Might need merging strategy for stability.
Member net_instaweb::DocType::kUnknown
TODO(mdsteele): Add more such methods as necessary.
Member net_instaweb::DomainLawyer::set_proxy_suffix (const GoogleString &suffix)
TODO(jmarantz): In the future we will likely want to map absolutely referenced resources to from the origin domain to so we can optimize them. This can be implemented by integrating the proxy_suffix into MapRewriteDomain and MapOriginDomain, as a variation on MapProxyDomain.
Member net_instaweb::DownstreamCachingDirectives::SupportsImageInlining () const
TODO(anupama): Go through all DeviceProperties/RequestProperties methods and re-evaluate which of them need to be supported here.
Member net_instaweb::DownstreamCachingDirectives::SupportsJsDefer () const
TODO(anupama): Incorporate the "allow_mobile" parameter used in DeviceProperties for supportsJsDefer().
Member net_instaweb::EnumSet< EnumType, NumEnums >::insert (EnumType value)
TODO(jmarantz): change call-sites to Insert and remove this one.
Class net_instaweb::ExternalUrlFetcher
TODO(vchudnov): Incorporate NetcatUrlFetcher functionality into this class.
Member net_instaweb::ExternalUrlFetcher::Fetch (const GoogleString &url, MessageHandler *message_handler, AsyncFetch *fetch)
TODO(sligocki): Allow protocol version number (e.g. HTTP/1.1) and request type (e.g. GET, POST, etc.) to be specified.
Member net_instaweb::FileCache::cache_policy () const
TODO(jmarantz): implement.
Member net_instaweb::FileLoadPolicy::ShouldLoadFromFile (const GoogleUrl &url, GoogleString *filename) const
TODO(sligocki): Set up a more efficient mapper.
Class net_instaweb::FileRewriter
TODO(jmarantz): fill out enough functionality so that this will be a functional static rewriter that could optimize an HTML file passed as a command-line parameter or via stdin.
Member net_instaweb::FileSystem::Atime (const StringPiece &path, int64 *timestamp_sec, MessageHandler *handler)=0
TODO(abliss): replace this with a single Stat() function.
Member net_instaweb::FileSystem::GetDirInfo (const StringPiece &path, DirInfo *dirinfo, MessageHandler *handler)
TODO(abliss): unify all slash-ending assumptions
Member net_instaweb::FileSystem::Size (const StringPiece &path, int64 *size, MessageHandler *handler) const =0
TODO(abliss): replace this with a single Stat() function.
Class net_instaweb::FileSystemTest
TODO(huibao): Rename FileSystemTest to FileSystemTestBase.
Member net_instaweb::GoogleUrl::SchemeIs (StringPiece lower_ascii_scheme) const
TODO(nforman): get GURL to take a StringPiece so we don't have to do any copying.
Member net_instaweb::GoogleUrl::UnescapeQueryParam (StringPiece escaped)
TODO(jmarantz): Change signature to return a bool so if the escaped syntax was not valid, we can help the caller avoid relying on this value.
Class net_instaweb::HandleNoscriptRedirectFilter
TODO(sriharis): Set a cookie so that subsequent requests from the same client do not cause redirects.
Member net_instaweb::HasPrefixString (StringPiece str, StringPiece prefix)
TODO(jmarantz): Eliminate these definitions of HasPrefixString, UpperString, and LowerString, and re-add dependency on protobufs which also provide definitions for these.
Member net_instaweb::Headers< Proto >::Lookup (const StringPiece &name, ConstStringStarVector *values) const
TODO(jmarantz): this is a problem waiting to happen, but I believe it will not be a problem in the immediate future. We can refactor our way around this problem by moving the Map to an explicit separate class that can be instantiated to assist with Lookups and Remove. But that should be done in a separate CL from the one I'm typing into now.
Member net_instaweb::HtmlElement::AddAttribute (const HtmlName &name, const StringPiece &decoded_value, QuoteStyle quote_style)
TODO(sligocki): StringPiece(NULL) seems fragile because what it is or how it's treated is not documented.
Member net_instaweb::HtmlElement::Attribute::SetValue (const StringPiece &value)
TODO(mdsteele): Perhaps we should check for this?
Member net_instaweb::HtmlFilter::IEDirective (HtmlIEDirectiveNode *directive)=0
TODO(mdsteele): Should we try to maintain the nested structure of the conditionals, in the same way that we maintain nesting of elements?
Member net_instaweb::HtmlFilter::kNeverInjectsScripts
TODO(jmarantz): Remove kRequiresScriptExecutionFilterSet in, and instead add new enum choices here covering combinations of requiring 'noscript' behavior and their injection behavior.
Member net_instaweb::HtmlFilter::RenderDone ()
TODO(morlovich): Push this down into CommonFilter and convert all the pre-render filters to inherit off it.
Member net_instaweb::HtmlFilter::StartElement (HtmlElement *element)=0
TODO(jmarantz): consider passing handles rather than pointers and reference-counting them instead to save memory on long documents.
Member net_instaweb::HtmlKeywords::Unescape (const StringPiece &escaped, GoogleString *buf, bool *decoding_error)
TODO(jmarantz): Support a variant where we unescape to UTF-8.
Class net_instaweb::HtmlLexer
TODO(jmarantz): refactor this with html_parse, so that this class owns the symbol table and the event queue, and no longer needs to mutually depend on HtmlParse. That will make it easier to unit-test.
Member net_instaweb::HtmlNode::HtmlNode (HtmlElement *parent)
TODO(jmarantz): jmaessen suggests instantiating the html nodes without parents and computing them from context at the time they are instantiated from the lexer. This is a little more difficult when synthesizing new nodes, however. We assert sanity, however, when calling HtmlParse::ApplyFilter.
Member net_instaweb::HtmlParse::AppendAnchor (StringPiece link, StringPiece text, HtmlElement *parent)
TODO(jmaessen): refactor and use this in the relevant places.
Member net_instaweb::HtmlParse::InsertElementBeforeElement (const HtmlNode *existing_element, HtmlNode *new_element)
TODO(morlovich): Remove them after PSI is synced.
Member net_instaweb::HtmlParse::InsertNodeBeforeNode (const HtmlNode *existing_node, HtmlNode *new_node)
TODO(sligocki): Find Javascript equivalents and list them or even change our names to be consistent.
Class net_instaweb::HttpAttributes
TODO(jmarantz): Proactively change all the occurrences of the static strings to use these shared constants.
Member net_instaweb::HttpAttributes::kXPsaBlockingRewriteModeSlow []
TODO(bharathbhushan): Does this belong somewhere else?
Class net_instaweb::HTTPCache::Callback
TODO(jmarantz): consider inheriting from AsyncFetch with an implementation of Write/Flush/HeadersComplete – we'd have to make Done take true/false so this would impact callers.
Member net_instaweb::HTTPCache::Callback::http_value ()
TODO(jmarantz): specify the dataflow between http_value and response_headers.
Member net_instaweb::HTTPCache::Put (const GoogleString &key, const GoogleString &fragment, RequestHeaders::Properties req_properties, ResponseHeaders::VaryOption respect_vary_on_resources, ResponseHeaders *headers, const StringPiece &content, MessageHandler *handler)
TODO(sligocki): Remove this arg and use headers->http_options().
Class net_instaweb::HttpDumpUrlFetcher
TODO(sligocki): Can we forward declare these somehow? class FileSystem; class FileSystem::InputFile;
Member net_instaweb::HttpResponseParser::Parse (FILE *stream)
TODO(sligocki): We need a Readable abstraction (like Writer)
Class net_instaweb::ImageRewriteFilter
TODO(jmaessen): Big open question: how best to link pulled-in resources to rewritten urls, when in general those urls will be in a different domain.
Member net_instaweb::ImageUrlEncoder::SetLibWebpLevel (const RewriteOptions &options, const RequestProperties &request_properties, ResourceContext *resource_context)
TODO(poojatandon): Pass a user agent object with its webp-cabaple bits pre-analyzed (not just the string from the request headers), since checking webp level related code doesn't belong here.
Class net_instaweb::InlineResourceSlot
TODO(sligocki): This is currently being used for CSS attribute rewriting too. Use a separate Slot for that.
Member net_instaweb::InlineResourceSlot::InlineResourceSlot (const ResourcePtr &resource, HtmlCharactersNode *char_node, StringPiece location)
TODO(sligocki): Construct resource in this function??
Member net_instaweb::InsertAmpLinkFilter::GetScriptUsage () const override
TODO(jmarantz): Make an explicit filter method declaring this filter as something we don't want to run in an AMP document. In the meantime, we can induce disabling for AMP documents with this:
Class net_instaweb::InstawebContext
TODO(sligocki): Factor out similarities between this and ProxyFetch.
Member net_instaweb::InstawebContext::response_headers ()
TODO(jmarantz): needed?
Member net_instaweb::InstawebContext::ServerContextFromServerRec (server_rec *server)
TODO(jmarantz): Is there a better place to put this? It needs to be used by both and
Class net_instaweb::InstawebHandler
TODO(jmarantz): There are many static methods in this class. Some of them need to stay that way as they are used as C entry points. Some are helper methods, and we could adopt a policy of requiring the static methods to instantiate the class (possibly making its constructor lighter weight) and then calling them explicitly. For the time being, we'll leave these static methods with the non-compliant lower_case_names_with_underscores naming convention and fix their naming when we update whether they should be static or not.
Member net_instaweb::IsLocalhost (StringPiece host_to_test, StringPiece hostname)

TODO(sligocki): Cover other representations of IPv6 localhost IP?

TODO(matterbury): Handle all address since they are 'localhost'.

Class net_instaweb::JavascriptCodeBlock
TODO(jmaessen): Does this architecture make sense when we have multiple scripts on a page and the ability to move code around a bunch? How do we maintain JS context in that setting?
Member net_instaweb::JavascriptRewriteConfig::use_experimental_minifier () const
TODO(sligocki): Once that minifier has been around for a while, we should deprecate this option.
Member net_instaweb::kDeprecatedDefaultHttpOptions
TODO(sligocki): We should not be using these default options. Fix callers.
Member net_instaweb::kNumSourceListDirectives
TODO(morlovich): Understand implications of this. disown-opener report-uri report-to
Class net_instaweb::LRUCache
TODO(jmarantz): The Put interface does not currently stream, but this should be added.
Member net_instaweb::LRUCache::Put (const GoogleString &key, const SharedString &new_value)
TODO(jmarantz): currently if the caller mutates the SharedString after having called Put, it will actually modify the value in the cache. We should change SharedString to Copy-On-Write semantics.
Member net_instaweb::LRUCacheBase< ValueType, ValueHelper >::Delete (const GoogleString &key)
TODO(jmarantz): count number of misses on a 'delete' request?
Class net_instaweb::MemFileSystem

TODO(abliss): add an ability to block writes for arbitrarily long, to enable testing resilience to concurrency problems with real filesystems.

TODO(jmarantz): make threadsafe.

Member net_instaweb::MessageHandler::Info (const char *filename, int line, const char *msg,...) INSTAWEB_PRINTF_FORMAT(4
TODO(sligocki): Rename these to InfoAt, ... so that Info, ... can be used for general Messages.
Class net_instaweb::MutexedScalar
TODO(jmarantz): this could be done using templates rather than using virtual methods, as MutexedScalar does not implement an abstract interface.
Member net_instaweb::NamedLock::LockTimedWait (int64 wait_ms, Function *callback)=0
TODO(jmarantz): consider removing this method as it has no callers in production code, though it does have callers in tests.
Member net_instaweb::NewImage (const StringPiece &original_contents, const GoogleString &url, const StringPiece &file_prefix, Image::CompressionOptions *options, Timer *timer, MessageHandler *handler)
TODO(jmarantz): It would seem natural to fold the ImageOptions into the Image object itself.
Member net_instaweb::OutputResource::OutputResource (const RewriteDriver *driver, StringPiece resolved_base, StringPiece unmapped_base, StringPiece original_base, const ResourceNamer &resource_id, OutputResourceKind kind)
TODO(jmaessen): remove redundancy.
Member net_instaweb::PLAIN
TODO(jmaessen): implement non-BASE64 encodings. UTF8,
Member net_instaweb::PropertyPage::PropertyPage (PageType page_type, StringPiece url, StringPiece options_signature_hash, StringPiece cache_key_suffix, const RequestContextPtr &request_context, AbstractMutex *mutex, PropertyCache *property_cache)
TODO(pulkitg): Instead of passing full PropertyCache object, just pass objects which PropertyPage needs.
Member net_instaweb::PropertyStore::Put (const GoogleString &url, const GoogleString &options_signature_hash, const GoogleString &cache_key_suffix, const PropertyCache::Cohort *cohort, const PropertyCacheValues *values, BoolCallback *done)=0
TODO(pulkitg): Remove UserAgentMatcher dependency.
Class net_instaweb::ProxyInterface
TODO(sligocki): Rename as per style-guide.
Member net_instaweb::PurgeContext::kCheckCacheIntervalMs
TODO(jmarantz): make this settable.
Member net_instaweb::PushPreloadFilter::StartDocumentImpl () override
TODO(morlovich): Proper statistics. static void InitStats(Statistics* stats);
Class net_instaweb::QueuedWorkerPool::Sequence
TODO(jmarantz): Make this subclass private (or just move it to the .cc file) and change NewSequence to return a net_instaweb::Sequence*.
Class net_instaweb::RedisCache

TODO(yeputons): consider extracting a common interface with AprMemCache.

TODO(yeputons): consider making Redis-reported errors treated as failures.

TODO(yeputons): add redis AUTH command support.

Member net_instaweb::RequestContext::NewTestRequestContext (ThreadSystem *thread_system)
TODO(marq): Move this test context factory to a test-specific file. Makes a request context for running tests. Note: Test RequestContexts do not pay attention to options.
Member net_instaweb::RequestContext::RequestContext (const HttpOptions &options, AbstractMutex *mutex, Timer *timer, AbstractLogRecord *log_record)
TODO(gee): Fix this, it sucks. The default constructor will not create a LogRecord. Subclass constructors must do this explicitly.
Member net_instaweb::RequestContext::ResetOptions (const HttpOptions &options)
TODO(sligocki): It would be nice if we could make sure options are only set once. Is it worth the complexity to force that to be true?
Member net_instaweb::RequestHeaders::message_body () const

TODO(atulvasu): Support something like a Rope for larger post bodies.

TODO(atulvasu): Use a Writer instead of a string.

Member net_instaweb::RequestTimingInfo::FetchStarted ()
TODO(gee): Fetch and cache timing is busted for reconstructing resources with multiple inputs.
Member net_instaweb::RequestTimingInfo::GetProcessingElapsedMs (int64 *elapsed_ms) const
TODO(gee): This naming is somewhat misleading since it is from request start not processing start. Leaving as is for historical reasons, at least for the time being.
Member net_instaweb::RequestTimingInfo::SetHTTPCacheLatencyMs (int64 latency_ms)
TODO(gee): I'd really prefer these to be start/end calls, but the WriteThroughCache design pattern will not allow for this.
Member net_instaweb::Resource::CacheExpirationTimeMs () const
TODO(sligocki): Look through callsites and make sure this is being interpreted correctly.
Member net_instaweb::Resource::IsSafeToRewrite (bool rewrite_uncacheable) const
TODO(jmaessen): Convert all remaining call sites to use a reason.
Member net_instaweb::Resource::loaded () const
TODO(sligocki): Do we need these or can we just use IsValidAndCacheable everywhere?
Member net_instaweb::ResourceCombiner::AddResourceNoFetch (const ResourcePtr &resource, MessageHandler *handler)
TODO(jmarantz): rename this to AddResource now that async flow is live.
Member net_instaweb::ResourceCombiner::kUrlSlack
TODO(sligocki): Set this more intelligently.
Class net_instaweb::ResourceFetch
TODO(sligocki): Rename to PagespeedResourceFetch or something else ...
Member net_instaweb::ResourceNamer::set_ext (const StringPiece &e)
TODO(jmaessen): Remove check after transitioning to undotted extensions everywhere.
Class net_instaweb::ResourceSlot
TODO(jmarantz): make this class thread-safe.
Member net_instaweb::ResourceSlot::RelativizeOrPassthrough (const RewriteOptions *options, StringPiece url, UrlRelativity url_relativity, const GoogleUrl &base_url)
TODO(sligocki): Take a GoogleUrl for url?
Member net_instaweb::ResourceSlot::SetResource (const ResourcePtr &resource)
TODO(jmarantz): Add a lock or that we or an overall protocol preventing unwanted interference between renderer's reads and worker writes.
Member net_instaweb::ResponseHeaders::CacheExpirationTimeMs () const
TODO(sligocki): Look through callsites and make sure this is being interpreted correctly.
Member net_instaweb::ResponseHeaders::HasCookie (StringPiece name, StringPieceVector *values, StringPieceVector *attributes) const
TODO(matterbury): Fix this to implement the correct behavior, which should take into account the domain and path of the cookie as part of uniqueness.
Member net_instaweb::ResponseHeaders::headers_complete () const
TODO(jmarantz): consider an alternative representation
Member net_instaweb::ResponseHeaders::implicit_cache_ttl_ms () const
TODO(sligocki): Remove these setters (and getters) once we make sure that all values are set at construction time.
Member net_instaweb::ResponseHeaders::IsProxyCacheable (RequestHeaders::Properties properties, VaryOption respect_vary_on_resources, ValidatorOption has_request_validator) const
TODO(sligocki): Use http_options_.respect_vary. Some inconsistencies need to be worked out first.
Member net_instaweb::ResponseHeaders::ResponseHeaders ()
TODO(sligocki): Phase this out so that nobody uses this one by accident.
Class net_instaweb::RewriteContext
TODO(jmarantz): add support for controlling TTL on failures.
Member net_instaweb::RewriteContext::encoder () const
TODO(jmarantz): remove the encoder from RewriteFilter.
Member net_instaweb::RewriteContext::Rewrite (int partition_index, CachedResult *partition, const OutputResourcePtr &output)=0
TODO(jmarantz): check for resource completion from a different thread (while we were waiting for resource fetches) when Rewrite gets called.
Member net_instaweb::RewriteContext::UserAgentCacheKey (const ResourceContext *context) const
TODO(morlovich): This seems to overlap with CacheKeySuffix.
Member net_instaweb::RewriteDriver::CreateOutputResourceFromResource (const char *filter_id, const UrlSegmentEncoder *encoder, const ResourceContext *data, const ResourcePtr &input_resource, OutputResourceKind kind, GoogleString *failure_reason)
TODO(jmaessen, jmarantz): Do we want to permit NULL input_resources here? jmarantz has evinced a distaste.
Member net_instaweb::RewriteDriver::critical_selector_info ()
TODO(jud): Remove when the finders reside in RewriteDriver and manage their own state.
Member net_instaweb::RewriteDriver::DecodeOutputResource (const GoogleUrl &url, RewriteFilter **filter) const
TODO(jmaessen): add url hash & check thereof.
Member net_instaweb::RewriteDriver::response_headers ()
TODO(jmarantz): Change API to require response_headers in StartParse so we can guarantee this is non-null.
Member net_instaweb::RewriteDriver::set_critical_selector_info (CriticalSelectorInfo *info)
TODO(jud): Remove when the finders reside in RewriteDriver and manage their own state.
Member net_instaweb::RewriteDriver::set_externally_managed (bool x)
TODO(jmarantz): Consider phasing this out to make tests behave more like servers.
Member net_instaweb::RewriteDriver::SetOrClearPageSpeedOptionCookies (const GoogleUrl &gurl, ResponseHeaders *response_headers)
TODO(matterbury): Get the URL from 'this' which we can't do now because it isn't set until we've decided that the content of requested URL is HTML. Returns true if any Set-Cookie headers are added, in which case ComputeCaching has been called on response_headers.
Member net_instaweb::RewriteDriver::SetWriter (Writer *writer)
TODO(jmarantz): fix this in the implementation so that the caller can install filters in any order and the writer will always be last.
Member net_instaweb::RewriteDriverFactory::hasher ()
TODO(sligocki): Remove hasher() and force people to make a NewHasher when they need one.
Member net_instaweb::RewriteOptions::cache_invalidation_timestamp () const
TODO(jmarantz): rename to cache_invalidation_timestamp_ms().
Member net_instaweb::RewriteOptions::css_outline_min_bytes () const
TODO(jmarantz): consider setting flags in the set_ methods so that first's explicit settings can override default values from second.
Member net_instaweb::RewriteOptions::DisallowTroublesomeResources ()
TODO(sligocki): Rename to allow for more general initialization.
Member net_instaweb::RewriteOptions::kCacheFlushFilename []
TODO(matterbury): move these to
Member net_instaweb::RewriteOptions::kImageJpegNumProgressiveScans []
TODO(huibao): Unify terminology for image rewrites. For example, kImageJpeg*Quality might be renamed to kImageJpegQuality.
Member net_instaweb::RewriteOptions::kMobilizePrecompute
TODO(jud): This is unused, remove it.
Member net_instaweb::RewriteOptions::OptionTemplateBase< T >::DoNotUseForSignatureComputation ()
TODO(jmarantz): consider an alternate structure where the Property<T>* can be easily located programmatically rather than going through a dummy Option object.
Member net_instaweb::RewriteOptions::OptionTemplateBase< T >::set_global_default (const T &val)
TODO(jmarantz): consider an alternate structure where the Property<T>* can be easily located programmatically rather than going through a dummy Option object.
Class net_instaweb::RewriteOptions::Properties
TODO(jmarantz): Add static properties – currently there are none.
Class net_instaweb::RewriteOptions::PropertyLeaf< RewriteOptionsSubclass, OptionClass >
TODO(jmarantz): It looks tempting to fold Property<T> and PropertyLeaf<T> together, but this is difficult because of the way that the Option class hiearchy is structured and the precision of C++ pointers-to-members. Attempting that is probably a worthwhile follow-up task.
Member net_instaweb::RewriteOptions::RewriteLevel
TODO(huibao): Use bitmask for the values of the enums, and make combination of rewrite levels possible.
Member net_instaweb::RewriteOptions::set_default_x_header_value (StringPiece x_header_value)
TODO(jmarantz): Remove this method and make another one that operate directly on the Property.
Member net_instaweb::RewriteOptions::SetDefaultRewriteLevel (RewriteLevel level)
TODO(jmarantz): Get rid of this method. The semantics it requires are costly to implement and don't add much value.
Member net_instaweb::RewriteStats::page_load_count ()
TODO(sligocki): Rename to something more clear.
Member net_instaweb::RewriteTestBase::MakeTestFactory ()
TODO(jmarantz): This is currently only used in ServeResourceFromNewContext, but should be used for factory_ and other_factory_. This would requuire a refactor, because those are created at construction; too early for subclass overrides to take effect. To deal with that, an alternate constructor is provided above so that the proper sort of factories can be passed in.
Member net_instaweb::RewriteTestBase::rewrite_driver ()
TODO(jmarantz): These abstractions are not satisfactory long-term where we want to have driver-lifetime in tests be reflective of how servers work. But for now we use these accessors.
Member net_instaweb::Scheduler::AddAlarmAtUs (int64 wakeup_time_us, Function *callback) LOCKS_EXCLUDED(mutex())
TODO(jmaessen): Get rid of AddAlarmAtUs, or rename to AddAlarmAtUsAndRunOutstanding or similar.
Class net_instaweb::SerfFetch
TODO(lsong): Move this to a separate file. Necessary?
Member net_instaweb::SerfFetch::SerfFetch (const GoogleString &url, AsyncFetch *async_fetch, MessageHandler *message_handler, Timer *timer)
TODO(lsong): make use of request_headers.
Class net_instaweb::SerfUrlAsyncFetcher
TODO(sligocki): Serf does not seem to act appropriately in IPv6 environments, fix and test this. Specifically: (1) It does not attempt to fall-back to IPv4 if IPv6 connection fails; (2) It may not correctly signal failure, which causes the incoming connection to hang.
Member net_instaweb::SerfUrlAsyncFetcher::Poll (int64 max_wait_ms)
TODO(morlovich): Make private once non-thread mode concept removed.
Class net_instaweb::ServerContext
TODO(piatek): This file was renamed from resource_manager.h – there are some associated fixes outstanding –
  1. abc of includes and class declarations.
  2. Rename variables, data members, parameters, etc.
  3. Rename methods.
Member net_instaweb::ServerContext::hasher () const
TODO(jmarantz): check thread safety in Apache.
Member net_instaweb::ServerContext::MergeNonCachingResponseHeaders (const ResourcePtr &input, const OutputResourcePtr &output)
TODO(jmarantz): avoid setting caching_dirty bit in ResponseHeaders when the header is not caching-related.
Member net_instaweb::ServerContext::ReleaseRewriteDriver (RewriteDriver *rewrite_driver)
TODO(jmarantz): this cannot recycle RewriteDrivers with custom rewrite options, which is a potential performance issue for Apache installations that set custom options in .htaccess files, where essentially every RewriteDriver will be a custom driver. To resolve this we need to make a comparator for RewriteOptions so that we can determine option-equivalence and, potentially, keep free-lists for each unique option-set.
Member net_instaweb::ServerContext::ShutDownDrivers (int64 cutoff_time_ms)
TODO(jmarantz): Change New*RewriteDriver() calls to return NULL when run after shutdown. This requires changing call-sites to null-check their drivers and gracefully fail.
Class net_instaweb::SharedDynamicStringMap
TODO(jhoch): make map dynamically sized
Member net_instaweb::SharedMemCache< kBlockSize >::DumpStats ()
TODO(morlovich): Potentially periodically push these to the main Statistics system (or pull to it from these).
Member net_instaweb::SharedMemCache< kBlockSize >::ShutDown ()
TODO(morlovich): Implement
Member net_instaweb::SharedMemCacheData::SectorStats::num_put
TODO(morlovich): Consider periodically pushing these to normal Statistics.
Class net_instaweb::SharedMemLockManager
TODO(morlovich): Implement condvars?
Member net_instaweb::SharedMemStatistics::console_logger ()
TODO(sligocki): Rename to statistics_logger().
Class net_instaweb::SharedMemVariable
TODO(abliss): actually do this.
Member net_instaweb::spriter::ImageLibraryInterface::FilePath
TODO(skerner): Chromium's base lib has a class FilePath that handles paths in a cross-platform way. Use it.
Class net_instaweb::StaticAssetManager

TODO(ksimbili): Refactor out the common base class to serve the static files of type css, images or html etc.

TODO(xqyin): Refactor out StaticAssetManager to have shared infrastructure used by both RewriteStaticAssetManager and SystemStaticAssetManager. Now the JS files in system/ are done directly in AdminSite.

Member net_instaweb::StatisticsLogfileReader::ReadNextDataBlock (int64 *timestamp, GoogleString *data)
TODO(sligocki): Use a StringPiece* here to avoid extra copies. We need to guarantee that the data pointed to by the StringPiece will be valid for the right lifetime first.
Class net_instaweb::StringAsyncFetch
TODO(jmarantz): move StringAsyncFetch into its own file.
Member net_instaweb::StringOutputStream
TODO(sligocki): Get rid of these special cases.
Member net_instaweb::StripUtf8Bom (StringPiece *contents)
TODO(nforman): Possibly handle stripping BOMs from non-utf-8 files. We currently handle only utf-8 BOM because we assume the resources we get are not in utf-16 or utf-32 when we read and parse them, anyway.
Member net_instaweb::SupportNoscriptFilter::GetScriptUsage () const override
TODO(jmarantz): consider an alterantive mechanism that is more intuitive, and doesn't entail GetScriptUsage lying to induce the right amp behavior.
Class net_instaweb::SymbolTable< CharTransform >
TODO(jmarantz): Symbol tables are not currently thread-safe. We should consider whether it's worth making them thread-safe, or whether it's better to use separate symbol tables in each thread.
Member net_instaweb::SystemRewriteDriverFactory::SetupMessageHandlers ()
TODO(jefftk): create SystemMessageHandler and get rid of these hooks.
Member net_instaweb::SystemServerContext::AddHtmlRewriteTimeUs (int64 rewrite_time_us)
TODO(sligocki): Remove in favor of RewriteStats::rewrite_latency_histogram.
Member net_instaweb::SystemServerContext::FlushCacheIfNecessary ()
TODO(jmarantz): allow a URL-based mechanism to flush cache, even if we implement it by simply writing the cache.flush file so other servers can see it. Note that using shared-memory is not a great plan because we need the cache-invalidation to persist across server restart.
Class net_instaweb::ThreadsafeCache
TODO(jmarantz): redesign the interface between this class and the cache it protects.
Member net_instaweb::ThreadSystem::NewTimer ()=0
TODO(jmarantz): consider removing this and controlling timers separately.
Class net_instaweb::UpDownCounter

TODO(jmarantz): Make this not inherit from Variable, which will simplify the 'CheckNotNegative' and its ifndefs, but will require us to do more accurate type bookkeeping in tests, etc.

TODO(jmarantz): consider renaming Variable->Counter, UpDownCounter->Variable.

Member net_instaweb::UrlAsyncFetcher::Fetch (const GoogleString &url, MessageHandler *message_handler, AsyncFetch *fetch)=0

TODO(sligocki): GoogleString -> GoogleUrl or at least StringPiece.

TODO(sligocki): Include the URL in the fetch, like the request headers.

Class net_instaweb::UrlLeftTrimFilter
TODO(jmaessen): Do we care to introduce ../ in order to relativize more urls? For example, if base URL is we could convert: -> ../other.html rather than -> /foo/other.html.
Class net_instaweb::UrlMultipartEncoder

TODO(jmarantz): One possibly improvement is to bake this functionality into UrlEscaper, changing its interface to accept arbitrary numbers of pieces in & out. However, that would change an interface that's used in multiple places, so this is left as a


Class net_instaweb::UserAgentMatcher
TODO(sriharis): Split the functionality here into two: a matcher that pulls out all relevant information from UA strings (browser-family, version, mobile/tablet/desktop, etc.), and a query interface that can be used by clients.
Class net_instaweb::Variable
TODO(jmarantz): consider renaming this to Counter or maybe UpCounter.
Member pagespeed::image_compression::FrameSpec::DISPOSAL_RESTORE
TODO(vchudnov): May not be supported by WebP. If that's the case, treat as DISPOSAL_BACKGROUND instead.
Member pagespeed::image_compression::ImageConverter::GetSmallestOfPngJpegWebp (const PngReaderInterface &png_struct_reader, const GoogleString &in, const JpegCompressionOptions *jpeg_options, const WebpConfiguration *webp_config, GoogleString *out, MessageHandler *handler)
TODO(bmcquade): should be a ScanlineReaderInterface.
Member pagespeed::image_compression::ImageOptimizer::Optimize (StringPiece original_contents, GoogleString *optimized_contents, ImageFormat *optimized_format)
TODO(huibao): Instead of buffering the optimized image contents in a string let the Optimize method take a writer and stream the contents to the output directly.
Member pagespeed::image_compression::MultipleFrameReader::GetFrameSpec (FrameSpec *frame_spec) const =0
TODO(vchudnov): Consider simplifying this method to return frame_spec rather than the ScanlineStatus.
Class pagespeed::image_compression::PixelFormatOptimizer
TODO(huibao): Check how often gray scale images are encoded as color. If it happens often, implement the conversion of RGBA_8888/RGB_888 to GRAY_8.
Member pagespeed::image_compression::PngReaderInterface::GetAttributes (const GoogleString &body, int *out_width, int *out_height, int *out_bit_depth, int *out_color_type) const =0
TODO(bmcquade): consider merging this with ImageAttributes.
Member pagespeed::js::JsMinifyingTokenizer::JsMinifyingTokenizer (const JsTokenizerPatterns *patterns, StringPiece input, net_instaweb::source_map::MappingVector *mappings)
TODO(sligocki): Fix this.
Member pagespeed::JsKeywords::net_instaweb::JsLexer
TODO(jkarlin): Get rid of the net_instaweb namespace once JsLexer is moved into kernel/js.
File ref_counted_ptr.h
TODO(jmaessen): explore adding C++x0 shared_ptr support
File request_context.h
TODO(morlovich): It's not clearly this is the appropriate mechanism for all the authorizations — we may want to scope this to a request only.
TODO(jmarantz): The Scheduler should cancel all outstanding operations on destruction. Deploying this requires further analysis of shutdown ordering.
Member StringPieceToRe2 (StringPiece sp)
TODO(jmarantz): In the re2 code itself there are no references to re2::StringPiece, always just plain StringPiece, so if we can arrange to get the right definition #included we should be all set. We could somehow rewrite '#include "re2/stringpiece.h"' to #include Chromium's stringpiece then everything would just work.