Improve comments of outputVariesOnRevisionMetaData()
[lhc/web/wiklou.git] / includes / Revision / RenderedRevision.php
index 8e50a1b..c4a0054 100644 (file)
@@ -159,6 +159,28 @@ class RenderedRevision implements SlotRenderingProvider {
                return $this->options;
        }
 
+       /**
+        * Sets a ParserOutput to be returned by getRevisionParserOutput().
+        *
+        * @note For internal use by RevisionRenderer only! This method may be modified
+        * or removed without notice per the deprecation policy.
+        *
+        * @internal
+        *
+        * @param ParserOutput $output
+        */
+       public function setRevisionParserOutput( ParserOutput $output ) {
+               $this->revisionOutput = $output;
+
+               // If there is only one slot, we assume that the combined output is identical
+               // with the main slot's output. This is intended to prevent a redundant re-parse of
+               // the content in case getSlotParserOutput( SlotRecord::MAIN ) is called, for instance
+               // from ContentHandler::getSecondaryDataUpdates.
+               if ( $this->revision->getSlotRoles() === [ SlotRecord::MAIN ] ) {
+                       $this->slotsOutput[ SlotRecord::MAIN ] = $output;
+               }
+       }
+
        /**
         * @param array $hints Hints given as an associative array. Known keys:
         *      - 'generate-html' => bool: Whether the caller is interested in output HTML (as opposed
@@ -358,9 +380,9 @@ class RenderedRevision implements SlotRenderingProvider {
                $method = __METHOD__;
 
                if ( $out->getFlag( 'vary-revision' ) ) {
-                       // XXX: Would be just keep the output if the speculative revision ID was correct,
-                       // but that can go wrong for some edge cases, like {{PAGEID}} during page creation.
-                       // For that specific case, it would perhaps nice to have a vary-page flag.
+                       // If {{PAGEID}} resolved to 0 or {{REVISIONTIMESTAMP}} used the current
+                       // timestamp rather than that of an actual revision, then those words need
+                       // to resolve to the actual page ID or revision timestamp, respectively.
                        $this->saveParseLogger->info(
                                "$method: Prepared output has vary-revision...\n"
                        );
@@ -373,6 +395,14 @@ class RenderedRevision implements SlotRenderingProvider {
                                "$method: Prepared output has vary-revision-id with wrong ID...\n"
                        );
                        return true;
+               } elseif ( $out->getFlag( 'vary-revision-exists' ) ) {
+                       // If {{REVISIONID}} resolved to '', it now needs to resolve to '-'.
+                       // Note that edit stashing always uses '-', which can be used for both
+                       // edit filter checks and canonical parser cache.
+                       $this->saveParseLogger->info(
+                               "$method: Prepared output has vary-revision-exists...\n"
+                       );
+                       return true;
                } else {
                        // NOTE: In the original fix for T135261, the output was discarded if 'vary-user' was
                        // set for a null-edit. The reason was that the original rendering in that case was