| Index: examples/ui/tile/tile_app.cc
|
| diff --git a/examples/ui/tile/tile_app.cc b/examples/ui/tile/tile_app.cc
|
| index 23f1b30f5409e7af97f40aece1b66a000a142c88..31a721e03cf73ab70b24cf20ec0985bafaf6ca2a 100644
|
| --- a/examples/ui/tile/tile_app.cc
|
| +++ b/examples/ui/tile/tile_app.cc
|
| @@ -2,12 +2,10 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include <vector>
|
| -
|
| #include "base/strings/string_split.h"
|
| #include "examples/ui/tile/tile_app.h"
|
| #include "examples/ui/tile/tile_view.h"
|
| -#include "url/gurl.h"
|
| +#include "url/url_parse.h"
|
|
|
| namespace examples {
|
|
|
| @@ -20,17 +18,61 @@ void TileApp::CreateView(
|
| mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request,
|
| mojo::InterfaceRequest<mojo::ServiceProvider> services,
|
| mojo::InterfaceHandle<mojo::ServiceProvider> exposed_services) {
|
| - GURL url(connection_url);
|
| - std::vector<std::string> view_urls;
|
| - base::SplitString(url.query(), ',', &view_urls);
|
| -
|
| - if (view_urls.empty()) {
|
| - LOG(ERROR) << "Must supply comma-delimited URLs of mojo views to tile as a "
|
| - "query parameter.";
|
| + TileParams params;
|
| + if (!ParseParams(connection_url, ¶ms)) {
|
| + LOG(ERROR) << "Missing or invalid URL parameters. See README.";
|
| return;
|
| }
|
|
|
| - new TileView(app_impl(), view_owner_request.Pass(), view_urls);
|
| + new TileView(app_impl(), view_owner_request.Pass(), params);
|
| +}
|
| +
|
| +bool TileApp::ParseParams(const std::string& connection_url,
|
| + TileParams* params) {
|
| + url::Parsed parsed;
|
| + url::ParseStandardURL(connection_url.c_str(), connection_url.size(), &parsed);
|
| + url::Component query = parsed.query;
|
| +
|
| + for (;;) {
|
| + url::Component key, value;
|
| + if (!url::ExtractQueryKeyValue(connection_url.c_str(), &query, &key,
|
| + &value))
|
| + break;
|
| + std::string key_str(connection_url, key.begin, key.len);
|
| + std::string value_str(connection_url, value.begin, value.len);
|
| + if (key_str == "views") {
|
| + base::SplitString(value_str, ',', ¶ms->view_urls);
|
| + } else if (key_str == "vm") {
|
| + if (value_str == "any")
|
| + params->version_mode = TileParams::VersionMode::kAny;
|
| + else if (value_str == "exact")
|
| + params->version_mode = TileParams::VersionMode::kExact;
|
| + else
|
| + return false;
|
| + } else if (key_str == "cm") {
|
| + if (value_str == "merge")
|
| + params->combinator_mode = TileParams::CombinatorMode::kMerge;
|
| + else if (value_str == "prune")
|
| + params->combinator_mode = TileParams::CombinatorMode::kPrune;
|
| + else if (value_str == "flash")
|
| + params->combinator_mode = TileParams::CombinatorMode::kFallbackFlash;
|
| + else if (value_str == "dim")
|
| + params->combinator_mode = TileParams::CombinatorMode::kFallbackDim;
|
| + else
|
| + return false;
|
| + } else if (key_str == "o") {
|
| + if (value_str == "h")
|
| + params->orientation_mode = TileParams::OrientationMode::kHorizontal;
|
| + else if (value_str == "v")
|
| + params->orientation_mode = TileParams::OrientationMode::kVertical;
|
| + else
|
| + return false;
|
| + } else {
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + return !params->view_urls.empty();
|
| }
|
|
|
| } // namespace examples
|
|
|