return $this->requestUrl;
}
- public function getFullRequestURL() {
- // Pass an explicit PROTO constant instead of PROTO_CURRENT so that we
- // do not rely on state from the global $wgRequest object (which it would,
- // via wfGetServerUrl/wfExpandUrl/$wgRequest->protocol).
- if ( $this->protocol === 'http' ) {
- return wfGetServerUrl( PROTO_HTTP ) . $this->getRequestURL();
- } else {
- return wfGetServerUrl( PROTO_HTTPS ) . $this->getRequestURL();
- }
- }
-
public function getProtocol() {
return $this->protocol;
}
* in HTML or other output.
*
* If $wgServer is protocol-relative, this will return a fully
- * qualified URL with the protocol that was used for this request.
+ * qualified URL with the protocol of this request object.
*
* @return string
*/
public function getFullRequestURL() {
- return wfGetServerUrl( PROTO_CURRENT ) . $this->getRequestURL();
+ // Pass an explicit PROTO constant instead of PROTO_CURRENT so that we
+ // do not rely on state from the global $wgRequest object (which it would,
+ // via wfGetServerUrl/wfExpandUrl/$wgRequest->protocol).
+ if ( $this->getProtocol() === 'http' ) {
+ return wfGetServerUrl( PROTO_HTTP ) . $this->getRequestURL();
+ } else {
+ return wfGetServerUrl( PROTO_HTTPS ) . $this->getRequestURL();
+ }
}
/**
* @group WebRequest
*/
class WebRequestTest extends MediaWikiTestCase {
- protected $oldServer;
protected function setUp() {
parent::setUp();
$this->oldServer = $_SERVER;
+ $this->oldWgRequest = $GLOBALS['wgRequest'];
+ $this->oldWgServer = $GLOBALS['wgServer'];
}
protected function tearDown() {
$_SERVER = $this->oldServer;
+ $GLOBALS['wgRequest'] = $this->oldWgRequest;
+ $GLOBALS['wgServer'] = $this->oldWgServer;
parent::tearDown();
}
$this->assertSame( [ 'x' ], $req->getValueNames( [ 'y' ] ), 'Exclude keys' );
}
+ /**
+ * @covers WebRequest
+ */
+ public function testGetFullRequestURL() {
+ // Stub this for wfGetServerUrl()
+ $GLOBALS['wgServer'] = '//wiki.test';
+ $req = $this->getMock( WebRequest::class, [ 'getRequestURL', 'getProtocol' ] );
+ $req->method( 'getRequestURL' )->willReturn( '/path' );
+ $req->method( 'getProtocol' )->willReturn( 'https' );
+
+ $this->assertSame(
+ 'https://wiki.test/path',
+ $req->getFullRequestURL()
+ );
+ }
+
/**
* @dataProvider provideGetIP
* @covers WebRequest::getIP