Commit b7917313 authored by btolsch's avatar btolsch Committed by Commit bot

[Media Router] Use TimeDelta in mojo interfaces

Use TimeDelta instead of an int representing milliseconds in Media
Router mojo interfaces.

BUG=629375

Review-Url: https://codereview.chromium.org/2324133003
Cr-Commit-Position: refs/heads/master@{#418609}
parent 66108554
......@@ -83,6 +83,10 @@ mojom("mojo_bindings") {
sources = [
"mojo/media_router.mojom",
]
public_deps = [
"//mojo/common:common_custom_types",
]
}
static_library("test_support") {
......
......@@ -4,6 +4,8 @@
module media_router.mojom;
import "mojo/common/common_custom_types.mojom";
// Represents an output sink to which media can be routed.
struct MediaSink {
enum IconType {
......@@ -150,8 +152,8 @@ interface MediaRouteProvider {
// same-tab scopes. Use -1 as |tab_id| in cases where the request is not
// made on behalf of a tab.
//
// If |timeout_millis| is positive, it will be used in place of the default
// timeout defined by Media Route Provider Manager.
// If |timeout| is positive, it will be used in place of the default timeout
// defined by Media Route Provider Manager.
//
// If |incognito| is true, the request was made by an incognito profile.
//
......@@ -166,7 +168,7 @@ interface MediaRouteProvider {
string original_presentation_id,
string origin,
int32 tab_id,
int64 timeout_millis,
mojo.common.mojom.TimeDelta timeout,
bool incognito) =>
(MediaRoute? route,
string? error_text,
......@@ -178,8 +180,8 @@ interface MediaRouteProvider {
// |origin| and |tab_id| are used for validating same-origin/tab scopes;
// see CreateRoute for additional documentation.
//
// If |timeout_millis| is positive, it will be used in place of the default
// timeout defined by Media Route Provider Manager.
// If |timeout| is positive, it will be used in place of the default timeout
// defined by Media Route Provider Manager.
//
// If the route request was created by an incognito profile,
// |incognito| must be true.
......@@ -194,7 +196,7 @@ interface MediaRouteProvider {
string presentation_id,
string origin,
int32 tab_id,
int64 timeout_millis,
mojo.common.mojom.TimeDelta timeout,
bool incognito) =>
(MediaRoute? route,
string? error_text,
......@@ -210,9 +212,9 @@ interface MediaRouteProvider {
// |origin| and |tab_id| are used for validating same-origin/tab scopes; see
// CreateRoute for additional documentation.
//
// If |timeout_millis| is positive, it will be used in place of the default
// timeout defined by Media Route Provider Manager; see CreateRoute for
// additional documentation.
// If |timeout| is positive, it will be used in place of the default timeout
// defined by Media Route Provider Manager; see CreateRoute for additional
// documentation.
//
// If the route request was created by an incognito profile,
// |incognito| must be true.
......@@ -228,7 +230,7 @@ interface MediaRouteProvider {
string presentation_id,
string origin,
int32 tab_id,
int64 timeout_millis,
mojo.common.mojom.TimeDelta timeout,
bool incognito) =>
(MediaRoute? route,
string? error_text,
......
......@@ -598,8 +598,7 @@ void MediaRouterMojoImpl::DoCreateRoute(
<< ", presentation ID: " << presentation_id;
media_route_provider_->CreateRoute(
source_id, sink_id, presentation_id, origin, tab_id,
timeout > base::TimeDelta() ? timeout.InMilliseconds() : 0, incognito,
source_id, sink_id, presentation_id, origin, tab_id, timeout, incognito,
base::Bind(&MediaRouterMojoImpl::RouteResponseReceived,
base::Unretained(this), presentation_id, incognito,
callbacks));
......@@ -617,8 +616,7 @@ void MediaRouterMojoImpl::DoJoinRoute(
<< ", presentation ID: " << presentation_id;
media_route_provider_->JoinRoute(
source_id, presentation_id, origin, tab_id,
timeout > base::TimeDelta() ? timeout.InMilliseconds() : 0, incognito,
source_id, presentation_id, origin, tab_id, timeout, incognito,
base::Bind(&MediaRouterMojoImpl::RouteResponseReceived,
base::Unretained(this), presentation_id, incognito,
callbacks));
......@@ -638,8 +636,7 @@ void MediaRouterMojoImpl::DoConnectRouteByRouteId(
<< ", presentation ID: " << presentation_id;
media_route_provider_->ConnectRouteByRouteId(
source_id, route_id, presentation_id, origin, tab_id,
timeout > base::TimeDelta() ? timeout.InMilliseconds() : 0, incognito,
source_id, route_id, presentation_id, origin, tab_id, timeout, incognito,
base::Bind(&MediaRouterMojoImpl::RouteResponseReceived,
base::Unretained(this), presentation_id, incognito,
callbacks));
......
......@@ -203,7 +203,7 @@ TEST_F(MediaRouterMojoImplTest, CreateRoute) {
.WillOnce(Invoke(
[](const std::string& source, const std::string& sink,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
cb.Run(CreateMojoRoute(), std::string(),
mojom::RouteRequestResultCode::OK);
......@@ -237,7 +237,7 @@ TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) {
.WillOnce(Invoke(
[](const std::string& source, const std::string& sink,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
mojom::MediaRoutePtr route = CreateMojoRoute();
route->custom_controller_path =
......@@ -264,12 +264,12 @@ TEST_F(MediaRouterMojoImplTest, CreateIncognitoRoute) {
TEST_F(MediaRouterMojoImplTest, CreateRouteFails) {
EXPECT_CALL(
mock_media_route_provider_,
CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId, kTimeoutMillis,
_, _))
CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _))
.WillOnce(Invoke(
[](const std::string& source, const std::string& sink,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
cb.Run(mojom::MediaRoutePtr(), std::string(kError),
mojom::RouteRequestResultCode::TIMED_OUT);
......@@ -292,11 +292,12 @@ TEST_F(MediaRouterMojoImplTest, CreateRouteFails) {
TEST_F(MediaRouterMojoImplTest, CreateRouteIncognitoMismatchFails) {
EXPECT_CALL(mock_media_route_provider_,
CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
kTimeoutMillis, true, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis),
true, _))
.WillOnce(Invoke(
[](const std::string& source, const std::string& sink,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
cb.Run(CreateMojoRoute(), std::string(),
mojom::RouteRequestResultCode::OK);
......@@ -323,11 +324,12 @@ TEST_F(MediaRouterMojoImplTest, IncognitoRoutesTerminatedOnProfileShutdown) {
EXPECT_CALL(mock_media_route_provider_,
CreateRoute(kSource, kSinkId, _, kOrigin, kInvalidTabId,
kTimeoutMillis, true, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis),
true, _))
.WillOnce(Invoke(
[](const std::string& source, const std::string& sink,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::CreateRouteCallback& cb) {
mojom::MediaRoutePtr route = CreateMojoRoute();
route->incognito = true;
......@@ -380,10 +382,10 @@ TEST_F(MediaRouterMojoImplTest, JoinRoute) {
EXPECT_CALL(
mock_media_route_provider_,
JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
kTimeoutMillis, _, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _))
.WillOnce(Invoke([&route](
const std::string& source, const std::string& presentation_id,
const std::string& origin, int tab_id, int64_t timeout_millis,
const std::string& origin, int tab_id, base::TimeDelta timeout,
bool incognito,
const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
cb.Run(std::move(route), std::string(),
......@@ -431,10 +433,10 @@ TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) {
EXPECT_CALL(
mock_media_route_provider_,
JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
kTimeoutMillis, _, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis), _, _))
.WillOnce(Invoke(
[](const std::string& source, const std::string& presentation_id,
const std::string& origin, int tab_id, int64_t timeout_millis,
const std::string& origin, int tab_id, base::TimeDelta timeout,
bool incognito,
const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
cb.Run(mojom::MediaRoutePtr(), std::string(kError),
......@@ -472,10 +474,10 @@ TEST_F(MediaRouterMojoImplTest, JoinRouteIncognitoMismatchFails) {
EXPECT_CALL(
mock_media_route_provider_,
JoinRoute(kSource, kPresentationId, kOrigin, kInvalidTabId,
kTimeoutMillis, true, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis), true, _))
.WillOnce(Invoke([&route](
const std::string& source, const std::string& presentation_id,
const std::string& origin, int tab_id, int64_t timeout_millis,
const std::string& origin, int tab_id, base::TimeDelta timeout,
bool incognito,
const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
cb.Run(std::move(route), std::string(),
......@@ -510,11 +512,12 @@ TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteId) {
EXPECT_CALL(
mock_media_route_provider_,
ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
kTimeoutMillis, false, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis),
false, _))
.WillOnce(Invoke([&route](
const std::string& source, const std::string& route_id,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
cb.Run(std::move(route), std::string(),
mojom::RouteRequestResultCode::OK);
......@@ -538,11 +541,12 @@ TEST_F(MediaRouterMojoImplTest, ConnectRouteByRouteIdFails) {
EXPECT_CALL(
mock_media_route_provider_,
ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
kTimeoutMillis, true, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis),
true, _))
.WillOnce(Invoke(
[](const std::string& source, const std::string& route_id,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
cb.Run(mojom::MediaRoutePtr(), std::string(kError),
mojom::RouteRequestResultCode::TIMED_OUT);
......@@ -571,11 +575,12 @@ TEST_F(MediaRouterMojoImplTest, ConnectRouteByIdIncognitoMismatchFails) {
EXPECT_CALL(
mock_media_route_provider_,
ConnectRouteByRouteId(kSource, kRouteId, _, kOrigin, kInvalidTabId,
kTimeoutMillis, true, _))
base::TimeDelta::FromMilliseconds(kTimeoutMillis),
true, _))
.WillOnce(Invoke([&route](
const std::string& source, const std::string& route_id,
const std::string& presentation_id, const std::string& origin,
int tab_id, int64_t timeout_millis, bool incognito,
int tab_id, base::TimeDelta timeout, bool incognito,
const mojom::MediaRouteProvider::JoinRouteCallback& cb) {
cb.Run(std::move(route), std::string(),
mojom::RouteRequestResultCode::OK);
......
......@@ -36,7 +36,7 @@ class MockMediaRouteProvider : public mojom::MediaRouteProvider {
const std::string& presentation_id,
const std::string& origin,
int tab_id,
int64_t timeout_secs,
base::TimeDelta timeout,
bool incognito,
const CreateRouteCallback& callback));
MOCK_METHOD7(JoinRoute,
......@@ -44,7 +44,7 @@ class MockMediaRouteProvider : public mojom::MediaRouteProvider {
const std::string& presentation_id,
const std::string& origin,
int tab_id,
int64_t timeout_secs,
base::TimeDelta timeout,
bool incognito,
const JoinRouteCallback& callback));
MOCK_METHOD8(ConnectRouteByRouteId,
......@@ -53,7 +53,7 @@ class MockMediaRouteProvider : public mojom::MediaRouteProvider {
const std::string& presentation_id,
const std::string& origin,
int tab_id,
int64_t timeout_secs,
base::TimeDelta timeout,
bool incognito,
const JoinRouteCallback& callback));
MOCK_METHOD1(DetachRoute, void(const std::string& route_id));
......
......@@ -8,6 +8,7 @@
#include <string>
#include "chrome/browser/media/router/mojo/media_router.mojom.h"
#include "mojo/common/common_custom_types_struct_traits.h"
namespace mojo {
......
......@@ -840,6 +840,8 @@ std::vector<std::pair<std::string, int> > Dispatcher::GetJsResources() {
resources.push_back(
std::make_pair("chrome/browser/media/router/mojo/media_router.mojom",
IDR_MEDIA_ROUTER_MOJOM_JS));
resources.push_back(std::make_pair("mojo/common/common_custom_types.mojom",
IDR_MOJO_COMMON_CUSTOM_TYPES_MOJOM_JS));
resources.push_back(
std::make_pair("media_router_bindings", IDR_MEDIA_ROUTER_BINDINGS_JS));
#endif // defined(ENABLE_MEDIA_ROUTER)
......
......@@ -100,6 +100,7 @@
<if expr="enable_media_router">
<include name="IDR_MEDIA_ROUTER_MOJOM_JS" file="${mojom_root}\chrome\browser\media\router\mojo\media_router.mojom.js" use_base_dir="false" type="BINDATA" />
<include name="IDR_MEDIA_ROUTER_BINDINGS_JS" file="media_router_bindings.js" type="BINDATA" />
<include name="IDR_MOJO_COMMON_CUSTOM_TYPES_MOJOM_JS" file="${mojom_root}\mojo\common\common_custom_types.mojom.js" use_base_dir="false" type="BINDATA" />
</if>
</includes>
<structures>
......
......@@ -10,6 +10,7 @@ define('media_router_bindings', [
'content/public/renderer/frame_interfaces',
'chrome/browser/media/router/mojo/media_router.mojom',
'extensions/common/mojo/keep_alive.mojom',
'mojo/common/common_custom_types.mojom',
'mojo/public/js/connection',
'mojo/public/js/router',
], function(bindings,
......@@ -17,6 +18,7 @@ define('media_router_bindings', [
frameInterfaces,
mediaRouterMojom,
keepAliveMojom,
commonCustomTypesMojom,
connector,
routerModule) {
'use strict';
......@@ -599,9 +601,8 @@ define('media_router_bindings', [
* requesting presentation. TODO(mfoltz): Remove.
* @param {!string} origin Origin of site requesting presentation.
* @param {!number} tabId ID of tab requesting presentation.
* @param {!number} timeoutMillis If positive, the timeout duration for the
* request, measured in seconds. Otherwise, the default duration will be
* used.
* @param {!TimeDelta} timeout If positive, the timeout duration for the
* request. Otherwise, the default duration will be used.
* @param {!boolean} incognito If true, the route is being requested by
* an incognito profile.
* @return {!Promise.<!Object>} A Promise resolving to an object describing
......@@ -610,10 +611,10 @@ define('media_router_bindings', [
*/
MediaRouteProvider.prototype.createRoute =
function(sourceUrn, sinkId, presentationId, origin, tabId,
timeoutMillis, incognito) {
timeout, incognito) {
return this.handlers_.createRoute(
sourceUrn, sinkId, presentationId, origin, tabId, timeoutMillis,
incognito)
sourceUrn, sinkId, presentationId, origin, tabId,
Math.floor(timeout.microseconds / 1000), incognito)
.then(function(route) {
return toSuccessRouteResponse_(route);
},
......@@ -630,9 +631,8 @@ define('media_router_bindings', [
* @param {!string} presentationId Presentation ID to join.
* @param {!string} origin Origin of site requesting join.
* @param {!number} tabId ID of tab requesting join.
* @param {!number} timeoutMillis If positive, the timeout duration for the
* request, measured in seconds. Otherwise, the default duration will be
* used.
* @param {!TimeDelta} timeout If positive, the timeout duration for the
* request. Otherwise, the default duration will be used.
* @param {!boolean} incognito If true, the route is being requested by
* an incognito profile.
* @return {!Promise.<!Object>} A Promise resolving to an object describing
......@@ -640,10 +640,11 @@ define('media_router_bindings', [
* failure.
*/
MediaRouteProvider.prototype.joinRoute =
function(sourceUrn, presentationId, origin, tabId, timeoutMillis,
function(sourceUrn, presentationId, origin, tabId, timeout,
incognito) {
return this.handlers_.joinRoute(
sourceUrn, presentationId, origin, tabId, timeoutMillis, incognito)
sourceUrn, presentationId, origin, tabId,
Math.floor(timeout.microseconds / 1000), incognito)
.then(function(route) {
return toSuccessRouteResponse_(route);
},
......@@ -661,9 +662,8 @@ define('media_router_bindings', [
* @param {!string} presentationId Presentation ID to join.
* @param {!string} origin Origin of site requesting join.
* @param {!number} tabId ID of tab requesting join.
* @param {!number} timeoutMillis If positive, the timeout duration for the
* request, measured in seconds. Otherwise, the default duration will be
* used.
* @param {!TimeDelta} timeout If positive, the timeout duration for the
* request. Otherwise, the default duration will be used.
* @param {!boolean} incognito If true, the route is being requested by
* an incognito profile.
* @return {!Promise.<!Object>} A Promise resolving to an object describing
......@@ -672,10 +672,10 @@ define('media_router_bindings', [
*/
MediaRouteProvider.prototype.connectRouteByRouteId =
function(sourceUrn, routeId, presentationId, origin, tabId,
timeoutMillis, incognito) {
timeout, incognito) {
return this.handlers_.connectRouteByRouteId(
sourceUrn, routeId, presentationId, origin, tabId, timeoutMillis,
incognito)
sourceUrn, routeId, presentationId, origin, tabId,
Math.floor(timeout.microseconds / 1000), incognito)
.then(function(route) {
return toSuccessRouteResponse_(route);
},
......
......@@ -16,8 +16,9 @@ struct DictionaryValue;
[Native]
struct Time;
[Native]
struct TimeDelta;
struct TimeDelta {
int64 microseconds;
};
[Native]
struct TimeTicks;
......
......@@ -23,6 +23,19 @@ struct StructTraits<mojo::common::mojom::VersionDataView, base::Version> {
base::Version* out);
};
template <>
struct StructTraits<mojo::common::mojom::TimeDeltaDataView, base::TimeDelta> {
static int64_t microseconds(const base::TimeDelta& delta) {
return delta.InMicroseconds();
}
static bool Read(mojo::common::mojom::TimeDeltaDataView data,
base::TimeDelta* delta) {
*delta = base::TimeDelta::FromMicroseconds(data.microseconds());
return true;
}
};
} // namespace mojo
#endif // MOJO_COMMON_COMMON_CUSTOM_TYPES_STRUCT_TRAITS_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment